feature image

2020年3月13日 | 活動紹介

SECCON CTF 2019 International 参加記

15B / 19M の @nari です。

2019年12月21日(土) と 2019年12月22日(日) に開催された SECCON CTF 2019 International に、traP からチーム NaruseJunとして出て 優勝 しました 🎉

この記事は、SECCON CTF 2019 International の参加記です。

各メンバーの writeup は以下のとおりです。

概要

SECCON は毎年開催されている日本最大級のセキュリティコンテスト及びカンファレンスイベントで、SECCON CTF はそこで開催されている CTF 大会です。
SECCON CTF 決勝に参加するにはオンライン予選で上位を取る必要があり、その結果の上位チームが国際決勝へ、また国際決勝に進出しなかった日本の上位チームが国内決勝へ、それぞれ進出します。

チーム NaruseJun は東工大の学生、特にサークル traP のメンバー(元メンバー)によるCTFチームで、SECCON CTF 2019 International には以下の 4 人が参加しました(表記は traP ID)。

予選は過去の決勝進出者等その他多数のメンバーも含めたチームで参加し、5 位を取ることが出来、国際決勝へ進出できました。なお、チーム NaruseJun の過去の出場実績は 2017 年国内決勝 2 位、2018 年国際決勝 2 位です。

参加記

1日目

国際決勝は 6 問からなり、国内決勝と同じ問題が使われていたようです。

私は Crypto 以外ほとんど出来なくて Web が少々というタイプの CTFer だったので、とりあえず Jeopardy の中にあった Crypto の問題 (Factor the flag) を解きました。Crypto の問題が無いよりはあったほうが仕事があるわけで嬉しいのですが、残念ながら半分 Misc のような問題ですぐに仕事が終わってしまいました。

他には Jeopardy の中の Fuzzing の問題 (syzbot panic) が、syzbot というソフトウェアに関連した不具合を修正したコミットの ID を探すという、半ば OSINT のような問題で、一応知識のない私でも解けそうな問題でした。途中までは解けたのですが、全然分からなかったので @Azon に渡したら瞬殺してくれました。

この時点で残っていた問題は、ネットワーク、バイナリ系統を除くと、弐の画像認識問題と、伍の二人対戦ゲーム AI 問題だけでした。弐については @Azon が取り組んでいたので、私は伍に取り組むことにしました。

伍はスネークゲームを二人対戦にしたものが題材で、その AI を作って指定されたサーバで動かすという問題でした。コンテスト序盤はそのサーバに関する情報が公開されてなかったり、プログラムを良く読んで無くて問題の把握が遅れたりしたため、ゲームに関する謎の問題で、どうすればポイントが得られるかも分かっていませんでした。

1 日目の後半になってプログラムの構成を把握して、何をすればデフォルトの AI を改造できるのかと、ポイントが入るのは 5 分おきにレーティング 1 位のチームであることを理解しました。そこから 1 日目の終了までは、時間もあまり残っていなかったため、デフォルト実装である Python を使ってバグだらけの αβ 探索を実装しました。1 日目の終盤は LC↯BC が 1 位をキープしてポイントをがっぽり稼いでいました。

1 日目終了時点での NaruseJun の順位は 5 位でした。参考: https://twitter.com/d_a_i_i_n_o/status/1208307588573433857

1.5 日目

SECCON 決勝の特徴として、コンテストが 2 日間で構成されているため、1 日目と 2 日目の間の夜、問題・ハードウェアを持ち帰って自由に解析・実装が出来るという点があります。チーム NaruseJun は高架下のオシャレなホテルにチェックインし、寝る間を惜しんで各々問題に取り組んでいました。

私は伍の AI 実装を高速な C++ 言語に移植した後、最終的にモンテカルロ木探索によるさいきょうの AI を実装しました。実装が終わったのは一般に朝と呼ばれる時間帯で、そこからシャワーを浴びながら元の AI と戦わせて勝率を計測したりしました。

伍で実装した AI の詳細は SECCON CTF 2019 International 問題伍(5) writeup | 東京工業大学デジタル創作同好会traP に書きましたので気になる方はこちらを参照してください。

2 日目

2 日目、会場に入ると、なぜか 1 位になっていました。原因は問題弐のポイント計算が正しく行われていなかったことで、1 日目のほとんどのポイントを @Azon が取っていたことが発覚しました。

昨晩 @ptr と @kriw が取っていたフラグも提出し、私も昨晩の AI を @ptr にコンパイルしてもらってサーバに置くことが出来ました。

私の仕事は 2 日目が始まってそうそう終わってしまったので、残りは @Azon が取り組んでいる問題弐をチラチラ見たり、さいきょうの AI の仕事を眺めていました。本当にやることが無かったのでマックでお昼ごはんを買ってくる人をやったりしてました。SECCON は最強の Crypto 問題を出してください……

結果

最終的に、問題弐と問題伍のポイントをほぼ独占することに成功し、優勝することが出来ました。参考: https://twitter.com/d_a_i_i_n_o/status/1209021277467332609

前回大会での準優勝から優勝ということで、前回も参加していた今回のリーダー @kriw は雪辱を果たせたと喜んでいました。個人的には優勝したチームに Happy Hacking Keyboard が贈られるところを 2 年前に見ていたので、実際に優勝して貰うことが出来てとても嬉しかったです。

また今回の件について各所で取り上げていただきました。ありがとうございます。

nari icon
この記事を書いた人
nari

競プロ(C++) / CTF(Crypto/PPC) / ゲーム作成(C++/Java/JavaScript) 参加プロジェクト: Traps of Typing(プログラマ) / Polar Snow Fantasy(プログラマ)

この記事をシェア

このエントリーをはてなブックマークに追加
共有
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記