セキュリティの技術を競うCTF(Capture The Flag)を自分たちで開催してみたい! そんな電通大の学生3人によって開催された「MMA CTF 1st 2015」。たった3人でスコアサーバーを作り、問題を作り、サンドボックスを作った。70か国・地域673チームが参加したMMA CTF 1st 2015の舞台裏を谷崎朋子が聞いた。
CTFを開催したい! 2年越しで夢を実現
賑やかな調布駅前を抜けて北へ5分ほど歩くと、国立大学法人 電気通信大学のキャンパスが目に入る。そのキャンパス奥で静かに佇む、どこか懐かしさを感じさせる昔ながらの部室棟に、最近セキュリティに関わる技術を競うCTFで活躍が目覚ましいチーム「MMA」の所属サークル「Microcomputer Making Association」の部室があった。
同サークルの歴史は古い。当時は高価だったマイクロコンピューターを自作しようと同志が集まって1975年度に結成し、1976年度にサークル承認される。時代は流れ、安価な汎用PCが手に入る現在は”計算機に関わることであれば何でもやろう”をモットーに、学生たちがテーマごとにグループを作って思い思いの活動を続けている。CTFチームのMMAは、そんなグループの1つだ。
中心メンバーは、修士2年で暗号が専門の徳重佑樹(ytoku)氏、修士1年でネットワーク分野を研究する今田寛(hiro1357)氏、学部4年でプログラミングが得意な薮雅文(nomeaning)氏の3人だ。2012年頃からさまざまなオンラインおよびオンサイトのCTFに参戦。今年1月30日に開催されたSECCON 2016の学生大会では、見事3位に入賞した。
そんな彼らが昨年の9月5~6日、国際オンラインCTFを初開催した。始まりは、今田氏が問題を作ってメンバーと共有したことだった。面白いと感じた3人は、早速部内の勉強会用にと問題を作成し、部内限定で公開。興味ある部員は問題を作ってアップロードできる環境を整えた。
2013年4月、3人はこれまで貯めてきたCTF問題の一部に加えて、他のMMA部員に募った問題を新入生歓迎会用CTFとしてまとめ、部外に公開した。新しい部員にCTFや活動を紹介するためだ。
「実は、問題を作った当初から外部の人にも解いてもらいたいと思っていた」。薮氏は明かす。それから数ヵ月後、部会でオンラインCTFを開催したいと発表したのは自然の流れだった。
開催時期は2014年8月。形式は、問題を出題するジェパディ。Web、暗号、プログラミング、フォレンジック、ネットワーク、その他の6ジャンルで各5問、計30問を用意。まずは国内向けに開催し、経験や知見などを蓄積してから徐々に国際大会へとステップアップする。そんな計画を打ち立てた。
しかし、いろいろなタイミングが合わず、準備が遅々として進まない。結局、予定期日に間に合わないまま話は立ち消えた。
それでも、やっぱりやってみたい。2015年5月18日、CTFへの思いを改めて確かめ合った3人は、再始動に向けて立ち上がった。今田氏は「(学生が自主的にやりたいと述べたことについて)ダメと言うのを聞いたことがない」サークル顧問の教授の存在も大きかったと感謝する。
CTF参加経験を活かしてコンテスト用システムを開発
薮氏はすぐにスコアサーバーの実装に取り掛かった。「Webサービスとして完結していること、多くの人が作成・公開していて活用できることなどから、作業自体は難しくない」。そう述べる薮氏だが、徳重氏は「さまざまなコンテストに参加してきたが、開始直後の1分間にスコアサーバーが重くなることがしばしばあり、そうした問題の改善を考えて作っていたように見えた」とコメント。バックエンドのデータベースサーバーへの過剰なアクセスが原因で、問題を解いてもサブミットできず、参加者にとっては待たされる時間がストレスとなっていた。
薮氏は「確かに、開始直後は多量のアクセスが来るのでサーバーが重くなりがち。だから、デプロイ先のMicrosoft Azureのコンテンツ配信を最適化するContent Delivery Network(CDN)にできるだけ負荷を任せられるように作ったんです」と明かす。
ストレスなくCTFを楽しんでもらえるよう、(万が一の不具合で修正が大変になりがちな)独自の機能を持たない、標準的で安定稼働するシステムを目指す。CTFに参加して「こうだったらいいな」と感じたことを盛り込んでいった。
もう1つ、CTF用に開発したのはPwn(バイナリ)問題用のサンドボックスで、これは徳重氏が担当した。「任意のコードを実行して解く問題向けにサンドボックスを用意するのだが、外部に公開していることからスパムや攻撃の踏み台にされる可能性がある。また、あるチームが解いているところを他チームがのぞき見したり、Fork爆弾(新規プロセスを生成するfork機能を連発させることでシステムに負荷をかけてダウンさせる攻撃)でコンテストを妨害されたりしないよう、安全で安定稼働するシステム作りを心掛けた」(徳重氏)。
あと、部内チャットシステムのチャネルの1つにサーバーエラーのログを吐き出すよう設定し、障害が発生してもすぐに気付いて対応できるよう可視化した。これのおかげで、CTF開催中もほぼリアルタイムに不具合への対応や細かい微調整ができたと薮氏は言う。
作問作業については、これまで作り貯めていた問題で部内外には一度も公開していないものがいくつかあり、追加で作成した場合でも開催までに十分間に合うことが分かった。