Snippets

Masafumi Yabu whywaita Advent Calendar 2015 Day 18

You are viewing an old version of this snippet. View the current version.
Revised by nomeaning777 917c19f

whywaita Advent Calendar 2015 Day 18

はじめに

whyくんと言ったらCTF(今年はSECCONオンラインやTrendMicro CTFの予選に参加しておりました)というのは非常に有名な事実だと思います。なので、今年9月に私含むMMA部員3人で開催したCTFであるMMACTFについてちょっと書きます。

開催する切っ掛け

MMAでは2013年3月〜4月あたりから部内で問題を出して解き合うという文化がありました。 それにより、新歓CTFなどで出題したものを除いても、2015年7月時点で100問弱の非公開の問題がありました。2014年の時点で既にコンテストを開催しようという話は上がっていたのですが、主にCTFをやるメンバーが忙しくて進みませんでした。2015年の前期に入って全員ある程度の余裕がある状態になり、話が具体的に進み始めました。最初はtkbctfと同じく国内向けで半日開催する予定でしたが、出題出来る問題がかなり多く、また暗号問題の難易度がそこそこあるため、国内のみにするには勿体無いという話になり、国内・国外の両方に向けて48時間開催するということになりました。開催を決定した時点で9月のうち週末で空いている日程は9/5,9/6しか無かったため自動的にそこが開催日になりました。

作問

今回のCTFでは上記の部内問題のストックからの問題が中心になりました。 ただし、Pwnジャンルの問題が殆ど無かったため、コンテストを開くためにytokuさんにより数問ほど作問されました。 また過去の問題には、エスパー(Guessing)要素が大きいものがあったので、それらについては相談しつつ出来る限りエスパー要素が発生しないように改題して出題しました。

出題した中での作問数はytokuさんが13題、 私が14題、hiro1357さんが4題、私とytokuさんの共同作問が1題、練習問題が1題でした。

スコアサーバーの作成

いくつか既存のスコアサーバーがあるのは知っていたのですが、良い感じに多言語対応のものが無かったので新規に作成することにしました。

スコアサーバーの実装は全て私が担当し、使用感の確認やテストをytokuさんとhiro1357さんにやってもらいました。

構成

スコアサーバーは大体、次の5つから成り立つ感じになりました。 * アプリケーションサーバー(Rails) * データーベースサーバー(MySQL) * キャッシュサーバー(Memcached) * ログサーバー(Fluentd) 必要に応じてチャットに通知ように構築。 * 監視サーバー(Nagios3) このうち、アプリケーションサーバーとキャッシュサーバーは簡単に増やせるようになっていました。また、静的ファイルや問題ファイルはアプリケーションサーバーからではなくAzure CDNから取ってくるようにして高速化を図りました。DNSにはAzure DNSを利用しましたが、設定してから数秒で反映されて非常に良い感じでした。

登録時(2015/08/29-2015/09/04)は2台のサーバーを、 開催時(2015/09/05-2015/09/07)は合わせて6台のサーバーを用いて運用しました

DNS, スコアサーバー用の仮想マシン、CDNを合わせて、11,140円ほどのAzureインスタンスを利用しました。開催中は(最も負荷が集中する開始時ですら)どのサーバーもかなり余裕があったのでもっと安く抑えることは容易だと思います。

告知・宣伝

日本向けの告知にはTwitterを主に使いました。

海外向けの告知にはctftimeと呼ばれるサイトを利用しました。ctftimeはコンテストの追加のリクエストを送ってから大体一週間程度でページが追加されました。公開時は時刻が大幅に間違っていたためメールを送って修正してもらった。ctftimeについては終了後に順位表を送る必要があるのですが、それについても即日に送信しても反映に数日かかった記憶があります。

開催

開催中は主に問題のデプロイ、スコアサーバーの修正、IRCでの質問の回答が主な作業になりました。 開催中の質問対応にはIRCを使いました。PMを見逃すことがないように、shoutなるウェブベースのIRCクライアントを用いてuecmmaアカウントを3人で共有しました。IRCは日本語のチャンネルと英語のチャンネルを作ったものの、日本語のチャンネルはほとんど発言がありませんでした。

48時間のコンテストで3人しか動ける人が居ないのは睡眠する時間のことを考えると足りないのでもっと増やすべきでした。

さいごに

次回の開催の時は手伝ってくれると嬉しいです!(開けるかどうかは分からないけど) > whyくん

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.