MBE のLecture 01についてメモ
-
Machine コンピュータ、サーバ、CPUを搭載したもの 以下"マシン"
-
Binary EXE, ELF, MachO等といったマシン上で実行可能なコードを含んだもの 他には"プログラム"、"アプリケーション"、"サービス"と言われることもある 以下"バイナリ"
-
Malware 悪意をもって作られたバイナリで"ルートキット"や"RAT(Remote Access Tool)"のことを指す 以下"マルウェア"
-
Vulnerability バグの中でも"Exploit"の実行を許してしまうもの 以下"脆弱性"
-
Exploit 脆弱性を利用しバイナリが意図していない動作を実行させるために細工されたデータ マルウェアと同義ではない 以下"エクスプロイト"
-
0day 全くの未知、または発見後もパッチの当てられていない脆弱性 以下"ゼロデイ"
-
Pwn/Pwning 脆弱性を調査したり、エクスプロイトを開発することを指す 以下も"Pwn"または"Pwning"と書く
「もし君のプログラムがただのセグフォで落ちたのなら幸運だと思うんだな」 - Prof. Stewart バイナリの中に脆弱性が見つかるとエクスプロイトによって実行コードを乗っ取られてしまう 乗っ取られると例えばこんなコードが実行される...
- 権限の情報を奪われる
- マルウェアのダウンロード、インストール
- 情報の窃取
- マシンの利用に支障をきたすような大混乱
- 多くのオープンソースのOSで利用されているUNIXライクなオープンソースカーネル
- C言語とアセンブリ言語で書かれている
- バイナリとして"ELF(Executable and Linkable Format)"を用いる
- MBEではUbuntu 14.04を対象に話を進めるが、身に付けるエクスプロイトのテクニックはLinuxで普遍的なものである
OverTheWireというサイトで練習できる
重要なレジスタは下記の通り
- EAX EBX ECX EDX 汎用レジスタ
- ESP スタックの頂点を指すレジスタ
- EBP スタックフレームで一番下のアドレスを指すレジスタ
- EIP 次にCPUが実行するコードを指すレジスタ
- EFLAGS フラッグの値を保持するレジスタ
- ZF - "Zero Flag"の略で演算結果がゼロだとセットされるフラグ
- CF - "Carry Flag"の略で演算結果が桁上り/桁下がりするとセットされるフラグ
- SF - "Sign Flag"の略で演算結果が負となった時にセットされるフラグ