先日、セキュリティ・キャンプ全国大会に参加しました。この記事では、受講した講義・参加したゼミについて紹介しようと思います。
セキュリティ・キャンプとは
詳細は下のリンク先を見てください。
僕はプロダクトセキュリティトラックと OS 開発ゼミに参加しました。
[B1, B2, B5] Real World Security
一般公開向けの講義動画が Youtube で公開されているようです。
内容は講義を受けつつ、グループディスカッションをするというものでした。 全体的に、今ある技術が実社会でどのように使われているのか・問題点は無いかといったことをずっと考えていました。 アプリケーションを作るときには各ステークホルダーの視点に立ち、そのアプリケーションがどのように使われるのかを意識しないといけないなと思いました。 また、技術の発展や時代の流れに合わせて求められるセキュリティが変わる可能性がある気づきも得ることができました。
[B3] クラウド時代における分散Webシステムの構成とスケーリング
2つ事前課題がありました
- 去年度の坪内さんの講義 (録音とPDF) を聴く
- 事前に用意されていたアプリケーションを Azure 上にデプロイする
2 の詳細については講師の方の講義スライドが参考になると思います。 1 の坪内さんの講義は情報量が半端なく、詳細はお伝えできないのですが、Web システムのスケール手法が一通り解説されていました。 いつかここで紹介されている手法を実践できるだけの実力を持てるようになりたい…!
講義はハッカソンがメインでした。事前課題で用意したアプリケーションを基に Web システムのユースケースを考えて、信頼性の高いシステムを設計・実装するということをやっていました。 Cosmos DB のような今まで扱ったことの無いデータストアをどうすれば効率的に使えるかを、チームの人たちとずっと議論していました。 アプリの実装や定量化できる指標を決めて計測などができれば良かったのですが、設計の話し合いで講義時間を使い果たしてしまいました。 構想から実装に落とし込める力があればもっと色々できたのだろうと思います。
[B4] つくって学ぶ、インターネットのアーキテクチャと運用
DNS や BGP について実際に手を動かしながら受講するハンズオン形式の講義でした。 偽の DNS 応答や偽の経路情報の広告をネットワーク上に流したときの挙動を確認するなどしました。 経路情報のやり取りとDNSは信頼性の担保という意味合いで密接に関わっているということをハンズオンを通して知ることができました。 また、講義中では Youtube で偽の経路情報が流されたことが原因のインシデントや、偽の経路情報だと疑われる情報が現在も大量に流れているという説明がありました。 インターネットは想像以上に性善説で成り立っているなと思いました。
[A6] ワークショップで学ぶUSB傍受対策
USB ケーブルでつながっているマウスと PC の間を流れる通信を配布されたオシロスコープで傍受し、sigrok という OSS で通信内容を解析していました。 マウスの動きによって得られるパケットの内容がコロコロ変わって面白かったです。あと、ある程度簡単な装置でも USB 傍受ができるのに驚きました。 よりデコードの精度を上げることで、キーボードの入力内容を読み取ったり、音楽や動画などのデータも取得できそうだと思いました。 また、USBの端子をむき出しにして使うといったことは避けるべきだと感じるとともに、やりようによっては傍受ができるということを頭の片隅に入れておこうと思いました。
[B7] マクロな視点から捉える Web セキュリティ: Web インフラストラクチャを利用した攻撃とサイドチャネル攻撃の実践と評価
講義資料が公開されています。
分散したシステムを構築するような手法が主流になっている今、システム全体を俯瞰して処理の一貫性を確認することは大事だろうなと思ってはいたが、実際には多くの落とし穴があることを知りました。 色々な攻撃手法が紹介されていたのですが、特にキャッシュの悪用は怖いと感じました。 キャッシュに関連するサービスを利用する際は、適宜動作の仕様を追うようにしないと脆弱性の原因を作りかねない気がします。(ちょっとしたアップデートで情報漏洩とかありそう) 講義の最後で、ソフトウェア間での動作の一貫性を守ることが大事だと教わり、システムを構成するコンポーネント間で動作や実装に違いが無いか確認する習慣をつけようと思いました。
[B8] Learn the essential way of thinking about vulnerabilities through post-exploitation on middlewares
こちらも講義資料が公開されています。攻撃が成功した後の侵入拡大の手法が中心の講義でした。
MySQL や PostgreSQL の今まで知らなかった機能や脆弱性など、身近なソフトウェアの新たな知識をたくさん吸収することができました。 サーバが乗っ取られた後に何が起こるのかについては考えたことが無く、とても興味深い講義でした。 講義の後に、CTF 形式の演習がありました。講義時間内ですべて解くことはできなかったものの、やっていてとても楽しかったです。
[Y-Ⅰ] OS 開発ゼミ
キャンプが始まる 1 ~ 2 週間前くらいに集中コースの追加募集がありました。 僕がやりたいなと思っていることができそうだと思い、OS 開発ゼミに応募したところ、参加できることになりました。
期間中は「xv6 上で ping コマンドを打てるようにする」ということを目標に実装を進めていました。 最初は NIC ドライバを書いて、ICMP に対応できれば行けるかなと思っていました。 しかし、実際はそうではなく PCI という仕組みに xv6 を対応させないといけないということが分かりました。 チューターの方から教えていただいた資料や自分と似たようなことをされていた方のブログを参考にしながら作業をしました。
実装を進めた結果、無事に NIC を認識することができました! リポジトリのリンクは以下のとおりです。
NIC の認識ができたところで期間は終了してしまいましたが、受講開始時の低レイヤの知識が無かった状態から考えるとだいぶ進歩したのかなと思います。 また、今後目標を達成する上で、次のようなことをやる必要があると考えています。
- NIC ドライバを書く
- ICMP に対応させる上で必要なシステムコールを調査・実装する
- ICMP への対応
まとめ
オンライン上で開催ということもあり、今年はどうなるのだろうという不安がありました。 しかし、期間にゆとりがあったことで事前学習をしっかりやってから受講することができ、講義の内容への理解につなげることできたと思います。 それに加え、オンライン下でもスムーズに受講できるような環境を講師の方に用意していただけたことで、講義の本質から離れた所でつまづくといったこと無く、受講することができました。 最後に、このような学びの場を与えて下さったセキュリティ・キャンプ関係者の方々、本当にありがとうございました。 このキャンプでの経験をきっかけとして、今後も勉強を継続して力を伸ばし続けたいと思います。