DEFCON CTF 2009 Forensics 300

One of these things is not like the other.
http://shallweplayaga.me/forensics/46646289fff26adc096853ae13b7eba6

まず何のファイルか確認

$ file 46646289fff26adc096853ae13b7eba6
46646289fff26adc096853ae13b7eba6: Zip archive data, at least v2.0 to extract

zipで圧縮されている

$ cp 46646289fff26adc096853ae13b7eba6 f300.zip
$ unzip -d files/ f300.zip
....
 extracting: files/FF62671092430BA2AB745A16CB772C2B
  inflating: files/FFA04C787C95327E4923D6E314869FA0
  inflating: files/FFBE6D27C1DA46C1298B65C99DED9904
  inflating: files/FFC4DFE2B96C861792CC91A5EA34DD67
  inflating: files/FFC4FBCCAF5151814D90F9807223D6BC
  inflating: files/FFC5D8E55B22651E7366913F4A1B1A60
  inflating: files/FFCB10F3BF538BFA7289D77A0AD7F5DD
  inflating: files/FFCC1768827A22FA025466B529FBE657
  inflating: files/FFCE78000EEC2F2BEDFFA98F7B22A5DB
  inflating: files/FFE3B13DD224E61DE592506EE07AB5DA
  inflating: files/FFE58ECC317B5D6661967A55C3C3F107
$ cd files

展開すると大量のファイルが展開される
ファイル名をよく見ると先頭が00〜FFまで揃っている
問題文は「他とは異なるひとつ」と言っているため何かの特徴を見つける

$ md5sum * > md5.txt
$ sort md5.txt | uniq -Dw32
0df21559b5e24582cae15e39393c38f2  04CE923AE0A2D4E39B1C55108EC0DDF7
0df21559b5e24582cae15e39393c38f2  99893BF47A011AA674A0932E5B131E29
6caece4f4f1b20354a26f5b074be5108  EE5610E54A9D127F243B8C76DE334031
6caece4f4f1b20354a26f5b074be5108  F21D60B1FE9710677DD261B1BC7F2EB5
7f450b19ae60471a70b9e11c2c96590e  5239871972E224E3DA7F91FE0A5F1794
7f450b19ae60471a70b9e11c2c96590e  E14115E1CF6ABB38E1273E512BEBFAA7
9d9e8dbae4b1929921bbc96085fe6307  4457ABF15FAB9698978B3A50600A8E6A
9d9e8dbae4b1929921bbc96085fe6307  D787C1B17F6CCBBE5E867A9FE161C50E
d84f0fa3e7c497d270a3dd58cd7d4a0c  233C952E9628E8DA39AC33C136D54120
d84f0fa3e7c497d270a3dd58cd7d4a0c  62136B0178A54B6A6CBE04583B585C0B
e38554402d7d73401291695a8f0ff529  57550E8A527E26A7EE44184D8279C3CA
e38554402d7d73401291695a8f0ff529  C0D43D209C89AB0868E1C27229E94FB5
eca0636171cdb0d054cfa1e326dfdd50  00ADF16DBCDACEB251CAFAEC464E94F5
eca0636171cdb0d054cfa1e326dfdd50  F9AD23392E16573C408E5FD7560F84CD

同じmd5を持つファイルが7組だけ見つかる
この中で5239871972E224E3DA7F91FE0A5F1794とE14115E1CF6ABB38E1273E512BEBFAA7は
同じmd5を持つが異なるデータファイルである(衝突が起こっている)

$ diff 5239871972E224E3DA7F91FE0A5F1794 E14115E1CF6ABB38E1273E512BEBFAA7
バイナリー・ファイル
5239871972E224E3DA7F91FE0A5F1794 と
E14115E1CF6ABB38E1273E512BEBFAA7 は違います
$ hexdump -C 5239871972E224E3DA7F91FE0A5F1794 > A
$ hexdump -C E14115E1CF6ABB38E1273E512BEBFAA7 > B
$ diff A B
2,4c2,4
< 00000010  2f ca b5 87 12 46 7e ab  40 04 58 3e b8 fb 7f 89  |/....F~.@.X>....|
< 00000020  55 ad 34 06 09 f4 b3 02  83 e4 88 83 25 71 41 5a  |U.4.........%qAZ|
< 00000030  08 51 25 e8 f7 cd c9 9f  d9 1d bd f2 80 37 3c 5b  |.Q%..........7<[|
---
> 00000010  2f ca b5 07 12 46 7e ab  40 04 58 3e b8 fb 7f 89  |/....F~.@.X>....|
> 00000020  55 ad 34 06 09 f4 b3 02  83 e4 88 83 25 f1 41 5a  |U.4.........%.AZ|
> 00000030  08 51 25 e8 f7 cd c9 9f  d9 1d bd 72 80 37 3c 5b  |.Q%........r.7<[|
6,8c6,8
< 00000050  dd 53 e2 b4 87 da 03 fd  02 39 63 06 d2 48 cd a0  |.S.......9c..H..|
< 00000060  e9 9f 33 42 0f 57 7e e8  ce 54 b6 70 80 a8 0d 1e  |..3B.W~..T.p....|
< 00000070  c6 98 21 bc b6 a8 83 93  96 f9 65 2b 6f f7 2a 70  |..!.......e+o.*p|
---
> 00000050  dd 53 e2 34 87 da 03 fd  02 39 63 06 d2 48 cd a0  |.S.4.....9c..H..|
> 00000060  e9 9f 33 42 0f 57 7e e8  ce 54 b6 70 80 28 0d 1e  |..3B.W~..T.p.(..|
> 00000070  c6 98 21 bc b6 a8 83 93  96 f9 65 ab 6f f7 2a 70  |..!.......e.o.*p|

md5の強衝突性を突破している
http://www.win.tue.nl/hashclash/
同じmd5の異なるファイルを作成する際、Dan Kaminskyのstripwireを使ったと思われる
http://www.securityfocus.com/data/vulnerabilities/exploits/stripwire-1.1.tar.gz

$ sed -ie 's/eval/print/' stripwire.pl
$ perl stripwire.pl -r E14115E1CF6ABB38E1273E512BEBFAA7 > dec1
$ perl stripwire.pl -r 5239871972E224E3DA7F91FE0A5F1794 > dec2
$ cat dec1
$ cat dec2
SFKtg9S9sWRvwwy3BXn11lXBRqP9QfNCanMiv9lYR9UMqEoZsPhiR662r
11YeU8vWoAimLgUPyXjNApBpiu4LCOBw6pvgYQGGKpZiCaq4sRHjLaoWF
Ese2iP7vfvgeIDTHoGNYyYQwiYVLq6wxjJaTkvNKtHANIgBOXWXNO1kFD
CcUYnL3eSvIsShsMbHRJ68xafUq0YxDjrIALyGkKYBjrp4dk67ZIaISYQ
....

stripwireは任意のファイルを元に、md5がぶつかる2つのファイルを生成する
今回作成されたファイルは
5239871972E224E3DA7F91FE0A5F1794 と E14115E1CF6ABB38E1273E512BEBFAA7
どちらかを再度stripwireにかければ、どちらか一方は復号され元ファイルに戻る
今回はdec2、つまり5239871972E224E3DA7F91FE0A5F1794が復号された
よって他のファイルとは違う暗号化されたファイル"5239871972E224E3DA7F91FE0A5F1794"が答え