8月13日(火)-17日(土)の5日間、クロス・ウェーブ府中にて「セキュリティ・キャンプ全国大会2019」が行われました。今年は当社の社員が講師として招かれたので、この機会に「セキュリティ・キャンプってどんなことをやってるんだろう」というのをお伝えしたいと思い、会場へ行って見学してきました。さっそくレポートします。

セキュリティ・キャンプの概要

セキュリティ・キャンプ全国大会は、セキュリティに興味を持つ学生に高度なセキュリティ技術を習得する機会を提供するもので、毎年夏に4泊5日の合宿形式で行われています。参加できるのは22歳以下の学生で(細かい規定は募集要項をご覧ください)、大学生はもちろんのこと、選考に通れば高校生や小中学生でも参加できます。参加者には交通費や宿泊が提供されるので、首都圏だけでなく遠方からの参加者も多数存在します。

なお、小中学生限定の「ジュニア開発ゼミ」や、セキュリティ・キャンプよりもさらに高度な内容を扱う「セキュリティ・ネクストキャンプ」もあります。

セキュリティ・キャンプ参加者募集ポスター

セキュリティ・キャンプのプログラム

セキュリティ・キャンプのプログラムを概観すると、初日はオリエンテーションやセキュリティの基礎、および倫理や法律を扱う、セキュリティ技術者の人格形成に関する講座があり、2日目から4日目に各種の技術講座を実施して、最終日に成果報告という構成になっています。

2日目から4日目に行われる技術講座は、大別すると集中開発コースと選択コースに分かれます。集中開発コースは3日間集中して何かの開発に挑むコースで、暗号化通信、リバースエンジニアリング、アンチウィルスなどセキュリティらしいものもあれば、Cコンパイラ自作、言語自作、OS開発など周辺技術を扱うものもあります。選択コースは多様な講座から自分で選んでカリキュラムを構成するもので、座学もありますが手を動かして学ぶ演習形式の講座が豊富に含まれています。各講座のテーマを見ると、マルウェア、認証、組み込みやホスティングなどのセキュリティ、トラフィック解析やUSB通信ハックなどセキュリティ業務で使いそうな道具に関する話題など多岐にわたります。

合宿形式ということで朝は8:30開始、昼食や夕食をはさんで終了は21:00という長丁場ですが、それだけ密度の濃い勉強ができます。また、講座によってはキャンプの3日間だけでまとまった成果を出すのが難しいので、キャンプ開始前に事前課題が与えられ、予習や開発準備をした上で本番に臨んでいます。

プログラムの詳細はセキュリティ・キャンプの時間割講義一覧をご参照ください。

クラウド時代における大規模分散Webシステムの信頼性制御

ここからは、セキュリティ・キャンプで行われたプログラムをいくつか紹介します。

まずは「クラウド時代における大規模分散Webシステムの信頼性制御」です。午前はさくらインターネット研究所の坪内佑樹が講師を務め、Webシステムの信頼性に関する講義を行いました。主な内容は以下の通りです。

  • Webシステムの信頼性制御の背景
    Webシステムの故障率をゼロにすることは不可能なので、多少の失敗を許容しつつ信頼性を保つというSRE(Site Reliability Engineering)の考え方を説明しました。特に、信頼性を定量的に示すSLO(サービスレベル目標)の設定や、期間内に発生するダウンタイムを予算として策定し(例えば半期で60分など)、それを管理するエラーバジェットの考え方が興味深かったです。
  • Webシステムアーキテクチャの基礎
    ここでは、Webシステムの3層構造(リバースプロキシ/アプリケーション/データベース)、Webサーバの並行処理モデルの数々、データベース接続やデータベース構造に関する技術解説がありました。
  • Webシステムのスケーリングの基礎
    大規模なWebシステムの運用には欠かせないスケーリングについて、基本的なスケール戦術(スケールアップ/スケールアウト/処理の効率化)と、Webサーバのようなステートレスなサービスのスケーリング、データベースのようなステートフルなサービスのスケーリング手法が紹介されました。

ステートフルサービスのスケーリング手法

午後から夜にかけては、仲山昌宏さんを講師に迎えてのミニハッカソンを行いました。サンプルアプリとしてTwitterのようなタイムライン型投稿システムが作りかけの状態で提供され(アーキテクチャは写真参照)、これをベースに高信頼なシステムを設計し実装するという演習です。参加者は3チームに分かれて作業を行い、最後に成果発表を行いましたが、処理を高速化するためにNoSQLを使ったり、タイムラインに表示するデータの取得方法を工夫するなど、短時間の中にも努力した跡がうかがえました。

サンプルアプリのアーキテクチャ

クラウド・ホスティングサービスのセキュリティと運用技術の研究

次に「クラウド・ホスティングサービスのセキュリティと運用技術の研究」を紹介します。こちらはさくらインターネット研究所の松本亮介が講師を務め、4時間にわたる講義を行いました。主な内容は以下の通りです。

  • Webサーバのセキュリティと運用技術の背景
  • WebサーバとWebホスティングシステムの基礎知識
  • セキュリティと性能
  • データセンターとコンテナの未来

この中で特に「セキュリティと性能」については、Webホスティングシステムにおけるセキュリティの担保と高性能の発揮という、両立の難しい課題に挑戦した研究成果の数々が紹介されました。

一般にWebホスティングシステムはサーバのリソースを多数のホスト(Webサイト)で共有しています。共有のしかたはいくつかありますが、大量のホストを収容するには仮想ホスト方式(ApacheのVirtualHostなど)が適しています。しかし、この方式ではシステム領域や他ホスト領域の覗き見ができないように適切な権限分離を行う必要があります。

特に、Webサーバにおける動的コンテンツの実行方式にCGIとDSOがあります。CGIではsuEXECとchrootを組み合わせてCGI実行時のオーナーを変更することで覗き見を防ぐことができますが、CGIプログラム単位でプロセスの生成・破棄が必要となるため性能が低くなってしまいます。一方、DSOは性能は高いですが、サーバプロセスのオーナーで実行されるのでセキュリティに注意が必要で、これまでに数々のアクセス制御手法が研究されてきました。ここで松本が考案したのは、動的コンテンツの実行前にオーナー変更の特権のみを与えた制御用スレッドを作成し、オーナーを変更したスレッド上でコンテンツを処理する方法です。松本はこの手法をApacheのmod_process_securityモジュールとして実装し、DSOでもCGIでも高い性能が出ることを示しました。

松本が提案したアクセス制御アーキテクチャ

Cコンパイラを自作してみよう!

今度は集中開発コースの中から「Cコンパイラを自作してみよう!」です。こちらは講師の植山類さんが書かれた「低レイヤを知りたい人のためのCコンパイラ作成入門」をベースに開発を進めます。しかし、キャンプの3日間でできることは限られている上にC言語の仕様は膨大なので、事前学習の段階で何を実装するか各自で目標を設定し、それに向かって開発していました。進捗も人によって差があるので、早い人は教材の後ろの方に書いてある機能まで実装したり、自分が追加したい機能を考えて実装している人もいたようです。ちなみに、さくナレで「自作OSのいまと昔」を連載中のhikaliumさんも講師として受講者の指導にあたっていました。

「低レイヤを知りたい人のためのCコンパイラ作成入門」の目次(一部)

OS開発ゼミ

Cコンパイラ自作ゼミと同じ部屋で作業していたのが「OS開発ゼミ」です。こちらは「Raspberry Piで動く組み込みOSを作ってみよう!」「フルスクラッチOSを書こう!」「最先端OS談義」の3グループに分かれて作業を進めていました(詳しくは講師の内田公太さんによるゼミの紹介記事をご覧ください)。このうちRaspberry Piのグループは、講師の西永俊文さんが用意した教材でコンピュータアーキテクチャの基礎やRaspberry Pi 3の低レイヤーな使い方を学んだ後、「12ステップで作る 組込みOS自作入門」(坂井弘亮さん著)を教材に組み込みOSを実装していました。また、フルスクラッチOSを開発するグループは、基本的には支給されたシングルボードコンピュータ(今回はMinnowBoard Turbotを使用)にOSを実装するのですが、それ以外の自分が希望するハードウェアに実装してもよく、またどんな機能を実装するかは参加者にまかされているので、各自それぞれに作業を進めたり、デバッグがうまくいかないと講師やチューターにアドバイスをもらったりしていました。

Cコンパイラ自作ゼミとOS開発ゼミの模様
(出典:https://twitter.com/security_camp/status/1161553554823270400)

2つのゼミを見ていて印象に残ったのは、キーボードやエディタなどの開発環境は各自で用意するのでそこに個性が出ることと、さくナレのhikaliumさんの記事でも紹介された「30日でできる!OS自作入門」(川合秀実さん著)の影響でこのような低レイヤー分野に興味を持った人が結構いることでした。

キャンプ後の活動を話し合うグループワーク

セキュリティ・キャンプは、ただ同じ場所に集まってセキュリティの勉強をするだけでなく、それを通じてセキュリティに興味を持つ同世代の仲間を作ることも大切で、それを促すためのプログラムが「グループワーク」です。今年は特に「セキュリティ・キャンプ修了後にあなたが取り組むこと」というテーマが設定されました。初日はコミュニティや仲間作りの大切さを知ってもらうために筆者が講演した後(講演資料)、参加者同士で同じ話題に興味を持つ人を探してグループを形成しました。そして2日目以降にキャンプ修了後の活動内容を話し合い、最終日にそれを発表しました。書籍の刊行、勉強会の実施、コミュニティの活性化、ソフトウェアやプラットフォームの開発などさまざまな活動が宣言されたので、今後の成果に期待したいと思います。



運営スタッフに聞く

セキュリティ・キャンプの運営について聞きたくなったので、本イベントの講師主査を務めている坂井弘亮さんにインタビューしました。

ーー 坂井さんはどういうきっかけでセキュリティ・キャンプに関わるようになったんですか?

坂井:もともと自作OSをやっていて、それでOSC(オープンソースカンファレンス)に出展とかしてたんですが、そうしたらセキュキャンの運営から声がかかりました。最初は講師として参加してたんですが、そのうちプログラムなどのプロデュース側に回るようになりまして、昨年から講師主査をやってます。

ーー OSを作ってたらセキュリティイベントに呼ばれるって素人目にはちょっとイメージしにくいんですが、それってどうつながるんですか?

坂井:セキュキャンのプログラムを見てもらうとわかるように、セキュリティもいろんな方面があって、その中にはOSやハードウェアなど低レイヤーの知識が必要だったり、プログラミング能力が求められたりする分野もあります。そういうところでつながってるんだと理解してます。

ーー 今は講師主査だそうですが、どんなことをやってるんですか?

坂井:プログラムなどの全体プロデュースをしています。あとは、それに付随する雑用の数々ですね(笑)。プログラムに関してはプロデューサーが何人かいますので、その人達と相談して決めてます。

ーー プログラム編成において意識していることや、今年のプログラムの特徴を教えてください。

坂井:意識しているのは、自分やプロデューサーが、自分だったら受けてみたいと思うようなものをプログラムとして組んでいるってことですかね。今年のプログラムの特徴は、受講者が最終日で終わりではなく、その後どうするかもテーマにしていることです。例年もそういったことを話し合う時間を持ったりはしてるんですが、今年はより明確にしようということでスローガンにも入れて、グループワークもそれをテーマにしました。

ーー 最終日に行われたグループワーク報告を見ていると、いろんな活動が計画されていて楽しみですね。ところで、セキュリティ・キャンプの参加者ってどんな人が来るんですか?

坂井:コアな学生がたくさん応募してきますね。いい意味で尖っている人が多いです。やってる側としてはそういう人は歓迎です。

ーー スタッフや講師などもキャンプを修了した人たちがやってるんですか?

坂井:全員が修了生というわけではないんですが、演習のサポートをやってるチューターは修了生ですね。年数を重ねて修了生も増えているので、講師や運営サポートのメンバーにも修了生が多くなってきました。

ーー そうやって継続的に関わってくれる人が増えているのはいいことですよね。では最後に、今年の修了生の皆さんにどんなことを期待しますか?

坂井:よく、勉強会とかに参加したときにブログを書いてね、みたいな話が出ますが、セキュリティ・キャンプで学んだこともぜひアウトプットしてほしいのと、今後も継続的にアウトプットを出していってほしいですね。

ーー 修了生の皆さんの今後に期待ですね。ありがとうございました!

今年もたくさんの成果が!

5日間のプログラムを終えて、最終日にはコースごとに成果報告が行われました。集中開発コースは受講者が発表し、新しい暗号の考案、データベースのトランザクション処理の実装、IoT機器の脆弱性診断などの話がありました。ジュニア開発ゼミに参加した小中学生も全員スライドを作って発表していました。選択コースは主にプロデューサーからの報告で、インシデントレスポンス、モダンWebセキュリティ(講義資料)、自動運転の脅威分析などの講座が紹介されました。ネクストキャンプについても報告があり、GPS観測データのスプーフィング、暗号アルゴリズムのFPGA実装、パケットロスの多い環境でも通信できるロバストなプロトコルの考案など、高度な内容を扱っていました。

おわりに

キャンプの最後に修了証書の授与があり、その際に参加者の方々が感想が述べました。「講義と演習の幅が広くて深い」「多面的な視点から見る姿勢を身につけることができた」「IoTセキュリティは人命に関わるので重要だと感じた」「もっといろいろ開発したくなった」というような講義内容や技術に関するものもあれば、「参加者のレベルがとても高かった」「高い技術力を持つ人と交流できてよかった」「優秀な人達に囲まれて過ごせたことが印象に残った」という、人に関する感想も多く聞かれました。どちらもセキュリティ・キャンプが目指すものであり、それが参加者から感想として聞けたのは、とてもよかったと思います。

そして、この記事を読んで、自分もセキュリティ・キャンプに関わりたいと思った方は、各地で開催される「セキュリティ・ミニキャンプ」(地方大会)に参加するとよいでしょう。今後の開催予定地としては、札幌、石川、近畿、徳島、高知、広島、長崎、沖縄といったところがあるようです。詳しくはミニキャンプのページをご覧ください。

これからも多くの学生さんがセキュリティ・キャンプを通じて技術を学び、仲間を作って、IT業界や社会に貢献する技術者として活躍されることを願っています!

それではまた、次回のイベントでお会いしましょう!