Security blog by Ierae Security,Inc.

脆弱性診断技術や関連情報を発信するブログメディア

Google Capture The Flag 2017 (Finals)参戦レポート

IT界の巨人・Googleが主催するCTF(Capture The Flag)として注目を集めた、『Google CTF』。
2016年の第1回に続き、今年も全世界から精鋭のエンジニアが集い、熱い戦いを繰り広げました。
弊社エンジニアが所属するチームが、スイス・チューリッヒで行われた本選で4位入賞を果たしました。

そこで当エントリーでは、弊社社員の奮闘ぶりをご紹介します。

──予選(世界標準時6月17~18日)には、どのくらいのチームが参加していたんですか?

全部で1,976チームがエントリーしていました。もっとも、エントリーしただけで実際には何もしなかったチームも相当数あったようです。僕が聞いたところでは、実際に何かしらの問題に挑戦したのは317チームということです。

予選は、参加者が各々の居場所からオンラインで問題に挑戦する方式です。一つの会場に集まる訳ではなかったので、規模感は感じませんでしたね。

──そしていよいよ、本選(世界標準時10月28~29日)進出となった訳ですね。

僕が所属していた「binja」も含め、全部で10チームが勝ち上がりました。
「binja」は有志から成る混成チームで弊社のチームではありませんが、メンバーの一部として弊社エンジニアが所属しており、今回の本戦では参加メンバーの中で3人が弊社エンジニアでした。

──問題ですが、どういう内容だったんですか?

組み込み機器の解析・Webサービスに対する攻撃・暗号の解読・プログラムのリバースエンジニアリング等、セキュリティに関して一通りのジャンルは網羅されていました。
問題数は、本選では19問です。

リモートではなくオンサイトで開かれる、本選ならではの面白い問題もありましたね。

img-googleCTF17-03

まず、鍵の掛かった箱と南京錠が用意されていて、どうにかして解錠に成功すると箱の中に正解の文字列が書かれた紙が入っているという、アナログな問題もありました。Google CTFのみならずDEFCON CTFもですが、サイバーセキュリティのCTFというのは基本的にサイバーセキュリティのスキルが試される場であるものの、出る問題は必ずしもサイバーなものとは限らないんです(笑)。

img-googleCTF17-02

それと、これ(写真参照)。おもちゃのスロットマシンの筐体に独自の小さい基盤とディスプレイを組み込んだ、Google特製のスロットマシンです。このスロットで大当たり(777)を出現させられれば、見事クリアです。
解答手順を具体的に説明すると、まず基盤に搭載されているICをプログラマと呼ばれる機器経由でPCと接続して、スロットのプログラムを吸い出します。次に、それをもとに、PC上でスロットマシンの動作を再現するエミュレータをその場で用意します。プログラムの読解と並行で、エミュレータを使って実際に動作させた時の挙動を解明し、入力すべき特定の“秘密の数値”を導き出して、最後に実機に入力するとスリーセブン、大当たりです。

img-googleCTF17-01
スロットマシーンの問題についての説明

「エミュレータってそんなにすぐ用意できるの?」と思われるかもしれませんが、作るのは意外と簡単。デバイスの仕様書やファームウェアさえあれば、それをもとに自作できます。

img-googleCTF17-05
作成したエミュレータの画面

今回のスロットマシンに関しては、基盤に載っているCPUのエミュレータは既にあるので、SPI通信でやり取りされる信号の入出力に関して新しくエミュレータを自前で用意しました。スイッチによるオン/オフの切り替えと、それをディスプレイに表示する部分です。
問題の核心そのものはよくあるものですが、スロットマシンがCTFに登場するのって結構珍しいんじゃないでしょうか。

──問題の難易度、1問あたりに割ける時間はどうでしたか?

極端な難問奇問はなかったように思います。
簡単なものもありましたけど、それは我々エンジニアだけじゃなく出題者にとっても試運転的な意味で作られたものですね。サーバがちゃんと動いているか確かめるためのものだったりとか。

持ち時間も、チームのみんなで手分けしてじっくり腰を据えて取り組めば、ちゃんと解けるくらいは確保されていました。
だからといって、全問解き終わらないことにはどうにもならないですから、ゆっくり休んでいる暇はありませんでした。

──主催者はGoogleでしたが、「Googleならではの」「Googleらしさ」みたいなものはありましたか?

問題に取り組んでいる最中、何かのIDとパスワードを支給されました。それが何なのかがわからなくて、結局使う機会はありませんでしたが、本選後に他の出場者から聞いたところによると、一定の期間Google Compute Engineのサーバを自由に使えるものだったんだそうです。GoogleはGoogle Compute Engineという仮想マシンのレンタルサービスを提供していて、普通は1時間にいくらという形などで購入するんですが、そのIDとパスワードがあればCTFの間は使い放題だったみたいです。

それと、参加賞として全チームに『Google Home』が配られました。いくらくらいするんでしたっけ?(注:記事公開時点で129ドル、日本円で15,120円)結構、気前が良いですよね。

本選の前には、Googleのオフィスを見学させてもらいました。普通のオフィススペースの一角に小さなキッチンがあって、仕事の合間に料理が自由にできるようになっているんです。それと、フロアによってオフィスの内装が違うんですよ。中には、飛行機の機内を模したスペースもあって、「面白いな」と思いましたね。

img-googleCTF17-04

──改めて、今回の参戦を振り返って。

予選・本選を通じて、あまり余計なことに煩わされることなく解答に集中できました。
「CTFの主催者として、出場者を楽しませよう」というGoogleの気概みたいなものを感じましたし、どの問題も解き甲斐がありました。

本選の会場では、いろんな人との出会いもありました。
参加資格はプロアマ問いませんし、出場者の国も年齢もそれぞれ違います。同じ大学のメンバーでチームを結成して「何が何でも勝つぞ!」というテンションのところもあれば、もっとゆるいところもありました。
今回僕達のチームで現地へ行った中には高校生もいましたし、いろんなメンバーがいるという意味では同じです。

本選が終わった後の交流会では、「あの問題はどうやって解いたの?」って情報交換もしました。変なライバル意識もなく、一緒に戦った者同士の友情みたいなものも自然と芽生えましたね。