学祭でCTFしてみた【準備編&反省編】

10498423_10152543556248459_2593823878938098637_o

 

こんにちは。@chamaharunです。 勉強会サイト(https://sites.google.com/site/hokkaidoctfhackathon/home/archive/nirectf) にも書きましたように、北大祭・楡陵祭にてミニイベント「Nire-CTF」を開催しました。

4日間で300人近くの方が来てくださって、サイバー攻撃の映像を見て行ったり、CTFを体験してくださりました。 また、最終日にはセキュリティ・キャンプ中の人も視察に訪れ、拡散してくださりました。

    セキュリティ・CTF初心者の自分がCTFの大会を開催するにあたって工夫したこと、今後改善できそうなことを書いていきたいと思います。

きっかけ

Hokkaido CTF Hackathonは、昨年7月に発足して以来、ハンズオン形式の勉強会をメインに活動してきました。 コミュニティのモチベーションの持続と、仲間探しのために、大型イベントへの出展を模索していたのですが、OSC2014は申請期間にメンバーが忙しく十分な話し合いができず出展を見送りました。

そこで、メンバーに北大所属者が多いことから、北大祭・楡陵祭への出展を決めました。 メンバーの中には楡陵祭の運営中の人もいたので初めての出展にも関わらずスムーズな準備が出来ました。

準備

ミニCTF大会を開催するにあたって、事前に以下の準備をしていました。

  • 会場の下見及び機器の配置の構想
  • 競技の方式、サーバーの構成の決定
  • 使用する機器をメンバーに申告してもらい、最大消費電力、NICの対応規格を集計
  • 運営事務局に消費電力のリストを提出
  • NICの対応規格と機器の配置に合わせて必要なネットワーク機器及びLANケーブルを確保
  • 機器同士をどう結線するか、ネットワーク図を作成
  • 機器ごとのIPアドレスの当割
  • 問題の数、出題方針の検討
  • スコアボード及びアラート画面の制作
  • CTF体験コーナーのPCの確保

 

                 

会場の下見及び機器の配置の構想

昨年講義で使用していた建物でしたが、いざその教室をフルで使えるとなると、具体的なサイズ感がつかめませんでした。地割会議にて教室が割り当てられると、当日のレイアウトのイメージが湧くまで何度かその教室に足を運びました。

CTFの大会をやるには何が必要か考えてみました。問題をホストするサーバー、ネットワーク、CTFの大会だけではなく何か展示したり、プロジェクターを使うならスクリーンや暗幕も必要だな〜、とリストアップしていきました。

kaijo_b

会場見取り図のβ版がこちらになります。タイムスタンプを見ると本番1ヶ月くらい前に作っていたみたいです。LTをやったりするのに講師用PC台、椅子が必要だろうとか、RedBullを大量に用意してタワーをやろうとか考えてました。

競技の方式、サーバーの構成の決定

まず競技方式ですが、サーバー攻略競技はまだまだ技術不足で準備が困難なため、SECCONのようなクイズ形式に決めました。 サーバーは、最終的にはこんな構成だったと思います。

キャプチャ

VM1にスコアボードを設置、VM2に問題をホストする予定だったのですが、VM1にホストする問題もあったので、少しVM1に多めにリソースを割いた記憶があります。

ESXiを使用した理由は、VMの再起動などにモニタやキーボードを用意する必要がないことと、ホストマシンに割くリソースを最小限にしたかったこと、いざというときのコントロールがし易いんじゃないか、ということからです。

最大消費電力、NICの対応規格を集計

高等教育推進機構では、標準的な教室の利用できる電力は1800Wと決められていましたので、使用する機器とその最大消費電力のリストを提出する必要がありました。

1800Wを超える団体は余剰分が出そうな団体の教室からドラムコードで引き込みを行う、というルールでした。 申請書類には一応の締め切りは有りましたが、後日の変更が可能だったため、予めかなり多めに申請しておき、使用する機器が確定し次第変更の申請をする、という方針でいました。

運営事務局に消費電力のリストを提出

スクリーンショット 2014-07-16 18.52.59

開催直前に事務局に申請したのが上の画像になります。普段PCの消費電力とか意識することがなかったので勉強になりました。ちなみに、K-○などは、個人のPCで、枠外のR-○は外部からレンタルするPCの消費電力になっています。

NICの対応規格と機器の配置に合わせて必要なネットワーク機器及びLANケーブルを確保

 

機器同士をどう結線するか、ネットワーク図を作成

問題をホストするサーバーやサーバーの状態を監視する運営PC、飛び入り参加用PCなど、競技用ネットワークには何台ものPCを接続するわけですが、それだけLANケーブルやハブなどを用意しなければならないわけです。

年に1度あるかどうかのイベントのためにケーブルを購入するのもどうかと思いましたので、スタッフの私物を持ち寄って使用することにしました。ケーブル、機器の所有者を区別するのと同時に、それぞれの機器の規格にあったケーブルを結線できるように、表とタグを使って管理しました。

スクリーンショット 2014-07-16 18.08.28

んで、ケーブルはこんな感じ。これを両端につけて識別します。

2014-07-21 20.27.06

ちなみに使用したタグはこちらを使用しています。

2014-07-21 20.27.16

シールは実家にあったちょうどいいサイズの物を使用。家でも使っていてかなり重宝しています。 http://www.amazon.co.jp/dp/B001TVEO38  

機器ごとのIPアドレスの当割

今回はDHCPサーバを使用せず運営することにしたので、固定IPを振る必要がありました。そこで、IPアドレスをExcelで管理していました。

スコアサーバのバックアップにも一応(起動させることはなかった)IPを振っておきました。ただし、表にまとめておいても、持ち込みPCなどの設定が面倒だったので、サーバー以外はルータを入れてDHCPすればよかったなと思います。

スクリーンショット 2014-07-16 18.50.41

問題の数、出題方針の検討

初心者向けなので、SECCONで100点ぐらいの問題を基準にしよう、という話になりました。点数配分、問題数ともに調度良かったらしく、適度にスコアがバラ付き、かつ初めてCTFを解く人でも得点して楽しめていたようで、良かったです。

10295500_242910912565444_3509044028356387927_o

ただ、参加してくださった中には465点も得点していった猛者もいて、正直驚きました。 問題に関して、僕は

http://chamaharun.tk/blog/?p=137

に載せたとおり、Web(とはいえ、HTMLやHTTPヘッダに隠された文字系)とフォレンジック(多量のファイルから目的のファイルを見つける系)のみ担当しました。SQLiの問題は@saltcandy123が作ってくれました。サーバー接続型の問題も今後作ってみたいと思いました。

スコアボード及びアラート画面の制作

スコアボードも@saltcandyが作ってくれました。pythonで動いているようです。

これを改造したっぽいです。僕的に、SECCONのアレ

が欲しかったので、自作しました。

10357697_242719082584627_1621470669302514198_o

iPhoneのAlermの音が鳴ります。初めて正解した人は赤、それ以外は黄色に光ります。 非効率で脆弱性ありまくりそうなのでコードは公表しませんが、流れとしてはこんな感じです。

ユーザがスコアボードに答えを書き込み正解と判定される ↓

ユーザー名、問題名、得点、時刻、その問題の何番目の正解かをCGIにPOSTする。

CGIが渡された情報をMySQLに登録。

別CGIがMySQL にfetched=0の行を毎秒ポーリング

行が存在すればポップアップを表示する。fetchedのフラグを立てる

 

といった流れです。改善案をお持ちの方は教えて下さい!

 CTF体験コーナーのPCの確保

快くお貸し下さった貴島さん、ありがとうございました!!

準備の中でもこれが一番大変でした。 メンバーは基本的にPCを複数台持っているのですが、別の用途に利用中だったりしてなかなか体験用に貸し出せるPCを準備できませんでした。 そこでレンタルPCに頼るのもやむを得ないと思いまして、料金や注意事項などを調べるわけですが、今までレンタルを利用してことがなかったので驚きました。

高いっ。

イベント+準備で5日間借りると、同じスペックの中古が買えてしまうほど高いです。送料もバカにならないし、万が一のことを考えると保険も外せないし。 企画会議の時は「10台ぐらい借りて準備すればいいんじゃね?」なんて言ってましたけど学生には無謀すぎました。 問題も半分ほどできたのに体験コーナー諦めるのかー、自前PC持ってくる人なんてあんまいないよなー、と思っていたその時、じゅんたん師匠こと貴島さんがお声をかけて下さり、2台貸してくださりました。

僕のノートと合わせて3台(予定では4台だったけど、起動できずが1台)用意でき、来場者の方に楽しんでもらえました。1台がUbuntuだったのも好評で、デキる人はUbuntuマシンを使っていました。

最後に、〜Nire-CTF〜を終えてみて

生意気なことを言いますが、僕はCTFは受験で言う模試みたいなものじゃないかな、と思ってます。 試験本番やその先の学問が実践だとすると(この仮定も突っ込みどころがあるけど)そのエッセンス的なものや出題背景、出題者の「こういうことが出来きてほしい」という出題意図といったものが込められて問題が作られる。

目的は本番に向けて力をつけることであり、普段の学習効果を試したり(点数とか偏差値とかの数字にはできないけれど、自分の中で「まえは出来なかたけど、今回はできるようになった!」的な発見をしたり)、自分の未知の分野に出会えたり、チーム戦で知識を教え合ったり、勉強になるなーと。

Write-upを読むと自分とは違うスマートな解き方を吸収できるし、その知識を使って実践に応用できるし。 僕はCTFをきっかけに興味の向くままに、少しずつなので浅く広くになりがちですがいろんな分野に手を出しつつあります。HTMLしか知らなかったのに、PerlでCGI書けるようになって、必要に迫られてWebサーバーを構築したり、更にはアルバイトで物理的にサーバーを設置したりしてますw CTFに限った話ではないのですが、この好奇心の「広がり」こそ大事なモチベーションで、将来につながっていくんじゃないかなーって思います。

初心者向けCTFの大会を主催することで、今までIT技術に興味はあっても何をしていいかわからない層に何か影響をあたえることができればいいな、なんて。自分も勉強になりましたしね。 できれば今後も継続的にやっていきたい@chamaharun(コバヤシ)でした。 (もっと簡単にまとまられればなぁ)

#02 Hokkaido CTF 勉強会(Hackathon)に参加しました。

10/6に行われた#02HokkaidoCTFHackathonに参加してきました。

1379823_171321759724360_2042479812_n

今回はインフィニットループさんの会議室をお借りして行いました。

883116_10200115516050875_1004036477_o

綺麗で快適な会議室でした(・∀・)

さて、今回のメニュー。

  • 準備・自己紹介
  • CTF・勉強会に関して
  • LT
  • 問題演習タイム
  • 撤収

913995_10200115562372033_1430954304_o

 

最初の雰囲気はこんな感じ(^^♪

簡単なLTをさせていただきました。

2013-10-08 21.56.32

XSSとSQLインジェクションの入門講座なお話。

スライドはこちらにアップしてあります。

そしてメインの問題演習タイム♪

shell-stormのRepositoryに公開されているCSAW CTF 2013の問題を

実際に手を動かしてみんなで挑戦してみました。

解けた人が解説するという形で。

557256_10200116776122376_1643844781_n

androidに詳しい@kentalogicjpさんがWeb問題を解いてる姿がカッコよくて印象的でした。

1385385_10200116777322406_29001522_n

うまい棒がたくさんありました。

1379629_10200115785897621_697839152_n

次回はUstreamで配信するかもしれません。

 

ということで・・・

まだこの勉強会も2回目なので手探り状態が続いていますが

参加してくださった皆さんのご協力のおかげで無事行うことが出来ました。

反省すべきところをたくさん見つけたので次回以降に活かしていけたらと思います。

今後とも宜しくお願いします。