2019 Aトラック # 脆弱性・マルウェア解析トラック 問1〜問6については設問ひとつあたり5,000文字以内、問7については10,000文字以内で答えてください。 また正解がある設問については、"正解しているかどうか"より"正解にたどり着くまでのプロセスや熱意"を重要視しています。 答えにたどり着くまでの試行錯誤や自分なりの工夫等を書いて、精一杯アピールしてください。 ## 問1 あなたが今まで作ってきたソフトウェアにはどのようなものがありますか? また、それらはどんな言語やライブラリを使って作ったのか、どこにこだわって作ったのか、たくさん自慢してください。 ## 問2 今までに解析したことのあるソフトウェアやハードウェアにはどのようなものがありますか?また、その解析目的や解析方法、工夫した点があればそれらも教えてください。 ## 問3 ブログやGitHubなど技術情報を公開しているURLがあれば教えてください。またその内容についてアピールすべきポイントがあれば記載してください。 ## 問4 あなたが今年のセキュリティ・キャンプで受講したいと思っている講義は何ですか?(複数可)またそれらを受講したい理由を教えてください。 ## 問5 自分が最も技術的に興味を持った脆弱性をひとつ挙げ、技術的詳細(脆弱性の原因、攻略方法、対策方法など)について分かったことや思ったこと、調査の過程で工夫したこと等を報告してください。 その際、書籍やウェブサイトを調べて分かったことはその情報源を明記し、自分が独自に気付いたことや思ったことはそれと分かる形で報告してください。 また脆弱性の攻略方法を試す際は、他者に迷惑を掛けないように万全の措置をとってください。 ## 問6 以下にDebian 9.8(amd64)上で動作するプログラムflatteningのmain関数の逆アセンブル結果(*1)とmain関数で使われているデータ領域のダンプ結果(*2)があります。 このプログラムは、コマンドライン引数としてある特定の文字列を指定されたときのみ実行結果が0となり、それ以外の場合は実行結果が1となります。 この実行結果が0となる特定の文字列を探し、その文字列を得るまでに考えたことや試したこと、使ったツール、抱いた感想等について詳細に報告してください。 (*1)"objdump -d -Mintel flattening"の出力結果のうち、main関数の箇所を抜粋しました。 ``` 0000000000000530
: 530: 48 8d 15 7d 03 00 00 lea rdx,[rip+0x37d] # 8b4 <_IO_stdin_used+0x4> 537: c7 44 24 f4 00 00 00 mov DWORD PTR [rsp-0xc],0x0 53e: 00 53f: 49 ba 9e fa 95 ef 92 movabs r10,0xedd5a792ef95fa9e 546: a7 d5 ed 549: 41 b9 cc ff ff ff mov r9d,0xffffffcc 54f: 90 nop 550: 8b 44 24 f4 mov eax,DWORD PTR [rsp-0xc] 554: 83 f8 0d cmp eax,0xd 557: 77 23 ja 57c 559: 48 63 04 82 movsxd rax,DWORD PTR [rdx+rax*4] 55d: 48 01 d0 add rax,rdx 560: ff e0 jmp rax 562: 66 0f 1f 44 00 00 nop WORD PTR [rax+rax*1+0x0] 568: c7 44 24 f4 09 00 00 mov DWORD PTR [rsp-0xc],0x9 56f: 00 570: 8b 44 24 f4 mov eax,DWORD PTR [rsp-0xc] 574: 83 c1 01 add ecx,0x1 577: 83 f8 0d cmp eax,0xd 57a: 76 dd jbe 559 57c: b8 01 00 00 00 mov eax,0x1 581: c3 ret 582: 66 0f 1f 44 00 00 nop WORD PTR [rax+rax*1+0x0] 588: 48 63 c1 movsxd rax,ecx 58b: c7 44 24 f4 0c 00 00 mov DWORD PTR [rsp-0xc],0xc 592: 00 593: 44 0f b6 44 04 f8 movzx r8d,BYTE PTR [rsp+rax*1-0x8] 599: eb b5 jmp 550 59b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0] 5a0: 48 63 c1 movsxd rax,ecx 5a3: 45 8d 1c 08 lea r11d,[r8+rcx*1] 5a7: c7 44 24 f4 0b 00 00 mov DWORD PTR [rsp-0xc],0xb 5ae: 00 5af: 44 30 5c 04 f8 xor BYTE PTR [rsp+rax*1-0x8],r11b 5b4: eb 9a jmp 550 5b6: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0] 5bd: 00 00 00 5c0: 83 f9 07 cmp ecx,0x7 5c3: 0f 86 18 01 00 00 jbe 6e1 5c9: c7 44 24 f4 0d 00 00 mov DWORD PTR [rsp-0xc],0xd 5d0: 00 5d1: e9 7a ff ff ff jmp 550 5d6: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0] 5dd: 00 00 00 5e0: c7 44 24 f4 09 00 00 mov DWORD PTR [rsp-0xc],0x9 5e7: 00 5e8: 31 c9 xor ecx,ecx 5ea: e9 61 ff ff ff jmp 550 5ef: 90 nop 5f0: c7 44 24 f4 08 00 00 mov DWORD PTR [rsp-0xc],0x8 5f7: 00 5f8: 45 89 c8 mov r8d,r9d 5fb: e9 50 ff ff ff jmp 550 600: 83 f9 08 cmp ecx,0x8 603: 0f 85 73 ff ff ff jne 57c 609: c7 44 24 f4 07 00 00 mov DWORD PTR [rsp-0xc],0x7 610: 00 611: e9 3a ff ff ff jmp 550 616: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0] 61d: 00 00 00 620: 83 c1 01 add ecx,0x1 623: c7 44 24 f4 02 00 00 mov DWORD PTR [rsp-0xc],0x2 62a: 00 62b: e9 20 ff ff ff jmp 550 630: 48 63 c1 movsxd rax,ecx 633: 80 7c 04 f8 00 cmp BYTE PTR [rsp+rax*1-0x8],0x0 638: 0f 85 96 00 00 00 jne 6d4 63e: c7 44 24 f4 06 00 00 mov DWORD PTR [rsp-0xc],0x6 645: 00 646: e9 05 ff ff ff jmp 550 64b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0] 650: 4c 8b 5e 08 mov r11,QWORD PTR [rsi+0x8] 654: 48 63 c1 movsxd rax,ecx 657: c7 44 24 f4 04 00 00 mov DWORD PTR [rsp-0xc],0x4 65e: 00 65f: 45 0f b6 1c 03 movzx r11d,BYTE PTR [r11+rax*1] 664: 44 88 5c 04 f8 mov BYTE PTR [rsp+rax*1-0x8],r11b 669: e9 e2 fe ff ff jmp 550 66e: 66 90 xchg ax,ax 670: 83 f9 07 cmp ecx,0x7 673: 77 c9 ja 63e 675: c7 44 24 f4 03 00 00 mov DWORD PTR [rsp-0xc],0x3 67c: 00 67d: e9 ce fe ff ff jmp 550 682: 66 0f 1f 44 00 00 nop WORD PTR [rax+rax*1+0x0] 688: c7 44 24 f4 02 00 00 mov DWORD PTR [rsp-0xc],0x2 68f: 00 690: 31 c9 xor ecx,ecx 692: e9 b9 fe ff ff jmp 550 697: 66 0f 1f 84 00 00 00 nop WORD PTR [rax+rax*1+0x0] 69e: 00 00 6a0: 83 ff 02 cmp edi,0x2 6a3: 0f 85 d3 fe ff ff jne 57c 6a9: c7 44 24 f4 01 00 00 mov DWORD PTR [rsp-0xc],0x1 6b0: 00 6b1: e9 9a fe ff ff jmp 550 6b6: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0] 6bd: 00 00 00 6c0: 4c 39 54 24 f8 cmp QWORD PTR [rsp-0x8],r10 6c5: 74 27 je 6ee 6c7: c7 44 24 f4 0e 00 00 mov DWORD PTR [rsp-0xc],0xe 6ce: 00 6cf: e9 7c fe ff ff jmp 550 6d4: c7 44 24 f4 05 00 00 mov DWORD PTR [rsp-0xc],0x5 6db: 00 6dc: e9 6f fe ff ff jmp 550 6e1: c7 44 24 f4 0a 00 00 mov DWORD PTR [rsp-0xc],0xa 6e8: 00 6e9: e9 62 fe ff ff jmp 550 6ee: 31 c0 xor eax,eax 6f0: c3 ret 6f1: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0] 6f8: 00 00 00 6fb: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0] ``` (*2)"objdump -s flattening"の出力結果のうち、セクション .rodata の内容を抜粋しました。 ``` セクション .rodata の内容: 08b0 01000200 ecfdffff d4fdffff bcfdffff ................ 08c0 9cfdffff 7cfdffff 6cfdffff 4cfdffff ....|...l...L... 08d0 3cfdffff 2cfdffff 0cfdffff ecfcffff <...,........... 08e0 d4fcffff b4fcffff 0cfeffff ............ ``` ## 問7 ### 導入 本課題はSIFT Workstationでfuse-apfsを利用して実施することを想定しています。次のリンクからOVA形式の仮想マシンイメージをダウンロードして調査環境を構築してください。 - https://digital-forensics.sans.org/community/downloads ### 課題 ファイルsample.rawおよびchallenge.rawは暗号化されていないAPFSパーティションをDDでダンプしたイメージデータです。 それぞれ1つのAPFSボリュームを含んでおり、3種類の異なるPDFファイルが双方のボリュームに一つずつ保存されています。 ただし、challenge.raw は一部のデータが改ざんされており、このままではイメージに含まれるボリュームをマウントしたり、全てのファイルを正しく取り出したりすることができません。 資料apfs101.pdfを参考に、以下の問いに答えてください。極力簡潔に記述してください。 参考までに、APFSパーティションイメージをapfs-fuseでマウント/アンマウントする場合は、以下のオプションを利用します。 ``` # apfs-fuse -s 0 # fusermount -u ``` #### 問7-1 challenge.rawをfuse-apfsでマウントできるようにするために修正し、以下の内容を答えてください。 1. 修正箇所のオフセットと修正内容。 2. そのように修正するとマウントできるようになる理由。 #### 問7-2 challenge.rawに含まれるボリュームには、sample.rawに含まれるものと同じPDFファイルが保存されています。しかし、問1の問題を解決してマウントしても、そのままでは開くことができないファイルが1つあります。当該ファイルを開けるようにchallenge.rawのデータを修正し、以下の内容を答えてください。 1. 修正箇所のオフセットと修正内容。 2. そのように修正するとファイルを開くことができるようになる理由。 3. 回答に至る調査の過程(簡潔に)。