1. Vick Timme が送った元の完全なURIはなんですか?(ポートも含めてください)
http.request.method でフィルタすると2つしかない。
- http://10.10.10.10:8080/index.php
- http://10.10.10.10:8080/index.phpmfKSxSANkeTeNrah.gif
よって、最初にクリックした URI は http://10.10.10.10:8080/index.php となる。
2.応答として悪意あるウェブサーバは難読化された Javascript を送りました。このコードが実行されるあたりで、攻撃者は COMMENT とラベルされた1300の要素を持つ配列を作成し、配列にはすべて文字が入力されました。その文字列はなんですか?
最初にクリックした index.php の応答を見るため TCP stream を確認する。
応答の中に、script 部分があり、UWnHADOfYHiHDDXj = "COMMENT" となっている部分があるので、このあたりのスクリプトを確認する。
var UWnHADOfYHiHDDXj = "COMMENT";
var qSNgVkOrdIjaiFpPTfDjbPHQppHSGtzpmOOyqEbLEFxNqAxicRyZKKWiRWmUaDHFOuzHPHqLrRFSzQuPusTnQyqpQwVpARdlR = new Array();
for (i = 0; i < 1300; i++)
{
qSNgVkOrdIjaiFpPTfDjbPHQppHSGtzpmOOyqEbLEFxNqAxicRyZKKWiRWmUaDHFOuzHPHqLrRFSzQuPusTnQyqpQwVpARdlR[i] = document.createElement(UWnHADOfYHiHDDXj);
qSNgVkOrdIjaiFpPTfDjbPHQppHSGtzpmOOyqEbLEFxNqAxicRyZKKWiRWmUaDHFOuzHPHqLrRFSzQuPusTnQyqpQwVpARdlR[i].data = "vEI";
}
このままだと見づらいので、変数名をわかりやすく変えてみる。
var UWnHADOfYHiHDDXj = "COMMENT";
var A = new Array();
for (i = 0; i < 1300; i++)
{
A[i] = document.createElement(UWnHADOfYHiHDDXj);
A[i].data = "vEI";
}
データとして入力されているのは、vEI となる。
余談として、このスクリプトを jsunpack に食わせると下記のような出力結果になる。
script malicious
[malicious:10] script
info: [decodingLevel=0] found JavaScript
malicious: Alert detected /alert CVE-2010-0249 MSIEUseAfterFree (CreateElement called 1299 times)
info: [element] URL=127.0.0.1/undefined
info: [1] no JavaScript
info: file: saved script to (0a5cb514a88ef62f3881d5161de026e7ee3734c3)
file: 0a5cb514a88ef62f3881d5161de026e7ee3734c3: 4165 bytes
file: 8b96522be55eb7ad3dc89374eabaa05126543d1c: 98874 bytes
この CVE-2010-0249 をヒントに exploitdb で検索すると、このような PoC があった。たぶん、この問題で使用されているスクリプトはこれを参考にしていると考えれる。
3. Vickのコンピュータは2番目のHTTPリクエストを送信しました。
a.そのリクエストされたオブジェクトのファイル名はなんですか?
b.取得したオブジェクトの MD5 はなんですか?
問題1 の二つ目の URI が 10.10.10.10:8080/index.phpmfKSxSANkeTeNrah.gif となっているため、a の答えは、index.phpmfKSxSANkeTeNrah.gif となる。
このファイルを Wireshark の File -> Export Objects -> HTTP で取り出して MD5 のハッシュ計算を行う。
df3e567d6f16d040326c7a0ea29a4f41が答え。
4. いつ TCP 4444 のセッションは開始されましたか?(パケットキャプチャ開始時からの時間で、10分の1秒で丸めてください)
tcp.port == 4444 でフィルタを行う。
ポート 4444 のセッションが開始されたのは相対時間で 1.265 となっているので、10分の1秒で丸めて 1.3秒が答えとなる。
5. いつ TCP 4444 のセッションはクローズしましたか?
問題4でフィルタした状態で、セッションの最後のほうを確認すると答えがわかる。
十分の1秒で丸めて 87.6 が答え。
6. パケットの17で悪意のサーバはクライアントにファイルを送信しました。
a. どんなタイプのファイルですか?下記から選んでください。
ウィンドウズ実行ファイル
GIFファイル
PHPスクリプト
ZIPファイル
暗号データ
b. そのファイルの MD5 ハッシュは?
パケット 17 と指定があるので TCP stream で中身を確認してみる。
文字列として MZ や This program cannot be run in DOS mode.とあるので、a の答えはウィンドウズ実行ファイルとなる。
次にファイルを取り出して MD5 のハッシュを計算したいが、Wireshark では対応していないプロトコルのため取り出すことができない。また Network Miner でも同様に取り出すことができない。
そこで、パケット 17 を含む tcp.stream eq 1 の raw データからPEファイル(ウィンドウズ実行ファイル)を別方法で取り出す。そのために Back Track で foremost コマンドを実行する(SIFT でも可)
root@bt:~/Desktop/forensiccontest/puzzle06# ls 17-stream root@bt:~/Desktop/forensiccontest/puzzle06# foremost -i 17-stream -o output_17 Processing: 17-stream |*| root@bt:~/Desktop/forensiccontest/puzzle06# cd output_17/ root@bt:~/Desktop/forensiccontest/puzzle06/output_17# ls audit.txt dll root@bt:~/Desktop/forensiccontest/puzzle06/output_17# cd dll/ root@bt:~/Desktop/forensiccontest/puzzle06/output_17/dll# ls 00000000.dll
これで TCP stream のデータからファイルを取り出すことができたので、MD5 ハッシュを計算する。
root@bt:~/Desktop/forensiccontest/puzzle06/output_17/dll# md5sum 00000000.dll b062cb8344cd3e296d8868fbef289c7c 00000000.dll
となり、b062cb8344cd3e296d8868fbef289c7c が答え。
7. Vick のコンピュータは 4444 ポートでの接続をクローズした後、悪意あるサーバへ何度も 4445 ポートで通信を試みました。この複数の失敗について:
a. どのぐらいの頻度でTCPのISNは変わりましたか?
Every packet
Every third packet
Every 10-15 seconds
Every 30-35 seconds
Every 60 seconds
ISN はデフォルトの Wireshark のサマリ状態では相対的に表示される。そのため、今回のように一方的におくっている場合は常に Seq=0 になる。
これを変更するには Edit -> Preferences -> TCP で Relative sequence numbers のチェックを外す。
これで Length info に Seq がそのまま表示される。この状態で tcp.dstport == 4445 でフィルタすると、どれぐらいの頻度でISNが変わっているかわかる。
答えはは3つ毎に変わる。
b. どのぐらいの頻度で IP ID は変わりましたか?
Every packet
Every third packet
Every 10-15 seconds
Every 30-35 seconds
Every 60 seconds
これは、フィルタした状態でパケットの中身を表示させながらみるとわかる。
パケットごとに変更されている。
c. どのぐらいの頻度で送信元ポートは変わりましたか?
Every packet
Every third packet
Every 10-15 seconds
Every 30-35 seconds
Every 60 seconds
これは Statistics の conversations の tcp タブで見るとわかりやすい。見やすいように Name Resolution のチェックするのを外す。
送信元ポートは5パケットごとに変わっており、10秒から15秒程度で変わるのがわかる。
8. 最終的に、悪意あるサーバは応答を返して新しい接続を開始しました。4445 ポートの通信が最初に正常に完了したのはいつですか?
TCP のセッションが正常に開始されれば ACK が現れるため tcp.dstport == 4445 and tcp.ack でフィルタする。
10分の1秒で丸めて 123.7 秒が答え。
9. その後、悪意あるサーバは 4445 ポートで実行ファイルをクライアントへ送信しました。この実行ファイルの MD5 はなんですか?
基本的には問題6と同じ手法で解ける。先ほどと同じく、4445 の Tcp stream をとって Back Track の foremost コマンドでファイルを取り出す。
root@bt:~/Desktop/forensiccontest/puzzle06# foremost -i port4445-stream -o out_4445 Processing: port4445-stream |*| root@bt:~/Desktop/forensiccontest/puzzle06# cd out_4445/ root@bt:~/Desktop/forensiccontest/puzzle06/out_4445# ls audit.txt dll root@bt:~/Desktop/forensiccontest/puzzle06/out_4445# cd dll root@bt:~/Desktop/forensiccontest/puzzle06/out_4445/dll# ls 00000000.dll
このファイルのハッシュ値を計算する。
root@bt:~/Desktop/forensiccontest/puzzle06/out_4445/dll# md5sum 00000000.dll b062cb8344cd3e296d8868fbef289c7c 00000000.dll
b062cb8344cd3e296d8868fbef289c7c が答えとなる。
10. いつ、4445 ポートはクローズされましたか?
問題9で使用した TCP stream が終了する時間なので、tcp.stream eq 41 でフィルタすればわかる。
答えは、198.4 となる。








0 件のコメント:
コメントを投稿