2013年5月4日土曜日

Shellcode のお勉強 PART 1 CHAPTER 1 その1

The Shellcoder's Handbook を参考に Shellcode やバイナリ解析の勉強をしているので、実際にやってみた結果や理解のための忘備録として残します。The Shellcoder's Handbook を読もうとしている、読んでいる人の参考になればと思います。
あくまでも自分のメモ用なので正確な内容などは本を見てください。
この本で使用しているサンプルコードはここにあります。

PART 1 の CHAPTER 1 は「Before You Begin」となっており、本を読み進めるうえでの前提知識などについて書かれている。

使用する用語
  • Vulnerability(名詞):攻撃者がシステムを攻撃するのに使用するもの、セキュリティホールやセキュリティバグと言われたりする。
  • Exploit(動詞):Vulnerability(脆弱性)を利用して攻撃を行う行為。
  • Exploit(名詞):Vulnerabilityを利用したツールやコードのこと、Proof of Concept(POC)とも呼ぶ。
  • 0day(名詞):Exploit に利用されている脆弱性で未公開のもの。
  • Fuzzer(名詞):予期しない入力値を幅広いレンジで入力しシステムの検査を行うツールまたはアプリケーション、バグだしの検査に使われる。
メモリーについて
インテルの IA32 がどうやってメモリ管理をしているかを解説。セキュリティホールとして最もよくあるオーバーフローについて理解するためには必ず必要だから。
OSによって実行ファイルが呼び出されると3つのタイプのセグメントが作成される。
  • .text:読み込みのみ、プログラム命令。
  • .bss:書き込み可、グローバル変数用で初期化されていないデータ。
  • .data: 書き込み可、グローバル変数用で初期化されたデータ。
上記のセグメントを作成した後 stack と heap が初期化される。
  • stack:LIFOタイプのデータ構造で、ローカル変数を持つ、特に重要なポイントとしてスタックは grow down(下がっていく)ことであり stack に値が追加されると新しい値を示すアドレス位置はより低くなる。
  • heap:主に動的変数などを扱い、FIFOタイプのデータ構造、値が追加されると新しい値を示すアドレス位置はつみあがる。
↑アドレス下部
Shared libraries
.text
.bss
Heap (アドレス上位↓へ向かって伸びる)
Stack(アドレス下位↑へ向かって伸びる)
env pointer
Argc
↓アドレス上部

レジスターについて
レジスター(Registers) は電気回路に直接接続されている一種のメモリ。主に以下の4つのグループに分けられる。
  • General purpose:一般的な計算命令に使用、EAX/EBX/ECX が含まれデータやアドレス、オフセットアドレスなど多くの用途に使用される。その中でも ESP(extended stack pointer) は次に実行するスタックのアドレス位置を格納しており、アセンブリやバッファオーバーフローを理解するうえで重要なレジスター。
  • Segment:このレジスタグループのみ 16bit でsegment の追跡や 16bit アプリケーション用の後方互換として使用、CS/DS/SS が含まれる。
  • Control:CPU を制御するために使用、特に EIP(extended instruction pointer)は次に実行する機械命令のアドレスを格納しているため重要になる。
  • Other:EFLAGS(extended flags)というレジスターがあり、多数の CPU の結果を格納するシングルビットレジスターとして利用される。


0 件のコメント:

コメントを投稿