90 likes | 199 Views
バッファオーバーフローアタックの実際と対策 ~ Firewall を通り越える攻撃ツール実演デモ~. Nissho Techno System Corporation 徳植 寛 toku@nissho-ele.co.jp. コンピュータウィルス. マクロウィルス ワーム トロイの木馬. 実行しなければただのデータ! 悪さをするプログラムをどうやってターゲットの コンピュータに実行させるかが肝. プログラムのメモリ配置. 0 x00000000. char gbuf1[] = {0x0, 0x1}; char gbuf2[2];
E N D
バッファオーバーフローアタックの実際と対策~Firewallを通り越える攻撃ツール実演デモ~バッファオーバーフローアタックの実際と対策~Firewallを通り越える攻撃ツール実演デモ~ Nissho Techno System Corporation 徳植 寛 toku@nissho-ele.co.jp
コンピュータウィルス • マクロウィルス • ワーム • トロイの木馬 実行しなければただのデータ! 悪さをするプログラムをどうやってターゲットのコンピュータに実行させるかが肝
プログラムのメモリ配置 0x00000000 char gbuf1[] = {0x0, 0x1}; char gbuf2[2]; void func(int a, int b, int c) { char lbuf1[] = {0x2, 0x3}; char lbuf2[10]; lbuf1[0] = 'a'; lbuf2[0] = 'b'; } void main() { func(1, 2, 3); } テキスト領域 マシンコード、読取専用 データ領域 初期化済みデータ領域 BSS領域 未初期化のデータ領域 heap領域 malloc等で確保する領域 スタック領域 auto変数、関数の引数、retアドレス等 0xffffffff
スタックの中身 ←esp func(1, 2, 3); ↓ main: push $0x3 push $0x2 push $0x1 call 0x8048398 <func> func: push %ebp mov %esp,%ebp subl $0x18,%esp ~~~ leave ret 0xbffffd04 lbuf2 0xbffffd10 lbuf1 ←ebp 0xbffffd14 sfp (0xbffffd28) 0xbffffd18 ret (0x080483c6) 0xbffffd1c 1 0xbffffd20 2 0xbffffd24 3 0xbffffd28 main()のStack Frame
スタック破壊サンプル • リターンアドレスをauto変数の所に書き換えられたら? • auto変数に/bin/shを実行するマシンコードがコピーされてたら? • super user権限で実行するプログラムだったら? • でも、telnet出来ないマシンにそんな事出来るの!?
クラッキング実演 • クラックするにはアセンブラの知識も必要だけど • ウィルスといっしょで誰でもクラック出来るツールが出回るし • FireWallが有っても防げないなんてどうすれば良いの?
バッファオーバーフロー対策 • パッチの適用当てたら当てたで色々有るけど • 不要なサービスの禁止メモリの節約にもなるし • Firewallの設置入ってくるのだけじゃなく出るのもね • IDSの導入取り敢えずsnortとか
参考 • クラシック: 趣味と実益のスタック破壊http://linux.ascii24.com/linux/linuxcom/2000/06/13/465216-000.html • アセンブラ入門講座http://paran0ia.virtualave.net/documents/asm.html • gdb-4.18日本語texinfo from gnujdochttp://www.swlab.csce.kyushu-u.ac.jp/man/gdb-4.18/gdb-ja_toc.html • Snortの導入http://jem.serveftp.com/
最後に クラッキングはいけないと思います!By まほろ