MNCTF2024 - Writeup


# はじめに

6/21(金)に、マクニカ主催の **MNCTF** に参加してきました！
マルウェア解析お仕事体験！という感じで、シナリオがしっかりしていて楽しいCTFでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/ee862991-9694-4390-a48e-c3cd8ade1b6c.png)

コーディング不要でOSINTとツールだけで解ける問題も多いので、コーディングに苦手意識がある人にもおすすめです（？）

作問者が作った自作マルウェアを解析したりするCTFで、本格的でわくわくしながら解くことができました！

過去問が公開されているので気になる方はぜひトライしてみてください。

https://mnctf.info/

### シナリオ

CSIRTに、ランサムウェアに暗号化されてファイルが開けないと連絡がきた。
バックアップは取っていない。さてどうしよう？

![yahara_desktop_after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/23550d50-4e0a-6a89-4186-2e7277961bcd.png)

## 問題

複数の問題がこのシナリオにそっていて、順番に解くことで攻撃者の情報を得たり、ファイル復号のためのヒントが得られたりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/02ece3f1-e410-fc9e-d656-7a3dfd14e671.png)

:::note 
今回必死に解きすぎてかなり適当なWriteupとなっておりますがご容赦ください。
:::

### マルウェアの通信先

マルウェアの実行ファイルを`strings`コマンドで確認。

```
$ strings ---.exe | grep http
```

### 攻撃者のBitcoinウォレットは？

ランサムノートにURLがあるので、見てみよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/70cf23f4-e5df-e660-df56-f248a6fe5747.png)

:::note
`onion.pet` というプロキシを使うと、Torブラウザを使わずに安全にTorに接続することが出来る。
:::

`https://----.onion` の末尾に`.pet` を付けるだけで良い。

ダークネット上のWebサイトが見れました。ビットコインアドレスが書いてありますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/690c801f-b5b2-a16d-513d-653ebe3a70c2.png)


### マルウェアのBitcoinウォレットの調べ方

ARKHAMというサイトで調べる。

https://www.arkhamintelligence.com/

ブロックチェーンインテリジェンスというものらしいです。

https://www.neweconomy.jp/features/kudasai/316873

bitcoinアドレスを入れるとわかる
犯罪者が使っているかどうかなどもわかるっぽい？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/8a2ae021-b5d2-f863-19ab-144b24b8df0f.png)


### ホスト名の確認

マルウェア `amrw.exe` は特定の文字列がコンピュータ名に含まれていないと発動しないようです。
その文字列は何か答えてください。

`strings` で解いたのですが、正攻法はリバースエンジニアリングとのこと。
C言語の `gethostname` というところを見に行くと良い。
`Ghidra` を使う。

### 復号１：パスワード

パスワードファイルを復号しましょう。
Webサイトに100Byte未満であれば復号できるとあるので復号。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/90106640-06d1-71e4-31b0-88b6f7353d2b.png)


こういった復号してくれるサービス？はあるが、普通のランサムウェアの場合はバイトではなくファイルの個数が制限されるようです。

### 使われている暗号化アルゴリズムは？

```
Q. amrw.exeが利用している暗号化アルゴリズムを答えてください。
```

`Ghidra` などでリバースエンジニアリングして、暗号化されている部分を特定し、そのコードをchatGPTに聞くとRC4と分かる。

`mod256` で分かる人もいる。 

本当のマルウェアの場合、VirtuaTotalというサイトにハッシュを入れるとわかる。

https://www.virustotal.com/gui/home/upload

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/a343505d-e4d4-f703-0de7-a8c2628ef00d.png)

ファイルアップロードでも良いし、マルウェアのハッシュでも良い。暗号化方式などの情報が分かる。

### 復号２：議事録

RC4は先頭から暗号化されるブロック暗号なので、先頭だけ切り取って復号化することが出来る。
バイナリエディタで100byteまでにしてアップロードする


### 復号３：部分的に暗号化されたファイル


ビットイメージを見ると、暗号化されている部分は黒くなる

`binwalk -e` を使うと、

最近のランサムウェアはファイルの先頭ファイルだけ暗号化することが多い。
時間かかると見つかってしまうし、先頭が暗号化されていればほとんどの人が復号することが出来ないから。

部分的に復元するという手法をやる。

### 暗号鍵

> やはら君はたまたまランサムウェアに感染したタイミングでパケットキャプチャを取っていた。
`ransom_traffic.pcapng`
パケットを解析し、暗号化鍵を答えてください。
ヒント）すべてのバイトがそのまま鍵とは限りません。

とりあえず`strings`コマンドで見てみます。赤い部分が怪しい？

```diff
└─$ strings ransom_traffic.pcapng
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz (with SSE4.2)
64-bit Windows 10 (20H2), build 19042
Dumpcap (Wireshark) 4.2.4 (v4.2.4-0-g1fe5bce8d665)
\Device\NPF_{8CC47053-6D41-4018-8B32-8B93281D768C}
Ethernet0
64-bit Windows 10 (20H2), build 19042
amrwc2  angrymusu
amrwc2  angrymusu
GET /amrwc2/ HTTP/1.1
Connection: Keep-Alive
User-Agent: A WinHTTP Example Program/1.0
Host: amrwc2.angrymusu.me
HTTP/1.1 200 OK
Server: nginx/1.25.4
Date: Wed, 19 Jun 2024 02:28:52 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 40
Connection: keep-alive
X-Powered-By: PHP/8.1.29
- 0000002c9e688c523f5dea24513ef54848a136e7
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
Counters provided by dumpcap
```

Webサイトを何回かリロードすると変わる文字列から推測するらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/e7365d5d-bb32-52a4-c42c-3f880cae0d5a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/e48daafa-953a-8b97-c456-5e9dc62945d3.png)

```
9e688c523f5dea24513ef54848a136e7
```

一部が暗号鍵
正攻法は静的解析とのこと、、、

## 復号４：ボーナスはいくら？

↑でゲットした暗号鍵を使ってRC4をciberchefで復号してダウンロードするとできる

## 暗号化対象のディレクトリは？

静的解析をしないと絶対に解けない問題とのこと

## 暗号化対象のディレクトリは？

```
暗号化対象のディレクトリは複数あるようです。検体の中の、パスを取得する関数の定数の数値を調べて、十進数で答えてください。
```

Ghidraなどで静的解析をする。

`SHGetFolderPath` の第２引数をみると２，５と書いてあるので、
デスクトップと何かが暗号化されるディレクトリだということがわかる。


### 犯罪者グループの組織名

リークサイト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/d9ba0246-b3e6-55f9-a173-2077d8e570d3.png)

`/confirm/id=---` の部分のidを変えるとわかる

### 最近あった事件

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/9266277f-0a84-e161-7bdd-0ef2a00a4e09.png)

:::note
blockchainエクスプローラーを使うと、暗号通貨の取引履歴やウォレットアドレスが特定できる
:::

https://solscan.io/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/fbadb785-b892-4903-0532-69ef44c2ddc5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/32b78010-42cd-f4cd-9410-f0b381a22359.png)

### マルウェア特定

この暗号化されたファイルからマルウェアの名称を調査して答えてください。

ググるとJPSIRTブログが出てくる　LODEINFO

### カナリートークン

ファイルに埋め込んでおいて、開くとhttpが飛ぶ仕組み

webサーバ上で小さい画像をurlで挿入する。これを入れておくと、httpが毎回飛ぶのでサーバにログがたまっていく。

docx -> zip

```
find . -type f -print0 | xargs -0 strings | grep -oP 'http[s]*://[^ ]+'
```

### ビーコン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/62bc5a72-a660-afe0-7276-52bf48502307.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576001/af818495-15dd-63e2-005c-6e5ac434f995.png)

### アクセス者

クラウドストレージに格納されている機密文書。
アクセスログからユーザ名を特定する。

Json to CSV というファイルで表にして見えるようにする

https://www.convertcsv.com/json-to-csv.htm

### EDRのログ

どこに機密文書が保存されたのか調査する。


## さいごに

途中から解説を聞きながらメモしただけなので適当になっていますが、
とても楽しいCTFだったので社内や友人とまた解き直したいなと思います！

来年また絶対に参加したい～