540 likes | 682 Views
Windows PE ファイル感染及び発見的手法による検知. Nicolas BRULEZ / Digital River. PACSEC '04. はじめに. コンピュータ ウイルスの進化. 非暗号化 暗号化 少形( Oligomorphic ) 多様型( Polymorphic ) 変形型( Metamorphic ). PE ファイル形式. MZ ヘッダ PE ヘッダ PE ファイル ヘッダ PE オプショナル ヘッダ データ ディレクトリ セクション ヘッダ. 位置独立コード.
E N D
Windows PEファイル感染及び発見的手法による検知 Nicolas BRULEZ / Digital River PACSEC '04
コンピュータ ウイルスの進化 • 非暗号化 • 暗号化 • 少形( Oligomorphic ) • 多様型( Polymorphic ) • 変形型( Metamorphic )
PE ファイル形式 • MZ ヘッダ • PE ヘッダ • PE ファイル ヘッダ • PE オプショナル ヘッダ • データ ディレクトリ • セクション ヘッダ
位置独立コード • ウイルスはどのメモリアドレスでも実行可能であることが要求される • デルタ オフセットの計算
ウイルスの位置 • 最後のセクション: - 新しいセクション BEFORE :AFTER :
ウイルスの位置 • 最後のセクション: - 新しいセクション
ウイルスの位置 • 最後のセクション: - 最後のセクションの拡張 BEFORE :AFTER :
ウイルスの位置 • 最後のセクション: - 最後のセクションの拡張
ウイルスの位置 • ヘッダ感染
ウイルスの位置 • キャビティ BEFORE :AFTER :
実行開始位置 • 最後のセクション内
実行開始位置 • 最初のセクション内
実行開始位置 • 最初のセクションの前
e_lfanew 感染 • e_lfanewはPEヘッダ オフセットのポインタである • MZヘッダ内のMZ+3Chにある • e_lfanewの改変による感染は実に容易である • ウイルスはファイルの末尾にコピーされるが、独立した位置コードは不要である
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使用 • システムの重要データのハードコードされた値 (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 など…