読者です 読者をやめる 読者になる 読者になる

Twitterに書ききれないこと

イベントや技術的なことを記したい・・・

Trend Micro 2015 writeupのようなもの

2015/09/26~09/27に開催されたTrend Micro CTF Asia Pacific & Japan 2015オンライン予選に参加しました。 今回は大和セキュリティ勉強会のイベントで集まったメンバーと出場しました。 普段は1、2人でCTFに参加しますが、学生も多くいろんな人と交流ができてよかったです。

チーム名は&"$%&'hNslIIld910)dJ1n217ad@`=~でした。
最終的にみなさんの力で22位まで行けました。
僕は基本的にAnalysis - Defensiveを担当して100と300をsubmitしました。

f:id:pinksawtooth:20150927221654p:plain

writeupと書いていますが自分が解いた問題、取り組んだ問題のメモです。

Analysis - Defensive 100

開始直後に解き始めた問題。まず問題サーバへのアクセスしようとすると403 Forbiddenであっはい・・・という感じ。 やっと問題落とせたと思ってfileコマンドで形式を確認して実行するといきなりフラグが出て意味がわからなかった。 実行しただけなので1st submitでボーナス点がもらえた。
開催中はVM検知してわざわざVMでないと動かないようにしている?クソ問かな?と思ったぐらいでほっておいた。

You are on VMM!
TMCTF{ce5d8bb4d5efe86d25098bec300d6954}

家に帰ってから実行すると挙動がおかしい・・・VMMだとかじゃないとかフラグでたりでなかったり・・・
writeup見るとVM検知回避をするのが正解のよう。64bitなのでIDA proが使える環境で確認して見ようと思う。

f:id:pinksawtooth:20150927223322p:plain

Analysis - Defensive 300

This is a REAL backdoor network traffic!
Tracing hacker's footprint to find the key!
If you can get "the password", please submit "TMCTF{}" as your answer.
Hint:
Poison Ivy / admin
attach: zipfile(pcap)

Poison Ivyの通信のpcapが与えられる。Poison Ivyは有名なRATでぐぐれば情報がたくさんある。 昔読んだ資料を思い出して探してきた。

http://www.iwsec.org/mws/2012/presentation/hands-on_incident-response.pdf

IIJのMWS2012 ハンズオン インシデントレスポンス資料のp49に以下の記述がある。 f:id:pinksawtooth:20150927224321p:plain

与えられたpcapを確認すると該当するものがあった。 f:id:pinksawtooth:20150927224803p:plain

FireEyeが通信をデコードするツールを出していたことを思い出したので探してきた。 https://www.fireeye.com/content/dam/fireeye-www/global/en/current-threats/pdfs/rpt-poison-ivy.pdf

依存パッケージを入れてツールをインストールする。結構めんどくさい。

ツールの使い方がよくわからなかったが、ソースを見たり、チームメンバーの助言でいろいろオプションを付けて実行した。

root@kali:~/Desktop/chopshop# ./chopshop -f net.pcap -s ./ "poisonivy_23x -c -p '/root/Desktop/chopshop/camcrypt/build/lib.linux-x86_64/camcrypt/camellia.so' "
Warning Legacy Module poisonivy_23x!
Starting ChopShop
Initializing Modules ...
    Initializing module 'poisonivy_23x'
Running Modules ...
[2015-09-04 17:43:44 JST]  Poison Ivy Version: 2.32
[2015-09-04 17:43:44 JST]  *** Host Information ***
PI profile ID: ctf
IP address: 192.168.0.100
Hostname: ADMIN-PC
Windows User: Administrator
Windows Version: Windows XP
Windows Build: 2600
Service Pack: Service Pack 3
[2015-09-04 17:43:58 JST]  *** Directory Listing Initiated ***
Directory: C:\WINDOWS\
[2015-09-04 17:43:58 JST]  *** Directory Listing Sent ***
[2015-09-04 17:44:57 JST]  *** Service Listing Sent ***
[2015-09-04 17:45:06 JST]  *** Screen Capture Sent ***
PI-extracted-file-1-screenshot.bmp saved..
Shutting Down Modules ...
    Shutting Down poisonivy_23x
Module Shutdown Complete ...
ChopShop Complete

PI-extracted-file-1-screenshot.bmpというのができるので開くとパスワードが書かれていた。 f:id:pinksawtooth:20150927231254j:plain

解けなかった問題

Analysis - Defensive 200

PE形式32bitのバイナリが配布される。
IDAで見るとなんか見たことある感じがする・・・というよりCTFで見ない感じだと思った。 なんかマルウェアっぽい。

マルウェア解析用に作ったimmunity debuggerのAPIフックスクリプトを使ってAPIトレースをしてみた。
結果を見るとWriteFileやURLDownLoadToFIileなど呼ばずにExitProcessしていたので解析検知か動作環境チェックを疑う。IDAで処理を追うとGetComputerNameAを読んでいる箇所を発見。コンピュータ名がTMCTF2015-PCだとWriteFileやURLDownLoadToFIileが呼ばれていた。

URLDownLoadToFIileでtmp以下にポエムを落としてきて、そこから通信先を取り出しているようだった。 APIトレース結果を見るとlocalhost/e45c2dc8d9e5b215ea141f2f609100f9/notify.phpに接続しようとしてるが失敗してループしていた。 localhostという点につまずいて解けなかった。

朝起きたら一緒に問題を見ていた@tikuwachan_naraさんが解いていた。 どうやらポエムに他にも通信先が含まれていたらしい。 デコード部分をしっかり読んでなかったので反省。

Network                    InternetOpenA                  (                                                                                                      "0x401f35"                                                                                                                                                      
                                                          lpszAgent = 'TMCTF2015-13106'
                                                          dwAccessType = "0x00000000"
                                                          lpszProxyName = ''
                                                          lpszProxyBypass = ''
                                                          dwFlags = "0x00000000"
                                                          )

Network                    InternetConnectA               (                                                                                                      "0x401f68"
                                                          hInternet = "0x00cc0008"
                                                          lpszServerName = 'localhost'
                                                          nServerPort = "0x000022b8"
                                                          lpszUserName = ''
                                                          lpszPassword = ''
                                                          dwService = "0x00000003"
                                                          dwFlags = "0x00000000"
                                                          dwContext = "0x00000000"
                                                          )

Registry                   RegCreateKeyExA                (                                                                                                      "0x7503324c"
                                                          hKey = "588"
                                                          lpSubKey = "Software\Microsoft\windows\CurrentVersion\Internet Settings\Connections"
                                                          lpClass = ""
                                                          dwOptions = "0x750249db"
                                                          samDesired = "0x00000000"
                                                          lpSecurityAttributes = "0x00000001"
                                                          phkResult = "0x00000000"
                                                          lpdwDisposition = "0x0018f860"
                                                          )

Registry                   RegQueryValueExA               (                                                                                                      "0x7503326d"
                                                          hKey = "652"
                                                          lpValueName = "DefaultConnectionSettings"
                                                          lpType = "0x00000000"
                                                          lpData = "0x00000000"
                                                          lpcbData = "0x00000000"
                                                          )

Registry                   RegQueryValueExA               (                                                                                                      "0x750332b0L"
                                                          hKey = "652"
                                                          lpValueName = "DefaultConnectionSettings"
                                                          lpType = "0x00000000"
                                                          lpData = "0x00000000"
                                                          lpcbData = "0x00270af8"
                                                          )

Network                    HttpOpenRequestA               (                                                                                                      "0x401fa8L"
                                                          hInternet = "0x00cc000c"
                                                          lpszVerb = 'GET'
                                                          lpszObjectName = '/e45c2dc8d9e5b215ea141f2f609100f9/notify.php'
                                                          lpszVersion = 'HTTP/1.0'
                                                          lpszReferer = ''
                                                          lplpszAcceptTypes = ''
                                                          dwFlags = "0x00080000"
                                                          dwContext = "0x00000000"
                                                          )

Network                    HttpAddRequestHeadersA         (                                                                                                      "0x40205f"
                                                          hConnect = "0x00cc0010"
                                                          lpszHeaders = 'Cookie: 673278367138713a81463a
'
                                                          dwHeadersLength = "0xffffffff"
                                                          dwModifiers = "0xa0000000"
                                                          )

File                       CreateFileA                    (                                                                                                        "0x401e6c"
                                                          lpFileName = "key.bin"
                                                          dwDesiredAccess = "0x80000000"
                                                          dwShareMode = "0x00000000"
                                                          lpSecurityAttributes = "0x00000000"
                                                          dwCreationDisposition = "0x00000003"
                                                          dwFlagsAndAttributes = "0x00000000"
                                                          hTemplateFile = "0x00000000"
                                                          )

Analysis - Others 100

壊れたpdfが配布される。 windowsでは開けなかったがlinuxでは開けた。 開いたファイルに変わった点はない。

とりあえずBzで開いてビットマップ表示させてみると怪しい箇所を発見。 どうやって取り出そうかなーと思って所で他のチームメンバが解答したため、解くのをやめた。 バイナリ力を上げたい・・・ f:id:pinksawtooth:20150927235636p:plain