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

皆さん、こんにちは!インシデントレスポンスやデジタルフォレンジックの世界へようこそ。
セキュリティの現場に身を置いていると、「なんだか最近、サーバーの動きがおかしいぞ」という現場の悲鳴を本当によく耳にします。

特に、攻撃者は私たちの目を盗むために、あの手この手で「自分たちの存在」を隠そうとします。まるで、泥棒が他人の家に入るときに、大家さんの制服を着て堂々と玄関から歩いて入ってくるようなものです。

今回は、そんな巧妙な隠蔽工作の一つである「親プロセス偽装」を、メモリフォレンジックの強力なツール「Volatility 3(ボラティリティ・スリー)」を使ってあぶり出す方法を、一緒に優しく紐解いていきたいと思います。難しい専門用語が出てきても、身近な例えに置き換えていくので、一歩ずつリラックスして学んでいきましょうね!

—

1. 家の鍵と防犯に例える「プロセス」と「親プロセス」の関係

まずは、私たちのパソコンの中で何が起きているのか、イメージしやすいように身近な例えから始めてみましょう。

パソコンの中では、日々たくさんのプログラム(アプリや裏で動くシステム)が動いています。これらを「プロセス」と呼びます。そして、すべてのプロセスには「誰がこのプログラムを起動させたのか(親)」という親子関係が必ず存在します。

これを「一戸建ての家」に例えてみましょう。

  • 親プロセス(お父さん・お母さん):リビングでくつろいでいる家主です。
  • 子プロセス(子供やペット):家主から「お使いに行ってきて」と言われて玄関から出ていく存在です。

通常の正しい世界では、例えば「メモ帳」というアプリは、デスクトップ画面を管理している正当な仕組み(explorer.exe)から起動されます。つまり、メモ帳の親は必ず explorer.exe になるわけです。

泥棒の巧妙な手口:「親プロセス偽装」とは?

もし、悪い泥棒(マルウェア)があなたのパソコンに侵入したとしましょう。泥棒がそのまま「私は不審者です」という名前でうろついていたら、すぐに警察(セキュリティソフト)に捕まってしまいますよね。

そこで泥棒は何をするか?
安全な家族の一員である explorer.exe(親)の服を着て、その裏でこっそり悪さをするプログラム(子)を起動させたり、あるいは、まったく関係のない別のプログラムに「私を生んだ親は、あの安全なシステムだよ」と偽の身分証を持たせるのです。これが、セキュリティの世界で言う「親プロセス偽装(Parent Process ID Spoofing)」というテクニックになります。

「あれ?このプログラム、お母さんが生んだはずなのに、どう見ても見た目が不審者だぞ……?」
この違和感を見つけ出すのが、今回のメインテーマであるプロセスツリーの解析なんです。

—

2. Volatility 3 ってなぁに?

メモリフォレンジックという言葉を聞くと、なんだか特殊で難しそうな機材を使うイメージがあるかもしれません。でも安心してください。

パソコンが起動しているとき、メモリ(RAM)という一時的な記憶領域には、今まさに動いているアプリや開いているファイルのデータが、いわば「生の状態」でぎっしり詰まっています。
もしパソコンが急に電源を切られたとしても、メモリのコピー(メモリダンプ)をうまく保存しておけば、「事件当時の現場写真」を後からじっくり鑑賞することができるのです。

この「現場写真」を解析するための最強の拡大鏡が、オープンソースのツールである「Volatility 3」です。Pythonで書かれており、コマンド一つでメモリの奥底から隠されたプロセスを引っ張り出してくれます。

—

3. 実践!Volatility 3 でプロセスツリーを覗き見してみよう

それでは、実際にインシデント現場で行う手順を追っていきましょう。
手元に怪しいパソコンから採取したメモリのファイル(例: memdump.raw)があると仮定します。

ステップ1:動いているプロセスの一覧を眺めてみる

まずは、メモリ上でどんなプログラムが動いているのかをリストアップしてみましょう。Volatility 3には、プロセスを一覧表示する windows.pslist というプラグインが用意されています。

ターミナル(黒い画面)を開いて、次のようにコマンドを叩いてみましょう。

# Volatility 3を使って、メモリ上のプロセス一覧を出力する基本コマンド
python3 vol.py -f memdump.raw windows.pslist

このコマンドを実行すると、ずらっと大量のプロセス名や、それぞれに割り振られた番号(PID:プロセスID)、そして「誰が自分を生んだのか」を示す番号(PPID:親プロセスID)が画面に流れてきます。

ただ、これだけだと単なる「箇条書きのリスト」なので、誰が誰の子供なのかがパッと見で分かりにくいですよね。

ステップ2:プロセスツリー(家族関係図)を描かせてみる

ここで登場するのが、親子関係をきれいにツリー構造(家系図)で表示してくれる windows.pstree プラグインです!

# プロセスを親子関係(ツリー構造)の家系図として表示するコマンド
python3 vol.py -f memdump.raw windows.pstree

このコマンドを実行すると、以下のような感じで、インデント(字下げ)を使いながら綺麗に家族関係が表示されます。

- System (PID: 4)
  \ - smss.exe (PID: 368)
    \ - csrss.exe (PID: 612)
  \ - wininit.exe (PID: 484)
    \ - services.exe (PID: 572)
      \ - svchost.exe (PID: 728)
- explorer.exe (PID: 2044)
  \ - notepad.exe (PID: 3120)  <-- おっ、explorerの子供としてメモ帳が正しく動いていますね!

このように、通常の正しいツリー構造を日頃から見慣れておくことが、異常を見つけるための第一歩になります。

—

4. 偽装を見破る!現場でのチェックポイント

さて、ここからがアナリストの腕の見せ所です。攻撃者は親プロセスを偽装して、いかにも「安全なシステムから起動しましたよ」と見せかけますが、いくつかの決定的な矛盾を残していきます。

現場で私たちがチェックする代表的なポイントを2つ紹介しますね。

① 本来ありえない「親と子の組み合わせ」になっていないか?

例えば、Windowsの根幹を支える重要なシステムプログラムである csrss.exe や services.exe は、決まった手順でしか起動しません。
もし、インターネットからダウンロードした怪しげなユーザー権限のアプリ(例: update.exe)の親プロセスとして、システムの根幹プログラムが指定されていたら……?

「あれ?一般ユーザーが実行したアプリなのに、なぜかWindowsの最も厳重なセキュリティエリア(システム)が親になっているぞ?」という、権限の矛盾に気づくことができます。これは強力なインシデントのサインです。

② パスの不整合(本当にその場所にあるファイルか?)

Volatility 3では、プロセスがどこにあるどのファイルを実行しているのか(フルパス)を確認することもできます。
例えば、正規の cmd.exe(コマンドプロンプト)は通常 C:\Windows\System32\cmd.exe に存在します。しかし、攻撃者が名前だけを真似て、全く関係ない一時フォルダ(例: C:\Users\Public\cmd.exe)から起動させている場合、ツリー構造をたどるだけでなく、実行ファイルのパスを確認することで偽装を完全に暴くことができます。

—

5. まとめと、次の一歩へ向けて

今回は、Volatility 3を使ったプロセスツリーの再構築と、親プロセス偽装という巧妙な隠蔽工作の検知についてお話ししました。

セキュリティの対策というと、「高価なセキュリティ製品を入れれば安心」と思われがちですが、インシデントが起きたときに最後頼りになるのは、「いつもと違う不自然な関係性(違和感)に気づく人間の眼」です。

最初は黒い画面のコマンドに圧倒されるかもしれませんが、「あ、このプロセスはお父さんが違うな」という視点を持つだけで、サイバー攻撃者の足跡がくっきりと見えてくるようになります。

ぜひご自身の検証環境などでメモリダンプを取得し、Volatility 3を動かして「我が家のパソコンの家族関係」を覗き見してみてくださいね。一歩ずつ、確実にスキルアップしていきましょう!

コメント

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