セキュリティ&プログラミングキャンプ2010

重要:この記事は私の判断で書かせて頂きました。気をつけたつもりですが、記述内容が「資料の取扱い」等に違反していたり、個人情報に関わった記述がある場合はyasulib_at_gmail.com(_at_はアットマークに変換して下さい)まで連絡頂きたく思います。
IPA主催のセキュリティ&プログラミングキャンプ2010に参加させて頂きました。私はネットワークセキュリティ組として参加させて頂いたので、組で講義の概要と私の感想を中心に書いておこうと思います。*1以降、時系列順です。

1日目

まず、最初に講師の方と昼食を頂きました。(吉岡さんと田口さんとご一緒させて頂きました。)その後、開講式の会場に入り、机の上にテキストが配られていました。本当にこんな感じで、これだけの資料を用意して頂いた講師の方々には本当に感謝です。

セキュリティ基礎(園田さん)

テーブルでの議論がいくつかありました。

ウイルス対策ソフトウェアを使わずにウイルスを検出するにはどうしたらいいか?*2
普通のサイトが汚染されている今、伝えるべき対策は?

どこのテーブルも活発に議論していて、こういった話題で議論できる仲間というのは貴重だな〜と感じました。

プログラミング入門(吉岡さん)

印象に残った言葉は

ソフトウェアは人が創る

全くもってその通りですよね。後半はOSSについてでした。OSS開発と言えば、必ずついて回る「伽藍とバザールOSS開発への参加資格は情熱勇気行動力です。聞こうと思っていて聞き損ねたのですが、企業にとってソースコードを公開するメリットとデメリットは気になりました。

コミュニケーションとセキュリティとプログラミング(吉藤さん)

セキュリティプログラミングの関係についてのお話でした。ある物事を人視点、コンピュータ視点で見た時の捉え方の違いなど興味深かったです。

特別講義(首藤さん)

印象に残った言葉は

後悔の最小化(理詰めだけじゃないこともある)
「好きこそものの上手なれ」の時代がくる(きている)
ここに座れているだけで満足してはいけない

向上心を無くしてはいけない。という気持ちになりました。

特別講義(架空の図書館での自動アクセスの事件)

どこかで聞いたことがあるような事件について検事と弁護士のご意見を伺いつつ、グループで議論しあいました。納得できない部分がありつつも気をつけないといけないという現実を知りました。

交流企画(天野さん)

自己紹介、目標や抱負、名刺交換といったことを行いました。ラックの川口さんやボウズマンだった竹迫さん、勇士Qさんなど凄い人たちにご挨拶させて頂きました。あと、セプキャン・キャラバン名古屋の懇親会で吉岡さんに名刺を頂いていたのですが、渡せてなかったので、ご挨拶させて頂きました。
後から聞いた話ですが、amachangさんのスライドはjavascriptで書いているそうです。

2日目

企業見学

午前中はLACさんへ見学に行きました。中については書けないですが、感想は凄く格好良かったです。松木さんにHoneyWhalesのお話を伺えなかったのは少し残念でした。

パケット工作(Jamesさん)

ここから組別の講義になります。ネットワーク組では最初に基本的なプロトコルについてのお話しでした。各プロトコルヘッダなどについて講義はさらっと進みましたが、本に書いてないようなこともサラッと仰っていました。その都度、メモ。その後、パケットキャプチャをしつつ、hping2等のツールを使ってパケット工作を行いました。面白そうだったのはhping2で3way-handshakeを試みると、SYNを送ってもOSはそれに関与しないため、SYN+ACKが返ってきた時にRSTを返してしまうので、OSが関与する前にSYN+ACKを落としてやると、hping2を使って3way-handshakeを行えるということです。帰宅後、早速試してみたのですが、SYN+ACKはiptablesで簡単に落とせたのですが、その後手動でACKを送るのでタイムアウトするのか分からないですが、ACKを送るとRSTが返って来ました。後日、再チャレンジしてみます。この講義で、パケットの値は好きに変更が可能なので値を信じた前提でのセキュリティ対策は不十分であるということを学びました。

パケットキャプチャと解析(渡辺さん)

最初に確認も兼ねて、BPFによるキャプチャフィルタとディスプレイフィルタについて。その後、具体的なキャプチャファイルを見て解析しながら講義が進みました。経験を積めば、何となく怪しい通信というのはパケットを眺めていれば分かるようになるらしいです。講義で行った解析の練習としてThe Honeynet ProjectのScan of the Monthというのがあるみたいです。クイズ感覚で楽しめそうなので時間がある時に見てみようと思います。

偽装通信(宮本さん)

いわゆるCovertChannelの講義です。敵の考え方も身につけるための講義でした。TCP/IPスタックにおいて情報を隠す場所は沢山あります。ヘッダの中であったり、オプションであったり、ペイロードであったり、色々です。実際にトンネルを張って偽装通信を実現しました。その後、様々な偽装通信をキャプチャしたパケットファイルを見て何かおかしい点を見つけるというのを行ったのですが、ICMP echo request1つに対して、echo replyが複数返っていたり、データサイズがバラバラだったり、疑って見れば怪しいパケットになっていました。今年のネットワークセキュリティ組の応募用紙にプロトコルを設計したことがあるか?という設問があったのですが、その狙いはこういう話を聞こうとしていたらしいです。

3日目

侵入検知/IDS(川口さん)

最初にポート番号に対するサービスを答える問題とマルウェア名に対する狙う脆弱性、特徴などを答える問題が出ましたがどちらも全然分からなかったです。答えを聞けば「あぁ!」ってなる程度じゃダメですね。反省。その後はSnortを用いたパケット検出の講義です。最初から用意されているシグネチャを元に学習するのではなく、シグネチャを1からテキストエディタで記述することで原理とその場合の動作を学びました。その結果、帰宅後Snortのrulesディレクトリ以下のシグネチャを見て、何をするシグネチャか理解できる程度にはなりました。以下、印象深いスライドを引用させて頂きます。*3

さらなる精進を目指す人へ
「切り札はたくさんもっておけ」
「攻撃者の心理を推測しろ」
「心眼を開け」

「切り札」と言いますか、自分の手の内は常に何パターンも用意しておくことで、攻撃者が自分の予想外の攻撃をしてきても柔軟に対応できるのだと思います。「攻撃者の心理を推測」というのは孫子の言葉で「敵を知り 己を知らば百戦殆うからず」といった言葉から守る側は攻撃者の心理を推測できた方が有利です。最後の「心眼を開け」は人間の直感みたいなものだと思います。説明はできないけれど、何だかこの通信怪しいといったように感じる。そのためには多くの経験が必要なのではないかと思います。

ハニーポット濱本さん)

キャンプの少し前に催されたセキュリティもみじUstreamで濱本さんの講演を拝見させて頂いていたのですが、前半いくつか同じスライドでした。後半は実際に侵入されたサーバにログインして侵入者の痕跡を探すという初めての経験をしました。意外と侵入者は至るところに痕跡を残していました。今の自分では知識不足でハニーポットを運用することは難しそうですが、近い将来に運用してみたいです。講義と直接は関係ないですが、辻伸弘さんの記事で「ハニーポットによるウイルス捕獲から見えてくるもの」でnepenthesについて記述してくれています。

交流企画

未踏事業(神島さん)
以前から未踏事業は知っていて、それなりに調べていたので特に真新しい内容はなかったのですが、採択されることによるメリットは、開発支援費が支給される、未踏のPM/OB/OGの意見を聞いて開発にフィードバックできる。あとは個人的に思うのは社会的にアドバンテージになる気がします。
BoF2(無線LANの暗号化)根津さん
ご存知、WEPのお話から始まり、レインボーアタック、マルチドメイン問題、クロスドメイン問題など、問題は沢山あるのでしょうが、自分の管理していないネットワークの暗号化が破れると分かっても無断で破るのはまずいです。といったように注意しようにも、どう注意すれば良いのか。といった問題について意見を述べあいました。知らなかったのですが、CRLにMicrosoftの鍵が2つあるらしいです。
チュータ方のプレゼン
印象に残ったのが、

続けることが大事
一足飛びではなく、一歩先を考える
想像するのは難しい→ロールモデル(人を目標にする)

BoF2(仮想化のセキュリティ)宮本さん
VMMのセキュリティについて議論中心。VMMのボトルネックをつけばおとすのは難しくないらしいです。サービスを絞って運用するのであればVMMでも実用は不可能ではないですが、危険があることは理解しておくべきです。村上さんや杉浦さんなどの凄い人たちが周囲にいてすごく緊張しました。

4日目

P2Pネットワークの検出(杉浦さん)

winny, bittorrentの通信の特徴を紹介後、3人でグループを組み、与えられた4GBのキャプチャファイルからP2P通信を調べるという演習でした。私はグループの中で3日目の講義で使ったSnortを使って、bittorrent関連の通信について調べました。P2Pと関係のない通信も沢山混ざっていましたが、P2P通信はとにかく色々なノードとハンドシェイクしている点や断片化されているファイルを複数のノードから受け取っている様子など、プロトコルの特徴を掴めればいくらか検出できそうでした。宿題として「身近なP2P通信をキャプチャして調べてみよう。(ファイル共有以外で)」というのが出たのでゲーム機の通信についてキャプチャしてみようと思います。ARPspoofingしてMITMでtcpdumpかtsharkでファイルに保存してSnortを用いてじっくり検出・解析していきます。

CTF競技

今回はセキュリティコース3組の各組から2名ずつの合計6人チームを組んで5チームで競いあいました。ネットワークの問題は他の組の問題に比べて易しかったようで、確かネットワーク100の問題はほぼ全チームが正解していたのではないかと思います。ネットワーク300の問題は2問分からなかったです。1000点の問題は解答を聞いたところあと一歩の所だったのですが、解けなかったです...まだまだ勉強不足です。
今回、CTFの競技システムを構築して下さったのはyoggyさんらしいです。初めてお会いしました。yoggyさん、ありがとうございました。

5日目

CTF競技の結果発表

gzipマジックナンバーは1F8Bだと覚えました。

閉講式

本やグッズを沢山頂きました。濱本さんに提供していただいたSnort本を頂き、渡辺さん、川口さん、園田さんのサインを頂きました :D 沢山勉強します!Microsoftさんから箸をもらったんですが、色んな所でもらうんで3個目なんです...

感想

本当に色々な人がいました。ただ、出会った方全員に共通なのは皆すごい人たちだということです。少し意外だったのがネットワークセキュリティ組はコードを書く人が少なかったです。私はネットワークやセキュリティに興味を持って勉強し出したのは約1年前くらいからなのですが、高校生から勉強している人など、本当に凄い人たちが多かったです。
今回、ネットワークセキュリティについて学んで、偽装通信の検出ツールの開発をしてみたいと思いました。検出の定石があるわけではなく、隠蔽するツールも多数存在する中で絶対検出するというのは難しいですが、拡張性/柔軟性を持たせて色々な偽装通信のツールに対応できるようなツールを開発したいです。とりあえず、海外でいくつか論文がありそうなのでまずは論文を漁るあたりから始めてみようと思います。
セキュリティ&プログラミングキャンプは勉強する上ではこの上ない場所だと思います。本当にこんなに勉強するための機会を与えてもらったのは初めてです。講師の方々、IPAの方々、LACの方々、他にも私に見えない所で多くの人が私たちが勉強するために動いてくれているように感じました。本当に心から感謝致します。

応募用紙について

次回、応募する方がいた時に少しでも参考になればと思い簡単にまとめておきます。
ネットワークセキュリティ組の自分を除く9人中7人の応募用紙を見せて頂きましたが、正直、皆さんレベルが高いです。皆の応募用紙を見て、どうして自分が通ったのかわからず、かなり凹んだりしました。皆、経験もありますが、何より向上心が強く感じられる応募用紙が多かった印象が残っています。チュータの方に伺った所、参加者の選考はその組を担当する講師の殆どが係わるそうです。意外と重要だと感じたのはブログなどのウェブページを持っていると応募用紙に書く内容以外にもアピールできる内容が増えるのではないかと思います。以下はどういったことを書いたかを記述します。(全文を晒せるほどの勇気はないです。)

1. この組を希望した自分なりの理由を教えてください。また、何を学びたいか教えてください。
人それぞれですが、自らの経験を交えて、どうしてこの組を希望したのかについて書きました。私はIDS, IPS関連の検出原理について学びたいなど、について書きました。例えば、nmapの--scan-delayを使えば、IDSの設定によっては検出を避けることができるなど。


2. ネットワーク構築や運用の履歴を教えて下さい。また、今までに携わったネットワーク構築や運用の中で、特にアピールしたいものがあれば、差し障りのない範囲で具体的に教えてください。
書いている人は結構書いてますが、私は研究室のネットワーク構築について書きました。ネットワーク構築というよりディスクレスクライアントとサーバ環境構築の話なので主旨とはずれているとは分かりつつも、やったことを書きました。


3. これまでにあなたの管理するネットワークやサーバで受けた不正アクセスなどで印象に残っているものがあれば、差し障りのない範囲で具体的に教えてください。
私は殆ど白紙です。これはグローバルでサーバを運用している人たちは結構書いていました。


4. これまでにキャプチャしたパケットの中で、印象に残ったものがありますか?もしあれば、差し障りのない範囲でその内容・結果を教えてください。
見えちゃいけないデータが入っていたパケットをキャプチャした場合というのが多かった印象です。私は始めてキャプチャした3way-handshakeについて書きました。あとはARPspoofについても書きました。


5. これまでに自分自身でネットワークサーバやクライアントと対話したことがあるプロトコルを教えてください。
これは皆、悩まされていたような気がします。TELNET, netcatを使ってサーバと対話したプロトコルを書いている人が多かった印象です。SSHFTP, SMTP, IMAP, POP, ICMP, HTTPなどが多かった気がします。


6. これまでに、自分自身で通信プロトコルを設計したことはありますか?もしあれば、差し障りのない範囲でその内容・結果を教えてください。
上記の偽装通信の欄でも記述したようなものが求められていたみたいです。私は簡単なマイコンを用いたハンドシェイクについて書きました。これは殆ど書いてない人が多かった気がします。


7. そのほかアピールしたいこと、書き足りないことがあれば自由に書いてください。
記述内容、文字数ともに人によってバラバラでした。

飽くまで参考ですが、応募用紙の文字数は3000字程度の人が多かった気がします。

*1:本当は学んだことを全てまとめて、できる限り多くの人(キャンプに興味がある人や今年は参加できなかった人)と情報を共有したいのですが、黒いお話もあり、釘を刺されている箇所もあるので軽く概要程度です。

*2:面白かった意見「HDDの音で判断する」

*3:川口さんに許可を頂きました