ブログトップ 記事一覧 ログイン 無料ブログ開設

B-) の独り言

2010-08-18

CTFシステムについての雑感

今回のセキュリティコースでは、CTF 競技がありましたが、そこでは @yoggy さん謹製のスコアサーバを利用させていただいたんですが、幾つかフィードバックというか、来年(あるのか?)の為にもを忘れないうちにまとめておきたいと思います。

まぁ、言うのは楽だけど実装するのは大変!!とかあるとは思いますが(笑)、キャンプの卒業生がうっかり作ってくれるかもしれないですし。いや、きっと卒業生が作ってくれるかもしれないし!!

いずれにしても、今年のセキュリティコース参加者が CTF を楽しめた理由のひとつとして、バックヤードでリアルタイムにシステム改良対応いただいていた @yoggy さんと @_bun_ さんのお力添えがあったことに感謝しましょう!!

<8/19 追記>

早速?キャンプ卒業生に動きが!、期待してアウトプットを待ちましょう(笑)

http://twitter.com/masaki_ipodrepo/status/21493013933

http://twitter.com/masaki_ipodrepo/status/21493111697

http://twitter.com/masaki_ipodrepo/status/21493186327

問題の登録

主に TIP さんが作業されていたのを見ていただけでわかりません(笑)

出題者が識別できると後から確認が便利ってお話はありましたので、入力項目として出題者を入れておけるといいですね。ただ、出題者が誰かわかるとプロファイリングされてしまうという噂はありますので、参加者に表示するか否かは別途設定できた方がよいかもしれません。

<8/19追記>

id:sen-u さんが問題の登録についてまとめてくださっています。

http://d.hatena.ne.jp/sen-u/20100818/p1

答えの一致条件

答えの文字列が例えば「1234-5678」などの場合に、ハイフンで区切ってあっても無くても正解とするケースとか、Kani のように大文字小文字を区別しないといけない場合など、「大文字小文字を区別する」「入力された答えに含まれるハイフンやスペースは無視する」などのチェックボックスで簡単に選択できると便利ですかね。今回、正しい答えを発見していても、正解の定義に「-」が含まれているケースで入力と一致せずに悩んでいたケースもあるようなので。実は正規表現が使えるとかあるのかもしれませんが、正規表現とは別に簡単に設定できる項目があるとよいかなと。

ヒント機能

今回は運用上、ヒントを出すタイミングになったら、というかヒント出さないと解けそうにないと判断された段階で、講師が設問文を編集してヒントを書き足していました。ヒントは予め問題文と一緒に登録しておき、ヒントを利用した場合には獲得ポイントが減るような仕組みがあると良いかもしれません。例えば、ヒントを一回使うと -50点されるみたいな機能ですかね(ヒント毎にマイナスポイントは個別に設定したい)。ヒントを使わずに回答すれば当然ポイントが高いので、ヒントを使うか否かはチームの戦略次第になる。

シナリオ機能

ある問題を解かないとオープンしない(問題にアクセスできない)設問が設定できるといいですね。

チームと個人の識別

今回のキャンプでは 6名 1チームの 5チームで競技になりましたが、各チーム毎の得点は把握できてもチーム内の誰が解いたのか、撃墜王は誰か?などの把握が困難でした。チーム毎のランキングとは別に、どのチームの誰が解いたのかを把握できるとより盛り上がる気がします。特に出題者側としては、真っ先に自分の問題を解いたのが誰なのかは知りたいところです。

アカウントを個別に発行しなければいけないという運用上の煩雑さは発生するかもしれませんが、アカウント登録時にチームと個人を紐付けて登録できればいいのかなぁと。

回答履歴

ランキングやスコアが変化した場合に、どの問題を解いたのかを司会者が把握したい時に、各チームの解いた問題の履歴が表示されるとわかりやすい気がします。例えば一気に 500点アップしたチームが、100点を 5つ取ったのか、500点を一個取ったのかが把握できると便利ですね。

人気・不人気問題の把握

心を折った問題とは別に、答えが全然入力されず参加者に挑戦されなかった問題と、しこたま挑戦された問題が識別できるといいですね。設問文の変更やヒントの追加などの対応が可能になると思いますし、何よりその後の設問自体の改善に役立つと思います。

間違えた答えの保存

どんな答えが入力されたのかを見たい!という要望が出題者側から多かったですね。個別の設問に対して入力された誤った解答も保存されていると、意図しない方向に進んでいるかなども運営側でチェックできる気がします。何より間違えた答えをベースに実況中継などはやりやすくなると思います。

ロックアウト機能

スクリプトでちょちょいのちょい!という不届きものへの対処として、回答を誤った場合には、1分間は答えを入力できない!といった機能があると一定のブルートフォース対策になりますかね。そして一定回数以上間違えるとロックアウトされてしまうので、解除を依頼しないとその問題への挑戦は再開できないみたいな。

コンプリートボーナス集計機能

星取り表が急遽 .cgi で実装され、会場を盛り上げていましたが、特定の分野または得点を全て回答すると+500点のような、一定条件の設定と、ボーナスポイントの集計機能があるとキャンプ CTF 的には嬉しいですね。今回 Excel シートで集計しましたが、ちょっと面倒でした。

最初は全員回答したら全員回答ボーナスとかも予定されていましたが、これを予想より早く全員回答してしまったので、ジャンルや得点レベルによるコンプリートオプションが主でした。

ジャンルやレベルだけでなく、コレとアレとソレをクリアすると+100点のようなビンゴ?機能もあるとより盛り上がるかもしれませんね。

出力機能

登録されている設問をリストにしたかったのですが、簡単に CSV か何かで出力できると嬉しいです。それくらい SQL 投げれば簡単だよって噂はありますけど(笑)

CTF 競技の終了後に集計結果を Mail で流す時とかに、簡単に結果のエクスポートなどができると嬉しいです。今回、60回以上コピペして疲れました。

出題者にリストで確認依頼とか用に別途 Excel シートにまとめていましたが、苦労した割に確認した人は少なかったという残念な噂はありますが。

グラフ表示機能

密かに、国分さんが実装を終えているのではないかという噂もありますが、各チームの得点推移がグラフ表示されると、より見た目が格好良くて盛り上がる!というお話がありますね。

ボーナス・ペナルティ得点機能

今回は無かったのですが、ズルしたチームにはペナルティというお話もありましたので、問題を解いて得た得点とは別に、司会者から与えられるボーナスポイントやペナルティ(マイナスポイント)を登録・得点への反映できる仕組みがあるといいかもですね。

データ削除機能

これ大事ですね。事前のテストなどで回答した得点とかリセットしたいので、得点のリセット機能とか、登録アカウントの削除機能は欲しいところです。データベース直接触ってリセットするのとか危ないので(笑)