本記事は、筆者がAIとの対話形式で思考整理を行い、その内容を基に構成しています。いわゆるAI記事です。記載内容は公開情報の範囲内に基づいており、言及されているコンテストでのAIの使用は主催者の定めるルールに従っています。
はじめに
はじめまして、セキュリティエンジニアのSatoki (@satoki00) です。普段はWeb脆弱性診断をやりつつ、株式会社Ikotas Labsという会社で代表をやっています。CTF歴は6年で、所属チームでは主にWeb・Misc・AIのジャンルを担当しています。
先日、防衛省サイバーコンテストで、チーム名株式会社Ikotas_Labsとして出場し、圧倒的な速度で優勝しました。これはコンテスト用に構築したAIエージェントを投入し、Flag提出までを完全自動化した結果です。
本記事では、なぜAIエージェントで挑んだのか、どう設計したのか、そして実際にどうなったのかを順を追って解説します。ただし、詳細な実装は教えることができませんので、ご了承ください。
なぜAIエージェントで挑んだのか
かなり根拠のない強めな主張なのですが、以前こんなポストをしていました。実際はネタポストで、別にCTFは終了していないです。今もやっているし。
ただ現実問題として、国際的なCTFではAIを利用するのはもはや当たり前で、勝敗はAIで解けない超高難度の問題で決まります。そして、防衛省サイバーコンテストのような国内コンテストでは、問題難易度的にAIで解ける範囲が広いと予想していました。CTFで高難易度問題以外をAIで掃討するのが当たり前になっているのは、日本では我々のチームだけだと思います。この現状のアドバンテージを捨てる選択はないです。※ちなみに、今回のコンテストの個人戦1位も同じCTFチームのメンバーです。別のAIエージェントを作っていたらしい。
防衛省サイバーコンテストの告知が出た時点で、勘のいい参加者たちがAIを使ってくることはわかっていました。そして、AIを使っていない競技者と二分され、上位がAI勢で占められることも想像に難くありませんでした。トップ層がAIを使う前提なら、勝負はそれ以外の部分で決まります。手動でCTFを練習している暇はありません。私はタイピングが遅いので、手動でAIを使う戦い方でも不利です。だったら最初から完全自動化してしまえばいいという発想です。
AIでの重要なのは思考速度ではなく並列化です。AIの出力は確率的ですが、大量に試行すれば確率をカバーできます。下手な誘導や解法のインプットはノイズにしかなりません。必要なのは、AIをどれだけ効率的に回せるかというシステム設計だけです。
これら私自身の予測が正しいのかの実証実験の場と、AIを使わないセキュリティエンジニアに危機感を持ってもらおうとの目論見で、AIエージェントで挑むこととしました。
準備と設計
事前調査
完全自動化するためには、コンテストの仕様を事前に把握する必要があります。例年の形式から、防衛省サイバーコンテストはカスタムなしの素のCTFdで構成されていることがわかっていました。Googleドライブなど外部URLやインスタンススポナーなど拡張機能を使わないことも把握済みです。つまり、バニラのCTFdの機能さえ機械的に自動化できれば、誰よりも早くAIに問題を受け渡すことができます。
ちなみに、コンテストのドメインが証明書から開催前に察知できていました。これは皆さんも注意したほうがいいかもしれません。ルールに反するので検証していないですが、CTFdデプロイ時や開催時間設定ミスなどで問題が公開されてしまうリスクもありました。
システム全体のフロー
AIエージェントのフローは以下の通りです。簡単ですね。
- ログイン - CTFdへのチームログイン
- 問題取得 - 問題一覧と配布ファイルの取得
- 解く - AIエージェントが問題を解く
- Flag提出 - 正解なら次へ、不正解なら再度解く
- WriteUp作成 - 正解後、AIがWriteUpを自動生成
WriteUp提出が必要なCTFも多いため、WriteUpまでAIに書かせています。
並列化戦略
単一のAIモデルだけでは解けない可能性も考え、複数のモデルを同時に走らせていました。それぞれに異なる役割を持たせています。
- 速度重視 - とにかく早く解答を出す
- 精度重視 - 慎重に正確な解答を導く
- 検証 - 他のモデルの解答を検証する
各問題に対して、これらの立場から同時にアプローチさせることで、単一モデルの弱点を補完しています。並列数は30×4の120並列で実施しました。AIの出力は確率的ですが、これだけ並列化すれば確率を力でカバーできます。
AIに任せた範囲
事前にAIエージェントが利用できるCTF用のツールや設定も、すべてAIに考えさせ、AIにインストールまでさせました。防衛省が好きそうな問題傾向をAIで予測し、rockyou.txtなど初心者向けCTFに出そうな辞書まで導入しています。そして、このAIエージェント自体の開発も一行もコードを書くことなく、方針のみ自然言語でAIに入力して作りました。つまり、準備から本番まですべてAIで成し遂げています。人間が書いたのは配布されたCTFdのクレデンシャルと並列数くらいです。
直面した課題と解決策
完全自動化するにあたって、いくつかの課題がありました。そこまで大した内容ではないのですが、参考までに書いておきます。
VPN設定を魔改造してしまう問題
Welcome!問題にVPNの設定ファイルが添付されていました。AIエージェントがこれを読んで勝手にVPN接続を試みると、最悪の場合ファイルを書き換えて運営インフラを攻撃する可能性があります。この問題だけは手動で解いてVPN設定を行いました。
ヒントを勝手に開いてしまう問題
このコンテストでは、ヒントを開くと減点されます。今回はAIの全完が多数出ると予想しており、ヒントを開いた時点で敗北と考えていました。そのため、CTFd全体をエージェントに明け渡さず、ヒント機能へのアクセスを制限しました。ちなみにWelcome!はヒントにFlagがあるパターンでした。自動で解いていたら危なかった。
誤った解法で(E)DoSをする問題
AIが誤った解法を導出し続けると、運営サーバの負荷にもなり、こちらの金銭的負担にもなります。誤った解法やFlagを短いサマリーにまとめ、次の試行時にAIに渡す実装を行いました。AIが頑固すぎることも考慮し、システム的に不正解だったFlagを再提出しない機能も導入しています。ただし、運営が設定したFlag自体が誤っている可能性も考慮して、複数回の不正解も監視できるようにしました。
回答の回数制限を使い果たす問題
CTFdに提出回数制限があるかどうかは、大会参加要領がメールで届くまでわかりませんでした。無限試行で回答不能にならないよう、回数の半分まではFlag提出を許可し、それ以降は確認を挟む構成にしました。実際には制限がなくてよかったです。また、誤答しすぎると一定時間Flagを受け付けないペナルティがあり得るため、確証を持ったFlagを優先的に送信するようにしました。
人間と同期がとれない問題
人間より先に問題を解いた場合、通知する実装にしました。人間とAIの並列作業だからこそ、同期が重要です。逆に人間が手動で先に解いた場合、直ちにAIの試行を停止してリソースを解放し、他問題に取り組みます。
環境を破壊する問題
CTFでは固有のツールでしか解けない問題があり、それを導入する選択もAIに一任していました。AIにsudoを含む完全な自由度を持たせたかったため、サンドボックス内で問題を解くよう実装しました。元の問題ファイルや他の問題ファイルを書き換えてしまうことを防止するため、各問題に1つの環境を与えています。
リソースを取り合う問題
サンドボックスでファイルが隔離されていますが、ネットワークリソースを取り合う可能性もありました。そのため、各環境にはグローバルIP、重ならないポートを割り当て、外部からのリクエストがそのまま到達するようにしていました。XSSやリバースシェルなど、外部からの接続を受け付ける必要がある問題に対応するためです。
本番
チーム構成
AIが使えないようルール変更されたり、AIでは解けないレベルの高度な問題が出た場合に備え、AIを確実に上回るメンバーを揃えました。全員、二年連続日本1位のCTFチームのメンバーです。
- 東大博士課程のファジングおよびリバースエンジニアリングのスペシャリスト
- 脳内だけでWindows Kernel Exploitを書ける伝説のPwnプレイヤー
- ふつうのSatoki
全員、CTFで世界1位になった経験がチーム・個人とも複数回あります。
結果どうなったかというと、今回はみんなほとんど眺めていました。つまり、実質AIだけの個人戦です。ありがとう。
結果
1時間以内に全問題を解き切り、優勝しました。ただし、問題が一時的に壊れていて解けない時間がありました。実際にログを確認したところ、AIは30分以内に全問題の解法にたどり着いていました。運営にメールして直してもらいましたが、その時だけは焦りました。今後はDiscordなどホットラインが欲しいところです。ペイロード等をメールで送ると途中で叩き落とされて届かない可能性もあるので。
コスト面では、インフラで約1万円、各種AIモデルの利用で約1万円を使いました。そして祝勝会の叙々苑で3万円を失いました。一番高かったのは焼肉です。
この試みの目的
ここまで読んで、「なぜこんなことをしたのか」と思った方もいるかもしれません。
今回の試みには明確な目的がありました。現在のサイバー空間では、攻撃者がAIを活用することは既に現実のものとなっています。フィッシングメールの生成、脆弱性の探索、マルウェアの作成に至るまで、攻撃側はAIの恩恵を受けています。一方で、防御側はどうでしょうか。多くのセキュリティ人材は、まだ従来の手法に頼っています。しかし、AIを使う攻撃者にAIなしで立ち向かうのは、もはや現実的ではありません。攻撃側がAIを武器にする以上、防御側もAIを味方につけなければ対等に戦えないのです。
今回のコンテストで示したかったのは、AIがセキュリティ領域でどれほどの能力を持っているかという事実です。30分で全完できるということは、同じことが攻撃側でも起こり得るということを意味します。この現実を認識した上で、AIを防衛にどう活かすかを考えるきっかけになればと思いました。
おわりに
CTFに関しては、世界レベルの超高難度問題はまだまだAIでは難しいです。しかし、日本レベルならもはやAIがトップ。そして世界レベルももうすぐ超えられるかもしれません。
AIに完全に思考を任せることを「AIキノコ🍄が頭に生える」と勝手に言っています。脳が乗っ取られたように見えるためです。みんなもAIキノコ🍄を頭に生やしましょう。
※AIエージェントの公開予定はありませんが、詳細を聞きたい方は連絡ください。Xの@satoki00まで。
Comments
Let's comment your feelings that are more than good