リバースエンジニアリング
はじめに
下記の本を買ったので、覚書程度に内容をまとめる。
- リバースエンジニアリング(Pythonによるバイナリ解析技法)
メモ
- 初版2刷を購入
- 全12章と付録Aで構成
- Python2.5
1章 開発環境のセットアップ
- PythonのInstall (Windows & Linux)
- Eclipse + Pythonの実行環境構成
- EcplseのPyDevプラグインを利用
- ctypesの利用例(Pythonのライブラリ)
2章 デバッガの基本原理
- Debuggerの種類
- 権限
- User Mode (ring 3)
- 2章ではx86 PlatformのUser Modeで動くアプリケーションについて記述
- Kernel Mode (ring 0)
- ring 0 とか ring3 とかはリングプロテクション - Wikipediaを参照
- User Mode (ring 3)
- 汎用レジスタ
- 下記の8個が主なもの
- EAX (アキュムレータ)
- 計算処理、関数の戻り値の格納 => 関数呼び出しの成否が判断できる
- EDX (データレジスタ)
- EAXの拡張
- 複雑な処理向け(乗算、除算など)
- ECX (カウントレジスタ)
- ループ処理用
- 下方向のカウント(カウントダウン)
- ESI (Source Index)
- ループ処理に利用
- 入力データストリームの位置を格納
- EDI ( Destination Index)
- ループ処理に利用
- データ処理の結果を格納する位置を指すポインタ
- ESP (Stack Pointer)
- Stackの先頭位置
- EBP (Base Pointer)
- Stackのベース(基底), 要は開始位置
- EBX
- 色々使える
- EAX (アキュムレータ)
- 下記の8個が主なもの
- スタックについて
- デバッグイベント
- ブレークポイント
- Software Break Point
- 一般的な奴
- 命令とオペコード
- Hardware Break Point
- Debug Register(DR), DR0, DR1,...,DR7
- Memory Break Point
- Linuxのファイル権限の奴(chmodで変更するアレ)
- Software Break Point
3章 Windows Debuggerの構築
- (*手持ちのWindows環境を立ち上げるのが面倒なので、軽く流す)
- 実際に動くデバッガを構築していく
- プロセスに対してデバッグを行う場合、プロセスとデバッガを関連付ける必要がある。
- 下記の2通りのどちらかで行う事になる
- デバッガで、実行ファイルを開いて実行する
- 実行中のプロセスにデバッガをアタッチする
- 下記の2通りのどちらかで行う事になる
- 以降のページで、上記の1,2の場合に於ける実装をしている(略)
4章 PyDbg
- PyDbgを利用して、3章で作成したプログラムを拡張 & ユーティリティの作成
- 3章で作成したブレークポイントハンドラの拡張
- アクセス違反ハンドラの作成
- アクセス違反の原因
- アクセス権限の無いメモリ領域にアクセス
- プロセスに許可されていない方法でメモリ領域にアクセス
- 例
- バッファのオーバーフロー
- Null Pointerの不正利用
- アクセス違反の原因
- プロセススナップショット
- プロセスのとある時点での全メモリ内容を取得
5章 Immunity Debugger
- この章はImmunity Debuggerの利用方法について見ていく
- Immunity DebuggerにはGUIがついている
- Immunity Debuggerにはライブラリもついている
- Immunity Debuggerのインストール(@Windows)
- PyCommand
- Immunity DebuggerでPythonを利用する場合は、この機能を利用する
- PyHook
- 各種イベントの検出時に実行される13種類のフックがある
- 各種サンプル
6章 フック
- (フック)http://ja.wikipedia.org/wiki/フック_(プログラミング)
- サンプル
- ソフトフック
- PyDbgで実装
- ハードフック
- Immunity Debuggerで実装
- ソフトフック
7章 DLLインジェクションとコードインジェクション
- リモートスレッド生成
- Win APIではCreateRemoveThread()で実現
- インジェクション
- (DLLインジェクション)http://ja.wikipedia.org/wiki/DLLインジェクション
- DLLを対象のプログラムに埋め込んで、開発者の意図とは違う動作をさせる事
- (コードインジェクション)http://en.wikipedia.org/wiki/Code_injection
- SQLインジェクションとか、XMLインジェクションとか...
- (DLLインジェクション)http://ja.wikipedia.org/wiki/DLLインジェクション
- 各インジェクションのサンプル作成
- (バックドア)http://e-words.jp/w/バックドア.htmlプログラムの作成
8章 ファジング
- Fuzz
- (例外が発生する様な)予測不可能なデータ
- Fuzzing
- Fuzzを(アプリケーションに)入力する事
- Fuzzing Test
- Fuzzデータを入力して脆弱性をチェックする
- Fuzzer
- Fuzz Tool / Fuzzer
- Fuzzを与える為の自動化(半自動化)されたツール
- 2種類のFuzzer
- 生成ファザー
- 新規にデータを生成
- 変更ファザー
- 既存のデータに変更を加える事でデータを生成
- 生成ファザー
- Fuzz Tool / Fuzzer
- バグの原因となる現象
- バッファオーバーフロー
- スタックベース
- ヒープベース
- 整数オーバーフロー
- 書式指定文字列攻撃
- バッファオーバーフロー
- ファイルファザー
9章 Sulley
- Sulley
- PythonベースのFuzzing Framework
- Install
- プリミティブ
- Sulleyの基本データ要素の事、下記の様な種類がある
- 自動的にFuzzデータを生成してくれたり、生成するに当たっての細かい条件指定をする
- 文字列
- デリミタ
- 文字列を細かく分割してFuzzを生成する
- 静的データ
- 変化させない部分
- ランダムデータ
- バイナリデータ
- 数値
- ブロック
- グループ
- Sulleyの基本データ要素の事、下記の様な種類がある
- SulleyでWarFTPDを破壊する
10章 Windowsドライバのファジング
- ドライバとの通信
- IOCTL(input/output control)を用いてドライバに情報を渡す
- ドライバのハンドル取得
- CreateFileW()
- デバイス(ドライバ固有)にIOCTLを送る
- DeviceIoControl()
- ドライバファジング
- ドライバに適用される前にDeviceIoControlの呼び出しを補足する
- Immunity Debuggerのフック機能を用いる
- ドライバに適用される前にDeviceIoControlの呼び出しを補足する
- ドライバ中の情報を取得する
- driverlibライブラリ(@Immunity Debugger)を利用する(.py)
- デバイス名を検出する
- IOCTLディスパッチルーチンを見つける
- 各種IOCTLを処理するルーチンの事
- DriverEntryルーチン
- ドライバのロード後、最初にロードされる
- これよりIOCTLディスパッチルーチンの場所を取得
- IOCTLコードを調べる
- IOCTLディスパッチルーチン
- IOCTLのコードに基づいてアクションが決定される
- IOCTLディスパッチルーチン
- driverlibライブラリ(@Immunity Debugger)を利用する(.py)
- ドライバファザーの作成
11章 IDAPython
- (IDAPro)https://www.hex-rays.com/products/ida/index.shtml
- (IDAPython)https://code.google.com/p/idapython/
- IDAProのOpenSource化
- IDAPythonの使い方、サンプルについて書いてある
12章 PyEmu
- (PyEmu)https://code.google.com/p/pyemu/
- PyEmuの説明、使い方、サンプルについて書いてある
所感
- プログラムがWindows用であったため、ほとんど試せていない
- Fuzzとか何かその辺の雰囲気が分かった気がする
- レジスタとかそこら辺の復習が出来たのでよかったかな
- この分野に関しては、今のところ、これ以上深く掘り下げるつもりはないので、十分には理解出来ていないがまぁいいか
履歴
Date | History |
---|---|
2015/04/26 | 1章追加 |
2015/04/28 | 2章追加 |
2015/04/29 | 3,4章追加 |
2015/05/01 | 5章追加 |
2015/05/02 | 6,7章追加 |
2015/05/03 | 8,9,10,11,12章,所感追加 |