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に興味がある人全員にセキュリティ・キャンプを進めたい.

PC作ってみた

SECCON Beginners CTF 2023 でボコボコにされて、少し萎えていますが、超絶久しぶりにブログでも書きます。

なぜ自作PC

まず、4月29, 30日(土・日)にGMOインターネットグループが開催するDevSecOpsThon2023というイベントに参加しました。これに関しては、イベント直後に、参加記を書こうと思っていたのですが、書かんといけないな〜と思いながら、2週間も経つと、完全に書く気がなくなりました。気になる方は、下に他の参加者さんが書いたリンクを貼っているのでそちらからご覧ください。

イベントの参加者には、自宅サーバ勢が多く、確か半分くらいは、自宅にサーバを立てていたと思います。イベント自体が、インフラハッカソンというちょっと変わったイベントで、ハードウェアやOS、ミドルウェアといった低レイヤの知識を必要としており、もう自宅サーバ勢が無双状態で、自分の知識の欠如を非常に実感しました。

そこで、その人たちに近づくための第一歩として、自作PCに取り組もうと思いました。

developers.gmo.jp

DevSecOpsThon2023 参加ブログ

DevSecOpsThonに参加してきた

「DevSecOpsThon at GMO kitaQ」に参加したらすごく良かった件!! - Qiita

DevSecOpsThon2023 at GMO kitaQ - Qiita

【📝】DevSecOpsThon at GMO kitaQ

 

自作PCに取り組む

これに取り組んだのは、5月27, 28日でした。この理由は、25日に給料日だったからですね。

まずは、パーツの選択と購入から始めました。別にゲーム用途ではないため、GPUはいらない代わりに、グラフィック機能があるCPUにしたり、メモリの拡張性を考えて、4スロットあるマザーボードにしたりしました。

初めての自作PCということで、そこまでスペックのいいものを作る気は最初からなく、まぁ10万円くらいかなと考えていたのですが、メモリやSSDが思ったよりも安く、7万円くらいで全てのパーツを購入することができました。

購入したパーツが届いたら、あとは組み立てるだけでした。ググったら、自作PCについてのサイトはたくさん出てきましたが、正直マザーボードとPCケースの取扱説明書だけでも十分なほど説明が細かく書いてあります。全てのパーツをマザーボードにくっつけるだけなので、そこまで難しくはなく、電源など配線が終わったら、本当に起動してくれるのかドキドキしながら、電源ボタンを押しました。プラス端子とマイナス端子を逆にしていないかなど心配しながらも、BIOS画面が立ち上がった時はとても安心したし、嬉しかったです。

ここまできたら、あとはブータブルUSBからOSを起動するだけで、無事に初めての自作PCを完成させることができました。

今は、仮想マシンを複数台起動していて、それを使って、遊びつつ、勉強していこうと思っています。とりあえずは、Kubernetesクラスタを組んでみたり、脆弱性検証から始めていこうって感じです。

自作PCのメモについては、下のリンク先にあります。

moz-security.me

作ってみて

自作PCというと、とてもハードルが高いように感じますが、実際に作ってみると意外と簡単だし、色々と勉強になることもたくさんあります。また、デスクトップという制約はあるものの、同じ値段であれば、ノートPCよりもいいスペックで構築することができるし、店頭にあるデスクトップPCと比べても、自分で改造できるため、拡張性があるといったメリットがあります。

一度だけでも作ってみるのはおすすめです。(自分に合わなければ、2度目をなくせばいいだけ)

2023年の目標

前回のブログで「近々、新年の抱負として、今年やりたいことを書きたいと思っています。」と書いておきながら、もう少しで1ヶ月が経ってしまいます。(近々とは?って感じですけど 笑)

1月は、大学のテストと溜まりに溜まった課題で手一杯でしたが、1月31日でそれも終わり、ひと段落したため、今年の目標について書いていこうと思います。

目標は大きく4つあります。

1つ目は、大学の研究です。これは目標というよりも、頑張ることになってますね。どれだけ独学で勉強しても、趣味でいろいろシステム開発しても、まずは大学を卒業しなければ、学士にはなれないため、これは間違いなく最優先で行わなければいけません。大学の授業としても、あと残っているのが卒業研究だけであるため、今年大学でやること・頑張ることはこれだけかなと思います。大学に行って、ひたすら研究、研究、研究になる気がします。

2つ目は、Hack The BoxでHackerランクになることです。昨年の3月ごろからHack The Boxを始めて、時間があるときに取り組んでいましたが、Starting Pointのいろいろな箇所で詰まったり、そもそも時間を十分に取れなかったりして、あまり攻略できていませんでした。今年は、授業もあまりなく、時間も取れそうなため、本腰を入れて頑張りたいと思います。具体的な数字でいうと、少なくとも毎日1時間、朝8時〜9時までをHack The Boxを攻略する時間に当てようと思っています。理想は、2時間、3時間、時間が取れるならそれよりもという感じなんですけど、日によっては、忙しい日もあるので、そんな日でも取れそうな最低限の1時間にしました。こういうのは1日に頑張りすぎるよりも、継続することが大事だと思うので、毎日コツコツやっていきたいと思います。将来的にはセキュリティ関連の仕事をしたいため、攻撃を通して防御を学び、防御を通して攻撃を学んでいきたいと思います。

3つ目は、資格の取得です。今まで、基本情報技術者応用情報技術者を取ってきたため、今年は、情報処理安全確保支援士に挑戦したいと思っています。資格は、知識問題でしかないから、社会では使えないという意見もあり、自分でも知識(知っていること) とスキル(できること)は違うと思っているため、半分は同意できるのですが、一方で、資格を取るために勉強するというこの資格を取るまでの過程が大事だとも思っています。また、幅広く体系的な知識を習得できるというのも資格取得のメリットだと思っています。情報処理安全確保支援士取得に向けて、これから頑張りたいと思います。

4つ目は、学外のイベントに参加することです。セキュリティキャンプやSecHack365といったセキュリティ関連のイベントに加え、ハッカソンやカンファレンスにも参加していきたいと思っています。前までは、自分のスキルでは学外イベントに参加するのは恥ずかしいと思い、挑戦できていなかったのですが、昨年、ハッカソンやセキュリティ・ミニキャンプに参加することで、参加する人全員がすごい人ではなく、自分と似たような人もいるし、イベントを通して、成長したいという人がたくさんいることも知りました。今年は、昨年に引き続き、より多くのイベントに参加し、成長できる環境に自分から臨んでいきたいと思います。

1月も終わり、今年もあと11ヶ月になりましたが、いろいろな経験をして、たくさんの人に出会い、成長できたと言える1年にしていきたいと思います。

ぼちぼちブログでもはじめます

もう新年始まって気づいたら4日目ですが、明けましておめでとうございます。

アウトプットの場として

2023年になり、気持ちを新たにして、なにか新しいことを始めようと思ったときに、前々からいつかやろうと思っていたブログを書くことに決めました。(いつかやろうを今やることは大事だと思う。)

ここらへんで、一応、自己紹介しておきたいと思います。

私は、現在、大学で情報理工学を学んでいて、ネットワークやセキュリティに興味を持っています。

今までやってきたこととしては、B2のときに基本情報技術者試験、B3のときに応用情報技術者試験に合格し、他には、セキュリティ・ミニキャンプ オンライン・東京 に参加したり、Hack The Boxを少しずつやってきました。(秋学期になってからHTBはほとんど触れていないが…)

他にも、いろんな勉強会にも参加してきました。今はオンラインで気軽に参加できるので。

ブログを書こうかなと考えた理由は大きく3つありまして。

1つ目は、セキュリティ・ミニキャンプのグループ活動でLT大会をしたときに、やっぱりアウトプットの場というのがあることで、より知識の定着につながることが実感できたからです。大学生になってからは、インプットがメインになっていてアウトプットの場がなかなかないため、どうアウトプットするのかというのは考える必要がありました。Twitterでもアウトプットはできるし、実際にそれを使っていましたが、文字数に制限があるため、正しく文章を書くには向いていません。(気楽にツイートできることがTwitterの良さではあるのですが。)

2つ目は、自分の言語化能力の向上のためです。自分の頭には考えがあるのに、それをうまく伝えられなかったり、わかりにくい説明になっていたりしていたため、どうすればわかりやすく説明できるのかというのは前からの悩みでした。そこでいろいろ考えたときに自分の頭にあることを言語化するというのは、結構慣れの要素が大きいと思うため、経験を積むことが大事だという結論にいたり、それならば、早く始めた方がいいというのが、ブログを書くきっかけにもなっています。

3つ目は、エンジニアになるなら、自分の技術力(今までどんなことをやってきたのか、私はどんなことができるのか)を証明するためにも技術ブログは書いておくといいということを聞くことが多いからです。今は、いきなり技術ブログを書くのは敷居が高いため、気楽に書けるこのHatena Blogでしか記事を書いていませんが、今年中には、QitaやZennの方に、技術系の記事を投稿していきたいと思っています。

ブログを書く前に、Hatena Blogを使うかも結構迷っていて、自分で個人ブログサイトを作ろうかとも思ったのですが、そこに時間をかける前にさっさとブログを書き始めようということで、こちらを選択しました。そのため、今年中には、個人のブログサイトを作ってそちらに移行したいと思っています。(願望)

このHatena Blogでは、月に1回は投稿していく予定です。内容としては、その月にやってきたこととか新たな発見があったこと、自分の書きたいことを勝手に発信していく感じで。ここであらかじめ宣言しておくことで、自分を追い込んでいくスタイル。(笑)

技術的な話は、QiitaやZennの方に書くかもしれませんが、もしかしたら、こっちで書くかもしれません。全然考えていないため、そこら辺はこれから考えていきたいと思います。

とりあえず、人生初めてのブログは、こんな感じで終わりたいと思います。

近々、新年の抱負として、今年やりたいことを書きたいと思っています。