🔥

セキュリティ・キャンプ全国大会2022 Webセキュリティクラス 参加記

2022/12/05に公開

この記事は、SecHack365 Advent Calendar 2022 5 日目 および、takumma のやれるところまでやってみる1人 Advent Calendar 2022 5日目 の記事です!

https://qiita.com/advent-calendar/2022/sechack365

https://qiita.com/advent-calendar/2022/takumma


takumma です。セキュリティ・キャンプ全国大会 2022 の、B(Web セキュリティ)クラスに参加したので、参加記を書こうと思います。半分くらいはキャンプ終了後一ヶ月以内くらいで書いたのですが、途中で折れて結局 12 月までもつれ込みました。内容を思い出しながら書いていくぜ。

セキュリティ・キャンプとは?

ざっくり言うと セキュリティに関心がある学生を集めて開発したり豪華講師陣が講義したりしちゃうよの会(無料) です。

セキュリティ・キャンプの詳しい概要などは ↓ をご覧ください。

http://www.ipa.go.jp/

参加したクラス

僕は今回、専門コースの中の B - Web セキュリティクラスに参加しました。

B【Web セキュリティクラス】
Web が社会で担う役割の拡大や、クラウドネイティブ技術の進化を受け、Web プロダクトのセキュリティに関連する領域は拡大・深化の一途をたどっています。Web セキュリティクラスの最大の特徴は、そんな Web プロダクトの提供に関わるセキュリティの全体感を、各関心領域における専門家から学ぶことができることです。

Web セキュリティクラスでは、現代の Web を担っているさまざまな技術領域・関心事(ex: コンテナ、Policy as Code、Web ブラウザ、CICD、ソフトウェアサプライチェーン)を網羅するように講義や課題が盛りだくさんに設定されています。Web セキュリティと言いつつも、中身は結構低レイヤ寄りになっていています。そのため、低レイヤよわよわな僕はヒイヒイ言いながら講義を受けていました。

クラスや講義内容のコンセプトなどの詳しい話は、今回 B クラスのプロデューサーをされていた米内さんが書かれているのでこちらをご覧ください。とても良い記事なので僕のなんかよりこっちを読んでください。(この記事にも載せますが、公開されている講義資料なども載っているのでぜひ!)

https://diary.shift-js.info/seccamp2022/

応募

応募の時は他の課題と締め切りに追われながらぎりぎりで出していました。セキュリティ・キャンプの応募課題は難しいですがすごく勉強になるので、解いていても楽しかった記憶があります。自分のためになるって思うとやる気出るよね。

もし応募するか迷ったりしている人は、とりあえず分かんなくても解いてみるといいと思います!

応募に関する話とかは、課題晒しの方に詳しく書いてあるのでそっちも併せてご覧ください〜。

https://zenn.dev/takumma/articles/seccamp-2022-challenge-takumma

参加決定 ~ キャンプ期間まで

https://twitter.com/_takumma/status/1533640965705310209

事前課題

参加が決定してからキャンプ当日までは、各講義から事前課題が出されたり、キャンプから本が送られてきたので、それを解いたり読んだりしていました。

公開されている課題のひとつ ↓(めちゃ楽しいので暇があれば是非やってみてください)

https://github.com/d0iasm/vulbr

キャンプから送っていただいた本の一つ ↓(全部読めたとは言ってない)

https://twitter.com/_takumma/status/1534744111034826753

応募課題同様、勉強になるものばかりでとても楽しかったです。正直他のことにも追われていたりしてちゃんと全部きっちり取り組めた訳ではないんですが、ここら辺もキャンプ後にフォローアップしておこうと思っています。本も読むぞ。

ノベルティ

セキュリティ・キャンプは協賛企業がたくさんいるので、参加者には信じられない量のノベルティが届きます。個人的にはステッカーが大好きなので沢山貰えて嬉しかったし、 QoL 爆上がりでした。パーカーと T シャツも届いていたのでキャンプ期間はそれを着ていました。キャンプ期間は真夏でしたが、パーカーがカッコよくて気に入っていたので冷房をかけて長袖のパーカーを着ていました。

共通講義

キャンプ期間前には、全参加者を対象に講義が開かれていました。共通講義の時は、他クラスの参加者と HackMD で講義メモを共有してみんなでワイワイ書き込みながら講義を受けていました。講義は以下の3つです。

  • サイバーセキュリティでアイディアは生まれるのか
  • 心理学の視点からセキュリティを考えてみよう
  • セキュリティ情報を適切に伝えよう

サイバーセキュリティでアイディアは生まれるのか

くぼたつ先生と sonodam さんから、どのようにアイデアを出していけばいいのかとかセキュリティとアイデアの関連みたいな講義を受けました。くぼたつ先生と sonodam さんが適宜質問も受けつつ 2 人で喋り続けると言う内容で、講義というよりはすごい人の対談をずっと聴いているような気分でとても楽しかった記憶があります。sonodam さんがよくやられているこの形式がめちゃ好きなので続いてくれると嬉しいと思ったりします。

心理学の視点からセキュリティを考えてみよう

最近デザインに関心が高まっている僕個人としても興味のある講義でした。これは共通講義全体に言えることですが、セキュリティ・キャンプの専門講義では技術的な側面からサイバーセキュリティについて学んでいくことが多いのに対して、人とその心理という側面からサイバーセキュリティを考えていくという視点が、デザインにも関連していてとても面白かったです。

セキュリティ情報を適切に伝えよう

僕も技術者の末端の末端として一緒に開発を行うチームや世の中などいろんなスコープの人に対して文章を書いたりするわけですが、特にセキュリティに関することはセンシティブな話題なため、特に注意して書く必要があるわけですね。(専門講義の某講師の方も、日本語で書くと怖いから英語で書いてますとか言ってたりもしていた気がする。)講義では新聞記者の方をはじめセキュリティに関するメディアで活動されてきた方々からそれぞれの視点で情報を適切に伝えることに関していろんなお話を聞くことができました。書くことに対する考え方を深く掘っていく話が聞けてとても面白かったし、文章を書きたくなりました。

キャンプ期間

今年は 8/8 - 12 の5日間開催でした。毎日朝の 8 時半から夜の 8 時半までみっっっちりと講義やグループワーク・LT 会がありました。

講義はもちろん最高に楽しかったのですが、グループワークや LT 会も他の参加者と交流したり他の人の興味に触れられたりしてとても楽しかったです。4 日目の LT 大会にはノリで自分も参加しました。

専門講義

B クラスの専門講義は、以下の6つで構成されていました。

  • B1: 作って学ぶ、Web ブラウザ
  • B2: マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法
  • B3: Policy as Code 入門
  • B4: モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化
  • B5&B7: ソフトウェアサプライチェーンセキュリティのこれから
  • B6: 実践 Linux コンテナ実行基盤セキュリティ

どれもめちゃくちゃボリュームが多くて、時間内に終わる講義がほとんど(いや、全く)無いという感じでした。(ある講義では「4 時間ではなく 2 日でやる内容だ」というレビューももらっていたそうな…。)

正直内容的にも僕はついてくので精一杯だったのですが、むしろそういう環境の中で激しい成長を感じながら学べてとても良かったです。

こんなに必死で講義を受けることなんて学校では無かったし、滅茶苦茶面白い講義ばかりだったので、キャンプ期間中はアドレナリンがドバドバ出ていました。

以下、それぞれの講義の概要と感想をまとめます。

B1: 作って学ぶ、Web ブラウザ

Web ブラウザは私たちとインターネットを繋ぐための身近な存在ですが、大規模すぎるプロダクトがゆえに全貌を理解することは困難です。本講義では、仕様を読み解きながら自分で簡単なブラウザを作ることによって、HTML、CSS、JavaScript への理解を深め、Web セキュリティにおけるブラウザの役割について少しでも詳しくなることを目標とします。

d0iasm さんによる Web ブラウザに関する講義です。

事前課題では vulbr という自作ブラウザの機能を拡張したり、それを通して Web ブラウザについて発表をしたりする内容がありました。

僕のコードとかは ↓ にあります。なんか事前学習期間であんまりちゃんとやれなかったので、終わった後にまたやりたいなと思っています(やってない)。

https://github.com/takumma/vulbr/tree/takumma

発表に使った資料は ↓ に。

https://speakerdeck.com/takumma_/seccamp-2022burauzake-ti-fa-biao-ee7f3909-38da-4d1b-8ad8-ecfb4cb4735b

事前課題を通してブラウザを実装することの楽しさ(ただ機能を実装するだけじゃなく、仕様を読んだり他の Chrome などの実装を参考にしたりして実装を検討したりするような、ブラウザならではの楽しさ)を感じました。ブラウザの実装をやってみたり仕様を読んだりというのは、個人的には結構ハードルの高いことだと思っていて、そこら辺をキャンプをきっかけに触れることができてとてもいいきっかけを提供してもらえたと個人的には思っています。

後でまた書きますが、課題発表の HTTP ステータスコードの話はそのまま Chrome へのバグ報告に繋がったりもしています。

あと、講義を見てたはせがわさんにツイートしてもらってたりしててビビりました。去年とかも同じようにキャンプのことをツイートされていたのを見てた気がするのですごく嬉しかったです。

https://twitter.com/hasegawayosuke/status/1556810571428704256

B2: マイクロサービス/分散モノリス的アーキテクチャへの攻撃手法

近年クラウドサービスやマイクロサービスアーキテクチャの普及が進むと同時に、それらの攻撃手法もまた研究されており、セキュリティエンジニアの間では関心の強い分野の一つとなっています。本講義は現役のペネトレーションテスターが業務等で得た知見を元に作成しており、クラウドサービスやマイクロサービスアーキテクチャで構築された Web サービスに対するリアルな攻撃手法をハンズオン形式で学び、習得することを目的としています。

tyage さんと no1zy_sec さんによる、マイクロサービスに対する攻撃手法をハンズオン形式で学ぶ講義です。

異なるアプリケーション館の挙動の違いなどによって攻撃が可能になることなどをハンズオンを通して学びました。僕はマイクロサービスに関する攻撃手法などについて今まであまり考えたことのなかったため、新しい領域・関心ごとに触れることができ、とても刺激になりました。ハンズオンも ctf というよりより実際の事例に近いようなサービス構成を想定したハンズオンだったため、よりリアルな手触りがありました。ハンズオンがボリューミーだった記憶があって、ついてくのがやっとの感じだったけどとにかく楽しかった記憶があります。

資料も先日公開されていました ↓

https://gmo-cybersecurity.com/news/security_camp_presentation_slide_20220901/

B3: Policy as Code 入門

情報セキュリティの分野でも、いままで人が作業していたようなことをソフトウェアの力を使って置き換えるようなエンジニアリングの動きが近年広がっています。その一つとして、組織やチームで定めたポリシーにしたがって判断をしたり、ポリシーに準拠しているかのチェックをコード化によって機械的に実施する「Policy as Code」という考え方があります。この講義では「Policy as Code」がどのような取り組みなのか、具体的にどのようなことができるのかについて実例とともに紹介していきます。また、Policy as Code の分野で注目されている実装の Open Policy Agent(OPA)とその記述言語である Rego についても簡単に紹介し、実際にポリシーをコードで記述するハンズオンまで実施したいと思います。

講師が、 Policy as Code といえば!m_mizutani さんということもあり、キャンプ前から特に興味の湧いていた講義のひとつでした。m_mizutani さんに限った話ではないですが、m_mizutani さんに直接 PaC 入門を教えてもらえるってめっちゃ貴重ですよね。

僕は Policy as Code に対して、個人よりも組織や大規模なプロジェクトの中で使われるイメージを持ってて、気になってるけど触る機会・きっかけ・モチベーションが僕の中でなかった技術の一つだったため、この講義はその良いきっかけになりました。PaC を学び、Policy を書いて、実際に PaC を利用する場面を想定したハンズオンに取り組んでいました。Policy as Code の全体感というか、肌感というか、この技術をどのように適応してよりセキュアにしていくのかの雰囲気を知ることができた気がします。

講義資料は以下!↓

https://docs.google.com/presentation/d/1dk4l50A9G7L4wYRmnC-93CLw9cBLjoE1m_9zp4BNTt0/edit#slide=id.gc6f73a04f_0_0

B4: モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化

この 10 年で、ソフトウェアを開発する環境は大きく変化してきました。 インフラストラクチャは Cloud 基盤の利用が増え、ソフトウェアのテストやデプロイの際は CI/CD(継続的インテグレーション/継続的デリバリ)パイプラインを通じてデプロイされるようになりました。また、開発はリモートワークを前提とした、境界防御によらないゼロトラスト環境の社内 IT 基盤上で行われています。

本講義の前半では、現代のプロダクション環境を攻撃および保護するためにはどのような手法を用いることができるのか、主にマルウェアなどを用いたクライアントサイドへの攻撃や、サプライチェーン攻撃の視点から、総合的に攻撃手法および対策を講義した上で、ハンズオンを行います。

後半では、セキュリティ対策として焦点の当たることの少ない CI/CD パイプラインのセキュア化についてハンズオンを通じて攻撃手法と対策を身に着けていただいた上で、その上で残る課題について解説することを予定しています。

rung さんによる CICD パイプラインなどに関する講義です。ていうか書いてて思ったんですが、内容に関してはとにかく講義資料を見るほうが良いのでとりあえず講義資料見てください w(本当にいい資料ばかりなんで)

ソフトウェア開発を取り巻く環境の変化を導入として取り上げ、その中で特に重要になってきたよね。ということで開発環境や CICD に関するセキュリティについていろんな視点・関心から考えていくことをしました。「CICD は本番環境と直接繋がる新たなパイプである。(意訳)」という導入には凄く納得感がありました。

講義資料はこちら ↓

https://speakerdeck.com/rung/training-devenv-security-ja

lmt_swallow さん曰く、本当に貴重な資料らしいです。個人的にはスライドの途中に出てくるカオスな </> の図が好きです。

B5&B7: ソフトウェアサプライチェーンセキュリティのこれから

現代のソフトウェアの開発・運用プロセスは多くの人・組織・ソフトウェア資産に立脚するようになってきています。多くの便利な OSS パッケージが 1, 2 回のコマンド実行で手に入り、1 つの YAML ファイルがテストやデプロイの継続的実行を可能にし、便利なソフトウェアを動かすための環境は世界の誰かがコンテナイメージとして公開してくれている、そんな体験をする機会が多くなってきたのではないでしょうか。

しかし、この喜ばしい時代の流れの中で、「一つのソフトウェアを作って届けるという工程に関与する人の数」が爆発的に増加してきているのも事実です。この流れが、ソフトウェアサプライチェーンのセキュリティへの関心を急激に高めています。本講義では専門講義「モダンな開発環境のセキュリティおよび CI/CD パイプラインのセキュア化」で取り扱う内容と連携しながら、ソフトウェアサプライチェーンセキュリティのこれからについて検討します。

lmt_swallow さんによる2回に分かれている講義で、ソフトウェアサプライチェーンに関することやそれに関連した技術(ex. sigstore)などに触れる講義です。

sigstore については応募課題の時点で勉強していたりしてたので何となく概要は掴んでいたのですが、それを実際にどのようにソフトウェア開発に適応していくのかを検討したり、その他のセキュリティ対策関連技術と組み合わせてどのようにソフトウェアとその開発環境をセキュアにしていくかを手を動かしながら検討していきました。

ソフトウェアサプライチェーンは僕も昔に npm の event_stream 周りのことを調べたりして興味を持っていた領域で、世の中的にも最近特に話題に上がるようになったのではないかと思います(Log4j とか)。フロントエンドの文脈でも、(高速化とかの側面もあるけど)Astro などをはじめ依存を少なくしていこうという動きがあったりしていて、今後さらに関心が高まって、そのための技術も発展していくんじゃないだろうかと個人的にも思います。

B6: 実践 Linux コンテナ実行基盤セキュリティ

コンテナ型仮想化技術やコンテナオーケストレーションツールの登場により、Web アプリケーションをはじめとした様々なシステムがコンテナ実行基盤上で実行することは、いまや当たり前になりつつあります。コンテナはサンドボックス技術の一つでもあるため、それを使った開発や運用は安全だと思われますが、適切に対策しないと、アプリケーションだけでなく、隔離されているはずのホスト OS 自体も攻撃されてしまう可能性があります。

本講義では、そういったセキュリティ上の問題を理解するために、コンテナやその実行基盤に対する攻撃手法やそれらの対策について学びます。また、フルスクラッチでコンテナを作成することで、コンテナを支えている要素技術について学び、コンテナ実行基盤を深く学ぶための素地を身に着けます。

mrtc0 さんによる講義です。

Docker, Kubernetes を中心に、コンテナ技術の仕組みやコンテナに対するセキュリティについての講義 & ハンズオンでした。個人的には docker.sock を利用してホストをマウントする話が面白かった記憶があります。またまた講義資料がボリューミーだったため Docker の話だけで講義時間が過ぎていき、30 分で Kubernetes とそのセキュリティについて学ぶような流れになっていました w(そうなってしまうくらい内容が濃密だった)

講義資料などは以下!↓

https://github.com/mrtc0/seccamp-2022

キャンプの夜は長い…

キャンプ期間中の夜は、Discord に受講生やチューター・講師の方が集まって雑談したり作業通話したりしてました。期間中は朝の 8 時半から夜の 8 時半まで 1 日中講義などがあるわけですが、さっきも書いたようにアドレナリンがドバドバ出てたので僕も夜までずっと何かをしていました。期間中には LT 会もあったので、LT のために別でスライドを作ったりとかもしてました。

余談:Chrome にバグ報告した話

「B1: 作って学ぶ、Web ブラウザ」の講義内では、Web ブラウザに関することを発表する課題がありました。僕は Web ブラウザに機能を実装してる時に見た HTTP Request の Header 周りの仕様の話と HTTP Status Code に関する話をまとめて発表しました。(発表資料は上記)

発表の中で、範囲外の HTTP Status Code が返された時の Chrome の挙動を調べたことを話したのですが、その時にその挙動がおかしい・bug かもしれないねという話になり、講師の d0iasm さんや lmt_swallow さんに Chrome のバグ報告を勧めてもらいました。

その後報告するかどうか迷ったりしてたのですが、セキュリティ・キャンプ内で LT の募集があり、「あーーーせっかくならやりたいな!」と思い立って期間中の夜中に LT 資料を作りつつ DeepL 英語で Chrome へバグ報告をしました。

以下がその時のバグ報告です。

https://bugs.chromium.org/p/chromium/issues/detail?id=1351769

もちろん初めてでかなり拙い感じがありますが、セキュリティ・キャンプがなければ多分一生することのないことだろうなあと思いました。こういう機会が無限に存在するのがセキュリティ・キャンプなのではないでしょうか。

あと、この issue に d0iasm さんとか SecHack365 で関わりのある某 Chrome コントリビュータさんが英語で普通に会話してて、自分が英語ができないことがとても恥ずかしくなりました。d0iasm さんに英語の勉強の tips を聞いたりしたし、英語の勉強をする機運もあるのでそのうちまたちゃんと勉強しようと思います...。

https://twitter.com/_takumma/status/1558074251453665281

完走した感想

https://twitter.com/_takumma/status/1558038500628647936

キャンプの講義全体を通して感じたのは、分野・領域は違えど、同じ考えや概念が他のことに適応できるなあということです。Web セキュリティクラスで コンテナからブラウザまで様々な領域に触れましたが、その多くには例えば Secure by default であったり Defence in Depth といった考え方を適応することができます。また、「historical reasons…」というキーワードもあります。「historical reasons…」は d0iasm さんの Web ブラウザの講義の中で教えてもらった言葉なのですが、その後 Web セキュリティクラスの受講生の間で流行語になっていました。

講義は超オーバーボリュームでしたが、その分凄く密度の濃い学びを浴びることができて最高でした。キャンプ自体は 5 日というとても短い期間でしたが、自分史上最も成長した5日間になったのではないかと思います。

セキュリティ・キャンプに行って一番良かったのは、「きっかけ」を与えてもらえたことです。キャンプに参加する前の僕は幅広い Web を構成する技術の中のほんの一部分しか触ってきませんでした。それは単純に僕があまり積極的に触りにいけてなかったというのももちろんですが、例えば「業務で利用するために必要になる」というようなその技術を触るきっかけになることがあまり自分の周りにありませんでした。

そんな中でセキュリティ・キャンプを受講できることになり、その中で課題を解くためにある技術を勉強する必要があったり、講義内のハンズオンで自然と触ったり、講師やチューター、同期の受講生とのやり取りの中で様々な技術や関心に触れたりというような新しく触れる「きっかけ」を沢山浴びることができました。その中には、セキュリティ・キャンプに行かなければ自分が触れることのなかったであろうことも沢山あります。

セキュリティ・キャンプに行けたことは、今年一番僕にとって幸運だったことの1つだと思います。さっきも述べたように貴重な講義を受けることができたというのもありますが、講師やチューター、他の受講生の方と関わりを持つことができたということも自分にとってとても大きかったです。正直自分がなんで応募に通って受講できたのか今でもよく分からないですが、とにかく楽しかったです。

最後に

講義資料をぜひ見てください。

1講義3時間くらいの中には到底収まりきらない量の講義資料やハンズオン・課題が各講義に用意されてます。内容も濃いので、みてない人はぜひ一度見てみてください。

あとつい最近知ったんですが、2022 の各講義はセキュリティ・キャンプの Youtube に講義動画が上がっていたりするのでそちらも併せてご覧ください!僕も他のクラスの講義を見たりしようと思います。

YouTubeのvideoIDが不正ですhttps://www.youtube.com/@securitycampjapan

セキュリティ・キャンプはいいぞ…

セキュリティ・キャンプはセキュリティが好きな人はもちろんですが、セキュリティにそこまで触れたことないという人にとってもセキュリティや技術を学んでいくとても良い環境だと思うので、学生の方はチャレンジしてみることを強く勧めします。

謝辞

最後に、講師とチューター、一緒に講義を受けた同期の受講生の方々へ、素晴らしい環境と経験を与えていただき、本当にありがとうございました。コロナがあってオンラインでの開催だったので、機会があればどこかでお会いしたいなと思ってます。

おわり。

Discussion