はじめに
SECCON CTF 2013 オンライン予選に初参加してみたので、つらつらと感想を書いてみようと思う。感想なので過去問の参考には全くならない。念の為。
まずSECCONのオンライン予選についてだが、問題は5つのジャンルで各5問の計25問が出題される。 問題に正解すると難易度に応じて100点から500点の点数が与えられる。 問題は簡単なものから順に、正解したチームが出てから、難しいものが公開されていた模様。
ちなみにSECCON CTF 2013 オンライン予選の問題のタイトル一覧は以下のとおり。 内容を覚えているものについては簡単に感想を述べたい。
- フォレンジクス
- ここはどこ?
- 削除されているファイルの名前は何ですか?
- ログインパスワードを解明せよ
- QRコードの断片を読み取れ
- CVE-2011-2484
- プログラミング・crypt
- calculate it / 計算せよ
- 数「毒」ちゃれんじ★
- Cryptanalysis
- TicTacLogic
- 古典暗号ちゃれんじ★
- バイナリ
- Enjoy the Game
- exploit me
- RISC processor
- Enter 8-char password to the interpreter
- Hack this site
- repeat after me
- ネットワーク・Web
- repeat after me
- Find the key!
- Hidden Message?
- SECCON競馬
- 箱庭XSS Final
- その他
- 練習問題
- Encode me.
- Crossword Puzzle
- solve the steganography
- Secret of Galaxy / 銀河の秘密
問題の感想
QRコードの断片を読み取れ
フォレンジクス分野の4問目。 問題はタイトルそのまんまで、QRコードの断片の画像から、QRコードの内容を読み取るというもの。 残念ながら回答には至らず。
calculate it / 計算せよ
謎の数式が表示されて、それに対する回答を入力する問題。 実は、謎の数式の正体は、ボーリングのスコア表というオチであった。 回答者がなかなか現れなかったので、プログラミング・crypt分野の1問目ながら各チームかなり苦戦していた模様。
数「毒」ちゃれんじ★
数独の解の個数を求める問題で、純粋にプログラミング能力を問うもの。 1から実装できるのはすばらしいことだが、この手の一般的な問題はネット上のソースコードをうまく活用する力も大切だと思った。 SECCONサーバとのインタフェース周りなど、解を求める以外にも、回答には案外手間がかかるものだ。
Cryptanalysis
問題で設定された公開鍵暗号で、暗号文から平文を求める問題だった。 暗号や数学についての知識が問われる問題だったのだと思う。 私は残念ながら手が出なかった。
TicTacLogic
“数「毒」ちゃれんじ★”とやや似ているが、独自のルールのoxゲームの回答を求める問題だった。 回答時間がタイトに設定されていたため、問題サーバとの通信の自動化と、単純な総当たり以外の賢いアルゴリズムの利用が必須と思われる。 結局、実行速度の問題から回答には至らず。
exploit me
バイナリ分野の問題は解くのにかなりアセンブラ等の専門知識を要求される。 正直我がチームは知識不足から手が出せず、この分野は1問も回答することができなかった。 この問題は与えられた実行可能ファイルにエクスプロイトコードを入力してやる問題だったようだ。
repeat after me
パケットキャプチャの通信内容からサーバのパスワードを抽出する問題。 通信はTELNETの単純なものだが、端末の制御文字など細かな知識が必要。 あとWiresharkなどパケット解析ツールの扱いに慣れていないとなかなか辛いところ。
Find the key!
これもパケットキャプチャの通信内容が与えられるが、その内容はなんとPINGでPNGファイルを送受信するという奇想天外なものであった。 ICMPパケットのデータを繋ぎ合わせると、回答が書かれたPNGファイルが得られた。
Hidden Message?
問題として1枚のJPEG画像が与えられる。 内容を詳しく見るとJPEG画像としては不正なバイナリが末尾にくっついており、それを解析すると.pcapファイルであった。 .pcapファイルの通信内容はDNSレスポンスで、これに倣ってDNSを叩くと回答が得られた。
SECCON競馬
架空の競馬サイトをハッキングするという問題だった。 恐らくSQLインジェクションを使って情報を取り出せば回答が得られたのだろうと思われる。 私はうまくできなかった。
Encode me.
バイナリ列が与えられるので、それをエンコードする問題。 要求されるエンコードはBase91というマイナーな方式で、どうやってBase91というエンコードにたどり着くまでが課題となる。 実はファイル名が”encode_me_91”でこれが手がかりになっていた。 Google力が必要な問題だったと思う。
Crossword Puzzle
ハッカー用語のクロスワードパズルの問題。回答には至らなかった。
solve the steganography
問題として空白のPNGファイルが与えられる。 タイトルどおりステガノグラフィを解析する問題だったと思われる。 内容を詳しく見ると空白に見えても微妙に画素値が異なっており、画像処理すると文字列のようなものが浮かび上がる…と思いきや、我がチームは回答には至らず。
おわりに
結果としては、私はネットワーク・Webの簡単な方から3問を解いた。プログラミング・cryptの1, 2, 4問目にもチャレンジしたが、発想の不足や実装ミスで回答には至らず。 フォレンジクスやバイナリ分野の問題については、私自身、1問も手を出すことができず、知識と実装力の不足を実感する結果となった。 残念ながらSECCON予選通過はならなかったが、SECCONは面白かったので、ぜひ来年もチャレンジしてみたいと思っている。 最後に、SECCON初挑戦で得られたSECCONのコツをまとめて、このエントリの終わりとしたい。
- マシンやOSはできるだけたくさん準備しておく、WindowsとUnixはそれぞれ必須である
- 環境やツールは手に馴染んだものを事前に用意しておく(バイナリエディタ、パケット解析ツール、デバッガは必須)
- 自分の得意・不得意を把握して注力する問題を選び可能な限り高難度問題を解く(広く浅くより深く狭い方が有利)
- バイナリやフォレンジクス分野の問題は専門知識が必要なので、解くつもりがあるなら勉強しておこう
- ググれ! ネットの情報だけで回答に辿り着けることもある、ネットのリソースをフル活用しよう