Problems of CODE BLUE CTF 2018 Finals

これはCTF Advent Calendar 2018の1日目の記事です。

こんにちは。 国際セキュリティカンファレンスCODE BLUEが主催のCTF、CODE BLUE CTFの運営をしていました。 いくつかのチームから決勝の問題を公開してほしいというリクエストがあったので、以下に問題を公開します:

www.dropbox.com

CBCTF 2018では、決勝をBull's Eyeと呼ばれる方式とJeopardyのmixedで行いました。 具体的には、Bull's Eyeは以下のような手順で遊ぶルールです:

  1. 運営はDockerレジストリサーバーを建てていて、そこに問題イメージがuploadされます。問題は特定のポートから接続できるサービスになっています。
  2. 参加者はそれを手元にpullし、解析したらexploit(攻撃コード)を書きます。ここまでは他のルールとあまり変わりません。
  3. 参加者はdocker run した際に、サービスに接続しexploitを行うようなDockerイメージを作成してレジストリに提出します。
  4. 運営は提出されたexploitイメージを問題イメージとdocker-composeによって結合し、500回程度攻撃の成否を見ます。成功回数(を適当な非線形な式によって変換した値)がそのチームのその問題に対する得点になります。

JeopardyやA&D、King of the Hillといった他の競技形式ではexploitの精度を評価するということが不可能でしたが、 このようにBull's Eyeでは「500回の試行の内、何回成功したか」を見ることによって、評価する事が可能になっています。

Advent Calendarの12/25の記事においてもまた言及するかと思いますが、 このルールは作問の観点からも非常に面白かったです。 イメージとしては部分点解法と満点解法を用意する感じになって、少し競プロっぽい要素があります。

部分点解法の用意の仕方にもいろいろな方法があるということも分かりました。 例としては、「問題中に複数の脆弱性を含めそれぞれで成功確率を変える」や「ASLRの影響でbrute-forceによって解こうとすると確率が下がり、丁寧にアドレスをリークしてから解くと満点になる」という方法などがあります。 おそらく、上に公開した問題群はこれらのモデルケースとしてもかなり優秀だと思うので、Bull's Eye形式の大会を開催するという人(いるのか?)は参考にしてみてください。

以下に、virtual contestを行いたい人向けの情報を置いておきます。

コンテスト前に実際に配布されたPlayers' Manualです:

docs.google.com

各問題が公開された時間です:

  • Fuzzy Fault: Finals 開始時から公開されています。
  • Easy Example: Round 1(Sanity Check Round終了時)から公開されています。
  • JNI, CTC: Round 2(Round 1終了時)から公開されています。
  • Fliqpy: Round 3(Round 2終了時)から公開されています。
  • Account, OSS: Round5(Round 4終了時)から公開されています。

各問題のスコアリング関数(の生成スクリプト)です。Rubyが何も分からない + 信頼区間を考慮しつつ階段関数を作る必要があったのでPythonでやっています:

gist.github.com

ただし、実際にはこれで生成された式を3倍しています(つまり300点満点)。これはOSSとの兼ね合いで、OSSは相異なる3環境で動く同じサービスに対して1つのExploitを提出する問題となっており、それぞれの環境で100点満点となっています。 また、AccountとOSSに関しては他の問題と比べ、点数の重みが2倍となっています(つまり、Accountは600点満点、OSSはそれぞれの環境で200点満点)。これは公開が遅く、2回しか評価ラウンドが存在しないことが理由です。

Jeopardyの問題、Fuzzy Faultは1200点です。

この情報を元に、各ラウンド終了時点でのexploitを手元で500回自分のExploitを回してもらえれば大体本番での順位が分かります。 ちなみに、1位のCykorの点数は5353点です。ぜひ挑戦してみてください。

全チームの最終順位および詳細な結果(各ラウンドでの各問題の獲得点数等)は、12/25に発表予定です。

明日は@xrekkusuさんの記事、「WebAssemblyちょっとやる」です。