セキュリティ・キャンプ全国大会2022オンライン Web セキュリティクラスのプロデュース後日談
お久しぶりです。最近セキュリティ・キャンプ全国大会 2022 オンラインという合宿イベントの中の、1 つのクラス(Web セキュリティクラス)の †プロデューサー† をしたのですが、思い出せる範囲で、このクラスに関する種々の記録を残しておこうという気分になりました。推敲は特にしないままで公開するので、誤字脱字やぶち壊れた論理などにはご容赦ください。
セキュリティ・キャンプ全国大会の概要
セキュリティ・キャンプ全国大会とは、「次代を担う情報セキュリティ人材を発掘・育成」を目的として、一般社団法人セキュリティ・キャンプ協議会と独立行政法人情報処理推進機構(IPA)が中心となって実施しているイベントです。
このイベントは参加枠が限られており、参加のためには例年高倍率の選考をくぐり抜ける必要があります。その代わりに、受講料や教材費などの負担なく、業界の先端に立つプレイヤーから質の高い講義を受けられるのが特徴です。
2022/8/8(月)〜2022/8/12(金)の 5 日間 で開催された「セキュリティ・キャンプ全国大会 2022 オンライン」では、大きく分けて以下の 2 つのコースが存在しました:
- 専門コース: あるテーマに沿った一連の講義を提供する「クラス」に、約 10 名程度の受講者が所属し、イベント開始から終了まで一緒に受講していくコース
- 開発コース: ある大きなテーマを持つゼミのもとに受講生が集まり、講師と受講者が相談をしながら受講者ごとに詳細なテーマを決め、そのテーマに関してひとりひとりのペースで取り組んでいくコース
そのうち専門コースでは、以下の 4 つのクラスが開講されました:
- IoT セキュリティクラス(A クラス)
- Web セキュリティクラス(B クラス)
- 脅威解析クラス(C クラス)
- AI セキュリティクラス(D クラス)
Web セキュリティクラス
そんな「セキュリティ・キャンプ全国大会 2022 オンライン」の中で、私 @lmt_swallow が担当したのは、上述の専門コースのクラスの中でも、Web セキュリティクラス のプロデュースです。ここでいう「クラスをプロデュースする」というのは、「どのようなコンセプトのもと、どのような講師の方をお招きするかを調整すること」を指しています。
講義構成・タイムテーブル
最終的に Web セキュリティクラスとして提供したのは、以下の合計 7 コマ・24 時間の講義群でした:
- B1: 作って学ぶ、Web ブラウザ
- B2: マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法
- B3: Policy as Code 入門
- B4: モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化
- B5&B7: ソフトウェアサプライチェーンセキュリティのこれから
- B6: 実践 Linux コンテナ実行基盤セキュリティ
なお、この他にも、同期間中には、倫理に関する講義やグループワークを含む種々の共通講義がクラスをまたいで実施されました。
講義を貫くコンセプトは 2 つ
そんな Web セキュリティクラスは、以下の 2 つをコンセプトとして設計されたものです:
- 現代の (Web) プロダクトセキュリティの世界の地図を描く
- (Web)プロダクトセキュリティの世界の、これからの歩き方を模索する
低レイヤーガール さまのチャンネルにお邪魔した際にもお話させていただいたので、テキストよりも動画を見るほうが得意な方はこちらの視聴がおすすめです1:
現代の (Web) プロダクトセキュリティの世界の地図を描く
現代の Web プロダクトはより大きな情報を、より速く取り扱えるように進化しつづけています。また、ユーザのニーズに合わせてより素早く機能を追加向上できるように、Web プロダクトをつくり・動かす組織のあり方も変化し続けていますし、実際のつくる・動かすプロセスもめまぐるしい変容のさなかにあります。
もちろん、Web プロダクトのセキュリティの世界においてこれまで積み上げられてきた資産は、今になっても役に立つものです。一方「うちの Web プロダクトのセキュリティは君に任せた!」というミッションにゼロから向き合うにあたって持っていたいベースの知識・体験は人口に膾炙しているわけではなく、かつそのような知識・体験を獲得するための始めの一歩が不足していると米内は感じています。
「これを知っていれば 100 点のプロダクトセキュリティを未来永劫実現できる」というような都合の良い知見はありません。それに、プロダクトにより構成される事業が属する領域の数だけ、あるいは事業を執行する組織の数だけ、プロダクトセキュリティへの理想的な取り組み方は存在します。だからこそ、まずは現代の(Web)プロダクトセキュリティに向き合うためのベースとなる経験を広く得たもらうこと — いわば、現代の (Web) プロダクトセキュリティの世界の地図を内面化してもらう ことをこのクラスのコンセプトの一つに位置づけました。
このクラスで得た知識や経験が、受講生のみなさんが今後向き合うであろうプロダクトのセキュリティを、自らの頭で 考えていくための指針になればと願う次第です。
(Web)プロダクトセキュリティの世界の、これからの歩き方を模索する
私米内が株式会社 Flatt Security というセキュリティサービスを提供する会社の CTO として、あるいはその中でプロダクト開発を推進する一人の技術者として切に感じていることがあります。それは プロダクトセキュリティとの向き合い方の変化と、それに伴う「セキュリティエンジニア」という役割の変化 です。
その変化を抽象的に表現するのが、米内が昨年公開した 『Developer-First Security という考え方』 というスライドの 1 ページです2:
この変化の具体的な例が、今回 Web セキュリティクラスに講師としてお呼びした方々3のご活動です。例えば Web セキュリティクラスの講師の中でも、@rung さん、そして @mrtc0さんは、@m_mizutani さんは、自社プロダクトを有する組織で、ソフトウェアエンジニアリングのプラクティスを積極的に生かし、ソフトウェアエンジニアを始めとした他の専門性を持つチームとの協働を推進されています。
Platform チームとの協働
脆弱性管理における Policy as Code の実践
かくいう 私 @lmt_swallow も、そういった方々の技術スタックを作るべくセキュリティプロダクトを作るための活動をしています。
DevOps が「Ops にソフトウェアエンジニアリングのプラクティスを適用することで実現されるもの」だとすれば、「Dev/Sec/Ops の協働を旨とする DevSecOps という思想を、Sec にソフトウェアエンジニアリングのプラクティスを適用する形で実装しようとする取り組み」と理解できる上述のような取り組みが、大局的に見て妥当であると考えてもよいのではないでしょうか。仮に妥当だとするならば、このソフトウェアエンジニアリングの様相を呈した協働こそが、これからの(Web)プロダクトセキュリティの世界の歩き方と言えないでしょうか。
また、講師陣のうち @d0iasmさん、@tyageさん、@no1zy_sec さんも、Web ブラウザ開発者の視点や高度な技術を持つ攻撃者視点を有する稀有なお三方です。このお三方の視点で、Web セキュリティというものを見つめることで、これからの(Web)プロダクトセキュリティとの向き合い方への示唆がさらに得られるようにも感じていました。
今回の Web セキュリティでは、そんな講師陣をお招きし、種々の視点から種々の取り組みについてお話いただくことで、これからの(Web)プロダクトセキュリティの世界の歩き方を講師の皆さん・チューターの皆さん・受講生の皆さん・米内共々模索できたらというコンセプト — というか思惑! — がありました。
「ちょっとよさそうな企画」が、「面白くないわけない 5 日間」へ
そんなコンセプトの元、Web セキュリティクラスの構想を練りました。米内が初期に組み立てたクラスの構想は本当に骨子だけの、スカスカなものでしたが、この時点で既にちょっとよさそうな企画ではあったと思います。
どうしても 1 講義分だけ調整がうまく出来ず(※ひとえに米内の調整力不足でした)、急遽 2 時間分を予定していたソフトウェアサプライチェーンに関する講義が 6 時間に拡張される形にはなりましたが、そんな構想とともに行った講師依頼には、どなたにもほぼ二つ返事4でのご快諾 をいただけました。講師陣のみなさまには本当に感謝しかありません。
そうして構想にご賛同くださった第一線の講師陣が、溢れんばかりに肉付けをし、最前線の知見を盛り込み、昇華してくださって出来上がったのが、今回受講生のみなさまにお届けした講義群です。初回の講師顔合わせを実施したあたりから、これが面白くないわけないな、と確信していましたが、実際のイベントはその想像を更に上回ってくれました。一安心!
Web セキュリティクラスの応募課題
応募課題の設計の大方針
参加者選考に利用する応募課題はほぼ米内が作成しました。この応募課題の設計方針は「講義についていけるだけの最低限の経験と、論理的思考力、自走力に関する記述を、できるだけ応募課題を書いてもらう過程の中で引き出すこと」でした。その若干の表れが、応募課題前半に記載がある以下の 6 項目です:
(1) この応募課題の設問は、どれも応募してくださるあなたの「現状の知識・経験の広さ・深さ」「興味・感心の範囲や強さ」を汲み取るためのものです。ぜひ自分の興味関心や知識、考えたこと、疑問等を各設問への解答として表現していただければと思います。
(2) 各設問で求めている内容が適切に盛り込まれている限り、解答の文字数の大小や日本語表現の巧拙は評価に大きな影響を与えません。また、日本語表現に関する軽微な誤りは評価に全く影響しません。とりわけ誤字脱字はあまり気にしなくて大丈夫です。
(3) 誇張を感じられる解答よりも、 ご自分の応募時点での経験や理解が真摯に表現できている解答を歓迎します。とりわけ、分からないことや確信の持てないことがあるときには「ここまでは分かったが、ここからは分からない」「これらの事例から 〜でないかと推測できるが、〜であると断言できるかは不明である」というような記述を含めていただけると嬉しいです。
(4) 選択問題においては「適切な論拠をもとにした、各設問に対して必要十分な情報を、適切な論理構造で表現できているか」を意識してください。
(5) 選択問題はきっかり 2 問のみ解答していただいても大丈夫です。3 問以上ご解答いただけると、選考においては、より応募してくださるあなたの魅力を汲み取りやすくなるかもしれません。
(6) 解答に関して何かしらの実験を行う際には、法令等を必ず遵守してください。
選考の感想
非常に優秀な方が多かったです。米内が選考するのもおこがましいな……と思いながら選考していました。今回は人数制限が 10 人でしたから、倍率は現時点では非公開だと思うので詳細に言及しませんが、非常に狭き門だったかと思います。ほんとうは全員にご提供できるとよいのですが……。ごめんなさい。
ところで今回は以下の 8 問を出題しましたが(「感心」って、今見ると誤字じゃないですか!)、後半の問題に挑戦していた方は非常に限られていました:
- Q.1(応募のモチベーションについて)
- Q.2(これまでの経験について)
- Q.3(あなたの感心・興味について)
- Q.4(Web に関する脆弱性・攻撃技術の検証 1)
- Q.5(Web に関連する脆弱性・攻撃技術の検証 2)
- Q.6(Web に関連する標準や実装の調査)
- Q.7(Web サービス・プロダクト開発に関する仕組みの検討)
- Q.8(新しい領域に関する調査)
来年の選考がどのような形式になるか、また米内が選考に関わるかどうかは、全くをもって不明です。しかし、米内の主観によれば選考時の情報量は多ければ多いほど助かります。ぜひ時間が許す限り後半の問題にも挑戦してみてください。挑戦の結果誤った結果を書いてしまうこと、どこから分からなかったかを示すことを恐れる必要はありません — 前節「応募課題の設計の大方針」にも引用しましたが、選考はアラ探しのために行うのではなく、応募課題を提出してくださるあなたの魅力をできるだけ汲み取るためにあるんですから!
Web セキュリティクラスで実施したこと
Web セキュリティクラスの裏側という記事なので、この記事はここで止めてもよいかもと考えていましたが、せっかくなので今回のクラスで取り扱ったトピックも紹介しておきます。以下、講師の所属の表記は全て IPA さまの講師一覧ページが作成された時点でのものです。
事前課題
応募者選考後、10 名の受講生が決定した後は事前課題を開始しました。コミュニケーションは主に Discord を経由しつつ、課題は以下のような Google ドキュメントで配信しました:
参考までに、講師が既に外部公開しているものや、セキュリティ・キャンプ外でもアクセス可能な教材を以下に列挙しておきます:
- B1: 作って学ぶ、Web ブラウザ
- 簡易自作ブラウザ d0iasm/vulbr をベースにした 演習群
- B2: 「マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法」の事前学習
- 書籍『体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版』(通称徳丸本)
- KENRO での演習
- B6: 実践 Linux コンテナ実行基盤セキュリティ
- 書籍 『イラストでわかる Docker と Kubernetes』
- 環境のセットアップ資料
B1: 作って学ぶ、Web ブラウザ
全国大会の初日は共通講義のみで、専門講義は 2 日目の朝 8:30 (?!) から始まります。そんなイベント 2 日目の 1 つめの講義は @d0iasm さんの「作って学ぶ、Web ブラウザ」でした。概要は以下の通りです:
Web ブラウザは私たちとインターネットを繋ぐための身近な存在ですが、大規模すぎるプロダクトがゆえに全貌を理解することは困難です。本講義では、仕様を読み解きながら自分で簡単なブラウザを作ることによって、HTML、CSS、JavaScript への理解を深め、Web セキュリティにおけるブラウザの役割について少しでも詳しくなることを目標とします。
当日利用された講義資料のうち公開可能な部分は以下から閲覧できます:
B2: マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法
イベント 2 日目の 2 つめの講義は、GMO サイバーセキュリティ by イエラエ株式会社の@tyageさん、@no1zy_sec による「マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法」でした。概要は以下の通りです:
近年クラウドサービスやマイクロサービスアーキテクチャの普及が進むと同時に、それらの攻撃手法もまた研究されており、セキュリティエンジニアの間では関心の強い分野の一つとなっています。本講義は現役のペネトレーションテスターが業務等で得た知見を元に作成しており、クラウドサービスやマイクロサービスアーキテクチャで構築された Web サービスに対するリアルな攻撃手法をハンズオン形式で学び、習得することを目的としています。
講義資料は 2022/08/13 時点では非公開なのですが、ハンズオンで利用されたアプリケーション群は以下で公開されています:
B3: Policy as Code 入門
1 日目 3 つめの講義は Ubie 株式会社の @m_mizutani さんによる「Policy as Code 入門」でした。概要は以下の通りです:
情報セキュリティの分野でも、いままで人が作業していたようなことをソフトウェアの力を使って置き換えるようなエンジニアリングの動きが近年広がっています。その一つとして、組織やチームで定めたポリシーにしたがって判断をしたり、ポリシーに準拠しているかのチェックをコード化によって機械的に実施する「Policy as Code」という考え方があります。この講義では「Policy as Code」がどのような取り組みなのか、具体的にどのようなことができるのかについて実例とともに紹介していきます。また、Policy as Code の分野で注目されている実装の Open Policy Agent(OPA)とその記述言語である Rego についても簡単に紹介し、実際にポリシーをコードで記述するハンズオンまで実施したいと思います。
水谷 正慶氏による「Policy as Code入門」では、「Policy as Code」を実例とともに紹介していきます。また、Open Policy Agent(OPA)とその記述言語であるRegoについても簡単に紹介し、実際にポリシーをコードで記述するハンズオンまで実施します。 #seccamp pic.twitter.com/eDD7HGhRwx
— セキュリティ・キャンプ (@security_camp) August 9, 2022
ところで B1~B3 の講義は全く同じ日に行われたものでした。よく考えると、ここまでの講義で既にクライアントサイドからサーバサイドまで大横断した話題を取り扱い、Rust/HTML/CSS/JavaScript/TypeScript/Java/Python/Rego 取り扱って(なんなら一部の言語の言語処理系いじりもして)いるんですね。
B4: モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化
日が変わってイベント 3 日目の午前中は、株式会社メルカリの @rung さんの講義「モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化」を実施しました。概要は以下の通りです:
この 10 年で、ソフトウェアを開発する環境は大きく変化してきました。 インフラストラクチャは Cloud 基盤の利用が増え、ソフトウェアのテストやデプロイの際は CI/CD(継続的インテグレーション/継続的デリバリ)パイプラインを通じてデプロイされるようになりました。また、開発はリモートワークを前提とした、境界防御によらないゼロトラスト環境の社内 IT 基盤上で行われています。 本講義の前半では、現代のプロダクション環境を攻撃および保護するためにはどのような手法を用いることができるのか、主にマルウェアなどを用いたクライアントサイドへの攻撃や、サプライチェーン攻撃の視点から、総合的に攻撃手法および対策を講義した上で、ハンズオンを行います。 後半では、セキュリティ対策として焦点の当たることの少ない CI/CD パイプラインのセキュア化についてハンズオンを通じて攻撃手法と対策を身に着けていただいた上で、その上で残る課題について解説することを予定しています。
講義資料は以下で公開されています。この資料、本当に貴重な資料なのではと思います(だからこそ日英両バージョンがあって本当に嬉しい):
B5&B7: ソフトウェアサプライチェーンセキュリティのこれから
イベント 3 日目夜と 4 日目午後には、米内から「ソフトウェアサプライチェーンセキュリティのこれから」という講義をさせてもらいました。概要は以下の通りです:
講義紹介 現代のソフトウェアの開発・運用プロセスは多くの人・組織・ソフトウェア資産に立脚するようになってきています。多くの便利な OSS パッケージが 1, 2 回のコマンド実行で手に入り、1 つの YAML ファイルがテストやデプロイの継続的実行を可能にし、便利なソフトウェアを動かすための環境は世界の誰かがコンテナイメージとして公開してくれている、そんな体験をする機会が多くなってきたのではないでしょうか。 しかし、この喜ばしい時代の流れの中で、「一つのソフトウェアを作って届けるという工程に関与する人の数」が爆発的に増加してきているのも事実です。この流れが、ソフトウェアサプライチェーンのセキュリティへの関心を急激に高めています。本講義では専門講義「モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化」で取り扱う内容と連携しながら、ソフトウェアサプライチェーンセキュリティのこれからについて検討します。
先述の通り予期せぬ講義時間の拡大があったため、中身の用意にかなり苦心してしまったのですが5、講義資料はもうすこしブラッシュアップして公開予定です。
若干中身を先出ししておくと、B5 の講義時間ではソフトウェアサプライチェーン領域の大局的な動きを紹介したり、Fulcio/Rekor を起点として Sigstore プロジェクトの詳細を紹介するなどをしました:
B7 の講義時間では、B5 で学んだ Sigstore プロジェクトを活用しながらソフトウェアサプライチェーンを構成する種々の Hardening 手法を検討しました。内容は以下のような Web ページの形で公開できたらいいなと思っています6:
B6: 実践 Linux コンテナ実行基盤セキュリティ
専門講座を締めくくる 4 日目 2 つめの講義は、GMO ペパボ株式会社の @mrtc0 さんによる講義「実践 Linux コンテナ実行基盤セキュリティ」でした。概要は以下の通りです:
コンテナ型仮想化技術やコンテナオーケストレーションツールの登場により、Web アプリケーションをはじめとした様々なシステムがコンテナ実行基盤上で実行することは、いまや当たり前になりつつあります。コンテナはサンドボックス技術の一つでもあるため、それを使った開発や運用は安全だと思われますが、適切に対策しないと、アプリケーションだけでなく、隔離されているはずのホスト OS 自体も攻撃されてしまう可能性があります。 本講義では、そういったセキュリティ上の問題を理解するために、コンテナやその実行基盤に対する攻撃手法やそれらの対策について学びます。また、フルスクラッチでコンテナを作成することで、コンテナを支えている要素技術について学び、コンテナ実行基盤を深く学ぶための素地を身に着けます。
当日はスライド形式の資料ではなく、以下の Notion ページ + GitHub リポジトリの組み合わせを資料として講義が実施されました:
この資料まじですごい
余談
来年の Web セキュリティクラスは?
来年キャンプが開催されるかは確定してないと思いますし、少なくとも米内は全く知りません。そういういうわけで来年米内がプロデューサー的な形での参加するか、講師として参加するか、あるいは参加しないかは未確定です。
いまのところ、少なくともプロデューサーは別の方にお願いするのが適切かなと思っています。私がイメージできる Web セキュリティクラスのあるべき姿 2022 年版は、反省点はかなり残るものの今年である程度実現できた節もあるので、来年以降は私の能力が著しく向上しない限りは今年を大幅に超えられないと予想しているためです。こういいつつ自分がプロデューサーをやるパターンもあるのかもだけど…。来年のことを言うと鬼が笑うのでこのへんで。
来年も Web セキュリティクラスや、近い目的意識を持つクラスが存在するとしたら、今年よりもいいクラスになるように頑張るかバトンをつなぐかしていきたいと思います。
受講者のみなさんへ(閉講式の補足)
閉講式で一瞬話題に挙げたんですが、米内は今 23 歳(今年 9 月で 24 歳)で、受講生の方とそう年齢は離れていません。初めて全国大会で講師をしたのは 2019 年なので 21 歳だったのですが、当時は今にもまして、本当に各論しかできないがむしゃらな若者でした。今思うと色々恥ずかしい言動が多かった。ア…
ここからお伝えしたいのは 「対して年齢が変わらない講師もいることを考えても、ここは年齢を問わず挑戦していけるコミュニティだよね。だから安心して挑戦しよう」 ということです。
勿論新しく物事に挑戦しようとするとき、それを支援してくれている人は、きっと周りに沢山います。キャンプの場合は “チャレンジ講師” をたまに募集していますし、イベント登壇以外の挑戦の仕方も沢山あります。私自分も会社やセキュリティ・キャンプを始めとした外部活動において、次の時代を作れるポテンシャルを持った方をいかにアシストできるかを考えています。是非いろいろなサポートをうまく使い倒してください。
挑戦していきましょう。技術の力で、安全な、いい社会を一緒に7作っていきましょう。なにか相談事があるときや、なにか挑戦したいことを探したいときは、Meety や Twitter (@lmt_swallow)、講義などで利用していた Discord で声をかけてください。最初のメッセージの内容に迷ったら、ひとまず好きなおにぎりの具を教えてください8。
最後に
今年も良い夏でした。IPA のみなさま、協議会のみなさま、講師のみなさま、チューターのみなさま、受講生のみなさま、クロスウェーブ府中のみなさま、ありがとうございました!
参考
- 参加者の方の記事
-
また、参加者の募集開始時に公開したクラス概要や、同クラス概要を動画化したものも合わせてご参照ください。 ↩
-
まだ若くて尖っていた頃に書いたので、全体的に主語が大きめなのは許してほしいです… ↩
-
最初一つ返事って書いてた。そんな返事はない。ℒℴѵℯ @theoremoon ↩
-
個人的には久々に凹んでいます ↩
-
作業中のリポジトリは公開されているので、探せば多分見つかります ↩
-
大学 1 年生の頃とかは自己顕示欲とか承認欲求 4 割、実家の事情 6 割に駆られて生きていましたが、色々な波に揉まれつつしがらみを解消した結果、そういう欲は一通り消えました。いまは「いかにこれからのプロダクトセキュリティをエンジニアリング可能なものにして、労働人口の減少の中での高速な事業実現を支えるか、そしてそれを通して社会を前にすすめるか」と「日本からどう一兆円企業を作るか」だけを四六時中考えています。そのためなら当然技術も経営もビジネスも組織も理解して最高最速のパフォーマンスを出してやるつもりです。同じ志の人を増やしていきたい。 ↩
-
既に声をかけてくれた人も結構いて嬉しい。ありがとうございます。 ↩