UECTF2022 開催記

これはUEC Advent Calendar 2022の3日目の記事です。
昨日はsuzukeさんの「Markdownでスライドを作って公開する」でした。

調布祭の期間中にUECTF2022という初心者向けCTFを開催しました。UECTFとしては初めてのCTFの開催でいろいろ大変だったので、知見や反省点などをまとめました。

UECTFについて

UECTFはUECのゆるCTF集団です。主にDiscordで活動していて、たまにCTFに参加しています。Student Hubにあるので電通大生なら誰でも入れます。

準備

調布祭でCTF開催しようという話は6月下旬にありましたが、本格的に動き出したのは10月下旬でした。この時点でほぼ準備が出来ておらず、本当に開催できるのかかなり怪しい状況でした。結局、フェーズシステムの導入や3日間の開催が決まったのは調布祭の前日でした。また、告知用のTwitterアカウントやDiscordサーバ、スコアサーバの準備などは2日前ぐらいから行われました。作問はほとんど出来ていましたが、レビューが間に合っていない状態でした。そのため、開催の告知は当日になってしまいました。

フェーズシステム

今回は段階的に問題を追加するフェーズシステムを導入しました。これを導入した理由は主に2つあります。1つは電通大生が参加しやすくするためです。調布祭の他のイベントに参加していても、取り組みやすいように配慮しました。もう1つは作問とレビューが間に合ってなかったからです。
問題の追加は賛否が分かれるところですが、今回はそれぞれのフェーズで出題する問題数やジャンルに偏りがないようにしたのはよかったかもしれません。ただ、運営側の仕事はかなり増えた気がします。問題の公開は手動で行っていたため朝8時に起きる必要がありました。また、PwnやWebの問題は公開の時間にDockerコンテナを立てる必要があり、1日目の深夜に自動化スクリプトを書くことになりました。

作問

作問では主にDiscordとGithubを使いました。Discordではジャンルごとにチャンネルを立てて案出しや議論を行いました。Githubでは問題ごとにブランチ切ってPR→レビュー→マージという流れで問題を管理していました。一部の問題は不備があったり完成していなかったりしたので、作問とレビューは2日目の深夜まで行われました。
私はPwn3問を作問しました。Writeupはこちら
最終的なsolve数をみると、Pwnは他のジャンルよりも少し難しかったかもしれません。ちょっと申し訳なかったのでWriteupを丁寧に書きました。CryptoとReversingとMiscも1問ずつ作っていましたが、微妙だったので没にしました。

guess

easyにしたのにあんまり解かれないな…と思っていたら、ローカルで成功するけどリモートでは動かいないという旨の問い合わせがいくつかありました。入力末尾の改行文字でうまくいってないみたいだったので、ヒントとともに注意を促しました。ヒントはいらなかったかもしれませんが、初心者向けCTFなので出しました。

rot13

ヒープ問を出すのは気が引けたので、ヒープアルゴリズムを知らなくても解ける問題になりました。初心者向けとしてはwin関数はあったほうがよかったかもしれない。

buffer_overflow_2

原案はもう少し簡単な問題でしたが、開催期間がいきなり3日になったのと解法が一部rot13と被ってしまったため、無理やり難しくしました。

開催中

私は主に質問対応と問題の公開を担当しました。

1日目

Pwnの問題でトラブルが発生しました。コンテナが起動しておらず、問題に接続できない状態でした。すぐには対応できなかったため2日目の朝の出題に変更しました。

2日目

問題公開の時間に自動で起動するはずだったコンテナが起動していませんでした。docker-compose.ymlがなくて失敗したようで、結局手動でdocker runしました。あとなぜかPwnのrot13が予定の10時間前に起動してました。また、UECTFのメンバーで集まって調布祭を見て回ったりしました。

3日目

小さなトラブルがいくつかありました。MiscのWHREAMIでは重要な部分が問題文から抜けていたため、正答するのが難しい状態でした。問題文を訂正するか迷いましたが、元の問題文で解けている人がいたためヒントとしてその抜けていた部分を公開しました。

結果

1点以上獲得した方は105名いました。また、全完された方は2名いました。

反省

他にもたくさんありますが…

圧倒的準備不足

実質作業期間は約3週間ぐらいで、明らかに準備不足でした。レビューが不十分な問題が多く、スコアサーバなども含めてほぼぶっつけ本番だったため、大きな障害が起きなかったのは奇跡だったように思えます。もっと余裕を持って入念に準備を行い、万全の状態で開催すべきでした。

告知

準備が遅れていたため、告知が開催当日になってしまいました。開催の1週間前ぐらいにスコアサーバを公開し、告知を行うべきでした。また、参加者のほとんどは外部の方で、電通大生にうまく伝わってなかったように思えます。もう少し電通大生にもアプローチすべきでした。

画像フラグ

これはアンケート等で多くの方からご指摘いただきました。確かに誤答の多くは画像フラグの問題でした。画像フラグの問題はなるべくシンプルなフラグにすべきでした。

終わりに

CTF開催に協力してくださった方、CTFに参加してくださった方に感謝申し上げます。あとWriteupとても嬉しいです。ありがとうございます。
次に開催するとしたら、もっとクオリティを上げたいですね。UECTF自体もまだまだ発展途上なので、積極的にCTFに参加して力をつけていきたいです。