メモリを覗けば悪意が見える!Volatility 3で「親の顔」を偽る侵入者を暴こう
こんにちは!現場でインシデント対応の指揮を執っていると、「何が起きたか全くわからない!」とパニックになっているエンジニアの方々に頻繁に出会います。そんな時、私たちが頼りにするのは「メモリフォレンジック」という手法です。
パソコンのメモリには、その瞬間、そのPCで何が動いているかの「全て」が残っています。今日は、攻撃者がよく使う「親プロセスの偽装」という卑劣な手口を、Volatility 3を使って見破る方法を解説します。
—
泥棒が「家族のフリ」をして家に侵入する?
まず、プロセスの親子関係をイメージしてみましょう。
Windowsでは、あらゆるプログラム(プロセス)には「親」がいます。例えば、皆さんが普段使うフォルダ画面(explorer.exe)が親となり、そこからメモ帳やブラウザが立ち上がります。
攻撃者は、この「親と子の関係」を悪用します。
普通、explorer.exeからpowershell.exeが勝手に起動して、怪しいコマンドを打つなんてことはまずありませんよね? 泥棒が玄関から堂々と入り、「私は家族の友人だ」と嘘をついて忍び込むようなものです。
彼らは、自分の存在を隠すために「正規のプログラムの子供として振る舞う」ことで、セキュリティソフトの目を誤魔化そうとするのです。
—
Volatility 3で「家族構成」を覗き見る
Volatility 3は、メモリという「動かぬ証拠」を解析するための強力なツールです。今回使う pstree プラグインは、まさに「家族構成図」を作成してくれるものだと考えてください。
1. まずは構成図を出力する
以下のコマンドをターミナルで実行してみましょう。
# -f はメモリダンプファイルの指定です
# windows.pstree はプロセスツリーを表示するプラグインです
python3 vol.py -f memory_dump.raw windows.pstree
出力結果を見ると、ずらりとプロセスが並びます。ここで注目すべきは、「誰が誰を産んだのか」という階層構造です。
—
異常を見抜く「違和感」の正体
pstreeの結果を眺めていると、こんな奇妙な行が見つかるかもしれません。
* 0x1234 explorer.exe
* 0x5678 powershell.exe <-- ん?ここが怪しい!
本来、explorer.exeはユーザーが操作する画面を司るものです。そこからpowershell.exeが、しかも裏側で隠れて起動しているとしたら…それは十中八九、攻撃者の仕業です。
なぜ「親プロセス偽装」がバレるのか
攻撃者は「親のID(PID)」を偽装しようとしますが、プロセスの起動時刻や、メモリ上の関連情報まで完璧に作り変えるのは非常に困難です。Volatility 3を使えば、以下のポイントで「偽物」を暴けます。
1. 不自然な親子関係: 本来ありえない親から起動している。
2. 実行パスの矛盾: C:\Windows\System32\にいないはずのpowershell.exeが動いている。
3. 終了時刻の不一致: 親よりも先に子が死んでいる、あるいは親が起動する前に子が動いている。
—
防御への第一歩:自分たちのPCを守るために
「解析は専門家がやることでしょ?」と思うかもしれませんが、開発者やIT担当者としてできることがあります。
- EDRの導入: そもそも、このような怪しいプロセス起動を自動的に検知・ブロックする「EDR(Endpoint Detection and Response)」を導入するのが現代の基本です。
- ログの監視:
PowerShellの実行ログ(Script Block Logging)を有効にしておくことで、誰が何をしようとしたか、後からでも追跡可能になります。
まとめ:一歩ずつ理解を深めよう
今日学んだのは、「プロセスには必ず親がいて、その関係性を疑うことで侵入者の嘘を見抜ける」という点です。
最初はVolatility 3の膨大な出力に圧倒されるかもしれません。でも、まずは「explorer.exeから変なプログラムが起動していないか?」という視点を持つだけで、皆さんの防御力は格段に上がります。
何か怪しい挙動があったら、慌てず騒がず、まずはメモリをダンプして、pstreeで「家族構成」を確認してみる。この「泥臭い一手間」が、重大な被害を防ぐ鍵になるのです。
次回の記事では、この怪しいプロセスが「具体的にどんなコマンドを打ったのか」をメモリから抽出する方法を解説しますね。一歩ずつ、着実に学んでいきましょう!
コメント