メモリとディスクの「ズレ」を暴け:MFTとメモリ分析で突き止める攻撃の爪痕
現場でインシデントレスポンスを担当していると、よく耳にする「ログが消された」「時刻が改ざんされた」という報告。攻撃者はログを消す術を知っていますが、「メモリ内の動的な痕跡」と「ディスク上の静的な痕跡」の整合性まで完璧に消し去ることは、ほぼ不可能です。
今日は、攻撃者が足跡を消し去ったつもりでも、我々DFIRのプロがどのようにして「ミリ秒単位の真実」を暴いているのか、その裏側と防御の鉄則を解説します。
—
1. なぜ「突き合わせ」が最強の武器になるのか
攻撃者がWebシェルをアップロードし、touchコマンドでタイムスタンプを偽装(タイムストンプ)したとしましょう。ディスク上のMFT(Master File Table)の更新時刻は完璧に書き換えられます。
しかし、メモリ上には「そのプロセスがいつ実行されたか」「どのDLLをロードしたか」「どのSocketを掴んでいたか」という、OSが嘘をつくことが難しい動的な情報が残っています。
- MFTの限界: 静的。書き換えが可能。
- メモリの真実: 実行時のコンテキスト。攻撃者が隠蔽プロセスを終了させても、メモリダンプには「かつて存在した接続」や「スレッドの残滓」が刻まれます。
これらを突き合わせることで、「ファイルが作成された時刻」と「プロセスが実際に活動を開始した時刻」の微小なラグを見つけ出し、攻撃者がタイムスタンプを偽装したその瞬間の矛盾を突くのです。
—
2. 攻撃者が狙う盲点:Webシェルによる不正操作のPoC
攻撃者は往々にして、以下のようなコードを使い、Webアプリを経由してシステムコマンドを実行します。
// 攻撃者がアップロードする悪意あるWebシェルの例
// 実行時刻を偽装してMFTの目をくらませる(touchコマンド)
<?php
$cmd = $_GET['cmd'];
system($cmd);
// 実行後にタイムスタンプを遡及的に書き換える
touch('shell.php', strtotime('2023-01-01 00:00:00'));
?>
彼らは「タイムスタンプを戻したからバレない」と高を括ります。しかし、我々はメモリ上の parent_process_id や、PHP-FPMのワーカーが生成した子プロセスの実行履歴から、実際のコマンド発行時刻を特定します。
—
3. 実践:攻撃を許さない「堅牢な設計」の答え
Webシェルによるコマンド実行を防ぐには、アプリケーションの権限分離と、system()のような危険な関数の禁止が絶対条件です。以下に、現代的なインフラで採用すべき防御設定を示します。
Nginx + PHP-FPM での権限分離設定
Webサーバーのユーザーが勝手にファイルを書き換えたり、コマンドを実行できないよう、open_basedir と適切なファイルパーミッションを設定します。
# /etc/nginx/conf.d/security.conf
# 特定のディレクトリ以外への書き込みを物理的に拒否する設定
location ~ \.php$ {
fastcgi_param PHP_VALUE "
open_basedir=/var/www/html/public:/tmp;
disable_functions=system,exec,shell_exec,passthru,proc_open;
";
# ... 他の設定
}
AWS IAM ポリシーによるメタデータ保護
攻撃者がWebシェルを足掛かりにクラウド環境の認証情報を盗む(SSRF攻撃)のを防ぐためのIAM制限です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:Metadata",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:SourceVpc": "vpc-0123456789abcdef0"
}
}
}
]
}
—
4. 現場のアナリストからのアドバイス
「ツールを動かせば答えが出る」と考えているなら、それは大きな間違いです。フォレンジックにおいて最も重要なのは、「攻撃者の心理」と「OSの挙動」を理解することです。
1. タイムライン分析の極意: 常に「UTC」で時刻を統一すること。ローカルタイムのズレはインシデントハンドリングの最大の敵です。
2. メモリフォレンジックの心得: Volatility を使う際は、必ず pslist だけでなく pstree や malfind を組み合わせ、親プロセスの連鎖を確認してください。Webシェルは必ず php-fpm や apache の子プロセスとして出現します。
3. 防御の自動化: ログが改ざんされても「SIEM」や「クラウド上の監査ログ」にリアルタイムで転送していれば、攻撃者のタイムストンプは無力化されます。
技術は常に進化しますが、攻撃者が「爪痕」を残さざるを得ないという事実は変わりません。我々エンジニアの仕事は、その微かな爪痕を見つけ出し、彼らのシナリオを崩壊させることです。
何か疑問があれば、いつでも聞いてください。現場の泥臭い話はいくらでも用意していますよ。
コメント