Open the door!!! 本来、意図しないプログラムの実行 環境情報学部3年 ログイン名:t02645hn 氏名:中井 斉 1 目的・動機・目標 ■オーバーフローから任意のプログラムが実行され てしまう。これを防ぐ手段を見つけたい。 →・オーバーフローがどのようになされるのかを見る ・どのようにメモリが扱われているかを見る ・ どんな手段で“穴”を突いてくるのかという点から見ていけば、 その対応手段も見えてくる。 手始めにシェルの立ち上げをやってみる 2 実際のプログラム char shellcode[] = "\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00" "\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80" "\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff" "\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3"; void main() { int *ret; ret = (int *)&ret + 2; (*ret) = (int)shellcode; } 3 実行結果 4 手法 ■プログラムを実行する時、その内容はメモリ上に確保さ れる テキスト プログラムコード データ グローバル変数 BSS Mallocなどで動的に確保 ヒープ ローカル変数などを動的に確保 スタック 5 スタック ■ローカルな変数を順に保存していくと同時に関数を呼 び出した際の“復帰情報”が順に保存されている。 void b(){ char c[4]; c #$%&’ 復帰情報 j 2 i 1 gets(c); } void a(){ int i=1,j=2; b(); } 6 つまり ■復帰情報が書き換わっていたら? ⇒意図しない場所へ誘導されてしまう ⇒予定外の命令が実行されてしまう 7 今後の展望 ■ 今回のは目標への第一歩でしかない ・リモートから実行できる? ・他のプログラムだって実行できる? ●これらを踏まえた上で最終目標 “防衛手段の発見” へ近づく 8 おわり Thank you for your listening. 9
© Copyright 2024 ExpyDoc