【テクニカル・上級編】 メモリフォレンジックにおけるカーネルオブジェクトの不整合解析 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

メモリの深淵を覗く:DKOMによるプロセス隠蔽と「不整合」の追跡術

インシデントレスポンスの現場において、「プロセスリストに存在しないはずの脅威」と対峙した経験はどれほどあるだろうか。タスクマネージャーや ps コマンドがクリーンに見えても、メモリの深層では悪意あるスレッドが呼吸を続けている。これがDKOM(Direct Kernel Object Manipulation)の真骨頂だ。

今回は、カーネルオブジェクトの不整合を突くことで、この「透明な侵入者」をあぶり出す手法について、カーネル構造の深淵から解説する。

—

1. DKOMの論理:OSの「目」を欺くメカニズム

Windowsのプロセス管理において、カーネルは EPROCESS という構造体の双方向リンクリスト(ActiveProcessLinks)を用いてプロセスを追跡する。攻撃者が行うのは、このリストから自身の EPROCESS を切り離す(Unlink)行為だ。

ポインタを書き換え、リスト上のAとCを直接繋ぐことで、B(悪意あるプロセス)はOSの管理リストから「存在しない」状態になる。しかし、ここで一つ重要な事実がある。「リストから外れても、スレッドスケジューラはプロセスを動かし続ける」ということだ。スケジューラはリストではなく、ディスパッチャ・キュー等を参照して実行権を割り当てるからだ。

2. 不整合を見抜く:二つの視点の乖離

カーネルオブジェクトの不整合を突くとは、「リスト」と「他の管理構造」の間に生じるエントロピーの差分を抽出することに他ならない。以下の二つの手法が、現場で最も信頼できる検知ロジックだ。

A. スレッド探索法(Thread Enumeration)

プロセスリストに載っていないプロセスでも、そのスレッドは ETHREAD 構造体としてカーネル内に存在する。すべてのスレッドを列挙し、そこから親プロセス EPROCESS を逆引きする。リスト上に存在しない EPROCESS が見つかれば、それが即ちDKOMによる隠蔽の証拠だ。

B. ハンドルテーブルの監査(Handle Table Audit)

プロセスが保持するハンドルテーブルをスキャンする。プロセスが隠蔽されていても、デバイスドライバやファイルへのハンドルを保持している限り、ハンドルテーブル内にはそのプロセスの痕跡が残る。

—

3. 実践:Volatility 3を用いた不整合解析のロジック

Volatility 3等のフレームワークでDKOMを追う際、標準的な windows.pslist(リストベース)と windows.psscan(カーネル構造体スキャンベース)の結果を比較するのが定石だ。以下に、解析スクリプトの概念的なロジックを示す。

# 概念的な解析ロジック:pslist(リスト)とpsscan(構造体スキャン)の差分検出
def detect_dkome_process(pslist_data, psscan_data):
    # pslistはActiveProcessLinksを辿るため、隠蔽プロセスは含まれない
    visible_pids = {p.UniqueProcessId for p in pslist_data}
    
    # psscanはメモリ内のEPROCESS構造体を直接スキャンするため、隠蔽プロセスも拾う
    potential_threats = []
    for p in psscan_data:
        if p.UniqueProcessId not in visible_pids:
            # ここでさらにスレッドコンテキストやトークンを検証
            print(f"[!] 不整合プロセスを発見: PID {p.UniqueProcessId}")
            potential_threats.append(p)
            
    return potential_threats

4. アーキテクトが考えるべき防御層の再構築

DKOMを許すということは、カーネルメモリの保護が破綻していることを意味する。パッチやウイルス対策ソフトのシグネチャベース検知は、カーネルレベルの操作の前では無力だ。

  • HVCI (Hypervisor-Protected Code Integrity) の強制:

カーネルメモリの整合性をハイパーバイザレベルで保護し、カーネルモードのデータ構造への不正な書き込みを防止する。これが現代の防衛の最低ラインだ。

  • カーネルオブジェクトの改ざん監視:

EDRの機能として、ActiveProcessLinks などの主要なリスト構造の変更をカーネルコールバックで監視する。ただし、これ自体をフックする攻撃手法も存在するため、ハードウェアレベルのテレメトリ(Intel PT等)との相関分析が、次世代のDFIRには不可欠となる。

結論:技術的知見の極致へ

我々アナリストが追うべきは、ツールが吐き出す「アラート」ではなく、メモリという物理層に刻まれた「構造的な矛盾」だ。OSが提供するAPIは、あくまで「OSに見せたい世界」を描写しているに過ぎない。

メモリフォレンジックの本質は、OSの嘘を見抜き、ハードウェアが記憶するありのままの事実を再構築することにある。DKOMは古くからある攻撃手法だが、これを完璧に検知・解析できる能力は、今なおトップレベルのインシデントレスポンスにおける「選別基準」となっている。

次にメモリダンプを開くときは、ツールを動かす前に、まずはカーネル構造体のポインタが指し示す先を脳内でトレースしてみてほしい。そこにこそ、攻撃者の足跡が鮮明に浮かび上がっているはずだ。

コメント

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