セキュリティキャンプ2016 DAY 2 (8/10)

起床・朝食チャレンジ

心配になりつつ眠りについた割には、アラームがなる5分前に目がさめるという奇跡が起きた。

早速起床チャレンジ&朝食チャレンジに失敗している方々もいらっしゃったようですが、この日はまだみなさん元気でしたね。

キャンプ中の朝食はすべてバイキングだったので、気分に合わせて量が選べるのがとてもよかったです。フルーツカクテル大好きなので毎日食べてました(笑)。

1・2-F 作って学ぶ低レイヤーネットワーク(午前)

ついに待ちに待った講義が二日目から始まりました!

私のとった最初の講義は、集中講義の「作って学ぶ低レイヤーネットワーク」ということで、一日中低レイヤーなネットワークに触れられるという、低レイヤー好きにはたまらない内容でした。

まあ私は他の講義もほとんどIoTトラックをとったので、ずっと低レイヤーに浸っていましたが…。

午前の講義はKOZOSの坂井さん、午後の講義はかの有名な今岡さんが担当でした。

ARPを送る

午前も午後も、今思えばとにかくパケットを送りまくっていたのですが、 午前中は主にpkttools というツール(坂井さん作成)を用いて、 パケットの解析・送信および読解をしてみようというのが主な目標でした。

パケットのキャプチャといえばWiresharkが有名ですが、このpkttoolsだとコンソールに直接パケットの16進が流れてゆくので、とても見ていて楽しかったです(笑)。

講義では、ARPパケットを自分で書いて(16進テキストで)、それを坂井さんのPCに送りつけることでARPテーブルを上書きする(!)ということをしました。

ARPは危ないですね…。

SSHのせいでパケットが埋もれる

そういえば私は最初、VM上でパケットをキャプチャしようとして pkt-recvしてみたのですが、実機に比べて異様に大量のパケットが 流れてきて、ARPが飛んできても一瞬で流れていってしまうことにとても困っていました。

でもしばらくして、これはVMにsshで接続しているのが原因だと気付きました。

そりゃそうですよね、sshはネットワークを介して接続しているんだから、 VM内からみたらホストとゲストの間に大量のパケットが流れているわけで。

ということで、講義中は諦めてホストOS上でpkt-toolsを実行することにしました。

ssh接続だけ別のネットワークインターフェイスに流せば、この問題を回避できそうですが、講義時間内には間に合わなかったです…(あとで試そう)

パケット大運動会

午前の締めくくりは、「パケット大運動会」という斬新な競技でした。

「パケット大運動会」とは何かと言うと、 要するに、「お題に沿ったパケットを送りつけて得点をゲットしよう!」という競争です。

得点状況の表示には、Capture The Packet 競技システムという、 これまた坂井さん作成のかっこいいビジュアライザを使っていました。 (表示がいろいろ変えられる!)

最初のお題はARPリクエストを投げることで、これをクリアすると画面上に自分の(主張する)MACアドレスが表示されます。

次のお題はARPリプライのパケットを投げることで、その直後にプレイヤー名を入れておくと、なんとそのプレイヤー名が表示される!というものだったのですが、私はこのお題でかなり手こずってしまい、時間切れになってしまいました…。

1・2-F 作って学ぶ低レイヤーネットワーク(午後)

イーサネットフレーム!

午後はさらに低レイヤーに進んで、Arduino互換ボードを使用して10BASE-Tのイーサネットフレームを電気的に直接送信しよう!という実習でした。

まずはArduinoにつなぐためのLANケーブルを、LANケーブルから作りました。ここで、LANコネクタを圧着するときって、被覆をむかなくていいんだって初めて知りました…(無知)。

そして、Arduinoに配線し、プログラムを書き込んでから、ボタンを押すとARPが怒涛のように送信されることを確認しました(ほんとうにルーターのLINK/ACTがめっちゃ点滅します…パケットが流れているなあ、って感じ)。

この段階でうまくパケットが送れていない人のところには、今岡さんがパケットが流れているか「聴きに」行っていたのが衝撃的でした。話には聞いていたけれど、ほんとうにクリスタルイヤホンで聴いてた…。

ここまでくれば、あとはArduinoに書き込むデータを変えることで、いろいろなイーサネットフレームを送信できます。ということで、私はプリアンブルを短くしたフレームを送ってみたりしました。(ほとんど削っても全然大丈夫だった。もっとhop数が大きくなるとダメなのかもしれないけれど。)

そして、なんと再び「パケット大運動会」の時間がやってまいりました。今度は、Arduinoに書き込み→ボタンを押して送信!という流れで実行したので、パケットを「送りつけてる」感じがすごくしました。デバッグは面倒だったけれど、それがまたいい感じでした。

ちなみに、この講義で使用したArduinoは、10BASE-Tのフレームを送信するために水晶発信子を20MHzと16MHzで交換できるように改造されていました。

この改造は、すべて今岡さんが一人でなさったようです…(事前にやりたい人募集がかかっていたけれど、時間がなくて手伝えなかった…)。

ハードウエアでパケット大運動会を

これでArduinoを使って自由にパケットが送信できるようになりました。

となると、やることは一つ…

そう、「パケット大運動会」です。

ということで、さっきの「パケット大運動会」と同じことを、ハードウエアをつかってやる、という時間になりました。

ですが、私はどうもARPが苦手らしく、結局最後の最後になるまで、ARPリクエストすら到達しない有様でした…。もっと勉強する必要がありそうです。

CTF

結果は散々でした。ほとんどCTFをしたことがなかったのが痛かった…。

もちろん、周りの皆さんはプロなので、勝ち目がないのは最初から分かっていましたが。

最初にpcap問に取り組みましたが、全くわからなかった。 投げ出していろいろ巡ったのちに、途中で与えられたヒントから、「百ます計算」サーバーを見つけて、2回ほど手動で試みてやっと「プログラム書いたほうが早くね?」となったので(百ます計算苦手)、pythonを書いてフラグを得ました。これが私の取った唯一のフラグです…。

しかし逆にそのおかげで、CTFを始めようと思いました。これが「キャンプでした悔しい思い」の一つですね。