Capture The Packet 競技システム

■ 概要

セキュリティ・キャンプ2015の講義内で実施した, パケット大運動会 (Capture The Packet) という競技向けの競技システムです.

指定されたパケットをなんとか作成してサーバに対して投げると得点される, という簡単な競技です.競技のスコアボードには EasySaucer を流用していて, 上のような画面が出ます.(各パケットの種類ごとのレーダーチャートみたいな 感じになっています)

好きに改造して使ってください.

FreeBSDで動作を確認してあります.

■ 注意点

動かすことを優先して即席で作ったため現時点でかなり荒削りで, ものすごく手抜きです.

様々な問題があるかもしれません.セキュリティ的な脆弱性などもあるかも しれません.(TCPでのサーバ動作や通信を行います)

自由に使って構いませんが,損害など出ても作者は責任はとれません. 各自の責任の下で利用してください.

EasyCTFと同様に,とにかくシンプルな作りなので, 自分でいろいろ改造したり,実験したり, 機能追加するためのベースとして使うといいでしょう.

FreeBSDで動作を確認してありますが,FreeBSDの場合はBPFを利用するので, chmod 666 /dev/bpf が必要です.

Linuxでは未検証ですが,たぶんそのままかもしくはちょっとの修正で動作するかと 思います.ただしRAWソケットを使うので,一般ユーザだとそのまま実行できません. スーパーユーザで実行するのが簡単ですがちょっと恐いですね…. (一般ユーザでRAWソケットを読み書きする方法無いもんかな)

サーバ側で,ncによるsaucerへの通信時にうまく動作しない場合があるようです (make enable-XXXXXをしたときに,ncが終了せずrequest.plがブロックしてしまい 次のコマンドが発行されない).
入力がEOFになったときにncがshutdownしないためのようです. この場合,以下のようにして回避できます.

■ 使いかた

  1. Makefileの先頭にサーバ等のMACアドレスとIPアドレスの定義があるので, 設定します.プレイヤーのアドレスは検証用のものなので,必須ではないです. インターフェースは指定が必須です.
  2. make server でサーバ用のツール群をビルドします.
  3. make run で EasySaucer が起動します.これで準備OK.
  4. make enable-ARP01 のようにすると,ARP01の問題が有効になります. あとは QUESTION.txt に書いてあるとおりのパケットをサーバに投げつけると 得点になります.(プレイヤーはソースMACアドレスで判別されます)
  5. 同様にして make enable-ICMP01 などして問題をオープンしていきます. ただし最初に make enable-ARP01 をして,さらにARP01の問題を解いて ユーザ登録しないと他の問題にチャレンジできないので,ARP01は必須です.
  6. make enable-XXXX をするとパケット受信のプログラムがバックグラウンドで動作 します.make stop で停止します.
検証用のパケット(要するに答えのパケット)が添付されています. 以下のようにすることで実際に得点されるかどうかを検証できます.
  1. Makefileの先頭のサーバとプレイヤーのアドレスとインターフェースを 指定します.
  2. make player でプレイヤー用のツール群をビルドします.
  3. サーバが起動している状態で,make clear-ARP01 のようにすることで ARP01の問題の解答パケットをサーバに投げます.これで得点できればOKです.