セキュリティを楽しく学ぶ、触れる。セキュリティごった煮ブログ

ネットエージェント
セキュリティごった煮ブログ

 コース:元祖こってり

「元祖こってり」記事はネットエージェント旧ブログ[netagent-blog.jp]に掲載されていた記事であり、現在ネットエージェントに在籍していないライターの記事も含みます。

CODEGATE 2011 CTF 参戦記

愛甲健二

 こんにちは、愛甲です。今日は、先週末に行われたセキュリティ技術を競い合う世界大会 CODEGATE 2011 CTF(Capture the Flag) について書かせていただこうと思います。

-----

■ CODEGATE 2011 CTF とは
 CODEGATE 2011 CTF とは、韓国のセキュリティカンファレンス CODEGATE が主催しているセキュリティ技術の世界大会であり、毎年 3 ~ 4 月頃に世界中のセキュリティエンジニアが優勝賞金 2000 万ウォンを賭け、その技術力を競います。毎年 300 近いチームがエントリするため、本大会は予選と決勝に分かれており、予選で勝ち残った上位 8 チームで改めて決勝戦を行います。
 決勝戦は CODEGATE の会場で行われますが、予選はオンラインで実施されるため、今週末は弊社のセミナールームを借り、3月4日(金)21:00 ~ 3月6日(日)21:00 までの 48 時間、チーム名 sutegoma2 で CODEGATE 2011 CTF の予選を戦うことになりました(参考)。
 sutegoma2 というのは、tessy 氏yoggy 氏が中心となって運営している Web コミュニティで、主に世界中で開催されるセキュリティコンテストに参加することを目的としています。CTF 勉強会と並行して運営されており、CTF に参加したい、勉強したいといった人たちのコミュニティとなっています。勉強会から発足したコミュニティなので、学生、社会人問わず誰でも参加でき、企業の垣根を越えて、純粋にセキュリティ技術に興味のある方々で構成されています。
 また今回エフセキュアブログのメンバーである福森氏も sutegoma2 に参加しており、今回の参戦記を記事にされていますので、ぜひご確認ください。

■大会のルールは?
 大会は、運営チームから出題されるセキュリティに関する問題を解いていくことで点数を獲得し、獲得点数の合計値によって最終的なランキングが決定します。
 昨今のセキュリティ技術は多様化が進んでおり、一概に何がセキュリティ技術で、何がセキュリティ技術ではないのか、その切り分けが難しいところですが、一般的なセキュリティコンテストにおいては、大きく以下の 6 分野に分けられます。

  1. 暗号技術
  2. デジタル・フォレンジック
  3. リバースエンジニアリング
  4. 脆弱性調査
  5. パケット解析
  6. トリビア

 大会によって若干の差異はありますが、大体、上記 6 分野に分けられ、各分野に対してレベル 100 ~ 500 の難易度が設定された 5 問(× 6 分野 = 合計 30 問)が出題されます。これを 48 時間以内に解答し、ランキング 1 位を目指します。そして、そのランキングの上位 8 チームが決勝進出となります。

■技術力だけの勝負ではない
crypto100 世界大会というと、技術的難易度の高い問題ばかりが出題されるイメージがありますが、実際には、技術力以外のスキルも必要になります。今回は CODEGATE 2011 CTF 予選にて出題された問題の中から、弊社代表の杉浦が解いた Crypto 100 と、研究開発部の長谷川がセキュそば勉強会へ行く前日に解いた Binary 100 を紹介します。
 まず Crypto 100 ですが、右図がその問題です。この画像からパスワードとなるキーを探します。暗号の問題ではありますが、暗号の専門的知識は必要なく、ひらめきさえすればコンピュータを知らない方でも解けます。せっかくなので 1 分ほど考えてみてください。

 正解は「携帯電話のキー入力」です。携帯電話のキーパッドを確認すると、アルファベットは各数字に以下のように対応しています。

 1: 2: ABC  3: DEF 
 4: GHI  5: JKL  6: MNO 
 7: PQRS  8: TUV  9: WXYZ 

 最初は 444 なので I 、2番目は 66 なので N 、といった具合にアルファベットに変換していくと、解答を含む文字列(英文)に変換されます。そこに適切に空白を入れると以下になります。

in cryptography asubstitution cipher is a method of encryption by which units of plain text are replaced with cipher text according to a regular system the units maybe single letters pairs of letters triplets of letters mixtures of the above this cipher text is encrypted by telephone keypad so we call this keypad cipher

 以上から、keypad cipher が解答となります。
 この問題は、言われてみれば「ああ、なるほど」と思いますが、実際にこのデータ列を前にしてすぐにピンとくるかというと、やはり個人差があります。技術力以外の何か、そういうものも重要であると実感させられる問題でした。

■だけど技術ももちろん必要
script そうこう言いつつも、やはりセキュリティ技術を競う大会ですから、技術力も必要です。次はまさに技術力で解答する Binary 100 を紹介します。
 Binary 100 はテキストファイルですが、エディタで開くと良く分からない記号の羅列が表示されます(右図)。まずはこの記号の羅列が何なのかを探る必要がありますが、この記号の羅列を一目見て「ああ、これは Windows Script Encoder だね」と言ったのは、次の日に朝一でセキュそば勉強会へ参加する予定があるにも関わらず、深夜の 2 時まで CTF に付き合ってもらった長谷川でした。
 このエンコーダに対してはデコーダ(Windows Script Decoder)が存在し、これを使うことで、データを元に戻します。元に戻すと、次は難読化された JavaScript らしきコードが見つかります。NetAgent Security Contest 2010 の Level7 を解く際に dojo で関数フックする方法を紹介しましたが、それを用いて、最終的な JavaScript コードを出力させます。すると CodeGate_JavaScriptEncode_Key という文字列が入った JavaScript が得られます。この JavaScript の末尾に alert(CodeGate_JavaScriptEncode_Key) のようなコードを追加して実行すると、120a151156120a163t111163120lea163u162e! という文字列が得られます。最初はこれが解答かと思いましたが、良く見ると、3 桁で区切られる数値が見えます。

 「120 a 151 156 120 a 163 t 111 163 120 lea 163 u 162 e!」 

 これは 10 進数に見えますが、正解は 8 進数でした。3 桁の数値を 8 進数で変換すると、PainPastIsPleasure! という文字列が得られます。これが正解となりました。

■勉強になる
 Crypto 100 と Binary 100 を紹介しましたが、いかがだったでしょうか。さて、何か得意げに解説させていただきましたが、実は私は競技時、この 2 問はどちらもまったく解けていませんでした(汗)。なので、ただ二人を眺めながら「すごいなぁ...」と驚いていただけなのですが、個人的には CTF の醍醐味はまさにここにあると思っています。
 自分一人では絶対に分からない問題にぶつかったとしても、その問題を他の誰かが解き、その解答方法を知ることで、いつの間にか自分も同じ問題を解けるようになっています。それはつまり、CTF という競技を通して、チーム内で技術や知識を教え合っているとも言えます。
 さらに、競技が終了すれば、各チームがそれぞれ解答を Web に公開し始めます。当然、各チームとも同じ解答方法ではありませんし、自チームでは解けなかった問題の解答なども読めます。競技中はチーム内で技術を共有し、終了後はチーム間で技術を共有します。まさに、世界中のチーム同士で技術や知識を教え合っている状態と言えます。個人的には、これほど効率がよく、充実した学習方法はまずないと思っています。
 とは言いつつも、やはり問題が解けないとつまらなかったり、48 時間も PC に向かい続けるのは辛いと感じることもあります。ただ、より多くの問題を解けるのは技術力の証明になると思いますが、仮に 1 問も解けなかったとしても、それが技術力の無さには繋がりません。CTF に求められるスキルセットと自身が持つ技術が異なっていることもありますし、そもそも CTF に合わない(問題として出題しにくい)技術もあります(XSS や kernel関系など)。また、48 時間ずっと起きている人も中にはいますが、基本的には仮眠を取りつつやっていく人の方が多いです(眠いとやはり集中力が持たない)。
 なので、あまり気負わずに、普通の勉強会に参加する感じでトライしてみるのも良いのではないかと思います。

■最後に結果を少し
rank 48 時間に及ぶ長い闘いでしたが、私たち sutegoma2 は見事予選を 1 位で通過できました。トップランキングを見ると分かりますが、アメリカがもっとも強く、次いで韓国チームが多いです。やはり IT 立国の強さは伊達じゃありません。しかし、そんな中でも日本やスウェーデンがトップランキングに入っていることを考えると、アメリカや韓国以外の国もまだまだ頑張れると感じます。そして、日本の技術力もまた、十分に世界に通用することを実感できた結果でもありました。
 しかし、この結果に満足せず、さらなる上を目指し、これからも一歩ずつ努力していきたいと思います。

 さて、最後になりますが、予選終了から今日で 3 日目なので、他の参加チームから徐々に writeup が公開され始めています。もし今回紹介した問題以外にも興味があれば、ぜひ読んでみてください。

Oracle padding attacks (Codegate crypto 400 writeup)
Codegate CTF 2011 Vuln300 Writeup
CODEGATE YUT 2011: Issue 500 writeup
Some mini writeups on Codegate 2011 Prequals: Issue100,200, Net100,200, Crypto100,200.
Codegate CTF 2011 Forensic 300, Issue 300

メルマガ読者募集 採用情報 2020年卒向けインターンシップ

月別