こんにちは!SOC(セキュリティオペレーションセンター)で日々、怪しい通信やサイバー攻撃の痕跡と格闘しているアナリストの私です。
「サーバがなんだか重い」「見慣れないプロセスが動いている気がする……でも、ログを見てもよく分からない!」
インシデントの現場にいると、そんな冷や汗をかくような場面に出くわすことがよくありますよね。
ハードディスク(ストレージ)の調査も大事ですが、今まさに実行されている悪意や、犯人がどこに触れたのかを生々しく捉えてくれるのが「メモリフォレンジック」の世界です。今回はその中から、攻撃者が盗み出した「機密ファイル」の足跡をピタリと追う「ハンドル解析」について、身近な例えを交えながら優しく紐解いていきたいと思います。一歩ずつ、一緒に学んでいきましょう!
—
1. 犯人はどの書類に触った?「ハンドル解析」ってなに?
突然ですが、あなたの家が空き巣に入られたと想像してみてください。
泥棒が部屋に忍び込み、リビングの引き出しを開け、大事な通帳や印鑑を触っていったとします。警察が調べるとき、「犯人が何を手に取り、どこに置いたのか」を知るために指紋や足跡を探しますよね。
パソコンの世界でも全く同じことが起きます。
悪意ある攻撃者(あるいは不正なプログラム)がコンピュータの中に侵入したとき、彼らは目的の機密データ(顧客リストやパスワードファイルなど)を開いて盗み出そうとします。
ここで登場するのが、今回の主役である「ハンドル(Handle)」です。
「ハンドル」を「合鍵やドアノブ」に例えてみよう
WindowsなどのOSでは、プログラム(プロセス)がファイルやフォルダ、レジストリなどの資源にアクセスするとき、「ハンドル」という一種のアクセス券(あるいはドアノブのようなもの)を発行して握りしめます。
- プロセス = 部屋の中にいる人(プログラム)
- ファイル = 金庫の中の書類
- ハンドル = 金庫を開けるための「一時的な鍵」や「ドアノブ」
プログラムが動いている間、そのプログラムがどのファイルやネットワークの「ドアノブ」を握っているのかをリスト化して覗き見ることができれば、「あ、この怪しいプログラムは、今さっき『password.txt』のドアノブを掴んでいたぞ!」と特定できるわけです。これが、ハンドル解析の基本的な仕組みになります。
—
2. 現場で使える! Volatilityを使ったハンドル解析の実践
百聞は一見にしかず。実際に私たちがインシデントレスポンスの現場で使っている、メモリ解析フレームワーク 「Volatility(ボラティリティ)」 を使った調査の流れを覗いてみましょう。
※ここでは、怪しいメモリのダンプファイル(memdump.raw)が手元にあるという前提で進めますね。
ステップ1:怪しいプロセスを見つける
まずは、メモリ上でどんなプログラムが動いていたのかを一覧で確認します。
コマンドプロンプトやターミナルを開いて、以下のようなコマンドを叩きます(※実際のコマンドは環境に合わせて書き換えてくださいね)。
# メモリ上のプロセス一覧をツリー構造で表示する基本コマンド
volatility -f memdump.raw --profile=Win10x64_19041 pslist
この一覧の中に、身に覚えのない名前のプロセスや、正規のシステムファイルに似せた偽物(例えば svchost.exe なのに変な場所から起動している等)を見つけたら、それが容疑者(プロセス)です。仮に、その怪しいやつのPID(プロセスID)が 1337 だとしましょう。
ステップ2:ハンドルをリスト化して「触ったファイル」を暴く
容疑者のPIDが分かったら、いよいよ本番です。そのプロセスが現在どんな「ハンドル(ドアノブ)」を握りしめているのかを調査します。
# PID 1337 のプロセスが保持しているハンドルを抽出する
volatility -f memdump.raw --profile=Win10x64_19041 handles -p 1337
このコマンドを実行すると、ターミナルにバーっと大量のテキストが流れます。その中には、レジストリのキーやミューテックス(排他制御用の仕組み)に混じって、ファイル(File)オブジェクトのハンドルがズラリと並びます。
出力結果のイメージ:
Offset PID Handle Type Pointer Details
--------------------------------------------------------------------------------
0xfffffa80... 1337 0xbc File 0xfffff8a0... \Device\HarddiskVolume2\Users\Public\confidential_data.xlsx
0xfffffa80... 1337 0xc0 File 0xfffff8a0... \Windows\System32\cmd.exe
おっと!出力の中に confidential_data.xlsx というエクセルファイルがしっかり映り込んでいますね。
これで、「この怪しいプログラム(PID: 1337)は、機密データが詰まったエクセルファイルのハンドルを掴んで、何らかの読み書きを行っていた」という決定的な証拠を掴むことができました。
—
3. 攻撃者の足跡を時系列で再構築する意義
「ファイルを開いていた痕跡が分かったから何なの?」と思われるかもしれませんが、ここからがDFIR(インシデントレスポンス)の醍醐味です。
1. 被害範囲の特定: 攻撃者がどの機密データ(人事情報、ソースコード、顧客名簿)にアクセスしたのかを正確に特定し、情報漏洩の有無を判定できます。
2. 攻撃ツールの特定: 攻撃者が持ち込んだ不正なスクリプトやマルウェアが、どの設定ファイルを読み込もうとしたのか(あるいはどのログを消そうとしたのか)が分かります。
3. 二次被害の防止: もし悪意あるプロセスが特定のネットワークソケット(通信の出入り口)のハンドルを握っていれば、今まさにどこかのC2サーバ(攻撃者の司令塔)と通信している生きた証拠になります。
ハードディスクに残るタイムスタンプ(更新日時など)は、巧妙な攻撃者であれば簡単に書き換え(タイムストンプ等)を行ってごまかしてきます。しかし、今まさにメモリ上で躍動しているプロセスのハンドル情報をごまかすのは、攻撃者にとっても非常にハードルが高いのです。だからこそ、メモリフォレンジックは真実を語る強力な武器になります。
—
4. 日常のセキュリティと、これからの備え
ここまで読んで、「メモリ解析ってなんだか難しそうだな……」と感じた方もいらっしゃるかもしれません。でも、安心してください。最初から完璧なコマンドを使いこなせる必要はありません。
大切なのは、
- 「不審なプロセスを見つけたら、それが何にアクセスしているか疑う視点を持つこと」
- 「いざという時にメモリを安全に採取(メモリダンプ)できるように手順を整えておくこと」
これらを日頃から意識しておくことです。
システムの裏側で何が起きているのか、プログラムがどの「ドアノブ」を握っているのかを想像できるようになると、セキュリティの景色がガラリと変わって見えてきます。
もし実務で怪しい挙動に直面したら、ぜひ今回の「ハンドル解析」の視点を思い出してみてくださいね。
それでは、安全で快適な開発・インフラライフを!また次回の解説でお会いしましょう。
コメント