ハッカーになってみよう: SECCON CTF挑戦

2018-06-03



先日、社内の同僚数人とSECCON CTF BEGINNERに参加した。SECCONというのはセキュリティに関するコンテストを開催している団体。CTF(Capture The Flag)というのは出題された様々な形式の問題からパスワード(flag)を探し出して解答する競技だ。つまり、セキュリティに関する知識や能力を競う初心者向けイベントというワケ。攻撃者の立場になって技術的な研究を行うことでそれを防ぐための技術に役立てようというワケである。ハードニングとは全く異なるアプローチだね。( Webエンジニアのためのセキュリティ実践演習: Micro Hardening体験 )

なお結果はだいたい半分くらいの問題を解く事が出来て、チームの順位は中央値くらいに落ち着いた。全く手も足もでないわけではなく簡単すぎるわけでもなく、ちょうどいいね。

CTFとは

この競技はいくつかの主立ったジャンルがあり、それらが様々な形式で出題される。例えば自分に最も関係が深いのは「Web」ジャンルだ。このジャンルの多くは問題用のWebサイトのURLを渡され、そのページをどうにかしてフラグを得る。

他の有名なジャンルには「Reversing」ジャンルがある。これはコンパイル済みの実行型ファイルを渡されてその内容や動きを解析してどうにかしてフラグを得る。単純なパターンだとファイルを実行してみると何かしらの入力を求められて、それに正解するとフラグが表示されるなど。

あとは「Crypto」ジャンル、つまり暗号分野の問題だ。これはそのまんまで何らかのヒントや脆弱性がある暗号文が渡され、それを解読する事でフラグが得られる。

CTFから得るもの

ある競技から得られるもの。それは当然だがどれくらいその競技へ打ち込んだかによって変わる。だが、自分はこの競技を始めてまだ1ヶ月やそこらなので「初心者にとって」の話をしよう。

CTFを始めてみて得られるものはISUCONと少し似ている。つまり幅広い知識だ。普段の業務をしているだけなら決して触れることがない領域の知識が必要となり、覚えて理解する事を要求される。

実際のところ、こういった競技に触れることで得られるもののうち、最も重要なのはまさにこれなのかもしれない。つまり、普段なら必要ない有用な知識や分野を知るきっかけになるということがだ。

例えばReversingジャンルを解く為にはC言語やアセンブリといった低レイヤーの知識が必要だ。ネットワークに関する問題を解くにはTCP上で通信される生のトラフィックが読めなければならない。そして、こういった領域は自分で手をつけようと思っていても中々それが出来ない。CTFはこれらを学ぶのにとても良い機会だった。

そして、知識は手を動かしたかどうかで理解度が段違いに異なる。プロトコルを学んだことがあっても実際に読み書きをして活用したことがなければ「知ってるつもり」だ。

何を学べば…?

もっとも有名な入門書はハリネズミ本と呼ばれる『セキュリティコンテストチャレンジブック』だ。しかし手っ取り早く始めるには常設オンラインCTFのPicoCTF https://picoctf.com/ を遊びながらSECCON CTF Beginnerの過去資料 https://www.slideshare.net/ctf4b/presentations でも読んでみよう。というか、後でCTFの始め方については少し記事を書いておきたい。待つべし、待つべし。

一番引っかかるのはバイナリを逆アセンブリするためのツールとネットワークトラフィックを閲覧するためのツールの二つだろうか。Windows環境でならそれほど迷わないだろう。自分がOS Xで作業するために使ったツールを少し紹介しておく。バイナリを読むのには最終的にRadare2を使った、トラフィックの方はtcpdumpコマンドとCharles。基本的にCUIで操作することを好むので、GUIが好きな人は他のツールを探そう。

だいじなこと

せっかくなのでだいじなことを書いておこう。SECCONのイベントに参加するのは難しい。いや、参加するのに条件や制約があるワケじゃなくて基本的にイベントの告知やドキュメントが控えめなんだ。この手のイベントは中の人も運営するだけで手一杯、少ない人数が手弁当で頑張っていることはよく聞く話である。そういった舞台裏を想像すればあまり文句を言う事も出来ない。

なので、こちら側で気構えをしておこう。まず、最も更新が早く正確なのは公式サイトではなく各イベントのツイッターアカウントだ。これを監視しておこう。公式サイトははっきり言うとアテにならん。おそらく各イベント運営組織が公式サイトを更新するのに手順と時間がかかるのだろう。

どれくらい注意しなければならないかというと、今回のイベントでは開催日時自体が大きくズレて予定の数ヶ月後になった。そして開催日時が決まり発表され、参加登録が出来たのは一ヶ月未満の短い間だ。いや、繰り返しになるが運営側にも色々事情があるはずなので安易に石を投げないでほしい。これは文句や苦情ではなくて参加する側に気をつけておいて欲しい心構えの話だ。

そしてルール説明もあまり丁寧ではない。本戦はともかくBeginnersのようなサイドイベントに近いものは「あとは雰囲気でお願いします」な部分も多い。例えばイベントページの操作やチームは何人まで参加できるかといった細かい話は特にしない。忖度せよ。困ったらとりあえず前回以前のイベントページや参加レポートを参照すれば書いてあることがある。そして、特別に書いてなければ踏襲されるはずだ(というより、例年と同じだから別に書く必要がないと思われている可能性もあるが)。それでもダメならTwitterアカウントか何かに問い合わせしよう。気軽に。

SECCONへの参加で初心者がつまづく可能性が一番高いのは問題を解くフェイズではない。参加するまでだ。プログラミング初心者が環境設定で半分以上死ぬのと同じだ。要するにハンター試験と同じであり試験会場まで辿り着けない参加者は0回戦ドロップする羽目になる。頑張ろう。あと参加経験者を探して一緒に出よう。


 このエントリーをはてなブックマークに追加


<< 技術書典4にOwl Worksとして出展します