はまやんはまやんはまやん

hamayanhamayan's blog

Recover the Tolkien Ring - Holiday Hack Challenge 2022 Writeup by hamayanhamayan [3/8]

English ver. -> https://hackmd.io/@POkJ8tzYSMKRnIFAFaPw4w/SJnFgxLYj
まとめトップ

 
 
 

Recover the Tolkien Ring

奥に怪物がいて、長蛇の列ができていた。

人が多かったので設定で他のプレイヤーを隠すと、3つのチャレンジが見えてくる。

Wireshark Practice

Difficulty: ★
Use the Wireshark Phishing terminal in the Tolkien Ring to solve the mysteries around the suspicious PCAP. Get hints for this challenge by typing hint in the upper panel of the terminal.

問題のコンソールを開こう。

This all started when I clicked on a link in my email.
Can you help me?

yesと答えてみると、問題が出てくる。

1. There are objects in the PCAP file that can be exported by Wireshark and/or Tshark. What type of objects can be exported from this PCAP?

pcapファイルというのはネットワークパケットログがまとまったファイルであるが、Wiresharkというソフトで開くのが定石となっている。
開いてみるとログがたくさん記録されている。
今回はobjectを抜き出してきてほしいとのことなので、Wiresharkの機能を使おう。

のようにすると

phpファイルが添付されている!これだ!phpと答えるが先に進まない…オブジェクトのタイプ?httpと答えると正解!

2. Wt is the file name of the largest file we can export?

これはapp.phpだ!

3. What packet number starts that app.php file?

これも上の画像から分かりますね。687

4. What is the IP of the Apache server?

Apacheと通信するときにはhttpを使って通信するので、httpでフィルタリングしてみよう。

ポート80でhttpサーバーは待ち構えるので、ポート80で待っている192.185.57.242が答え。

5. What file is saved to the infected host?

app.phpを解析する必要がありそう。
先ほどのWiresharkのオブジェクトのエクスポート画面からダウンロードもできる。
エンコーディングされた部分は一旦無視して、見えている所を見るとファイル名が見える。
68行目。

saveAs(blob1, 'Ref_Sept24-2020.zip');

Ref_Sept24-2020.zipが答え。

6. Attackers used bad TLS certificates in this traffic. Which countries were they registered to?
Submit the names of the countries in alphabetical other separeted by a commas (EX: Norway, South Korea).

Wiresharkでもう少し読み進めるとTLSの通信も記録されている。
TLSハンドシェイクのサーバー側からの応答を見てみよう。
tls.handshake.type == 2を検索ワードにしてフィルタリングしてみる。

内容を見てみるとCountryNameが書いてあるので列に適用してみよう。
あとは、使われているドメインを見ながら怪しい国名を抜き出して出してみるとIsrael, South Sudanが答えだった。
(IL -> Israel, SS -> South Sudan)

7. Is the host infected (Yes/No)?

怪しいドメインへの通信が記録されているということは、侵害が始まっているとみる方が自然であろう。

Windows Event Logs

Difficulty: ★★
Investigate the Windows event log mystery in the terminal or offline.
Get hints for this challenge by typing hint in the upper panel of the Windows Event Logs terminal.

問題のコンソールを開こう。

Grinchum successfully downloaded his keylogger and has gatherd the admin credentials!
We think he used PowerShell to find the Lembanh recipe and steal our secret ingredient.
Luckily, we enabled PowerShell auditing and have exported the Windows PowerShell logs to a flat text file.
Please help me analyze this file and answer my questions.
Ready to begin?

PowerShellの実行ログを解析してほしいとのこと。
Eric Zimmerman's toolsを使ってもいいのだが、サクッと解析するためにhayabusaを使ってみよう。
使い方は簡単で、バイナリを持ってきて.\hayabusa-1.8.1-win-x64.exe -f powershell.evtx -o out.csvとやるだけ。

1. What month/day/year did the attack take place? For example, 09/05/2021.

ログを眺めてログが増えてそうな日を探すと14,24日にログが多い。
12/24/2022を出すと正当だった。
14日はCommandInvocation(Set-StrictMode): "Set-StrictMode" ParameterBinding(Set-StrictMode): name="Version"; value="1.0"というのが大量発生していた。

2. An attacker got a secret from a file. What was the original file's name?

24日でgrepしておく。コマンドの実行履歴を見たいので、EventIDの4104で探していこう。
hayabusaの出力結果を使うならcat powershell.csv | grep 2022-12-24 | grep 4104 | grep ScriptBlockTextみたいにして見てみるといい。
いい感じに整形して見やすくするのがおすすめだが、自分はそれほど量がなかったので、イベントビューワーでここからは見てみることにした。
powershell.evtxをダブルクリックで開いてイベントビューワーで以下のようにフィルタリングして見てみる。

$foo = Get-Content .\Recipe| % {$_ -replace 'honey', 'fish oil'} $foo | Add-Content -Path 'recipe_updated.txt'
このようなコマンドがあってRecipeというのをGet-Contentで取得して色々しているので、original fileはRecipeが答え。

3. The contents of the previous file were retrieved, changed, and stored to a variable by the attacker.
This was done multiple times. Submit the last full PowerShell line that performed only these actions.

変数に代入している所を見つける。EventIDの4104でフィルタリングして眺めると代入しているものがあり、それが答え。
$foo = Get-Content .\Recipe| % {$_ -replace 'honey', 'fish oil'}

4. After storing the altered file contets into the variable, the attacker used the variable to run a separate command that wrote the modified data to a file.
This was done multiple times. Submit the last full PowerShell line that performed only this action.

書き込んでいる所を見つける。EventIDの4104でフィルタリングして眺めるとAdd-Contentで書き出している部分があり、それが答え。
$foo | Add-Content -Path 'Recipe'

5. The attacker ran the previous command against one file multiple times. What is the name of this file?

上にあるRecipeが答えかなーと思ったが違う。
もうちょっとさかのぼってみてみると、$foo | Add-Content -Path 'Recipe.txt'というのが見つかる。
Recipe.txtが答え。

6. Were any files deleted? (Yes/No)

同じく、EventIDの4104で探していくと以下のようなコマンドが見つかるのでYes

del .\Recipe.txt
del .\recipe_updated.txt

7. Was the original file (from question 2) deleted? (Yes/No)

2の答えはRecipeなので、それを消すコマンドがないかどうかを探すが、特に見つからなかったので、No.

8. What is the Event ID of the logs that show the actual command lines the attacker typed and ran?

今まで見ていた4104が答え。

9. Is the secret ingredient compromised (Yes/No)?

何やら変換が施されていたのでcompromiseされてはいそう。Yesで正解。

10. What is the secret ingredient?

$foo = Get-Content .\Recipe| % {$_-replace 'honey','fish oil'}
こんな感じに変換されているので、'honey'が'fish oil'に変換されているので変換元がsecret ingredientだろうと予想。
honeyを答えると正解。

Suricata Regatta

Difficulty: ★★★
Help detect this kind of malicious activity in the future by writing some Suricata rules. Work with Dusty Giftwrap in the Tolkien Ring to get some hints.

問題のコンソールを開こう。

First, please create a Suricata rule to catch DNS lookups for adv.epostoday.uk.
Whenever there's a match, the alert message (msg) should read Known bad DNS lookup, possible Dridex infection.
Add your rule to suricata.rules

なるほど。suricata.rulesを覗くと、dnsのクエリがあるので、参考にして書き換える。

alert dns $HOME_NET any -> any any (msg:"Known bad DNS lookup, possible Dridex infection"; dns.query; content:"adv.epostoday.uk"; nocase; sid:1; rev:1;)

./rule_checkerを動かすと応答が変わる。次に進めたみたいだ。

STINC thanks you for your work with that DNS record! In this PCAP, it points to 192.185.57.242.
Develop a Suricata rule that alerts whenever the infected IP address 192.185.57.242 communicates with internal systems over HTTP.
When there's a match, the message (msg) should read Investigate suspicious connections, possible Dridex infection
For the second indicator, we flagged 0 packet(s), but we expected 681. Please try again!

与えられているpcapファイルを見ながら要件を確認する。
ip.src==192.185.57.242 || ip.dst==192.185.57.242とすると685パケットになった。微妙に数が違うが、多分これで合ってるだろう。

alert http 192.185.57.242 any <> any any (msg:"Investigate suspicious connections, possible Dridex infection";sid:2;)

色々やっていると以上で突破できた。

We heard that some naughty actors are using TLS certificates with a specific CN.
Develop a Suricata rule to match and alert on an SSL certificate for heardbellith.Icanwepeh.nagoya.
When your rule matches, the message (msg) should read Investigate bad certificates, possible Dridex infection
For the third indicator, we flagged 0 packet(s), but we expected 1. Please try again!

TLSでひっかけてくればよさそう。

alert tls any any <> any any (msg:"Investigate bad certificates, possible Dridex infection";content:"heardbellith.Icanwepeh.nagoya";sid:3;)

適当に以上のようにやると突破できた。

Let's watch for one line from the JavaScript: let byteCharacters = atob
Oh, and that string might be GZip compressed - I hope that's OK!
Just in case they try this again, please alert on that HTTP data with message Suspicious JavaScript function, possible Dridex infection
For the fourth indicator, we flagged 0 packet(s), but we expected 1. Please try again!

httpかな?
ひっかけてくるのは難しくなさそうだが、GZip compressedという部分を解決する必要があるか。

alert http any any -> any any (msg:"Suspicious JavaScript function, possible Dridex infection";file_data;content:"let byteCharacters = atob";sid:4;)

file_dataをつけるとGZip compressedも解除してくれるみたい。
これでOK.

全問正解すると…

怪物が消えている…
どこへ行ったんだろうか…

無事、リングが獲得できたので、先に進もう。

 
 
 

次 -> Recover the Elfen Ring - Holiday Hack Challenge 2022 Writeup by hamayanhamayan [4/8] - はまやんはまやんはまやん