【入門編】 メモリ上のPEヘッダー解析によるリフレクティブDLLインジェクションの特定 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

メモリの中に潜む「透明人間」をあぶり出せ!リフレクティブDLLインジェクションの正体

こんにちは!セキュリティの現場で日々、サイバー攻撃者との追いかけっこを楽しんでいる(ときには冷や汗をかいている)SOCアナリストです。

今日は、私たちの現場でも「見つけるのが本当に厄介だよね」と話題になる、リフレクティブDLLインジェクションという攻撃についてお話しします。

「名前が難しそう…」と思いましたか?大丈夫です!身近な例えを使いながら、この厄介な「透明人間」を見破る方法を一緒に学んでいきましょう。

—

「家に痕跡を残さない泥棒」の正体

一般的なマルウェアは、USBメモリからコピーされたり、ダウンロードされたりして、PCの「ハードディスク(ディスク上)」にファイルとして残ります。これは泥棒が「足跡」や「指紋」を残していくようなものなので、ウイルス対策ソフトも比較的簡単に見つけることができます。

しかし、リフレクティブDLLインジェクションは違います。

この攻撃手法を使う泥棒は、「空中に浮かんだまま、鍵のかかった部屋の中に入る」ような真似をします。一度もディスクにファイルとして保存されず、メモリ(PCの作業机のような場所)の中で直接実行されるのです。これを「ファイルレス攻撃」と呼びます。

なぜメモリの中を覗く必要があるのか?

私たちが使うOS(Windows)には、VAD(Virtual Address Descriptor)という「家系図」のような管理表があります。「このメモリ領域は、誰が、何のために使っているか」を記録する大切なものです。

攻撃者は、このメモリの中にこっそりDLL(プログラムの部品)を忍び込ませます。普通、プログラムが動く場所は「読み取り専用」などが設定されていますが、攻撃者は無理やりPAGE_EXECUTE_READWRITE(実行・読み取り・書き込み許可)という、防犯上の「全解除」状態にしてから実行します。

これが、私たちが追うべき「痕跡」なのです。

—

現場で使える!「怪しいメモリ」の見つけ方

メモリフォレンジックの王道ツールである「Volatility」を使って、この怪しい領域を見つける手順を紹介します。新人担当者の皆さんも、まずはこのコマンドから触ってみてください。

1. 怪しいVAD情報をリストアップする

まずは、メモリの中で「実行可能」かつ「書き込み可能」という、本来ならあり得ない設定になっている場所を探します。

# Volatility 3を使用して、指定プロセスのVADノード情報を取得
# 1234は調査対象のプロセスID(PID)です
python3 vol.py -f memory.dmp windows.vadinfo --pid 1234

2. PEヘッダーを確認する

怪しい領域が見つかったら、そこが本当にDLLなのかを確認します。DLLファイルの先頭には、必ずMZという魔法の合言葉(シグネチャ)が刻まれています。

# メモリダンプから怪しいアドレスのデータを抽出するイメージコード
# 実際にはVolatilityの 'procdump' や 'vaddump' を使います

import os

def check_mz_header(memory_chunk):
    # PEファイルの先頭にある 'MZ' シグネチャを確認
    if memory_chunk.startswith(b'MZ'):
        print("警告: メモリ上に不審なPEヘッダーを発見しました!")
    else:
        print("今のところ正常です。")

—

「全解除」のメモリを見つけたらどうする?

もし、VAD解析中に PAGE_EXECUTE_READWRITE と書かれた領域が見つかり、その中身に MZ という文字があったら……残念ながら、そこには悪意あるプログラムが住み着いています。

1. プロセスの強制終了: まずは被害の拡大を防ぐために、そのプロセスを停止させます。
2. メモリダンプの保存: 調査のために、その瞬間のメモリをファイルとして保存(ダンプ)します。
3. 解析: 取り出したDLLをサンドボックス環境で動かし、どこに通信しようとしていたのか、何を盗もうとしていたのかを特定します。

まとめ:一歩ずつ「目」を養おう

最初は難しいと感じるかもしれませんが、メモリフォレンジックは「PCの記憶を掘り起こす」非常に面白い作業です。

  • VADは「メモリの管理表」
  • PAGE_EXECUTE_READWRITEは「不用心すぎる設定」
  • MZシグネチャは「隠れたプログラムの証拠」

この3つを頭に入れておくだけで、システムを見る目が劇的に変わります。「何かおかしいぞ?」という直感こそが、最強のセキュリティツールです。

まずは手元の検証環境で、わざと簡単なプログラムを動かしながら、Volatilityで自分のプロセスを覗いてみることから始めてみてください。一歩ずつ、一緒に強くなっていきましょう!

コメント

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