【入門編】 MITRE ATT&CKフレームワークを用いた検知カバレッジの策定 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!SOC(セキュリティ・オペレーション・センター)で日夜インシデントの調査やログの分析をしているアナリストです。

「セキュリティの検知カバレッジ」「MITRE ATT&CK(マイトアタック)」……なんだか響きがとても難しそうですよね。初めて耳にする方にとっては、宇宙人の暗号のように感じられるかもしれません。

でも、安心してくださいね。これからお話しする内容は、実は「私たちの家やお店の防犯対策」とまったく同じ考え方なんですよ。今回は、ITの世界に足を踏み入れたばかりの新人の皆さんや、セキュリティに初めて触れる開発者の方に向けて、攻撃者の手口を見抜くための強力な地図「MITRE ATT&CK」の使い方を、身近な例えを交えながら優しく紐解いていきたいと思います。一歩ずつ、一緒に学んでいきましょう!

—

1. 家の防犯とセキュリティ:なぜ「泥棒の手口」を知る必要があるの?

皆さんが自分の家やマンションを守る防犯対策をするとき、最初に何をしますか?
おそらく「玄関の鍵を二重ロックにする」「窓ガラスを防犯フィルムにする」「センサーライトを置く」といった対策を考えるのではないでしょうか。

これはとても大切なことですが、ここで少し立ち止まってみてください。
「もし、泥棒が玄関や窓からではなく、ベランダの鍵の閉め忘れを狙ったり、合鍵をこっそり作ろうとしたりしたら、今の防犯対策で本当に防げますか?」

セキュリティの世界でも全く同じことが言えます。ただやみくもに「高そうなセキュリティツールを導入したから大丈夫!」と安心してしまうのは、裏口が開きっぱなしの大きなお城に、ただ頑丈な正門の門番を置いているようなものなのです。

攻撃者(ハッカー)がシステムに侵入するときは、行き当たりばったりではなく、ちゃんとした「手順」を踏んでやってきます。

  • 下見をする(情報収集)
  • 侵入する(初期アクセス)
  • 足場を固める(持続的アクセス)
  • 中を荒らして金品を盗む(データ窃取)

こうした「攻撃者が使う手口(戦術や技術)」を、世界共通のカタログとして綺麗に整理してくれたのが「MITRE ATT&CK」というフレームワークになります。例えるなら、警察がこれまでの犯罪データをもとにまとめた「最新の泥棒の手口図鑑」のようなものですね。

—

2. MITRE ATT&CKってなに?地図とチェックリストで隙間をなくす

MITRE ATT&CKは、攻撃者がどんな手順でシステムを攻撃してくるかをマトリクス(表)形式でまとめたものです。

例えば、攻撃者がシステムに入り込んだ後によく使う手口の一つに、「自分以外のユーザーになりすます(アカウントの悪用)」というものがあります。これをMITRE ATT&CKでは、T1078(Valid Accounts)といったIDで管理しています。

SOCアナリストや開発者である私たちは、このカタログを使って、次のような問いかけを自分たちのシステムに行います。

1. 「私たちのシステムには、このT1078(不正なアカウント利用)を検知するアラート(防犯カメラ)がちゃんと置かれているだろうか?」
2. 「もし置かれていないとしたら、どの手口の隙間(死角)が大きいだろうか?」

このように、自分たちの持っているログや検知ルールが、攻撃者の手口のどこをカバーできていて、どこに穴があるのかを可視化することを「検知カバレッジの策定」と呼びます。すべての手口を完璧に防ぐのは予算や人員の都合上難しいですが、「重要な手口だけでもしっかり網羅しよう」と優先順位をつけるために欠かせない手法なんです。

—

3. 実践!アプリケーションのログから攻撃の兆候を見つけよう

では、実際に私たちが開発するシステムやインフラで、どうやって攻撃の兆候を検知すればよいのでしょうか?
今回は、Webアプリケーションでよくある「不審なログイン試行」を例に、検知のためのログ分析の考え方を見ていきましょう。

例えば、開発しているWebアプリのログインAPIにおいて、短時間に何度もパスワードを間違える「ブルートフォース攻撃(総当たり攻撃)」を受けたとします。MITRE ATT&CKでは、これはT1110(Brute Force)という手口に分類されます。

これを検知するために、Pythonなどのバックエンド処理で、次のような「一定時間内に失敗が続いたら警告を出す」簡易的なロジックを実装してみましょう。

import time
from collections import defaultdict

# 失敗したログイン試行を記録する辞書(IPアドレスをキーにする)
# 実際の本番環境ではRedisなどのインメモリデータベースを使用します
failed_login_attempts = defaultdict(list)

def check_brute_force(ip_address):
    """
    指定されたIPアドレスからのログイン失敗履歴をチェックし、
    MITRE ATT&CK T1110 (Brute Force) のような挙動がないか判定する関数
    """
    current_time = time.time()
    # 過去60秒間の失敗のみを保持する
    failed_login_attempts[ip_address] = [
        t for t in failed_login_attempts[ip_address] if current_time - t < 60
    ]
    
    # 失敗回数を追加
    failed_login_attempts[ip_address].append(current_time)
    
    # 60秒以内に5回以上失敗している場合は攻撃(異常)とみなす
    if len(failed_login_attempts[ip_address]) >= 5:
        # 実際にはここでSOCのインシデント管理システムやSlackへアラートを飛ばします
        print(f"[警告] IP: {ip_address} からの不審な連続ログイン失敗を検知しました! (T1110: Brute Force)")
        return True
        
    return False

# --- 実行シミュレーション ---
# 攻撃者が短時間に何度もログインを失敗したと仮定
attacker_ip = "192.168.1.100"
for attempt in range(6):
    is_attack = check_brute_force(attacker_ip)
    if is_attack:
        print("-> 防御システムが作動しました。このIPからのアクセスを一時ブロックします。")
        break

このように、コードを書く段階やインフラのログ設計をする段階から、「攻撃者はどうやって扉をこじ開けようとするか(TTPs)」を意識しておくことで、後から「ログがなくて調査できない!」という最悪の事態を防ぐことができるのです。

—

4. セキュリティヘッダーや環境設定で「泥棒の侵入経路」を防ぐ

ログを監視して検知するだけでなく、そもそも攻撃者が侵入しにくいように環境をあたかも「頑丈な要塞」のように整えておくことも大切です。

例えば、Webアプリケーションを構築する際は、HTTPレスポンスヘッダーを正しく設定して、ブラウザ経由の不正な攻撃(クロスサイトスクリプティングなど)を防ぎます。NginxやApacheなどのWebサーバー、あるいはアプリケーションの設定ファイルで、以下のようなセキュリティヘッダーを付与するのが鉄則です。

# Nginxのサーバー設定におけるセキュリティヘッダーの例
server {
    listen 80;
    server_name example.com;

    # クリックジャッキング攻撃を防ぐ
    add_header X-Frame-Options "SAMEORIGIN" always;

    # ブラウザのMIMEタイプ嗅ぎ取りを防ぐ
    add_header X-Content-Type-Options "nosniff" always;

    # XSS(クロスサイトスクリプティング)対策の有効化
    add_header X-XSS-Protection "1; mode=block" always;

    # 許可されたドメイン以外からのスクリプト実行や読み込みを制限する (CSP)
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com;" always;
}

コードの中にこうしたセキュリティの配慮(防御ヘッダーの設定や入力値のバリデーション)を組み込んでいくことは、まさに「家の鍵をしっかりかけ、頑丈な格子戸をつける」作業そのものです。MITRE ATT&CKのマップを見ながら、「自分たちのアプリは、どのヘッダーやログでどの攻撃手口を防げているか」をチームで確認してみると、驚くほどセキュリティへの解像度が上がりますよ。

—

5. おわりに:完璧を目指さず、まずは「知ることから」はじめよう

いかがでしたでしょうか?
「MITRE ATT&CKを用いた検知カバレッジの策定」と聞くと、なんだか専門家しか触れない難解なパズルのように思えたかもしれませんが、本質は「世の中の泥棒の手口を知って、自分たちの家のどこに鍵が足りていないかをみんなで確認する作業」にすぎません。

最初からすべての手口を完璧にカバーしようとすると、情報が多すぎてパンクしてしまいます。まずは、自分たちのシステムにとって一番守るべき大切なデータ(顧客情報やパスワードなど)を守るために、身近な手口(例えばパスワードリスト攻撃や不正ログイン)を一つピックアップし、「今のログで本当に気づけるかな?」と確かめてみることから始めてみてください。

一歩ずつ、確実にセキュリティの目を養っていきましょう。あなたのその小さな気付きが、組織全体をサイバー攻撃から守る大きな盾になりますよ!

コメント

タイトルとURLをコピーしました