Moz Blog

勉強したことや今行っていることをゆるーく書いていきます。

セキュリティ・キャンプ 2023 参加記

8月7日から8月11日まで開催されたセキュリティ・キャンプの Bクラス(Webセキュリティ)に参加してきたので、やってきたことや感想について、体験記として書き残そうと思う。

セキュリティ・キャンプについては、以下のホームページを参照してほしい。今年が20回目の開催で、4年ぶりに対面で行われた。

www.ipa.go.jp

応募課題

まず、セキュリティ・キャンプに参加するには、応募課題を解かなければならない。

これに関しては、また別のブログとして、私の答案については出そうと思うが、今までのプログラミング言語やコンテナ技術の利用経験を問われたり、Webにおける脆弱性の検証と調査、Webの標準や実装の調査を行なって、それをレポートとしてまとめ、提出した.

応募課題は、下記のURLにある。

セキュリティ・キャンプ全国大会2023 応募要項(エントリー) | デジタル人材の育成 | IPA 独立行政法人 情報処理推進機構

共通講義

共通講義では、行動経済学やXR、国際政治とセキュリティといったものやサイバー犯罪についての講義があった。これらについてはあまり書かないが、日頃勉強している技術的なもの以外の部分について学ぶことができるいい機会であり、新鮮であった。サイバーセキュリティという分野は、法律・犯罪と密接に関連してくるにも関わらず、グレー部分の範囲がとても広くて、どこまでが許されて、どこからがダメなのかという判断が難しい。そのため、ワークショップの形で弁護士や検事の方の考えを知ることができたのはよかった。講義の中でも仰っていたが、私はあくまで技術者であり、法律家ではない。だからこそ、”わかった気にならない”という点は気をつけようと思った。

専門講義

専門講義では、各クラスによって講義が変わってくる。Bクラスでは、Webセキュリティをテーマにして、講義が構成されている。基本的には4時間の講義で、どれも座学と演習が 1:1 くらいの割合になっており、手を動かしたり、ツールの動きを確認しながらだったため、概念だけでなく、実装も学べたし、何よりも楽しかった。講師の方が一般に公開している資料については一緒に貼っている。

1日目

B-1 Webプロダクトセキュリティへの誘い

最初の講義は、初日の18:30~20:30に行われた。この講義では、プロデューサーがどのような意図を持って講義を構成したか、何を学んでほしいのかというところを整理した。

このクラスでは、"将来と今の両方を考えて、意思決定ができるリーダーになること" を目標としており、その時点でいろいろ考えさせられた.私の感覚では、すごいセキュリティエンジニアというのは、技術のことをたくさん知っていることだったからである.でも、実際に社会に出ると、技術とは違ったベクトルの強さというものが必要だとわかった.これに関しては、 この時点でも納得はしていたが、B-5やB-7の講義を受けた後により強く実感した.技術的な強さだけであれば、5日間ひたすらWebアプリケーションの脆弱性を勉強して、探せばいいが、そのような構成にはなっていない."How と Why を考えながら受講すること"というのは念を押されたが、これに関しては、非常に大切なことであり、日頃から意識する必要があると感じた。

また、B-2からB-7の講義に関して、自分がどこまでわかっていて、どのようなことを学べそうか、何を習得することを目標にするかというのを考えて、グループワークでお互いに共有した.1つ例を挙げると、B-2の講義に関して、サイバーキルチェーンやActive Directoryはわかるが CI/CDパイプライン を狙った攻撃とはなんなのか、加えて攻撃者はどういう視点とか考えで攻撃を計画するのかというのはわからないから学びたいというのがあった.

2日目

B-2 開発のプロセスを攻撃者の視点で捉える

この講義は、2日目の8:30~12:30に行われた.この講義では、なぜ攻撃をするのかというところから始まり、レッドチーム演習の効果やサイバーキルチェーンと攻撃フローについて座学で学んだ.また、仮想環境で攻撃演習を行うことで、実際に攻撃フローを見ることができた.演習で自分で攻撃してみることで、攻撃者の視点というものをより実感することができた.最終的には、防御側ができることを考えたが、攻撃者の視点を持つことで、より深く考えることができた.レッドチーム演習の情報はWebで調べてもあまり出てこないため、その界隈の第一人者の方から、生の声を聞けたのはよかったし、貴重な経験になった.最近、Hack The Boxに取り組めていなかったが,講義を受講して、モチベーションが上がり、また再開した.

この講義では、CI/CD環境のセキュリティについても学んだ.オンプレミスからクラウドへと環境の変化はあるが、"攻撃方法は変わったとしても、攻撃の流れは変わらない"というのが大事な点であった.例えば、攻撃モデルの一つにサイバーキルチェーンがあるが、この考え方はオンプレでもクラウドでも関係なく、有効である.今までCI/CDを狙った攻撃というのは全く想像もつかなかったが Github Actions などの CI/CD Configuration から Credential が漏洩したり、3rd party tool を汚染することで莫大な被害につながるといった CI/CD Pipeline への攻撃もなんとなく理解できた.

B-3 クラウドネイティブセキュリティの実践と戦略

この講義は、2日目の13:30~17:30に行われた.この講義では、そもそもクラウドネイティブとはなんなのかの説明を受けたのちに、Kubernetesが提供する耐障害性の機能やマイクロサービスのセキュリティについて学んだ.k8sを実際に動かして、アプリケーションのスケーリングの様子などを確認しながら進めることができたのはとてもよかった.また、コンテナから権限掌握→AWSアカウントの侵害という演習を通して、クラウドネイティブ環境を構築・運用するにあたって、どのようなことに気をつけなければならないかといったことを学んだ.k8sのセキュリティモニタリングに関して、eBPFの紹介も少しあった.事前課題や講義を通して、最低限 k8s が動かせるようになったり、提供している一部の仕組みについてはわかったりしたが、まだまだ知らない機能はたくさんあるし、現在進行形で新たな技術が生まれている分野である.たしかにクラウドネイティブ環境の構築・運用は難しいのかもしれないが、技術の面白さというのはとても感じたし、もっともっと学んでいきたいと思った.

3日目

B-4 Webサービスにおける安全な認証とID連携の実装

この講義は、2日目の14:00~18:00に行われた.この講義では、最初に認証・認可の技術であるFIDO, WebAuthn, Passkey, OAuth, OpenID Connect についての用語とそれぞれの用語の関係に関して説明を受けた.各用語は知っているが、説明できるほどの理解はできていなかったため、整理して学ぶことができ、理解できた.また、認証・認可はWebアプリにおいて最もクリティカルな箇所であり,

セキュリティも十分に配慮しなければならない.CSRFの発生メカニズムを押さえ、どうすれば防ぐことができOpenID Connectではどのような処理フローになっているのかを学ぶことで、安全な認証・認可を実現する仕組みについて理解できた.その後、パスキーのハンズオンとOpen ID Connectのハンズオンを行なった.ハンズオンでは、プログラムの穴あき部分を埋めることで、ちゃんと機能が実装できているか確認しながらステップアップ形式で進めた.ID連携やパスキーの実装となると、難しいイメージだったが、すでにあるライブラリを使うことで、簡単に実装することができた.一度学んだとしても、使わなければ忘れてしまうため、Webアプリケーションを開発するときに、今回学んだ技術を組み込むことで、さらなる理解と自分で使える技術にしたいと思う.

B-5 適応し続けるプロダクトセキュリティ

speakerdeck.com

 

この講義は,3日目の19:00~20:40に行われた.この講義では,組織やプロダクトの変化に対して,セキュリティをどう確保するのか考える技術者というよりは,CISOといったセキュリティにおいてリーダーシップを発揮し,変化に対応する組織を作るにはどうすればいいのかといったことを学んだ.プロデューサーの"将来と今の両方を考えて,意思決定ができるリーダーになること"という思いが最も顕著に出ている講義であった.昨今の世の中は,プロダクトも組織もどんどん変化する時代であり,その変化に応じて,セキュリティのあり方も変わってくる.セキュリティの難しさはどこか一つでも弱い部分があってはいけないというところである.サービスを提供する場合,何か一つ強みがあれば,それで大ヒットするかもしれないが,セキュリティは全てが一定水準にならなければならない.プロダクト運営に求められるセキュリティは幅広いが,バランスよく,少しずつ積み重ねていくことが大事だとわかった.個人的には,セキュリティ人材が置かれる現実と求められることというところが面白く,より優れたセキュリティ人材,セキュリティ分野でリーダーシップを発揮して組織を変えるには,人間としての成長が不可欠だとわかった."深化と探索のバランスとそれらの継続" が重要になってくると学んだ.将来は,セキュリティ関連の仕事をしたいとは思っていたが,CISOのようなリーダーシップを発揮して組織を変えていくということは考えたことがなかった.セキュリティ人材として成長するために,人間的な成長が必要になるというのは面白かった.

4日目

B-6 ソースコード解析によるWebアプリケーションの脆弱性調査

この講義は,4日目の8:30~12:30に行われた.この講義では,ソースコードから脆弱性を探す方法について学んだ.最初に,静的解析で見つけやすい脆弱性の説明を受け,演習として,まずは,脆弱性を手動で探した.CVEが3つ取り上げられており,それらの脆弱性をNVDやそこに載っているGithubのPatchのプログラムやPoCを見て,調査した.プログラムベースで実際にどのような入力値であれば,脆弱性が悪用できるのかを探すのがこの調査のゴールであった.しかし,複雑なWebアプリケーションになると,大量の関数呼び出しによって,コードを追うのが大変になる.そこで,脆弱性調査の自動化のためのツールとして,CodeQLの説明があり,その後の演習で実際に使って,調査を行った.CodeQLを使うことで,特定の関数呼び出しや変数宣言,構文パターンを抽出することができ,脆弱性となりうるコードが含まれていないか簡単に調査できることがわかった.プログラムを書くことはあっても,解析して脆弱性を探し出すといったことはやったことがなかったため,新たな知見が得られたのはよかったし,楽しかった.自分で書いたコードに対して,脆弱性を探し,修正するといったことやバグバウンティに取り組むといったことも今後していきたいと思った.

B-7 Policy as Code 入門

docs.google.com

この講義は,4日目の13:30~17:30に行われた.この講義では,ポリシーをコードとして書くことで,k8sの設定ファイルやクラウドサービスのリソース状態の監視結果に対して制約を満たすかどうかチェックすることができるといったことを学んだ.この講義に関しても,B-5と同じで,一見セキュリティと関係ないため,今まで勉強してきたことがなかったが,クラウドサービスのリソースにポリシーを定義して不要なポートが開いてないかやクレデンシャルが書き込まれていないかなどのチェックはセキュリティ向上のためにも有効である.一部の先進的な組織しかPolicy as Codeを実践できていないという部分で,まだまだ新しい技術ではあるが,この講義を通して,こういうものがあるということを知れたのはよかった.演習では,3以降のよりリアルなポリシーになった途端に難しく,書くのに苦戦した.いつ使うことになるかわからないが,このようなものがあるというのを覚えておいて,いざという時に使えるようにしたいと思う.

講義全体を通して

B-1からB-7まで非常に幅広い分野の講義があり,それに加え,どの講義も4時間で終わり切らない程濃密なものであったため,まだ整理ができていない部分も多々ある.本当に知識をひたすら叩き込まれた感じであるため,また時間を取って整理して,理解したいと思う.4日間講義があり,ホームルームの時には思考停止するほどの疲れがあったが,講義内容の濃さと演習の楽しさでものすごい充実感はあった.あと,講義のレベルも高く,わからない箇所があったりもしたが,講師の方やチューターの方に質問するとなんでも教えてくださったため,問題なく演習を進めたり,疑問点を残すことなく学ぶことができた.

対面での開催について

今年は,4年ぶりの現地開催ということだったが,本当に楽しかった.5日間だけで,たくさんの人に出会ったし,たくさん話した.基本的にクラスで講義を受けるため,クラスの人とはずっと一緒にいることになり,仲良くなるが,だからこそ,食事のときや名刺交換会というのは違うクラスの子とも知り合ういい機会だった.ジュニアで参加している中学生とかから同世代の受講生やチューター,実際に社会で活躍している講師の方たちまで異なる立場や年齢の人たちと話すことができたのはよかった.X(Twitter)の中でよく見るすごい人たちと面と向かって話したり,議論できたりするのは楽しかったし,とても刺激を受けた.授業はもちろん素晴らしいのだが,同世代で自分よりもすごい人たちと出会い,それによってモチベーションが爆増するというのが個人的にはセキュリティ・キャンプに参加する一番のよさだと思う.学内という狭い世界で自分はそれなりにできると思っていても,全国から人が集まってくるセキュリティ・キャンプでは上には上がたくさんいるというのをすごい体感したし,もっと頑張ろうと思った.

参加した感想

今年22歳になるため,今年が最後のチャンスだったが,本当に参加することができて良かった.キャンプ参加が決まった後も,講義に対してワクワクしながらも,一方で講義についていけるのか,私みたいな人が行って大丈夫なのか,他の人たちはやっぱりつよつよなのかという不安はあったが,そんな不安は初日で解消した.たしかに,みんなすごい人たちだったが,コミュニケーションを取る上では,ITに興味があるというその一点だけで仲良くなることができたし,講義でわからないことがあったとしても,他の受講生やチューター,講師の方に聞いたらちゃんと教えてくださった.

セキュリティに興味があるのなら,少しでも早いうちから応募課題に挑戦するべきだと思うし,そこで得られるものはたくさんある.たとえ,課題で落ちてしまったとしても,課題を解くことに意味があり,それだけでも知らないことをたくさん学ぶことができる.セキュリティ・キャンプ 2023 に参加したからこそ,心の底から参加することを勧めたい.

来年は,チューターかネクストキャンプ受講生としてまた戻って来たいと思う.

まとめ

・どの講義も濃密で、わからない部分もあったが、チューターや講師の方のサポートもあり、なんとかついていくことができた.

・やっぱり対面での開催はいい.

・全国のすごい人たちを間近に見ることができ、刺激がもらえる.

・セキュリティに興味がある人はもちろん、ITに興味がある人全員にセキュリティ・キャンプを進めたい.