「セキュリティ・キャンプ中央大会2013」 ソフトウェア・セキュリティ・クラス 応募用紙 氏 名: (ふりがな): 性別: □男 □女 (該当する□を■にして下さい) 生年月日および現在の年齢: 西暦    年  月  日生まれ               現在(  )才 所 属(学校・学科・学年): 住 所:〒   -         電話番号(昼間に連絡できる電話番号): FAX番号(ある場合のみ): E-mailアドレス(必ず書いてください): Twitterアカウント(ある場合のみ): ホームページまたはブログのURL(ある場合のみ): ◎ セキュリティ・キャンプ中央大会2013の開催を、何で知りましたか?(該当する□を■にして下さい) □公式ホームページ  □ポスター  □チラシ  □ twitter □ Facebook □セキュリティ・キャンプフォーラム2013 □先生からの紹介 □友人からの紹介   □その他(                          ) ☆ 前提質問(どちらかに○をつけてください) [A] Windowsを使ったことはありますか? [はい・いいえ] [B] C言語は読み書きできますか? [はい・いいえ] [C] Exploitを解析したことはありますか? [はい・いいえ] [D]キャンプの公式Webページの講義科目に記載されたこのクラスの講義科目の[概要]と [詳細]と[補足]をよく読んで納得できましたか? [できた・できない] ☆ 記述式質問 1. このクラスを希望した自分なりの理由を教えてください。 また、この講義で学んだことを何に役立てたいかを教えてください。(選考上もっとも重視します) 2. あなたが読み書きできるプログラミング言語の使用歴を書いてください。 3. 今までに作ったソフトウェア、プログラム等があれば教えてください。差し障りのない範囲で構いません。 Webに公開している場合はそのURLを教えてください。 4. 以下のプログラムはxinetdから呼び出され、パスワードを知っているユーザのみがメッセージ投稿・表示を 行えることを意図して作られています。ただ、このプログラムにはいくつか脆弱性が存在します。 発見した脆弱性と攻撃方法、またその修正方法について解説してください。 ----- 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define SALT "$1$54lt$" 7 #define HASH SALT"4OOZtZMXwyHi.bwq2QS6U0" 8 char *get_line() 9 { 10 char buf[256]; 11 gets(buf); 12 return strdup(buf); 13 } 14 int main() 15 { 16 char *name=NULL, *passwd=NULL, *msg=NULL, buf[256]; 17 int trial_num, pass = 0; 18 setbuf(stdout, NULL); 19 for(trial_num = 0; trial_num < 10;trial_num++){ 20 printf("USER: "); 21 name = get_line(); 22 printf("PASS: "); 23 passwd = get_line(); 24 if(strcmp(HASH, crypt(passwd, SALT)) == 0){ 25 pass = 1; 26 break; 27 } 28 snprintf(buf, sizeof(buf), "NG(%s)\n", name); 29 printf(buf); 30 } 31 if(pass){ 32 printf("MSG: "); msg = get_line(); 33 snprintf(buf, sizeof(buf), "echo [%s]%s >> /tmp/memo.log", name, msg); 34 system(buf); 35 system("cat /tmp/memo.log"); 36 } 37 return 0; 38 } ----- 5. 以下はあるプログラムをgdbで逆アセンブルした結果です。この関数がどのような動作をするか、 その途中経過と最終的な結果について解説してください。 ---- (gdb) disas foo Dump of assembler code for function foo: 0x0804840c <+0>: push %ebp 0x0804840d <+1>: mov %esp,%ebp 0x0804840f <+3>: sub $0x28,%esp 0x08048412 <+6>: movl $0xaea4a4af,-0x13(%ebp) 0x08048419 <+13>: movl $0xb6b2a6ba,-0xf(%ebp) 0x08048420 <+20>: movw $0xc4,-0xb(%ebp) 0x08048426 <+26>: movb $0x0,-0x9(%ebp) 0x0804842a <+30>: jmp 0x804844b 0x0804842c <+32>: movzbl -0x9(%ebp),%eax 0x08048430 <+36>: movzbl -0x9(%ebp),%edx 0x08048434 <+40>: movzbl -0x13(%ebp,%edx,1),%ecx 0x08048439 <+45>: mov $0xffffffcc,%edx 0x0804843e <+50>: sub -0x9(%ebp),%dl 0x08048441 <+53>: xor %ecx,%edx 0x08048443 <+55>: mov %dl,-0x13(%ebp,%eax,1) 0x08048447 <+59>: addb $0x1,-0x9(%ebp) 0x0804844b <+63>: cmpb $0x9,-0x9(%ebp) 0x0804844f <+67>: jbe 0x804842c 0x08048451 <+69>: lea -0x13(%ebp),%eax 0x08048454 <+72>: mov %eax,(%esp) 0x08048457 <+75>: call 0x80482f0 0x0804845c <+80>: leave 0x0804845d <+81>: ret End of assembler dump. (gdb) ---- 6. Heap Sprayについて説明してください。 7. 以下の資料を読み、内容を解説してください。 DEP-and-ASLR-bypass-without-ROP-or-JIT http://cansecwest.com/slides/2013/DEP-ASLR%20bypass%20without%20ROP-JIT.pdf https://github.com/tombkeeper/DEP-and-ASLR-bypass-without-ROP-or-JIT 8. そのほかアピールしたいこと、書き足りないことがあれば自由に書いてください。 ※応募用紙にご記入いただいた、事務局が取得した個人情報を含む一切の内容につきましては、 独立行政法人情報処理推進機構(IPA)の個人情報保護方針に基づき、適正に取扱いを行います。 セキュリティ・キャンプ関連の連絡・案内、資料送付、セキュリティ・キャンプ実施協議会からの案内など、 「セキュリティ・キャンプ」の運営においてのみ使用し、それ以外の目的には一切使用しません。 詳しくは、ホームページをご覧ください。http://www.ipa.go.jp/about/privacypolicy/index.html