MNCTF 2024 Writeups - はまやんはまやんはまやん

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

hamayanhamayan's blog

MNCTF 2024 Writeups

MNCTF 2024で、惜しくもラスト1分で抜かれてしまい2位!悔しさをばねにまた精進します。

1. ランサムウェアのインシデント

ランサムウェア感染を想定した問題群。

1-1. マルウェアハッシュ値

「amrw.exe」というファイルが与えられてSHA256のハッシュ値を求める問題。sha256sumを使った。

$ sha256sum amrw.exe
9966905e42e3c31dfdb093088a0d6cabc09■■■■■■■■■■■■■■■■■■■■■  amrw.exe

1-2. 通信先のURL

amrw.exeの通信先のURLを回答してくださいという問題。

$ strings amrw.exe | grep http
http://[redacted].me/amrwc2/

非常にそれっぽいurlが見つかる。ghidraでamrw.exeを見た感じもアクセスに使っているので、これを答える。

1-3. ビットコイン

AMRW_README.txtというランサムノートが与えられるので、攻撃者のビットコインのアドレスを調べて答える問題。

ランサムノートを見ると、onionドメインのURLが入っている。

http://[redacted].onion/confirm/?id=0000002c

BraveのTorを使って開いてみるとランサムサイトに送金先のビットコインアドレスが書かれている。

1-4. 取引所 (解けなかった)

1-5. ホスト名のチェック

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

amrw.exeをghidraで開いて眺めるとFUN_140001d00に以下のような処理がある。

    iVar1 = gethostname(local_118,0x100);
    if (iVar1 == 0) {
      pcVar2 = strstr(local_118,s_[redacted]_14002a0a0);

hostnameを取得して文字列比較をしている。ここを見れば分かる。

1-6. 復号1 パスワード

CAD_Password.txt.amrwという暗号化ファイルがあり、展開する問題。

ランサムサイトに小さいファイルを復号化する機能が付いていたので、それを使えば展開可能でパスワードも書いてある。

1-7. 暗号化アルゴリズム

amrw.exeが利用している暗号化アルゴリズムを答えてください。という問題。ghidraで展開するととりあえずストリーム暗号で、ソースコードをChatGPTに食わせるとRC4と言われて正答。

1-8. 議事録

1-6. 復号1 パスワードと同様に暗号化ファイルが与えられて展開する問題。同様にランサムサイトに暗号化ファイルを与えてみると100バイトまでの制限がかかっていて復号化できない。

RC4なので、先頭100バイトだけ切り出して送ってやれば先頭100バイトは復号化できそう。復号してテキストエディタで開くと、答えが書いてある。

株式会社マクニキ 議事録
日付: 2024年6月19日
場所: [redacted]
時間: 1

1-9. 復号3 実験データ

tarファイルの先頭が暗号化されたファイルが与えられる。tarファイルということでファイル圧縮もないので、ファイルカービング(ファイル抽出)をしてやればよさそう。

binwalkでファイルカービングすると、xlsxファイルが入っていてそのうちの1つに聞かれている問の答えが書いてある。binwalk -e Experiment\ Data.tar.amrwとすればいい。

1-A. 暗号鍵

パケットキャプチャが与えられるので、C2通信から暗号化鍵を抽出する問題。ファイルはとても小さく、実質関連するのは以下の部分。

GET /amrwc2/ HTTP/1.1
Connection: Keep-Alive
User-Agent: A WinHTTP Example Program/1.0
Host: [redacted].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

0000002c9e688c523f5dea24513e■■■■■■■■■■

ghidraでamrw.exeを見てみると、FUN_140001000でこの通信を発生させていて、その結果をFUN_1400014d0で処理している。良い感じに変形すると以下のようになる。

void FUN_1400014d0(char *id_and_key,char **id,LPVOID *key)

{
  char *pcVar1;
  size_t len;
  LPVOID pvVar2;
  
  pcVar1 = (char *)_malloc_base(9);
  *id = pcVar1;
  len = strlen(id_and_key);
  pvVar2 = _malloc_base(len - 7);
  *key = pvVar2;
  strncpy(*id,id_and_key,8);
  (*id)[8] = '\0';
  FUN_14000d650((longlong)*key,(ulonglong *)(id_and_key + 8));
  return;
}

idかkeyかという所は呼び出し元のログ出力を見ると判断できる。先頭8文字はIDで、後半がkeyになっている。FUN_14000d650は多分hexからbytesにするもの。多分。よって0000002c9e688c523f5dea24513e■■■■■■■■■■に分割でき、後者が答え。

1-B. 復号4 ボーナス

暗号化ファイルが与えられるので復号化する問題。1-7RC4で暗号化されていること、1-Aで暗号化鍵が判明しているのでCyberChefで復号化可能。

1-C. 暗号化対象のディレクト

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

amrw.exeをghidraで開き、巡回すると、FUN_140001e20にそれっぽいのがあり、これが答え。

void FUN_140001e20(undefined8 param_1,undefined8 param_2,undefined8 param_3)

{
  FUN_140001dc0(■,param_1);
  FUN_140001dc0(■,param_3);
  return;
}

1-D. 犯罪グループの組織名 (解けなかった)

2. 単体問題

2 - Crypto Currency

株式会社マクニキは、ファン向けのトークンとしてSolanaブロックチェーン上でmacnicoin(単位:MAC)を10億MAC発行しました。しかし、2024年6月19日(日本時間)の昼間に、macnicoinの管理システムがハッキングされ、1億MACが盗まれる事件が発生しました。
この事件により、macnicoinの価格は大幅に暴落し、取引所から上場廃止されてしまいました。
あなたの任務は、このハッキング事件の犯人が使用したウォレットアドレスを特定することです。以下の情報を基に、犯人のウォレットアドレスを見つけ出してください。

事件発生日時: 2024年6月19日(日本時間)
盗まれたトークン: 1億MAC

ということで色々巡回してみるとこれが見つかる。トランザクションも2個しかないので、1億MACとなっているのがこれになる。ということで、これの送付先が正解。

2 - マルウェア特定

secret.docx.tkucという暗号化されたファイル名が与えられるのでマルウェアファミリーを特定する問題。

拡張子で検索してみるが良い情報が無い。stringsコマンドで文字列を持ってきてみるとWOW!THIS FILE HAS BEEN ENCRYPTED...という文字列が見つかる。これで検索するとこの記事が見つかるので、LODEINFOが答え。

3. 内部犯行

内部犯行をテーマとした問題群。

3-1. カナリートークンの特定

docxファイルにカナリートークンが含まれているので特定する問題。docxファイルはzipファイルとして展開可能なので展開して文字列httpで検索を書けて見ると、それっぽいのが見つかる。

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="https://[redacted]/mintel_beacon_receiver/draw.php?id=M5-800%20Order" TargetMode="External"/>

このURLが答え。

3-2. 外部に漏れた文書の特定

カナリートークンの検知ログと、トークンと実際に対応する文書のリストが与えられる。検知ログは以下のような感じ。

Date IP Address  User-Agent  ID  Whois
2024-01-05 00:48:05 232.141.110.180 Microsoft Office Word 2014  PD-45   Makuniki Inc
2024-01-05 01:41:05 232.141.110.208 Mozilla/4.0 (compatible; ms-office; MSOffice 16)    M5-70 Specs Makuniki Inc
2024-01-05 11:30:05 232.133.1.251   Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   RD-127  Makuniki Inc
2024-01-05 21:17:05 232.133.1.23    Mozilla/4.0 (compatible; ms-office; MSOffice 16)    M5-90 Update    Makuniki Inc
2024-01-06 05:29:06 232.133.1.192   Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   XR-85 Design    Makuniki Inc
2024-01-06 11:47:06 232.133.1.154   Microsoft Office Word 2014  FR-2024Q1   Makuniki Inc
2024-01-06 15:53:06 232.141.110.242 Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   SP-20   Makuniki Inc
2024-01-06 16:39:06 232.141.110.131 Microsoft Office Word 2014  M5-40 Specs Makuniki Inc
2024-01-06 21:38:06 232.141.110.7   Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   MR-2025 Makuniki Inc
2024-01-07 01:52:07 232.133.1.13    Microsoft Office Word 2014  PD-50   Makuniki Inc
2024-01-07 05:15:07 232.133.1.123   Microsoft Office Word 2014  M5-30   Makuniki Inc
2024-01-07 06:29:07 232.141.110.105 Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   M5-200 Update   Makuniki Inc
2024-01-07 07:17:07 232.133.1.163   Mozilla/4.0 (compatible; ms-office; MSOffice 16)    MN-5000 Makuniki Inc
2024-01-07 08:34:07 232.133.1.16    Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   BP-2024 Makuniki Inc
2024-01-07 10:48:07 232.141.110.118 Mozilla/4.0 (compatible; ms-office; MSOffice 16)    ER-67   Makuniki Inc
2024-01-07 16:03:07 232.133.1.115   Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   MR-2024 Makuniki Inc
2024-01-07 16:38:07 232.141.110.184 Mozilla/4.0 (compatible; ms-office; MSOffice rmj)   QC-2023 Makuniki Inc

whois情報も載っていてMakuniki Incは普通に社員が会社で開いたような感じに見える。なので、これだけ除外して一番新しいものを探すとコレ。

2024-06-12 04:45:12  245.6.11.3  Mozilla/4.0 (compatible; ms-office; MSOffice 16)    M5-30   Jerk Industry

このMS-30に対応するドキュメント 次々世代ねじ M5-30 設計書.docx を答えると正答。

3-3.アクセス者

クラウドストレージのアクセスログが与えられるので漏洩したファイルにアクセスしたユーザーを答える。

機密文書はすべて「Hako」というクラウドストレージに格納されている。 てしがわら君はHakoのアクセスログを調査し、漏洩したファイルにアクセスしたユーザを特定することにした。 Hakoのアクセスログを調査し、ユーザ名を答えてください。 漏洩ドキュメントは 次々世代ねじ M5-30 設計書.docx で、かつ、カナリートークンの時刻を見ると、先ほどのログから2024-06-12 04:45:12なので、この時刻の直前にこのドキュメントにアクセスしたログを探すと以下で、このユーザーが答え。

"username": "suzuki",
"filename": "次々世代ねじ M5-30 設計書.docx",
"access_time": "2024-06-11 14:08:25"

3-4. EDRのログ

EDRのログが与えられるので、機密文書がどこに保存されたのかを調べる。漏洩文書は 次々世代ねじ M5-30 設計書.docx なのでこれで検索して眺めると以下のような怪しいログがある。

2024-06-11 14:08:25, file write, E:[redacted]\次々世代ねじ M5-30 設計書.docx, chrome.exe, suzuki

3-5. 尋問 (解けなかった)

どうLLM問を作るのかと思っていましたが、とても面白いストーリーで用意されていた。ここまでの問題で証拠をつかんでいるので、本人を模した絶対に自白しないLLMに対して、自白させる問題。公式解説が非常に面白かった。