English version is available here.

VMWareのイメージファイルが渡される.(VirtualBoxで無理やり起動しようとしたけどダメだった)
とりあえず起動するとデスクトップにWinRARのアイコンでパスワード付きのflagというファイルがあるので,これのパスワードを探す問題だとわかる.

チームで相談した結果,わざわざVMを渡されたので実機が無いとダメな仕掛け(ex.キーロガーなど)があるのでは,という方針で解析していく. MFTやイベントログ,タスクスケジューラなどを調べた結果,以下のことがわかった.

  • \Users\M\Hello.rarというよくわからないファイル
  • flag.7zとHello.rarはvmwareのD&Dファイル転送機能を使ってゲストOSに置かれたもの
    • →キーロガー説が消える (置かれた当初から暗号化されているため)
  • \Windows\System32\Tasks\Microsoft\Windows\Sharing\UpdateLibraryに怪しい記述が見つかる
    • cmd /c "vssadmin > %userprofile%\m"
    • UsnJrnlを見ると確かに\Users\M\mというファイルが一瞬作成されたことがわかる

このあと全く方針が立たなくて1日くらい潰した.

しばらくしてHello.rarをxxdで見てみると,

00000e0: ddd2 88d5 481d 3303 0000 0000 0053 544d  ....H.3......STM
00000f0: 3a00 5a00 6f00 6e00 6500 2e00 4900 6400  :.Z.o.n.e...I.d.
0000100: 6500 6e00 7400 6900 6600 6500 7200 0c15  e.n.t.i.f.e.r...
0000110: 0fc5 0d15 5501 1111 e9a7 b289 ec7a 7ba6  ....U........z{.

ZoneIdentiferという文字が見えるので,ADS(Alternate Data Stream)を疑う

Hello.rarを解凍してみると,確かにHello.txt:Zone.Identifer:$DATAが存在する

2.png

中身はRarっぽいファイル 3.png

ADSはNTFSの中で抽出する必要があるため,適当なツールを用いて抽出する. 今回はADSManagerというツールを使用

4.png

出てきたRarファイルを解凍すると,またADSにデータが存在 5.png

この中身を抽出すると,Wordのdocファイルっぽいものが得られる

extracted2: Composite Document File V2 Document, Little Endian, Os: Windows, Version 6.1, Code page: 950, Template: Normal.dotm, Revision Number: 60, Name of Creating Application: Microsoft Office Word, Total Editing Time: 19:05:00, Create Time/Date: Mon Jun 20 08:42:00 2016, Last Saved Time/Date: Tue Jun 21 03:47:00 2016, Number of Pages: 1, Number of Words: 13, Number of Characters: 75, Security: 0

Wordで開くと,マクロが入っているがパスワードがかかっているため中身を見ることができない. olevbaというツールを使うとファイルのマクロを抽出することができるので抽出してみる.

FILE: extracted2
Type: OLE
-------------------------------------------------------------------------------
VBA MACRO ThisDocument.cls 
in file: extracted2 - OLE stream: u'Macros/VBA/ThisDocument'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Private Sub Document_Close()
CTFpo.CTF
End Sub

-------------------------------------------------------------------------------
VBA MACRO CTFpo.bas 
in file: extracted2 - OLE stream: u'Macros/VBA/CTFpo'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


Sub CTF()
'Created by MC.
On Error GoTo Handler

'a FileSystemObject.
Set fso = CreateObject("Scripting.FileSystemObject")
Dim fname, passOne, passTwo, sTemp, sFlagEnc As String
Dim fLength As Integer

' Create a TextStream.
Set stream = fso.OpenTextFile("install.log", 1)
sTemp = stream.Readline

fLength = Int(Mid(sTemp, 2, 1))
fname = Left(sTemp, 1 + fLength)
passOne = Mid(sTemp, 2)
stream.Close

Set streamTwo = fso.OpenTextFile(fname, 1)
sTemp = streamTwo.Readline
passTwo = Left(sTemp, 8)
streamTwo.Close


passOne = Replace(passOne + passTwo, " ", "")


If Day(Now()) > 30 And Minute(Now()) > 58 Then
    MsgBox passOne, vbInformation, "It is what you are looking all along.."
End If

Handler:

End Sub


Private Function Decrypt(key As String, encrypted As String)

On Error Resume Next:


Do While (Len(key) < Len(encrypted))

key = key + key

Loop


For i = 1 To Len(encrypted):
    Decrypt = Decrypt & Chr(Asc(Mid(key, i, 1)) Xor Asc(Mid(encrypted, i, 1)))

Next:


End Function

CTF()をpythonで書きなおした.

# decode.py
stream = open('install.log')

stemp = stream.readline().strip()

flength = int(stemp[1:2])
fname = stemp[:1+flength]
passone = stemp[1:]
stream.close()

stream2 = open(fname)
stemp = stream2.readline().strip()
passtwo = stemp[:8]
stream2.close()

passone = (passone+passtwo).replace(' ', '')

print passone

install.logをVMの\Users\M\install.logから引っ張ってきて実行すると,Mというファイルが存在しないと言われるので先ほどの情報をもとに復元してみる. 6.png

この状態で復号スクリプトを実行すると,0zillaFirefoxInstallationStarted:2015-09-0715:18:16vssadminという文字列が得られる.

このパスワードを用いてflag.7zを解凍するとフラグが得られた. 7.png