セキュリティ初心者がセキュリティ・キャンプ全国大会2019に参加してきた。
どうも、temmaです。プログラミングを始めて3ヶ月で、何故かセキュリティ・キャンプ全国大会2019の応募に受かったので、5日間受講してどう感じたかを書きます。
- セキュリティキャンプとは
- 参加まで
- Day 0 (開会式前日)
- Day 1 (開会式 + 全体講義)
- Day 2 (必修講義)
- Day 3 (選択講義)
- Day 4 (選択講義)
- Day 5 (成果発表会 + 閉会式)
- 全体を通してよかったこと
- 最後に
- 各講義ごとのブログ
セキュリティキャンプとは
セキュリティ・キャンプとは、日本における将来の高度IT人材となり得る優れた人材の発掘と育成を目的とした独立行政法人情報処理推進機構(IPA)の事業の一つです。
現代においては、情報セキュリティの脅威は高まる一方です。
本事業では、セキュリティ分野に興味を持ち、将来同分野で活躍したいという意志をもった若者に対して、高度な情報セキュリティ技術の習得機会を提供しています。また、モラルや法律遵守の意識、セキュリティ意識、職業意識、自立的な学習意識についても向上のための機会を提供しています。本事業は、2004年度のスタート以来、2018年度のセキュリティ・キャンプまでで計748名の将来が有望なIT・情報セキュリティ人材を輩出しています。セキュリティ業界はもとより各方面から、高度な情報人材育成に有益なイベントとして高く評価されています。
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_about.html
って感じで、強い講師の方のいい感じの講義を移動費、宿泊費、食費込み無料(from 税金+スポンサー)で受けられるありがたいキャンプです。
参加まで
サークルの先輩にオススメされて応募しました。詳しくは、下の記事を参照してください。
Day 0 (開会式前日)
遠方の方はこの日に会場入りして、前泊(食事あり)をしてたみたいですね。
セキュキャンマジでこええ
— tenma (@Tenma_F) 2019年8月12日
ノー勉で挑むテスト前日みたいな緊張感ある
いや、そろそろ寝ないとまじで遅刻しそうなので寝ます
— tenma (@Tenma_F) 2019年8月12日
寝ました。(a.m. 3:00)
Day 1 (開会式 + 全体講義)
起きれた
— tenma (@Tenma_F) 2019年8月12日
移動時間がかかる人は大変そうですが、僕は1時間ほどで会場に着く距離なのでそれなりに余裕がありました。
seccampの人に耳寄り情報なんですが、北府中駅と府中駅は違う駅です https://t.co/bYfqYBwK5e
— 早寝早起き受験勉強 (@6Lgug) 2019年8月12日
— へいほぅ (@5ebec) 2019年8月13日
新宿駅で迷子になって電車を逃しました、よろしくお願いします
— mikit🥭 (@m1kit) 2019年8月13日
電車難民多数出現
あっ、、、乗り過ごした
— tenma (@Tenma_F) 2019年8月13日
予定時間より少し遅れましたが無事到着しました。
2枚のハンカチの犠牲を経て無事到着しました#seccamp pic.twitter.com/WeKDxQ7NqS
— tenma (@Tenma_F) 2019年8月13日
会場に到着し受付で本人確認を終えた後、交通費+Tシャツ+パーカーを受け取り、必要ない荷物を一時的に大部屋に置いてそのまま昼食へ
(初昼食写真を撮り忘れる痛恨のミスです)
ちなみにパーカーはこんな感じ
あと初日のタイムスケジュールはこんな感じ
昼食の後はいよいよ開会式へ
— tenma (@Tenma_F) 2019年8月13日
開会式
よく覚えてないけど、5日間頑張ろう的なことを聞いた気がします。始まるな〜って感じでした。協賛企業の方々からいろいろもらいました。
特別講演(倫理)「転ばぬ先の法律入門(サイバー空間編)」
実例を出してもらいながら、その例ではなにが良くなかったのか?とか考察しました。
(無限ポップアップの件とか)
講師の方がまとめとして「自分たちが開発していく上で、全ての法律やガイドラインを把握することは現実的ではないが、倫理観を持っているとルールを知らなくとも、ルールを犯す手前で踏みとどまれる」と言っているのを聞いて、良い(とされる)倫理観を持っていると、ある程度安心して作業できるのかな、とか思いました。
セキュリティ基礎
認証と認可に違いや多段階認証の概念といった基礎的な知識を学んだ後、現代におけるパスワードの役割やその変化などの今後の課題について考えました。良いパスワードとは?という問いについて考えるなかで、パスワードで実現できるセキュティの限界(っぽいもの)について改めて考えることができた気がします。
夕食+LT大会
皆さん強強で圧倒されてました。他の年のLTもみてみたいですね。
グループワーク
毎年、受講生内でいくつかグループを作ってグループワークを行うらしいです。(2日目以外は毎日時間をとって行ったのですが、バラバラに書くのも面倒なのでここで全部書いちゃいます)
今年は"セキュリティキャンプ終了後、何をするか"を考えるグループワークで、例年の競い合う形式のものと比べると少し趣が異なるとのことでした。僕のグループでは「セキュリティ初心者のためのコミュニティの普及」が目標として決まって、小さい活動からコツコツ続けて行こうということになったので、まずはサークルで発表します(僕の場合)。
講師やTAの方々もアシストしてくれるようなので2020年にはミニ・ミニ・キャンプ的なものとか開けたらなーとか思ってます。
就寝!!!
(以下 Day2~Day4 に関しては、簡単な講義の感想になります(企業説明会もあったけど省略します)。大まかな日程だけ知りたい人は Day 5 まで飛ばしても大丈夫です。また、各講義の詳細については(著作者が許可したものに限る)後日それぞれ、別記事にまとめます。時期未定)
Day 2 (必修講義)
健康起床(a.m.6:00)
狂ったように眠いんですが…#seccamp
— tenma (@Tenma_F) 2019年8月13日
この日の日程はこんな感じ
1日を通して、選択したトラックの必修講義を受講しました。僕はB(開発と運用トラック)を選択していたので
"B1~3: クラウド時代における大規模分散Webシステムの信頼性制御"
人々が24時間365日快適にWebサービスを利用可能になっている裏側では、Webシステムの信頼性を効果的に制御するために、基盤技術が日々進化しています。ここ10年の代表的な進化の例として、クラウドコンピューティング、NoSQL、コンテナ型仮想化技術などの要素技術の台頭があります。一方で、コンピュータアーキテクチャ、OS、RDBMS、TCP/IPなどの根幹となる技術は、形を変えつつも今も昔も計算機システムを支え続けています。このような背景を基に、本講義では、クラウド時代において、高い信頼性をもつ大規模なWebシステムをいかに構築し運用するのかを、負荷増大に対するスケーラビリティの話題を中心に、実際の運用現場の事例と最新の研究動向を踏まえて議論します。 本講義では、事前課題として簡単なクラウドネイティブなWebシステムを開発して持ってきていただきます。その上で、それぞれの持ち寄ったアプリケーションについて、講義内で信頼性について議論しながらその場で高信頼なアプリケーションへと改良してもらいます。
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d2-b1
を受講しました。
この講義の前半では「さくらインターネット株式会社 さくらインターネット研究所」所属の "坪内 佑樹" さんから「Webシステムの信頼性制御(SRE)*1」を題材に
といったこと学びました。
佑樹さんは講義の中で「大学で学びにくいWebシステム開発・運用の現場の経験を踏まえつつ、生きた知識の地図をつくることが本講義の動機である」と述べられ、実際の講義内容も、技術の前提となる知識の学習、実際の技術の概要の理解、そしてサーバーレスというモダンな運用形態の習得、といった順序だったものになっていました。
かなりハイペースに進んでいたものの資料がわかりやすく、ある程度全体像を把握しながら受講できたのでまさに「生きた知識の地図」ができていく感じで楽しかったです。
後半には、「株式会社WHERE IoT基盤センター」所属の "仲山 昌宏" さんからハンズオン形式で下記のようなアーキテクチャを持った「サーバレスで動く作りかけのタイムライン型投稿システム」を完成させる、という講義を受けました。
前半の座学で学んだことを元に高信頼な設計を実現しようということだったのですが、設定の不具合でSOPに引っかかってうまくAuth0が通らなかったり、DynamoDB(NoSQL)に慣れていなかったりと障害が多くて苦しかったです。(そもそも開発に慣れていないというのもある)
コードは全部チームの人が書いてくれました(これがペアプロ...?)
最後に実際の設計例を紹介してくれたのですが、提供するサービスごとにニーズや要求される信頼性を考え、うまく制限を設けることで、限られたリソースでも全体として高信頼なサービスを実現できていてすごいと思いました。
夕食
#seccamp pic.twitter.com/Ty32T6bYVe
— tenma (@Tenma_F) 2019年8月14日
就寝!!!
Day 3 (選択講義)
3日目以降は選択講義で、選択したトラックに関係なく(コースが違うとダメだけど)興味のある講義を受けられます。僕は興味が偏っていたので(後、どれも知らないやつだった)全部Bトラックで受講しましたが、ちょっとできる分野より全く知らない分野に手を出してみるのも面白いと思います。
日程はこんな感じ
絶起!!!!!!
??????!!?#seccamp pic.twitter.com/hErMyfhhqm
— tenma (@Tenma_F) August 14, 2019
"B4 認証の課題とID連携の実装"
計算機と寄り添うように使われてきたIDとパスワードによる"認証"は、既に社会においても個人の生活から社会システムにおいてまで日々利用されている、重要な基礎技術です。 一方で、古典的な攻撃手法であるパスワードクラック等を始め、サイバーセキュリティにおける攻撃の基本ともいえる領域ともなっており、計算機の歴史においては重要な要素技術として常に磨かれ、進化してきました。 もちろん、社会に普及したものである以上、完璧ということはなく既に数々の課題が存在します。多くの課題がある中、最近ではLINEやFacebookやTwitterなどによる、いわゆるソーシャルログインのようなID連携(ID Federation)や多要素認証などの新しいトレンドが普及してきました。 多くの人はあまり意識せずに認証を行っていますが、そもそも"認証"(Authentication)というのはどういう行為を指しているのでしょうか?認証の概念は、デジタルの世界で必須となる重要な概念で、実は考えるととても奥深く興味深いものです。 講義では現代のデジタル社会における認証とID・パスワードによる認証システムの課題に触れ、その課題解決方法であるFIDO、ID連携(OAuth・OpenID Connect)をはじめとした最近の技術をご紹介します。FIDOは端末とサーバー間でユーザー認証を安全に連携するための仕組みです。OpenID Connectはユーザーの認証と認可を連携するためのID連携の仕組みで、OAuth 2.0を拡張した仕様であり、HTTP通信やJSONなど基礎的なWeb技術によって構成されています。 FIDOとID連携の技術を学んだ後、実習ではGolang(予定)を用いてWebアプリケーション上にOpenID Connectを実装します。実装の注意点とそのリスク、仕様に施されているセキュリティー対策についてハンズオンを行いながら解説します。
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d3-b4
この講義の前半には、「ココン株式会社、イエラエセキュリティ株式会社、株式会社レピダム、OpenIDファウンデーション・ジャパン、慶應義塾大学」 所属の "林 達也" さんから「ID(Identity)とは?」ということをテーマに "3 + 4"pay の事例や kei0 University の事例を通して情報公開や報道のリテラシー、あるいは脆弱なポイントの予見可能性といったセキュリティ上最低限意識すべきことについて講義を受けた。
その後は
- ID+Password に対する古典的な攻撃や情報漏洩の事例
- パスワードとは何か?
- IDとは何か?
- 認証とは何か?
- OIDCやOAuthの歴史
- 外部ID連携
- etc
等の講義を受け、大学受験をハックするなら?みたいなハンズオンも行いました。
IDという言葉をイメージで捉えていたのが、講義を受ける中で「"Identity = Attribute(属性) の集合"であって"人は Entity(実体) を Identity によって認識する"」ということを言語化することによって"どの Attribute を用いて Identification(認証) を行うのか?"といった、セキュリティーに対するアプローチを具体的に考えることができるようになりました。
後半には、「OpenID ファウンデーション・ジャパン、ヤフー株式会社」所属の "倉林 雅" さんから
と言ったことを学びました。
OpenID Connectに関しては事前課題で、OpenID Connectのサービスを提供しているYahoo! JAPANのYahoo! ID 連携 v2を使用して実際のフローを確認していたのでわかりやすかったです。(その過程で認証認可の基礎的な概念を結構調べた)
シーケンス図を使うと、どの部分に脆弱性が生じうるかわかりやすいということで、資料中にも図が多かったのですが、こんなこともしてていろいろ闇?を垣間見ました。
OAuth 2.0弁当できました🍱 認可フローを覚えてもらいたい旦那さんや息子さんに「このGrant Typeを答えよ」、またはシーケンス図を未完成にしておくことで「AuthZ Codeフローを完成させよ」などを出題してお昼ご飯を食べながら学んでいただくのはどうでしょうか👨🏫 #OAuth #エンジニア弁当 pic.twitter.com/zeZEMG2HpO
— kura (@kura_lab) June 10, 2019
"B5 体系的に学ぶモダン Web セキュリティ"
Webサービスの設計時・運用時には、Content-Security-Policy を始めとする、各種セキュリティポリシーへの正しい理解が重要です。そこで本講義では、ブラウザの有するモダンなセキュリティ機構を、その背景にある攻撃手法との関連の中で体系立てて学びます。XSSやサイドチャネル攻撃、CSSを用いた攻撃など、多岐にわたる攻撃を手を動かしつつ検討することを通じて、モダンなWebセキュリティの世界を探検しましょう。
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d3-b5
この講義では、「東京大学理学部情報科学科」所属の "米内 貴志" さんから、実際に用意されたサイトへのXSS攻撃や CSS Injection を行うハンズオン形式の講義を受講しました。
事前学習が
- PDF資料(100P弱)
- SOP/CORSの動作確認
- XSS Challenge
という非常に手厚いもので(どの講義も手厚いのはもちろんのこと)、これだけでなんかわかった気になれました...(わかってはない)
僕はCTF等を経験したことがなかったので、実際に"攻撃"というものに触れたことがなかったので実質これが初めてです。
XSS とか CSS Injection をやってみてパズルみたいで面白いな(語彙力)って思いました。
講義資料が公開されているのでぜひ参考にしてください。(めちゃくちゃわかりやすい)
夕食
#seccamp pic.twitter.com/esyNyK9TPM
— tenma (@Tenma_F) August 15, 2019
就寝!!!
Day 4 (選択講義)
日程はこんな感じ
"B6 つくって学ぶ、インターネットのアーキテクチャと運用"
インターネットの仕組みとその考え方について、手を動かしながら楽しく学ぶことのできる講座です。 IPアドレスやルーティング、DNSといった基礎知識に加えて、これらの運用について体系的な知識が身につく事を目指します。本講座では、ルータなどの設定を実際に行ってインターネットと同じものを構築していただきます。相互運用性、規模拡張性といった性質を持つインターネットのアーキテクチャを学びつつ、その運用を体験していきます。ルーティングを使った、影響範囲の大きい攻撃と防御の技術についても紹介します。
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d4-b6
実は、誰にも言わなかったんですがこの講義を一番楽しみにしてました。
この講義では、「一般社団法人日本ネットワークインフォメーションセンター(JPNIC) / 慶應義塾大学大学院メディアデザイン研究科(KMD)附属メディアデザイン研究所」所属の "木村 泰司" さんから「IPアドレスやルーティング、 DNSといった基礎知識に加えて、これらの運用について体系的な知識が身につく事」をテーマに
等の概念学習の講義を受けつつ、配布されたPC上で以下のような仮想的なネットワーク環境を構築しました。
ルーターの設定をしたり、IPアドレスを自分の手で割り当てたりしつつ、疑問に思ったことを調べていると、なんとなくルーティング周りのインターネットの仕組みの概要がわかってよかったです。
事前学習で用語を調べたり、使いそうなコマンドを調べたりしても、ふんわりとしかわからなかった内容が、実際に手を動かしながら返ってくる結果の共通項を見出したり、設定の中でよく使われる用語を見つけたりすることで、実感を伴って理解できたのでそれはとてもよかったです。あと逆に、差異を比べることで自分が何をしているかわかってくるのも面白かったです。
またBGPの設定が終わった後、ルーターを何台か停止させる中でその経路が動的ルーティングによってうまく切り替わる様子を確認したが、めちゃくちゃ早かった。(そう言ってたので多分早いんだと思う...)
講義時間内に実際に攻撃するところまでは行かなかったけど、攻撃の手段を知ることで様々な技術によって正常なネットワークの確立が担保されているんだなーとか考えられました。
"B7 ユーザー企業における情報システムとセキュリティ"
ユーザー企業ではユーザーとビジネスを守る(Protect)ため、様々なリスク管理を実施しています。それ自体の変化はありませんが、業務システムやサービスをホスティングする環境が多様化するかたわら、新しいリスクが生まれてきているのも事実です。 本講義では、ビジネスを継続成長させていく中で、経営的なお話、新しいセキュリティの概念「ゼロトラスト」、サイバーセキュリティフレームワークなどをまじえて、どのようにユーザー企業内でのセキュリティ体制を構築・運用していくか学んでいきます。最終的なゴールはユーザー企業にセキュリティ担当で入った場合の動き方をイメージできるようになっていることを目標にします。
https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d4-b7
この講義では"FOLIO, Inc."所属の"鈴木 研吾"さんから「実際の現場でのセキュリティを考える」ことをテーマに講義を受けました。
導入の部分では「これまでの枠組みを超えた連携や、より生活に密着した連携により、サイバー空間とフィジカル空間が近付くことで新しい価値が創出されるようになったが価値が変容する中で、コンテキストの変化による新しいリスクもまた生じつつある」と言ったことを述べられ、"きちんとした運用"とは
- イノベーションの最速化
- 価値の最大化
- リスクの最小化
を同時に実現するものだと定義しました。
以下のようなケーススタディを提示され、講義の前後でどのような考えの変化が生じるか発表しました。
創立2年目の証券会社に、1人目のセキュリティ担当として入社したとします。(環境は下図)
- どのようなセキュリティ的な課題がありそうかリスト化してください
- 優先度が高いものを順番に3つ上げてください
また、運用環境のクラウド化(物理リソースの抽象化)に伴う Trusted Zone の変化に関しても、Google社の実践する「BeyondCorp」(いわゆるゼロ・トラスト)という考え方を、その具体的な仕組みとともに紹介してくれました。
BeyondCorpの考えの中では、社内or社外といったネットワークの境界に応じた信頼領域の設定を排除し、その代わりにユーザー・デバイスを元に認証することでリモートな作業環境でもセキュリティを維持できるとしていました。
ラストナイトイベント!!!!!!!!!!!!
ドンピシャ本頂きました、ありがとうございます。#seccamp pic.twitter.com/zyoybXR8lE
— tenma (@Tenma_F) August 16, 2019
こちらがキャップの獲得者様になります#seccamp pic.twitter.com/9BSwFRjDhL
— tenma (@Tenma_F) August 16, 2019
行ってみてのお楽しみです。
就寝!!!
Day 5 (成果発表会 + 閉会式)
成果発表会(+グループワークの内容)
各トラックごとに代表者が活動成果を発表してくれました。強い人の発表だとわからないことが多いがみんな楽しそうに話すので、後で調べようとか思ったりします(した)。
同年代でこれだけできる人が周りにいるのか、と感動したりしました。
(いちいち全部書いてるとあれなので後で他の人のブログのリンクとか貼っておきます。)
全体を通してよかったこと
(注: 正確だと自信を持って僕が言える部分が少ないので技術的なことにはあまり触れません(でした)が実際の講義内容は技術的なことが多いです。)
僕僕にとって一番よかったのは、セキュリティ分野を学ぶ上での土台となるものがなんとなく見えたことでした。
(何かを学び始める時に共通して言えるかもしれないですが、)何も知らない状況からだと**漠然としたイメージだけはあるものの何から手をつけていいかわからない**状態からなかなかうまく抜け出せないですよね(僕はそうでした)。
しかも、どうせ学ぶならできるだけ効率よく学びたいというのはあると思います。
「そもそも学問に効率を求めるのはどうなの?」というのは置いといて、人生が限りあるものである以上(少なくとも僕は)効率のいい道を選んでいきたいと思うんですよね。
その上で大事なのが「**学びたいことの全体像**(それなりの範囲)をぼんやりでもいいから把握すること」だと思います。
つまり、 **何から手をつけていいかわからないのは、何があるかわかっていないからで、その状況を打開するには、何があるかを知ることが必要じゃないか?** ってことです。
卵が先か〜みたいな話ですが全体像をギュッと詰め込む方法はいくつかあると思っていて、今回のセキュキャンでは「わかってる人から切り分けた分野毎に教えてもらうことでなんとなく全体像を掴む」ことができました。
人から教えてもらう(あるいは教科書的なものを使う)と何をどこまで理解すればいいかなんとなくわかるので、適度なペースで知識の範囲を広げていけます。(僕はどこまで深掘りすれば良いか判断するのが苦手なので講義を受けてよかったと思っています)
最後に
企業説明会のこととか書いてないし、教室解放の感想とかも書いてないです。後、ほかの参加者との交流のこととかもあんまり書いてないですね。
全部書いてたらめんどくさそうってことでカットしたんですが、みんな(講師の方、TA、参加者、運営の方、etc)優しくて、わからないこととか聞くとわかりやすく説明してくれて(事前知識がなさすぎてわからないことも多かったです、悲しい)、本当にこの分野が好きなんだなって思いました。
こうやって専門的なことを気軽に話せる人がいる環境ってのはなかなかないのでもしかしたらそこが一番よかったのかも知れません。
正直、技術的な話を自分からできることはほとんどなくてずっと人の話を聞いてるだけだったのは面白くも悔しくもあったところです。
それでもこのタイミングでこのイベントに参加できたことはよかったと思っています。
技術が身についてからとか、自分には無理かもとか思って応募しないのはすごく勿体無いんじゃないかな、とか思います。(参加のモチベーションにもよるとは思いますが)
とりあえず応募してみて(そもそも応募課題がきついのでとりあえずとはならないかも知れないが)、受かればよし、受からなければまた今度、みたいな感覚がいいのじゃないかなーって思います。
是非、セキュリティキャンプ2020に応募してみてください。
最後の最後になりますが、講師の方をはじめとした関係者の方々、本当に貴重な機会をいただきありがとうございました。
各講義ごとのブログ
また書けばリンク貼っときます
(後、脚注も後から書きます、後から)