開発者が参加してみたハッキング(RedTeam)大会レビュー

ENKI RedTeam CTF


ハッキング大会に参加した。セキュリティを勉強している友人が参加するというので、じゃあ自分も?5年目のエンジニアとしての経験があるし、と軽い気持ちで飛び込んでみた。

はじめに

参加した大会は ENKI RedTeam CTF だ。 本格的なレビューの前に、セキュリティ用語に馴染みのない方のために簡単に整理しておこう。(参加した私自身も用語を知らなかった)

RedTeam: セキュリティの脆弱性を検証するために「攻撃者」の立場から侵入シナリオを実行するチーム。反対に防御側は「BlueTeam」と呼ぶ。 CTF(Capture The Flag): 直訳すると「旗取り」。システムの弱点を突いて隠された特定の文字列(Flag)を見つけるとポイントが得られるハッキングコンテストだ。 ENKI: 国内でもかなり規模のあるサイバーセキュリティ企業。ホワイトハッカー採用のためにこの大会を開催したとのこと(上位〜30位まで採用機会が提供されるらしい)。

大会名をまとめると、ENKIが主催した侵入(ハッキング)コンテストで、誰が一番うまくFLAG(文字列)を見つけられるかで順位を決める、ということだ。

大会スタート

正直なところ、セキュリティという分野にはあまり触れてこなかった。情報セキュリティの授業はドロップしたし、セキュリティの資格試験も筆記試験にギリギリ合格したものの実技を諦めた。 セキュリティは学ぶべきことが他の分野とは桁違いに多い。前日に一日詰め込んでも意味がない、と割り切って早めに寝て万全の状態で臨むことにした。

大会はオンラインで、土曜日の午前11時〜日曜日の午前11時、計24時間にわたって行われた。 私は11時のスタートと同時にまず問題の種類を把握した。

1つ目の種類はクライアント/サーバーのソースコードと攻撃対象のWebサイトURLが提供されるタイプ。 2つ目の種類は何の情報もなくWebサイトのURLだけが与えられるタイプ。(このタイプはWebサイトを通じて攻撃対象サーバーのroot権限にアクセスしてフラグを取得しなければならなかった。)

全ての種類を把握した後、切り札であるClaude Codeを複数のターミナルに立ち上げた。 戦略的にネットで見つけた senior-security-engineer というSKILLも適用した。 素早い自分の指とClaudeの明晰な頭脳があれば、怖いものなしだった。

4つのターミナルに4つの問題を並べ、Claudeに頭脳を委ねた私は「早く解きすぎたらどうしよう?」という謎の自信をつまみにコーヒーを一杯飲んだ。

Claudeに失望する

私の役割は4つのターミナルでYを押すことだった。1時間ほどYを押し続けていると、何かがおかしいと気づき始めた。 いろいろな試みはしているものの突破口となる脆弱性は見つけられず、特定のケースにはまって無意味な試みを繰り返すばかりだった。

さらに悪いことに、Claude Codeのセッション制限にも達してしまった。残されたのはGeminiの無料プランと自分の頭だけだった。

自力で解く

※ 問題の著作権があるため、詳細な解法は記載していない。

自分が多少知っている分野の問題を一つ選んで深く掘り下げた。 Next、Flask、Redis(+Lua)で構成されたシンプルなインフラで、FLAGの場所も明確だった。

ソースコードの分析はほぼ完了した。結論は、NextをPythonの特定のエンドポイントへの内部リクエストを送るように仕向ける必要があるということだった。 でも、どうやって?ソースコード上は防御的なコードがしっかり書かれており、隙がないように見えた。

ここで詰まったまま6時間が経過し、午後5時になった。

ClaudeはGODだ

Claudeのセッション制限が解除され、自分が把握した内容を共有してどうすれば解決できるかを一緒に考えた。

そうして会話をしていると、可能性がありそうな提案が出てきた。 Nextが提供する特定の機能を悪用しようというアイデアで、結果的にこれが解決策となった。

この部分が問題の核心的な脆弱性なので詳しくは説明できないが、フレームワークの特定機能の脆弱性とネットワーク通信の悪用を組み合わせ、ついにFLAGを取得することに成功した。 問題を解き始めて8時間後、午後7時のことだった。

FLAGを手に入れたとき、久しぶりに震えるほどのドーパミンを感じた。一つの問題に8時間も向き合ったのはいつぶりだろう? 解けたのはClaudeの貢献が大きいが、自分の基礎知識がClaudeとのco-workに大きな役割を果たしたことも否定できない。

成績

死闘の末、1問解いた。 (スコアボードには2問解いたように見えるが、1問はDiscordに参加するだけで解いたことにしてくれる。)

scoreboard

感想

その後もう一問チャレンジしてみた。ただ、どうしても一つのリンクが繋がらずに進めなかった。

感じたのは、中途半端な知識では問題を一問解くことすら難しいということだ。

それでも、一問でも解けたことへの達成感はある。

Disclaimer

本レビューは大会の問題の著作権を守るため、具体的な脆弱性の箇所やペイロード、ソースコードなど問題の核心的な解法は含んでいない。個人的な学習経験とインサイトを中心に書いたものだ。本記事に法的な問題がある場合は wichan.dev@gmail.com までご連絡ください。