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

仙豆のレシピ

ちょっとしたことでも書いていく姿勢で

SECCON 2014 札幌大会 ARP Spoofing Challenge に参加してきました #seccon

CTF 勉強会・イベント

2014/10/26に行われたSECCON 2014 札幌大会 ARP Spoofing Challenge というものに参加してきましたので、その感想などを軽く書きます。なぜなら眠いから

f:id:senz:20141026142043j:plain

今回、sstwというチーム名で参加してきました。今回のメンバーは臨時を加えて3人。ちなみに「ししとう」と読みます。

競技内容

競技ルールは以下。

ARP Spoofing Challenge 競技ルール

カンタンに言うと、L2ネットワーク上で通信してるサーバとクライアントのやりとりを妨害したり妨害から守ったりする競技です。

具体的にどのように通信を妨害するかというと、macアドレスIPアドレスの橋渡しをするARPというプロトコルをうまく使ってサーバのARPテーブルを書き換えることによってパケットを到達不能にします。(すなわち、ARP Spoofingを行う)

方針

とりあえず、サーバ・クライアント間で行われている通信のペイロードは公開されているのでその中にある「スコア加算値」を偽装しようと考えました。図に表すと以下のようなイメージ。(雑…)
f:id:senz:20141026180202p:plain

あと、通信を改変して送り返すまではいかずともarpテーブルを書き換えることができれば他チームの得点を防ぐことができるのでそれも狙っていました。それと自分のサーバに正しいarpを送り続けることもしたいと思いました。

実現方法

公式ではpkt-toolsというソフトの使用が推奨されていましたが、僕はうまくやれる自信が無かったのでpythonスクリプトを自作しました。具体的には、scapyを使って任意のarpを投げたりするスクリプトです。(汚いし、うまく動かなかった(後述)から公開の予定は無し)

競技本番

正しいarpを自サーバに投げる→成功
改変arpを他サーバに投げる→ちょっと成功
サーバ・クライアント間通信を傍受する→ちょっと成功
上図のように通信を改変・偽装する→失敗

という感じでした。特に通信を改変するやつはその部分のコードを書いたのが徹夜明けの朝方だったこともあり(言い訳)わけわからんバグが多発していたので途中で諦めました。(なぜかscapyのEther()にIPアドレス渡したりしてたw)

結果

いちおう1位と100点差の2位でした。ん?1位のチーム知ってるぞ?という感じw今回はいちおう2位ですが1位の方の解法を聞くと僕らが2位おかしいでしょ…という気分になったので、2位は偶然でしょう。けっこう競技全体を通してトップに立ったチームが集中攻撃を受けるという流れだったので、僕らはたまたま攻撃をまぬがれていたのかもしれません。

1位の方のwrite upを期待しましょう(?)

わかったこと

  • arp replyをbroadcastしても問題ない
  • arp request投げてないサーバにarp reply送ると、arp tableが書き換えられる(ことがある)
  • 結果、arp spoofingは割と容易
  • arp 怖い!
  • 徹夜突貫工事はひどいコードを生む

今回の競技は、CTFよりリアルタイム性がある分よけいにドキドキハラハラして楽しかったです。セキュリティは得てして地味な絵柄になりがちですが、今回の競技のようにリアルタイム性が高いとよく知らない人でも楽しめるのかもしれないと思いました。

最後になりましたが、運営などなどたくさんの方のお陰で楽しい時間を過ごすことができました。ありがとうございました!

f:id:senz:20141026185154p:plain

惜しかったで賞www