ブログ

FFRI BLOG

2013-12-24 SECCON関西大会に行ってきました


プロダクト開発第二部の愛甲です。

今年の8月22日、関東大会(SECCON×CEDEC CHALLENGE)から始まったSECCON地方予選もいよいよ大詰め、残りは関西大会と東海大会の二つだけとなり、関西は大阪「マイドームおおさか」、東海は名古屋「ウインクあいち」を会場とし、12月14日~12月15日の二日間、二会場同時で地方大会最後のSECCON予選が開催されました。

SECCONスケジュールはこちらです。

今回は関西大会で併設されたShellcoder's Challengeの運営のため、私も大阪に発ちましたので、そのレポートを書きたいと思います。


会場の様子

【会場の様子】

14日の土曜日は、13:00からShellcoder's Challengeという併設コンテストが開かれました。これは機械語を読んだり書いたりするだけの競技で、より速くコードを理解する、あるいは完成させた方が勝利となります。

Shellcoder's Challenge問題サイト

【Shellcoder's Challenge問題サイト】

競技は基本的にWebページで行われ、どのような動作をするコードかが分かったら上部の回答欄に入力、もし正解ならばそのレベルはクリアとなります。読者の皆さんも試しにトライしてみてください。

SECCON問題


このルーチンを実行し、処理が0x0040054bにきたときのeaxの値を求めるのが問題となります。ただこの機械語をそのままコピーして実行しても一般的なPCだと計算は終わりません。修正を加えるか、アルゴリズムを正確に掴んで答えを得る必要があります。

問題解説

【問題解説】

競技時間が終了すると解説に移ります。機械語(アセンブラコード)がどのような動作をするのか、どういうプログラムなのかの調べ方やその解説を行いました。参加者は半分がアセンブラ経験者、もう半分が初心者といった割合でしたが、初心者向けの資料を用意しており、そちらを見て進めることもできました。いまでこそアセンブラを扱うソフトウェアエンジニアは減っていますが、Z80や8080といった時代を知っている方だとアセンブラの種類に関係なくすぐに慣れて、どんどん問題を解かれているようでした。ちなみに先ほどの問題(Level 5)の答えは1と自身でしか割り切れない数、つまり素数を求めるプログラムでした。-0x4(%rbp)が1000000なので、1000000番目の素数「15485863」が答えとなります。 処理の内容を分かりやすくしたものが以下になります。

処理の内容

アセンブラコードだと分かりにくい処理もこのように一部を高級言語っぽくしてみたり、ジャンプ先を記してみたりすると、意外にも簡単な処理だと気付かされますね。

序盤はアセンブラコードを読む競技でしたが、後半以降は実際にコードを書いたり、脆弱性を探したりといった競技も行いました。

次の日、日曜日はいよいよお待ちかね。最後の地方予選。関西大会です。当初募集枠は10チームだったのですが、予想に反して応募チームが多く、結局15チーム近いエントリーがありました。


競技風景

【競技風景】

リアルタイムランキング

【リアルタイムランキング】

予選の結果については公式ページにて更新されますので、こちらを参照してください。

また地方予選は今年で終わりですが、来年、1月25日~1月26日にかけてSECCON 2013 オンライン予選が行われます。オンライン予選はその名の通りオンラインで行われるため、インターネットに接続できる環境があればどなたでも参加できます。

オンライン予選の上位最大10チームもまた全国大会に出場できるため、もし地方予選で惜しくも負けたり、参加できなかった場合でもまだまだチャンスはあります。もし興味があればぜひ挑戦してみてください。


関連記事

SECCON四国大会レポート

SECCON四国大会、CSS/MWS、PacSecに参加します

MWSレポート 3日目 FFRIも研究発表いたしました