SandMan 入 門 Nicolas RUFF / EADS-IW SE/CS nicolas.ruff [à] eads.net Matthieu SUICHE msuiche [à] gmail.com - http://www.msuiche.net/
概 要 当 社 はWindowsの ディスクの 休 止 機 能 を 詳 細 に 分 析 してきた 一 般 名 ハイバネーション ハイバネーションファイルの 読 み 書 きのための Cライブラリを 記 述 以 下 の 環 境 で 一 部 のアプリケーションを 実 証 する 予 定 : 攻 撃 コンピューティング 防 御 コンピューティング 法 医 学
ハイバネーションとは 何 か? Microsoftの ディスクの 休 止 機 能 の 名 称 今 日 の 全 OSで 利 用 可 能 システム 状 態 がディスクに 完 全 にバックアップされる メモリおよびプロセッサの 状 態 を 含 む ゼロパワー スリープモード Windows 2000 以 降 に 導 入 コマンドライン 制 御 : POWERCFG /HIBERNATE SHUTDOWN /H
デバッグの 問 題 点 デバッグで 電 力 遷 移 が 問 題 になる ハイバネーション 状 態 への 移 行 はデバッガに 有 利 ではない KdDeleteAllBreakpoints() など ハイバネーション 状 態 からの 復 旧 はNTLDRにより 行 われる デバッガアタッチフックの 前 ([1]を 参 照 ) ただし 全 体 に 占 める 割 合 は 非 常 に 小 さい デッドリスティング 分 析 が 可 能 エントリポイントからのコールチェーン: NtShutdownSystem() NtSetSystemPowerState() PopSleepSystem() PopInvokeSystemStateHandler() PopSaveHiberContext() <コアプロセッシング>
ファイル 形 式 フィールド ヘッダー ページリスト プロセッサ 状 態 メモリ 範 囲 アレイ#1 Xpressブロックアレイ #1 メモリ 範 囲 アレイ#2 コンテンツ PO_MEMORY_IMAGE 構 造 不 確 定 ローダー 用 の フリーページ のリストのなる 場 合 がある CONTEXT + SPECIAL_REGISTERS 構 造 ヘッダー: リストエントリカウント + 次 のリストオフセッ ト + チェックサム リスト: 最 大 255エントリ リストエントリ: 開 始 ページ + エンドページ + チェックサ ム マジック: \x81\x81xpress (Windows > 2000) ヘッダー: サイズ + チェックサム + その 他 コンテンツ: 圧 縮 データ ( )
ファイル 形 式 詳 細 ヘッダー PO_MEMORY_IMAGEがシンボルのデバッグ 時 にエクス ポートされる ただし この 構 造 はWindowsのバージョンごとに 変 化 する マジックバイトは 以 下 になる: hibr: ハイバネーションファイルは 有 効 システムをブート 時 に 再 開 する Vistaは 大 文 字 を 使 用 (HIBR) wake: ハイバネーションファイルは 無 効 システムを 新 規 に 起 動 する link: サポートされるが 現 時 点 で 更 新 されていない
ファイル 形 式 詳 細 メモリ 範 囲 アレイ リストカウントは32ビットで 格 納 されるが カウントは 常 に 0xFF( 最 後 の 範 囲 を 除 く) ページはオーダーされない Xpressブロック 1 Xpressブロック = 0x10 物 理 ページ( 最 後 のブロックを 除 く) Windows 2000: RtlCompressBuffer() を 使 って 圧 縮 内 部 的 LZNT1 と 呼 ばれる 圧 縮 方 式 その 他 の 圧 縮 方 式 も 利 用 できるが 使 用 されない 当 社 ではサポートするが Windows > 2000: 内 部 関 数 XpressEncode() を 使 って 圧 縮 RtlCompressBuffer( COMPRESSION_ENGINE_HIBER )は 使 われたことはない
ファイル 形 式 詳 細 各 アレイについて: (メモリ 範 囲 内 のページ) == (Xpressブロック 内 のページ) Xpressブロックはそれぞれ 0x10ページを 保 持 その 他 のランダムノート: ほとんどのチェックサムはゼロに 設 定 される (Windows > 2000) すべてページアラインされる 1ページ = 0x1000バイト 多 尐 のバリエーションのあるOSフィンガープリント 機 能 が 可 能 PO_MEMORY_IMAGE ヘッダーの 変 更 により 必 要 圧 縮 方 式 の 選 択 に 必 要 (Windows 2000) 特 殊 なメモリレイアウト (/PAE) を 構 成 レジスタを 通 じて 検 出 で きる
SandManライブラリ SandManライブラリのウィッシュリスト: Windowsのバージョンに 関 わりなく 任 意 のハイバネーション ファイルを 解 析 する 機 能 32/64ビットを 含 む 正 しく 文 書 化 されたライブラリ Pythonのバインディング クールなサンプルアプリケーション dd 形 式 のファイルに 変 換 検 索 とパッチページ( 高 速 ルックアップを 含 む) ページの 追 加 スクリーンショット 使 いやすいGUI 現 在 提 供 できるライブラリを 紹 介 します デモ
使 用 事 例 攻 撃 コンピューティング スリープ 状 態 のマシンをパッチ ターゲット#1 : nt!seaccesscheck() ターゲット#2 : msv1_0!msvppasswordvalidate データ 抽 出 ページ 化 されていないプールを 含 むすべてがディ スクに 格 納 PatchGuardを 削 除 または 符 号 なしドライバを ローディング 希 望 者 はいませんか?
使 用 事 例 防 御 コンピューティング マルウェアの 検 出 コード 非 表 示 技 術 を 思 いつかない ハイバネーションファイル 内 にコードがなければ 実 行 が 再 開 されない ただしハードウェアを 信 頼 する 必 要 がある ボーナスクエスチョン: ハイバネーションの 間 のハ イパーバイザページはどのようになるのか? そのようなスライドでは ブルーピル といった 業 界 用 語 は 使 用 しません
使 用 事 例 ハイバネーションを 通 じた 法 医 学 DFRWS 2005 以 降 ライブのメモリ 分 析 への 関 心 が 高 まっ ている 攻 撃 型 ワークの 例 : Meterpreter (Metasploitプロジェクト) Syscallプロキシ 化 (CORE Impact) 防 御 型 ワークの 例 : PTFinder (Andreas Schuster) MemParser (Chris Betz) Windows Memory Forensics Toolkit (Mariusz Burdach) PMODump (TRUMANプロジェクト) FATkit (4tphi) Volatools (Komoku) Volatility (Volatile Systems) Oracleメモリ 分 析 (Black Hat 2007) Etc.
使 用 事 例 ハイバネーションを 通 じた 法 医 学 依 然 としてメモリ 収 集 が 課 題 ハードウェア 技 術 が 絶 対 的 な 前 提 条 件 専 用 のPCIハードウェア IEEE 1394バス ソフトウェア 技 術 はWindowsのバージョンに 依 存 dd \Device\PhysicalMemory ZwSystemDebugControl ドライバのロード 現 場 で 最 も 一 般 的 な 技 術 はBSoD + 完 全 なメモリダ ンプ
使 用 事 例 ハイバネーションを 通 じて 法 医 学 長 所 : ハードウェアの 前 提 条 件 がない 首 尾 一 貫 したシステム 状 態 アトミックなハイバネーション + ページファイル 獲 得 マシンの 動 作 をシームレスに 再 開 できる リブートなしでハイバネーションを 起 動 できる ハイバネーションファイルを dd 形 式 の メモリダンプに 変 換 できる プロセッサコンテキスト(CR3レジスタを 含 む)の 利 用 が 可 能 短 所 : 物 理 メモリが100% 保 存 される 保 証 がない
使 用 事 例 ハイバネーションファイルによる 法 医 学 ハイバネーションファイルは 消 去 されない 最 初 のページは0で 埋 められる» 完 全 なメモリ 再 構 築 は 避 けられない 機 密 データ(パスワードと 鍵 )を 保 持 できる ハイバネーションファイル 内 にスラックスペースが 存 在 する ハイバネーションファイルは 事 前 に 物 理 メモリサイズに 割 り 当 てられる 効 果 的 な 使 用 は 物 理 メモリの 使 い 方 による Xpressブロックは xpress ヘッダーを 指 定 して 抽 出 できる
結 論 ハイバネーションファイルは 実 際 には 簡 単 な 作 業 にすぎない Windows 2000 以 降 に 導 入 実 際 には 理 解 しやすい 利 用 ( 悪 用 )の 可 能 性 がある 最 高 のLiveKD Rootkit 検 出 生 きた 記 憶 の 法 医 学 ショーをお 楽 しみください
( 抜 粋 ) 参 考 文 献 Windows 起 動 方 法 (パート2) http://blogs.msdn.com/ntdebugging/archive/2007/06/28/how-windows-starts-up-part-thesecond.aspx Nirsoft: Vistaカーネル 構 造 http://www.nirsoft.net/kernel_struct/vista/ プロセス スレッド 仮 想 メモリ http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/data/07-processesthreadsvm.ppt Intel - Volume 3 システムプログラミングガイド 第 3 章 保 護 モードメモリ 管 理 Microsoft Vista SP1の 概 要 http://download.microsoft.com/download/9/0/d/90da9663-815a-4ce8-88c0-2b9f54c69efe/windows%20vista%20service%20pack%201%20beta%20overview.pdf