Windows PEファイル感染及び発見的手法による検知 Nicolas BRULEZ / Digital River PACSEC '04
はじめに
コンピュータ ウイルスの進化 非暗号化 暗号化 少形( Oligomorphic ) 多様型( Polymorphic ) 変形型( Metamorphic )
PE ファイル形式 MZ ヘッダ PE ヘッダ PE ファイル ヘッダ PE オプショナル ヘッダ データ ディレクトリ セクション ヘッダ
位置独立コード ウイルスはどのメモリアドレスでも実行可能であること が要求される デルタ オフセットの計算
Windows PE ファイル 感染テクニック
ウイルスの位置 最後のセクション: - 新しいセクション BEFORE : AFTER :
ウイルスの位置 最後のセクション: - 新しいセクション
ウイルスの位置 最後のセクション: - 最後のセクションの拡張 BEFORE : AFTER :
ウイルスの位置 最後のセクション: - 最後のセクションの拡張
ウイルスの位置 ヘッダ感染
ウイルスの位置 キャビティ BEFORE : AFTER :
実行開始位置 最後のセクション内
実行開始位置 最初のセクション内
実行開始位置 最初のセクションの前
e_lfanew 感染 e_lfanewはPEヘッダ オフセットのポインタである MZヘッダ内のMZ+3Chにある ウイルスはファイルの末尾にコピーされるが、独立した位置コー ドは不要である
e_lfanew 感染 プログラムが改変されることにより、そのe_lfanewはウイルスの PEヘッダにポイントする そのためWindowsは感染したファイルではなく、ウイルスをロー ドする そしてウイルスは感染したプログラムの一時的なコピーを作成 し、 PEヘッダへの元のポインタを修正する 最後にウイルスは例えばCreateProcessAを用いて一時ファイル を実行し、終了後、一時ファイルを削除する
Windows PEファイルにおける発見的手法による検知
PE ファイルの構造解析 発見的手法による検知は主にWindows実行可能プログラムの PEファイルの構造解析に基づく エントリポイント セクションの特性 (固有の特性をもつ)セクションの名前 PEヘッダ内で更新されない値 ファイル内のPEヘッダの位置 など
PE ファイルの構造解析 最後のセクション内のエントリポイント 最初のセクションの前のエントリポイント
PE ファイルの構造解析 セクションの特性 : セクション名およびその特性 - 最後のセクション « 実行可能 » - 最後のセクション « 実行可能 » - 最初のセクション « 書き込み可能 » セクション名およびその特性
PE ファイルの構造解析 «SizeOfImage» PEヘッダ内で正しくない ファイルの終わり近くのPEヘッダ « コードサイズ » 正しくない
コード解析 エントリ ポイントにおける非標準命令 デルタ オフセットの計算 疑わしいコードの出力先変更: - JUMP FAR - PUSH RET その他..
コード解析 PEファイルを探しているコード システムDLLのイメージベースを取得するためのPEB使用
コード解析 - "*.exe" コード セクション内の疑わしい文字列 - Win関数の名前: FindFirstFileA, MapViewOfFile など.. - レジストリ キー : Run / RunOnce など
エミュレーション JMP FAR PUSH / RET + コード・フローの出力先変更のための多様な方法 ディクリプタ エミュレーション( ループの識別)
対発見的テクニック
PE 構造 セクションの特性の非改変 追加された1つ以上のセクション (偽装リロケーション/インポー ト) 疑わしいものを避けるために上書きするコードセクションの部分 ウイルスを配置するコードセクションのパッキングは開放された 場所 EPO: エントリポイントの隠蔽
PEの構造 FF15/FF25 (IATスロットと呼ぶ) パッチ スタック フレーム パッチ 最新のチェックサム 既存のセクション名の変更(可能な場合) « コードサイズ » 固定
アンチ エミュレーション SEH – 構造化例外処理(Structured Exception Handling) コプロセッサ命令 MMX / SSE テクノロジ 隠し命令 アンチ仮想マシンコード 鍵をブルートフォースする暗号解読層 スレッド
アンチ ヒューリスティック(発見的) コード デルタ オフセットは異なる方法で計算される 疑わしい行為を隠すオブフスケーション(不明瞭化)の使用法 (PEファイルチェックなど) ウイルスローダに文字列はない: CRC / HASH
基本的な発見的エンジンについて
基本エンジン 標準バイナリ : notepad, regedit, calc, MS Pain, WordPad など…
基本エンジン
基本エンジン
基本エンジン
基本エンジン 感染したバイナリの解析 : 多様型、暗号化、標準、 EPO など
基本エンジン
基本エンジン
基本エンジン
基本エンジン
基本エンジン
基本エンジン
ベーシック・エンジンのプレゼンテーション
基本エンジン
基本エンジン 注: これは基本エンジンにも関わらず、 最新のWin32ウイルスジェ ネレータ(Win32 Virus Generator)(VCL32)で作成された 全てのウイルスを発見的に検知した
基本エンジン パックされたファイルの解析: PE protect、 PEShield など …
基本エンジン
基本エンジン
基本エンジン
ディスアセンブリの実演
実演 新種のウイルス及びパックされたPE によって感染した新種のワーム 実在のウイルスのディスアセンブリの実演 このウイルスはごく最近出現したものであり、本講演資料が作成された 時点で、このウィルスを検出したアンチウイルス ベンダはほとんど いない
結論
Nicolas BRULEZ / Digital River ご質問 Nicolas BRULEZ / Digital River PACSEC '04