はじめに
サイバーインシデントの発生時、多くの管理者が真っ先にやりがちな致命的なミスがあります。それは「慌てて端末の電源を切る(または再起動する)」ことです。
現代のサイバー攻撃、特にランサムウェアや標的型攻撃(APT)は、ディスクに痕跡を残さない「ファイルレスマルウェア」や、メモリ上にのみ展開されるシェルコード、暗号化キーを多用します。端末の電源を切った瞬間、それら最重要の証拠(データ)は揮発して永遠に消失してしまいます。
この記事では、インシデント初動対応の要となる「揮発性データ(メモリ等)の保全(Memory Acquisition)」の原則と、Windowsにおける具体的な保全手順・注意点を解説します。
Linuxエンジニア向けの例え
Linux環境でのインシデント対応でも原則は同じです。感染が疑われるサーバーで真っ先に shutdown や reboot を叩いてしまうと、/proc 以下に見えているプロセスのメモリマップや、netstat/ss で見えていた確立済みソケットの情報は再起動と同時に消え去ります。Linuxでの物理メモリ取得ツールとしては LiME (Linux Memory Extractor) が代表的で、Windowsにおける WinPmem や FTK Imager に相当する役割を担います。「まずネットワークを切り離し、電源は落とさずにメモリを吸い出す」という鉄則はOSを問わず共通です。
- メモリ保全ツールの多くはカーネルドライバをロードするため、管理者権限(ローカル管理者/Administrator)での実行が必須です。
- ドライバの署名要件やDevice Guard/WDACのポリシーによっては、保全ツールのロード自体がブロックされる場合があります。事前に検証環境で動作確認をしてください。
- 保全したメモリイメージや証跡は、後の法的手続き(訴訟・懲戒処分等)で証拠として扱われる可能性があります。Chain of Custody(証拠保管の連続性)の記録ルールを事前に社内で定めておくことを推奨します。
1. 証拠保全の鉄則:「揮発性の順序(Order of Volatility)」
RFC 3227で定義されているように、デジタルフォレンジックには「失われやすいデータから順に保全する」という基本原則があります。
【 消失速度:最速 】
▲ 1. CPUレジスタ、キャッシュ
│ 2. ルーティングテーブル、ARPキャッシュ、プロセス一覧、
│ カーネル統計、物理メモリ (RAM)
│ 3. 一時ファイルシステム、スワップ空間 (pagefile.sys / hiberfil.sys)
│ 4. ディスク (HDD / SSD)
│ 5. リモートロギングデータ、監視データ
│ 6. 物理的な構成、ネットワークトポロジ
▼ 7. アーカイブメディア(バックアップテープ等)
【 消失速度:遅い(不揮発) 】
RFC 3227の原文では、物理メモリ(RAM)はルーティングテーブルやARPキャッシュ、プロセス一覧と同じ揮発性の階層に位置づけられています。実務上は「メモリのダンプ取得」自体に数分〜数十分かかるため、ライブレスポンス(軽量なコマンド出力の取得。4章で後述)を先に済ませ、その後にメモリダンプを取得するという順序で対応するのが一般的です。
ディスク(SSD/HDD)のデータは電源を切っても残りますが、物理メモリ(RAM)内のデータは電源遮断によって瞬時に消滅します。そのため、インシデント発生時は「まずネットワークを物理的または論理的に切断(隔離)し、電源を入れたままメモリを保全する」ことが定石です。
2. 物理メモリ(RAM)から何が読み解けるのか?
メモリのダンプ(複製)を取得することで、静的なディスク調査では決して見つからない以下の証拠を暴くことができます。
-
インジェクションされた悪意あるコード: 正規プロセス(
svchost.exeやexplorer.exeなど)の内部に注入されたファイルレスマルウェアのバイナリ。 - 復号された認証情報・暗号鍵: メモリ上に平文で展開された管理者パスワード、Kerberosチケット、BitLockerやランサムウェアの暗号化鍵。
- 直近のアクティブな通信: すでに切断されたものも含め、どのプロセスがどの外部C2サーバーと通信していたかの生ソケット情報。
- 実行されたコマンドライン引数: 難読化が解かれ、実行されたスクリプトやパラメータ。
3. 実践:物理メモリの保全手法
メモリ保全作業そのものが対象PCのメモリ状態を書き換えてしまうため、「システムの改変を最小限に抑える(フットプリントを小さくする)」ことが不可欠です。
保全ツールは対象端末にインストールするのではなく、あらかじめ準備した書き込み禁止USBメモリや、専用の共有フォルダから直接実行します。
代表的な無償保全ツール
- WinPmem: オープンソースで広く使われている高機能メモリダンパー(現在はVelocidex社がメンテナンス)。
- FTK Imager (Lite / CLI): 法執行機関でも多用される定番ツール。GUI版とコマンドライン(CLI)版がある。
- DumpIt (Magnet Forensics / Comae): ワンクリックで迅速にRAWイメージを取得できるツール。
手順例:WinPmem によるメモリダンプの取得
管理者権限でコマンドプロンプトまたはPowerShellを起動し、取得先ストレージ(外付けHDD等)を指定して実行します。
# 1. winpmem_mini_x64.exe を実行し、出力先パスを引数として渡すだけで
# 物理メモリ全体をRAWイメージ(.raw)として出力できる
.\winpmem_mini_x64.exe E:\Forensics\TargetPC_Memory.raw
# 2. 取得したメモリイメージのハッシュ値(SHA-256)を計算し、同一性を証明できるように記録
Get-FileHash -Path E:\Forensics\TargetPC_Memory.raw -Algorithm SHA256 | Out-File E:\Forensics\Memory_Hash.txt
注意:ハッシュ値の即時記録
取得完了直後にハッシュ値(SHA-256)を算出してテキストに保管することは、法的な証拠能力(改ざんされていないことの証明=CoC: Chain of Custody)を担保する上で必須の手順です。
4. ライブレスポンス:メモリダンプ前に取得すべきコマンド情報
物理メモリ全体のダンプ(数GB〜数十GB)には数分〜数十分の時間がかかります。ダンプ処理を開始する直前に、消失しやすい軽量なネットワーク接続状態やプロセス一覧をテキストとして即座に保全する手法をライブレスポンス(Live Response)と呼びます。
# 出力先ディレクトリの準備
$dest = "E:\Forensics\LiveResponse"
New-Item -ItemType Directory -Path $dest -Force
# 1. 現在の日時とタイムゾーン
Get-Date | Out-File "$dest\current_time.txt"
# 2. アクティブなネットワーク接続と関連プロセスID (PID)
netstat -ano | Out-File "$dest\netstat_ano.txt"
# 3. ARPキャッシュ(通信相手のMACアドレス)
arp -a | Out-File "$dest\arp_cache.txt"
# 4. 稼働中のプロセス一覧(パスや実行引数付き)
Get-CimInstance Win32_Process | Select-Object ProcessId, Name, ExecutablePath, CommandLine | Out-File "$dest\process_list.txt"
# 5. 現在ログインしているユーザーセッション
query user | Out-File "$dest\logged_in_users.txt"
5. インシデント初動対応時の注意点(やってはいけないこと)
シャットダウン・再起動を行わない:
前述の通り、メモリ上の証拠が完全に失われます。
不用意に対象PCでWebブラウザやアプリを開かない:
調査用ツールをダウンロードするために感染端末のブラウザを起動すると、メモリ領域が大量に上書きされ、攻撃者の痕跡が破壊されます。
感染端末のローカルディスクにダンプを保存しない:
保全データ(RAMサイズ相当の数GB)をローカルのCドライブに書き込むと、未割り当て領域(削除済みファイルの痕跡)が上書きされ、ディスクフォレンジックが不可能になります。必ず十分な空き容量のある外付けストレージへ直接出力してください。
まとめ
インシデント発生時の初動対応は、スピードと正確性が命です。
- 「電源を切るな、まずネットワークを切れ」を社内ルールとして徹底する
- 揮発性の高いデータ(ネットワーク状態、プロセス、RAM)を最優先で保全する
- 保全完了後は必ずSHA-256ハッシュ値を算出し、証拠性を担保する
こうして確実に保全されたメモリイメージは、The Volatility Framework などの解析ツールを用いることで、感染経路や攻撃者の手口を正確に突き止めるための決定打となります。
今すぐ実行すべき確認コマンド
# 1. 保全先ストレージの空き容量が搭載RAM以上あるか確認(外付けドライブの例:E:)
Get-PSDrive E | Select-Object Used, Free
Get-CimInstance Win32_ComputerSystem | Select-Object TotalPhysicalMemory
# 2. 保全ツール実行に必要な管理者権限で起動しているか確認
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
# 3. ライブレスポンス出力先ディレクトリが正しく作成されているか確認
Test-Path "E:\Forensics\LiveResponse"