読者です 読者をやめる 読者になる 読者になる

Twitterに書ききれないこと

イベントや技術的なことを記したい・・・

CTF for ビギナーズ2015 奈良(Attack & Defense)参加

CTF for ビギナーズ2015 奈良(Attack & Defense)に参加してきた。

会場はNAIST。なんだかんだで行ったのは初めてだった。

友利奈緒で参加した。 メンバーは@tkmru、@asakasakasas、@fopen_sの4人で組んだ。

競技感想的なもの

競技説明で脆弱性のあるWebサービスSSHが動いている状態の環境を渡されるとの説明。5分おきにサービスの生存確認が行われて、サービスを提供し続けるとDefense点が加算、個人情報を抜くとAttack点が、個人情報を取られるたチームはAttack点の分Damage点として減算されるというルールだった。

競技開始後、Webの知識がないので攻撃は他のメンバに任せてsshと防御を考えた。 運営に問い合わせたところiptablesの設定はいじっても問題ないといのことだったので、サービスの生存確認をしているパケットと自分たちのIPアドレス以外をフィルタすることを考えた。

まずtcpdumpでパケットキャプチャをしてサービスの生存確認をしているIPアドレスを特定しようとしたがtcpdumpが入っていない・・・一旦競技用ネットワークからインターネットにつなぎ替えてパッケージをダウンロードしてインストールした。 この途中、SSHのサービスが落ちまくって作業が難航した。 (解説によるとSSHの方の脆弱性を見つけるとsshdを落とすスクリプトを実行できたらしい) Attack & Defenseははじめてだったので、どういうことをすればよいかがわからず後手に回ってしまった。

そんなこんなしていると優勝チームが1000点ずつポイントを奪い始める。やばいと思ってサービスを止めたが、別チームに1000点を奪われる。 サービスを止めたのになんでだ・・・と思ったがクローリングして先に情報だけ抜いていたらしい。

ここに来てチーム単位に割り振られているアドレスが172.16.'チームID'.0だからとりあえずそこからのパケットをドロップさせればいいんじゃねと思いつく・・・(いまさら
データベースが消す攻撃をしているチームがいてサービス自体を動かせなくなっているチームが結構いた。 サービスを殺していたのが功を奏して、サービス自体を潰されることなくiptablesの設定ができた。

終了直前にDefense点のインフレが起こってなんとかマイナス点からは抜け出すことが出来た。 f:id:pinksawtooth:20151018163843p:plain

A&Dでは他の参加者が敵チームになるのが面白かった。 また、フラグがどんどんなくなっていくのでいつも以上に急ぐ必要があった。

クイズ形式のCTFでは防御に関して行動をとることがないので、A&Dではより実践に近い形式で学習できた。

Attack & Defenseの教訓

  • 防御の人は防御に集中するべき
     攻撃のほうもみたりといろいろやってて結局防御できなかったので反省。

  • 分かる範囲だけでもさっさと対応する
     今回に限れば、競技開始後にチームの他チームのデフォルトのセグメントからのパケットをドロップしておけば攻撃はだいたい防げた。  キャプチャしたパケットを見る限りルータのアドレスを変更しているチームは一チームだけ??(存在しないチームID0からパケットがあったので) iptables設定を細かくする前にとりあぜず分かる範囲でルールを適用すべきだった。

  • スコアを監視しておく
     スコアを監視しておき、他チームが大きな攻撃を始めたらすぐにサービスを止めることで攻撃を防げるかもしれない・・・

  • 序盤からパケットキャプチャをする  チームにパケット監視役をおいておくと、敵チームの試行錯誤がみれて攻撃のヒントになるかもしれない。また、どういった攻撃で点が取られたかを把握することができる。

  • submitは一気にする
     A&Dではクイズ形式と違い限られたフラグの取り合いになるので時間をかけていられないが、他チームに大きな攻撃があるとサービスを落として防ぐチームが出るので、とりあえず情報を抜いてまとめて提出すれば対応を防ぐことができるのではないかと思う。