メモリの中に潜む「透明人間」をあぶり出せ!リフレクティブ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で自分のプロセスを覗いてみることから始めてみてください。一歩ずつ、一緒に強くなっていきましょう!
コメント