【入門編】 Volatility Framework 3を用いたプロセスツリーの異常検知と親プロセス偽装の特定 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!インシデントレスポンスの現場を渡り歩いているSOCアナリストです。

新しい技術を学ぶとき、セキュリティの分厚い教科書を開いては、小難しい専門用語の嵐に挫折しそうになっていませんか?「なんだか難しそう……自分には無理かも」と不安になる気持ち、痛いほどよく分かります。でも、安心してくださいね。サイバー攻撃の手口や、それを暴くフォレンジックの技術も、私たちが普段暮らしている現実世界の「防犯」の仕組みに置き換えてみれば、驚くほどスッと頭に入ってくるものなんです。

今回は、メモリ(RAM)というパソコンの「短期記憶」を覗き見して、ひっそりと隠れている悪者を見つけ出す「メモリフォレンジック」の世界へご案内します。主役は、調査の現場でなくてはならない相棒 Volatility 3(ボラティリティ・スリー)。そして暴くのは、攻撃者がよく使うずる賢い隠れ蓑、「親プロセス偽装」です。

一歩ずつ、丁寧に紐解いていきますので、コーヒーでも飲みながらリラックスして読み進めてくださいね。

—

1. 家の鍵と家族構成:プロセスツリーってなに?

まずは、パソコンの中で動いている「プロセス」と「親子関係」についてお話ししますね。

皆さんのご自宅を想像してみてください。玄関の鍵を開けて家の中に入るとき、家族がそれぞれ自分の部屋で宿題をしたり、料理をしたりしていますよね。パソコンの中もこれと全く同じです。私たちが普段使っているブラウザや、裏側で動いているシステムプログラムは、すべて「プロセス」という独立したお部屋(あるいは家族のメンバー)として動いています。

そして、この家族には「誰が誰を生んだか(誰が親で誰が子か)」という厳格な家系図(ツリー構造)があります。

  • お父さん・お母さん(例: services.exe や explorer.exe)がいて、
  • その子供として、ブラウザやメモ帳といったアプリが起動する。

これが正常な「プロセスツリー」の姿です。平和な家庭であれば、「お母さん(explorer.exe)がいないのに、突然知らない子どもが近所の家から飛び込んできた!」なんてことは絶対にあり得ませんよね。

悪い奴らは「偽の戸籍」を作る

ところが、ずる賢いサイバー攻撃者は、自分たちの悪だくみがすぐにバレないよう、この「戸籍(親子関係)」を上手に偽装します。これを専門用語で「PPID(Parent Process ID)スプーフィング(親プロセス偽装)」と呼びます。

例えば、攻撃者がこっそりパソコンに侵入して悪さをする際、いかにも怪しい名前でプログラムを動かしたら、すぐに見つかってしまいます。だから彼らは、Windowsの超重要で誰も疑わないお墨付きのシステム、「お父さん(例えば、セキュリティが厳重な lsass.exe や services.exe)」の名前を勝手に借用し、「私はあの厳格なお父さんの子供です!」という偽の戸籍を見せて、警備員の目をすり抜けようとするのです。

現実世界で言えば、怪しい訪問者が「いや、私はこの家の厳格なお父さんの隠し子なんです」と偽って家に入り込もうとするようなものですね。怖くないですか?

—

2. Volatility 3の pstree プラグインで「家系図」を暴く

では、そんな巧妙な偽装をどうやって見破ればいいのでしょうか?
ここで登場するのが、メモリフォレンジックツールである Volatility 3 です。

パソコンが電源を切られる直前、メモリ(RAM)という記憶装置には、その瞬間に行われていたすべての活動の「記憶の断片」が残されています。私たちはメモリの全データを抜き出し(これをメモリイメージと呼びます)、Volatility 3 という特製の拡大鏡を使って、当時の「家系図」を復元するのです。

その家系図を表示してくれる魔法のコマンドが pstree(プロセス・ツリー)です。

実際に使ってみましょう(実務で使えるコマンド例)

インシデントレスポンスの現場では、取得したメモリイメージ(例: memory_dump.raw)に対して、以下のようなコマンドを叩いてプロセスの親子関係をリスト化します。

# Volatility 3を使ってメモリイメージからプロセスツリー(家系図)を表示するコマンド
python3 vol.py -f memory_dump.raw windows.pstree

このコマンドを実行すると、画面には次のようなツリー状のリストが表示されます。

PID     PPID    ImageFileName
* 412   388     services.exe
* 520   412       svchost.exe
* 1884  412       cmd.exe         <-- おや? services.exe の子供にコマンドプロンプトが?
* 2400  1884        whoami.exe    <-- さらにその子供が…!?

お疲れ様です!ここで、セキュリティアナリストとしての「直感」を働かせるポイントがあります。

正常なWindowsの仕組みにおいて、システムの中枢を支える services.exe(サービスの管理をするお父さん)が、いきなり黒い画面の cmd.exe(コマンドプロンプト)や、攻撃者がよく使う偵察コマンド whoami.exe を生むことは、極めて不自然(=異常)なんです。

まさに、「おとなしい実直なお父さんが、急に素性の知れない不良の親友を連れてきたぞ……?」という違和感ですね。これが、プロセスツリーの異常検知の瞬間です。

—

3. 現場のプロが教える!見逃しがちな「偽装のサイン」

実務の現場では、攻撃者も一枚上手です。ただ単に親プロセスを書き換えるだけでなく、もっと巧妙に隠れるケースもあります。ここでは、初心者の皆さんが現場で絶対に押さえておきたい「3つの違和感」をこっそりシェアしますね。

① 本来あり得ない「親子の組み合わせ」

先ほどもお伝えした通り、Windowsのシステム系プロセス(lsass.exe や csrss.exe など)が、ユーザーが操作するアプリ(explorer.exe やブラウザなど)を直接起動することは、基本的にありません。pstree の結果を見て、「この親から、この子は生まれないはずだぞ」という違和感に気づけるかどうかが、アナリストの腕の見せ所です。

② パスの不自然さ

親プロセスが持っている実行ファイルのパス(場所)と、子プロセスのパスが不自然ではないかも確認します。例えば、システムフォルダ(C:\Windows\System32\)にあるはずのプロセスが、なぜか一時フォルダ(C:\Users\Public\ や C:\Temp\)から起動している場合、それは十中八九、偽装された悪意あるプログラムです。

③ プロセスの消滅・ゾンビ状態

攻撃者は自分の足跡を消すために、目的を達成するとすぐにプロセスを終了させます。しかし、メモリの深部には、そのプロセスが「どんな親に育てられ、どんな子を生んだか」の残骸(EPROCESS構造体)がしっかりと刻まれています。Volatility 3 は、そうした「消されたはずの痕跡」すらも容赦なく暴き出すのです。

—

4. 一歩ずつ対策を学んでいこう!

「メモリフォレンジックって、なんだかすごく難しそう……」と思ったかもしれませんが、恐れる必要はありません。最初は誰もが初心者です。

日々の業務や開発、インフラ運用のなかで、次のような心構えとステップを大切にしてみてくださいね。

1. 「いつもと違う」に敏感になる
サーバーや端末のCPU使用率が急に跳ね上がったり、見たことのないコマンドプロンプトの黒い画面がチラついたりしたら、それはシステムからの小さなSOSサインです。「気のせいかな」とスルーせず、ログやプロセスを確認する癖をつけましょう。

2. 基本のツール(Volatility 3)を触ってみる
安全なテスト環境(サンドボックス環境など)を用意し、実際に意図的に取得したメモリダンプに対して Volatility 3 を動かしてみるのが一番の近道です。実際にコマンドを叩いて、きれいなツリーが表示されたときの「おっ、見えたぞ!」というワクワク感は、セキュリティエンジニアの醍醐味です。

3. 「防犯カメラ」の視野を広げる
EDR(Endpoint Detection and Response)製品などのモダンなセキュリティツールは、今回お話ししたような「プロセスツリーの異常」を自動で検知してアラートを出してくれます。ツールが何を検知しているのか、その裏側にあるメカニズム(今回で言えばプロセスやPPIDの概念)を少しずつ知ることで、アラートを見たときにも冷静に対処できるようになります。

セキュリティの対策に「これで完璧」というゴールはありません。でも、泥臭く地道に仕組みを理解していくことで、サイバー攻撃者たちの「ずる賢い手口」を一つずつ見破れるようになっていきます。

一歩ずつ、確実にスキルアップしていきましょう!次の調査でも、あなたのその好奇心と探求心がきっと素晴らしい成果を生むはずです。応援しています!

コメント

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