2004 Fall. Term Report Immune Project

Slides:



Advertisements
Similar presentations
Windows PEファイル感染及び発見的手法による検知 Nicolas BRULEZ / Digital River
Advertisements

計算機システムⅡ 主記憶装置とALU,レジスタの制御
数値計算及び実習 第3回 プログラミングの基礎(1).
情報工学基礎(改訂版) 岡崎裕之.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
テープ(メモリ)と状態で何をするか決める
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第2週目
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
ソフトウェアを美味しく 解析する方法 Security Ark
計算機システムⅡ 命令セットアーキテクチャ
計算機システム ハードウェア編(第3回) ~ ノイマン型コンピュータ ~.
演算回路 <例題> 問題:1+2=3を計算する アドレス 内容 データ プログラム 10 11 12 ・ 19 1 2 (答え) 20 21
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
プログラミング論 II 電卓,逆ポーランド記法電卓
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
変数のスコープの設計判断能力 を育成するプログラミング教育
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
プログラムはなぜ動くのか.
2016年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
プログラム実行時情報を用いたトランザクションファンクション抽出手法
型付きアセンブリ言語を用いた安全なカーネル拡張
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
セキュリティ(3) 05A2013 大川内 斉.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング言語入門.
実行時情報に基づく OSカーネルのコンフィグ最小化
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
情報検索(6) メディア検索の仕組み 教員 岩村 雅一
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
A Provably Sound TAL for Back-end Optimization について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
第4回 ファイル入出力方法.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
2010年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
コーディングパターンの あいまい検索の提案と実装
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
コンピュータアーキテクチャ 第 9 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 4 回.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
計算機アーキテクチャ1 (計算機構成論(再)) 第一回 計算機の歴史、基本構成、動作原理
プログラムが実行されるまで 2002年4月14日 海谷 治彦.
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
2017年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
構造的類似性を持つ半構造化文書における頻度分析
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 5 回.
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
アルゴリズムとデータ構造1 2009年6月15日
コンピュータアーキテクチャ 第 4 回.
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
コンピュータアーキテクチャ 第 3 回.
コンピュータアーキテクチャ 第 5 回.
言語プロセッサ 第12日目 平成20年1月9日.
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
情報処理Ⅱ 2007年12月3日(月) その1.
アルゴリズムとデータ構造 2010年6月17日
2014年度 プログラミングⅠ ~ 内部構造と動作の仕組み(1) ~.
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
2008年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラミング演習II 2003年12月10日(第7回) 木村巌.
C#プログラミング実習 第1回.
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
Presentation transcript:

2004 Fall. Term Report Immune Project Project Menber D1 Kensuke Naoe <naoe@sfc.keio.ac.jp> B4 Hidekazu Tanaka <t01577ht@sfc.keio.ac.jp> B3 Hitoshi Nakai <t02645hn@sfc.keio.ac.jp> Takayouki Hotta <t02798th@sfc.keio.ac.jp> B2 Kjiro Shimoe <s03535ks@sfc.keio.ac.jp>

目次 Immune Projectの目的(堀田) アセンブラの基礎(下江) アセンブラでのウイルス解析(堀田) ウイルス検出方法の調査(中井) 論文発表(田中) 展望(田中) 謝辞(中井) 質疑応答(全員)

Immune Projectの目的 ウイルスの巧妙化 従来の検出手法 新しい手法の提案 ステルス型 ポリモフィック型 メタモフィック型 パターンマッチング ヒューリスティック手法 新しい手法の提案 アセンブラレベルでの解析 パターン学習による解析 ■感染を隠匿するウィルス かつてあった感染を隠匿するウィルスの形態としてステルス型があった。 これはチェックサムによるウィルス検出を免れるタイプです。 チェックサム方式は感染前と後ではファイルのサイズが異なる事を利用して検出するために、 それを逆手にとって感染前と後のサイズを合わせるウィルスです。 これはかなり前の時点でメーカー各社が対応しました。 ポリモフィック型 従来と異なる点  ・ウィルスのコードを暗号化  ・暗号化鍵は感染の度に変化  ・プログラムコードの一部に暗号化/復号化のエンジンを持つ  ・(暗号を複合せずに検出は方法を選ばなければ(選んでも)難しい。) 特徴  感染するたびにウィルスが自分自身の実行コードを書き換える  計算手順やウィルス本体の位置をランダムに変えるなど、様々な手法で隠匿を試みる。   → パターンマッチングによる検出はまず不可能 単純にファイル中のコードを見て、 ウィルスの特徴的なコード列がプログラム中に存在するかで判断する。 文字列だけではなく、パターンの発生順序、互いの距離にも注目している。 ただし、これらは対象となるウィルスのパターン定義ファイルの所持が前提。 また、ファイル全体にマッチングをかける為に非常に時間がかかる。 先に挙げた特徴から、ポリモフィック・メタモフィックウィルスの検出は難しい。 そこで、私たちは検出率を上げる手法を確立しようと研究しています。 その中でアセンブラレベルでの解析・パターン学習による解析問い手法を提案したいと重い、実装に向けて励んでいます。

アセンブラの基礎 アセンブラ言語とは? アセンブリ言語の表し方 マシン語命令群その1 その2 その3

アセンブラとは? アセンブリ言語はプログラミング言語の一種 アセンブリ言語が他の言語と違う点 キーワード コンピューターが唯一理解できるのはマシン語だが、そのマシン語を人間に理解できるようにしたものがプログラミング言語。 アセンブリ言語が他の言語と違う点 javaやc言語など他の言語はマシン語と一対一に対応していないが、アセンブリ言語はマシン語と一対一に対応している。 キーワード ニーモニック オペコード オペランド

アセンブリ言語の表し方 ニーモニック オペコード(主命令) オペランド(対象となる相手、条件、パラメータ) マシン語には一つ一つ記号が割り振られていて、その記号のことをニーモニックと呼ぶ。ex) mov al 02h ニーモニックはオペコードとオペランドと呼ばれる二つの部分に分けることができる。 オペコード(主命令) データ転送やジャンプなどの命令を下す部分。 上記の例ではmov がそれにあたる。 オペランド(対象となる相手、条件、パラメータ) レジスタやアドレスなど命令の対象となる部分。上記の例ではal 02hがそれにあたり、このオペランドによって対応するマシン語が変わる。

マシン語命令その1 データ転送命令 算術演算命令 レジスタとメモリとの間でデータをやりとりのための命令 例 mov EAX 7E9675A1h (EAXレジスタに7E9675A1hをロード) レジスタ→メモリのやりとりを「ストア」、メモリ→レジスタのやりとりを「ロード」という。 算術演算命令 四則演算や比較などをするための命令。結果がレジスタやメモリに転送される。さらに結果の状態(0や正負など)がフラグレジスタにセットされる。 例) add ax 0020h axの内容に0020hを加える inc ax axの値をインクリメントする cmp eax 0030h eaxの内容と0030hを比較して 結果をフラグレジスタにセット

マシン語命令その2 ジャンプ命令 無条件ジャンプ 条件付きジャンプ プログラムの流れを変えるための命令。 ジャンプ無条件と条件付きジャンプの2種類ある。 無条件ジャンプ jmp アドレス指定 の形で表される。 実行されるとオフセットアドレスが特定のレジスタにロードされ、ジャンプされる。 条件付きジャンプ フラグレジスタの値を判定し、その結果によってジャンプの有無を決める。 je アドレス指定 : ゼロフラグの値が1ならば指定した アドレスにジャンプ cmp AX 005ah ja アドレス指定: 結果が大きければ指定したアドレスに ジャンプ

その他のマシン語命令 サブルーチンのコール・リターン スタックのプッシュ・ポップ 論理演算命令 シフト・ローテート命令 call サブルーチン名 スタックのプッシュ・ポップ push eax() 論理演算命令 or al 20h(alレジスタの内容とデータ20hのorをとる) シフト・ローテート命令 shl bl 1(blの内容を左に1つシフトする)

アセンブラでのウイルス解析 Weflow.asm 1993年のVirus TRIDENT OVERWRITING VIRUSがBaseになっている OverWriting 1992年のVirus ウイルスと感染するファイルが実行されるたびに、このウイルスはホストファイルの最初64バイトをOver Writeすることによってワーキング・ディレクトリの.comファイルすべてを感染させる  その流れの中で、私たちは今期実際のウイルスをアセンブラ言語で読んでみて、それがどのような動作をしているのかを解析してみました。 ここでは、そのうちのひとつをピックアップして紹介します。また、他に行ったものはレポートに添付資料として添付します。  解析したウイルスはweflowというウイルス

Weflow.asm (code) MAIN: MOV AH,4EH NOTSOCOOL: LEA DX,FF INT 21H JNC COOL RET COOL: MOV AX,3D02H MOV DX,9EH XCHG AX,BX MOV CL,VLEN MOV AH,40H MOV AH,3EH MOV AH,4FH JMP NOTSOCOOL FF DB '*.*',0 DB 'WEFLOW93' VLEN EQU $-MAIN

Weflow.asm (解説:MAIN) MOV AH,4EH ahレジスタに4ehの指す内容を転送 具体的にはahレジスタに対して初回ファイル検索を行う ちなみに、この結果はCF(Cflag)の返り値を与える CF = 0:成功 CF = 1:エラー

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ならばプログラムは終了する 同じフォルダの中のファイルを探し出してOPENするルーチン。 すなわちこの状況で必ずひとつはそのフォルダ中にファイルが存在する。

Weflow.asm (解説:COOL.1) MOV AX,3D02H MOV DX,9EH INT 21H XCHG AX,BX AXレジスタを書き出し・読み込み双方対応できるようオープンする。 DXレジスタに9eが指す内容を転送 XCHG AX,BX MOV CL,VLEN MOV AH,40H AXレジスタとBXレジスタの内容を入れ替える CLにVLENの値を入れる(VLENは下で定義している) ahレジスタに書き込む 画面及びファイルに細工を加えた後、次のファイルを検索するために NOTSOCOOLに戻るルーチン HOTSOCOOLからRETされた場合は終了する ここでMOV 3Dについて述べておこう MOV 3Dではファイルをオープンするという意味合いがある その後ろについている02hというのは、"AL = 2"という意味合い 参考として、ALは0で読み込み、1で書き込み、2で読み書きという意味を表している また、その後にあるDXというのはどのファイルを検索するのかを記録しておく 文字列ポインタを格納するレジスタであるので、レジスタの9eにある文字列のファイルを AXレジスタから検索してオープンするということである ここでもしファイルが無かったら、ここでもまたCFに1を返すのである ここでわかるように、CFは成功か失敗かを示すレジスタといえる MOV 40Hはいわゆる、書き込みを行う命令である 書き込む対象はFikeかDeviceである この詳しい指定をするには BX : これはHandleであり、これで何に書き込むのかを規定する これが特に規定されていない場合はDOS 2.Xでは1となり 標準的には画面に出力される しかし、ここでは、BXをAXという風に規定しているので AXに書き込むと考えるのが正しい見方だろう CX : これはbyte Countつまり、何バイト書き込むかを規定する DX : bufferにある情報を文字列として書き込むのが普通なのだが DXレジスタ、つまりバッファに値を入れなおすことも可能である なお、先ほどとDXの定義が違っているのだが、これは各命令が DX(DS)をどのように見ているかが違うからである

Weflow.asm (解説:COOL.2) MOV AH,3EH INT 21H MOV AH,4FH JMP NOTSOCOOL 次回ファイル検索を行う JMP NOTSOCOOL 無条件でNOTSOCOOL(最初に規定した文字列ポインタ)の先に飛ぶ

Weflow.asm (解説:FF・VLEN) DB '*.*',0 DB 'WEFLOW93‘ 文字列をセットする EQU $-MAIN VLENにMAINの大きさを入れるもの なお、EQUを用いVLENを規定したため、この後VLENを開放することなしに、VLENを変更することはかなわない

Weflow.asm (code) MAIN: MOV AH,4EH NOTSOCOOL: LEA DX,FF INT 21H JNC COOL RET COOL: MOV AX,3D02H MOV DX,9EH XCHG AX,BX MOV CL,VLEN MOV AH,40H MOV AH,3EH MOV AH,4FH JMP NOTSOCOOL FF DB '*.*',0 DB 'WEFLOW93' VLEN EQU $-MAIN

ウイルスの巧妙化 ウイルスの巧妙化 ステルス型 ポリモフィック型 メタモフィック型 プログラムコードを暗号化 暗号化鍵は感染の都度に変化 暗号化/複合化エンジン メタモフィック型 感染するたびに自分自身のコードを書き換える 様々な手法での隠匿の試み ■感染を隠匿するウィルス かつてあった感染を隠匿するウィルスの形態としてステルス型があった。 これはチェックサムによるウィルス検出を免れるタイプです。 チェックサム方式は感染前と後ではファイルのサイズが異なる事を利用して検出するために、 それを逆手にとって感染前と後のサイズを合わせるウィルスです。 これはかなり前の時点でメーカー各社が対応しました。 ポリモフィック型 従来と異なる点  ・ウィルスのコードを暗号化  ・暗号化鍵は感染の度に変化  ・プログラムコードの一部に暗号化/復号化のエンジンを持つ  ・(暗号を複合せずに検出は方法を選ばなければ(選んでも)難しい。) 特徴  感染するたびにウィルスが自分自身の実行コードを書き換える  計算手順やウィルス本体の位置をランダムに変えるなど、様々な手法で隠匿を試みる。   → パターンマッチングによる検出はまず不可能

従来のウィルスの検出 従来のウイルスの検出 パターンマッチング ヒューリスティック手法 文字列 パターンの発生順序 特定のパターン同士の距離 ⇒対象となるウイルスのパターン定義ファイルの所持が前提 また、時間がかかる。 ヒューリスティック手法 問題をすばやく解決するための手法 大まかな予想からあたりをつけて検索する手法 動的ヒューリスティックと静的ヒューリスティックがある 単純にファイル中のコードを見て、 ウィルスの特徴的なコード列がプログラム中に存在するかで判断する。 文字列だけではなく、パターンの発生順序、互いの距離にも注目している。 ただし、これらは対象となるウィルスのパターン定義ファイルの所持が前提。 また、ファイル全体にマッチングをかける為に非常に時間がかかる。 先に挙げた特徴から、ポリモフィック・メタモフィックウィルスの検出は難しい。

ヒューリスティック手法 静的ヒューリスティック 動的ヒューリスティック パターンのデータベース ウィルスの複合化のルーチンを認識 仮想空間上でプログラムを動かす 静的ヒューリスティックは、、、 ウィルスを実行する前にファイルの状態で検知しようとする。 動的ヒューリスティックは、、、 仮想的な空間上でそれがウィルスかどうかを検知しようとする。 ⇒ポリモフィック、メタモフィックにも効果が得られる。

ヒューリスティック手法 さて、静的・動的いずれにおいても、 この様にファイルの中に、、、 ウィルスがありそうな場所を大まかな見当をつけます。 実行ファイル全体の構造、ロジック、命令セットファイル内のデータといった全ての属性を調べ、、、そのファイルがウィルスに感染している可能性を査定する。

ヒューリスティック手法の問題点 問題をすばやく解決するための手法 ⇒完璧ではない ⇒検索部位とウイルスの存在する部位が違えば ウイルスが発見できない ⇒完璧ではない  (問題をすばやく解決するための手法) ⇒最も適した解でなくとも、大まかな予測から効率的な解決を得る手法 なお、ヒューリスティック手法には静的手法と動的手法があります。

アセンブラレベルでの解析 ウィルスのコードを静的に逆アセンブル →従来のヒューリスティックパターンに、さらに細かいパターンを定義することができる 例えばメタモーフィックコードに良くみられるようなジャンプ命令群、 ジャンクコードの羅列などが発見された場合、メタモフィックウィルスだと 判断される。自分自身を書き換えるルーチンは必ず存在するため、 このルーチンを発見することでウィルスの判断材料とする。 さらにビヘイビア法を用いることで高い確率で検出

動的ヒューリスティック 静的ヒューリスティック Unknown Virus ヒューリスティックスキャンのためのルール群データベース mov dword_3,6E72654Bh mov dword_4,32336C65h mov dword_5,0h push offset dword_3 call ds:[GetModuleHandleA] 静的ヒューリスティック 動的ヒューリスティック アセンブラ命令パターン アルゴリズムのパターン 挙動のパターン ヒューリスティックスキャンのためのルール群データベース 様々な角度から挙動や命令群、アルゴリズムなどを比較 Unknown Virus

パターン学習による検出 ニューラルネットワークを用いたパターン検出 学習結果に基づく分類判定 →さらに高い確率で未知ウィルスであると特定することができる アセンブリ言語による解析の後、初めて学習を行う 既知ウィルスから、その挙動パターンやアルゴリズムパターンなど様々なファクターから パターンを学習する必要性が要求される

動的ヒューリスティック 静的ヒューリスティック mov dword_3,6E72654Bh mov dword_4,32336C65h mov dword_5,0h push offset dword_3 call ds:[GetModuleHandleA] 静的ヒューリスティック 動的ヒューリスティック アセンブラ命令パターン アルゴリズムのパターン 挙動のパターン ヒューリスティックスキャンのためのルール群データベース 新しい挙動パターンやアルゴリズム、命令の順序などがあればデータベースにパターンを学習させる Unknown Virus

まとめ アセンブリ言語に逆アセンブルしたコードからパターン抽出し、学習 →検出率の向上と誤検出・誤警報の減少

今後の展望 情報処理学会全国大会発表に向けて実装