たのしいバイナリの歩き方、読みました

とても読みやすく、わかり易かったです。

たのしいバイナリの歩き方 amazon

簡単ではあるけど、Metasploitの使い方も載っているのは珍しいと思います。
(オライリーの実践Metasploitとハッカージャパン以外で、僕は初めて読みました。)

簡単なC言語の構文をアセンブラにして、読み解くところから始まり、
シューティングゲームのチート、バッファオーバーフローの解説、簡易デバッガ自作、
エクスプロイトコード作成やマルウェア解析のためのツール紹介、
最後に各種ソフトウェアのインストール方法と続いています。

僕個人が書き残しておきたい部分だけをピックアップしてまとめておきます。

0. 僕が開発ではあんまり見ないけど、便利だなーと思ったソースコード

  • [c++] execve()によるshell起動
  • [c++] asm()によるインラインアセンブラ
  • [c++] fprintf()で汎用的な出力(標準出力に限定しない)
  • [python] python -c “python code”でワンライナー

1. ASLR(Address Space Layout Randomization)のon/off

ASLRとは

メモリー領域に格納するデータのアドレスをランダム化すること。
セキュリティ技術の一つで、Linuxをはじめ、Windows Vistaでも採用されている。
主にバッファ・オーバーフロー攻撃の対策として利用される。

  1. [Ubuntu] $ sudo echo 0 > /proc/sys/kernel/randomize_va_space
  2. [CentOS] # echo 0 > /proc/sys/kernel/randomize_va_space

補足 Exec-Shildのon/off

Exec-Shieldとは

特定のメモリー領域から命令を実行できないようにするLinuxの機能。
不正侵入を行う手段の1つである、バッファ・オーバーフロ-攻撃に対して有効な防御機能である。

  1. [Ubuntu] $ sudo echo 0 > /proc/sys/kernel/exec-shield
  2. [CentOS] # echo 0 > /proc/sys/kernel/exec-shield

2. UPXによるパックとアンパック

詳細は別の記事にちゃんとまとめたいと思ってるので、ざっくりと。

UPX公式

UPX -wikipedia

UPX (ultimate packer for executables)は様々なOSのファイル形式に対応した
FLOSSの実行ファイル圧縮ソフトウェアである。

実行ファイルを実行可能なまま圧縮する美味しい技術。
Ultimate Packer for eXecutablesの略。

使い方

  1. UPXによる圧縮:upx.exe [ファイルパス]
  2. UPXに圧縮されたファイルの復元:upx.exe -d [ファイルパス]

※-dの『d』はdecompressの略なんですね。unpackなんだから-uのほうが
わかりやすいのになー、と勘違いしてた。

3. デバッガに利用されるAPIや構造体

ここに全部詳細を列挙すると結構な量になるので構造体と関数名だけでも

  • PROCESS_INFORMATION構造体
  • STARTUPINFO構造体
  • DEBUG_EVENT構造体
  • CreateProcess()関数:プロセスの新規作成
  • Resume_Thread()関数:スレッドを動作させる
  • WaitForDebugEvent()関数:デバッグ中のプロセスの監視

※他にもありますが、とりあえず基本的な骨組みに利用されているのはこちら

4. コードインジェクションとDLLインジェクション

どちらも他のプロセス内で任意のコードを実行させる手法

正直、読んでも現状『ふーん・・・すげぇ』程度で僕がちゃんと理解して
実践できるかと言えば全然です・・・。ここは色々勉強してから
もう一度読み直したいです。

  • SetWindowsHookEx()関数
  • CallNextHookEx()関数
  • UnhookWindowsHookEx()関数
  • CreateRemoteThread()関数:他プロセス内でスレッドを生成する(LoadLibraryをスレッドとして実行させて強制的にDLLをロードさせる)
  • AppInit_DLLsレジストリ:OS起動直後から任意のDLLを他のプロセスへロード可能になる

ここは後でちゃんともう一回やってまとめます。

5. APIフック

プロセス内で任意のコードを実行する手法であることはコードインジェクションと
同じだが、特にAPIに任意の独自処理を追加することを『APIフック』と呼ぶ

APIフックには2つのタイプがある

  1. 対象APIの先頭数バイトを書き換えるタイプ
  2. IAT(Import Address Table)を書き換えるタイプ

本書ではMicrosoftリサーチチームがリリースしている
Detoursというライブラリを用いたサンプルが紹介されています。


僕が読んで特に勉強になった箇所を覚書しておきました。
難しい手法を、わかりやすく解説してあり、非常に読みやすかったです。

補足リンク

windows 新しい型 msdn

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です