にっっきっっっっっき

Temma write this.

セキュキャン2019 応募課題攻略

お久しぶりです。temmaです。

 

応募課題 writeup を書く書くといって早二ヶ月半が経ちました。

(誰も気にしてないとは思いますが、)流石に怒られそうなので書きます。

 

temma.hatenablog.com

 

ちなみに、応募課題攻略と書きましたが小難しい話は一切しません。難しいので。

なぜかはしないのかは最後まで読めばわかります。多分。

 

1. 参加した経緯

サークルの先輩、某ーふ某ふさんに「セキュキャンとかあるよ、楽しいよ」って言われたのでググって応募しました。

 

 

 

 

 

 

以上です。

一応、これから応募する人のために軽くどんな感じだったか説明しておくと(前提として僕の年度の話ですが)

 

まず、以下の応募条件を満たす人物である必要があります。

  • - 日本国内の学校に在籍する2020年3月31日終了時点において22歳以下の学生・生徒であること。
  • - 過去のセキュリティ・キャンプ(2004~2007)、セキュリティ&プログラミングキャンプ(2008~2011)、セキュリティ・キャンプ中央大会(2012、2013)、セキュリティ・キャンプ全国大会(2014~)に参加していないこと。
  • - 2019年5月27日時点で20歳未満の場合、本大会の参加について保護者の同意を得ていること(参加が決定した際に保護者の同意書を提出していただきます)。
  • - キャンプへの参加(期間中の滞在、ご自宅と会場間の往復移動)が、応募者単独でできること(ただし、小学生を除きます)。
  • - 別途定める「セキュリティ・キャンプ全国大会2019参加規程」を遵守できること。
  • - キャンプの全日程を通して参加できること(一部講義のみの参加はできません)。
  • - セキュリティまたはプログラミングに関して、講習を受けられるだけの基礎知識と積極的に取り組む姿勢を持っていること。
  • - 団体生活のルールを守り、他の受講者と協調して参加できること。

出典: https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_vote.html

 

次に、応募自体の流れとして

1.  IPAセキュリティキャンプ応募要項ページの説明を読む (これに尽きるのですが)

2. エントリーを出す (回答IDとかが発行される)

3. 2で受け取った回答IDと一緒に応募課題を提出する

みたいなことがありました。

2. 応募課題晒し

多分応募課題以外で困ることはないと思うので、早めに本題に入ります。

ちなみに今年度の応募課題は募集トラックごとに用意されていて、僕はBトラックにエントリー、参加したのでBトラックの課題晒しになります。

2.1 課題内容

まずは用意されていた問題を紹介します。

2019 Bトラック
開発と運用トラック 応募課題
# 共通問題
## 問1 ブログや、TwitterGitHubSlideshare、Speaker Deckなど公開している活動や資料があれば、URL等を記載してください。 ## 問2 セキュリティ・キャンプ地方大会などセキュリティに関するイベントに参加していれば、それを記入してください。 ## 問3 オープンソースなどの活動に参加していれば、どんな実績があるかを記入してください。 参加の形態は開発だけには限りません。 ## 問4 自分のスキルについて、得意としている、あるいは得意としたい技術領域について、 なぜその技術領域が好きなのか、その技術領域でどんな世界を作っていきたいのか、 『好きなだけ』語ってください。 ## 問5 あなたが今まで作ってきたソフトウェアにはどのようなものがありますか? また、それらはどんな言語やライブラリを使って作ったのか、 どこにこだわって作ったのか、たくさん自慢してください。 ## 問6 あなたがこれまで利用したことがあるインターネットサービスの中で一番すごい!と思ったものについて、 技術的なのか、仕組み的なのか、ビジネス的なのか、 どんなところがすごいと思ったのかを説明してください。 ## 問7 今年のセキュリティ・キャンプ全国大会で受講したいと思っている講義は何ですか? そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか? 講義を担当する講師に響くようにアピールしてください(複数可)。 # 選択問題 以下の中から、2問以上を選んで回答してください。 ## 問1 「1000万人が利用するTwitterのようなタイムラインサービス」をあなたが開発することになったとしたら、 予算はあるとして、どんなアーキテクチャで設計しますか? 具体的に利用するミドルウェアやライブラリまで思い浮かぶ人はそこまで踏み込んで書いてください。 ## 問2 クラウド上のインフラやサービスや技術的仕様から、1人目の社内のシステムおよびセキュリティ担当として、 どのように組織的な設計をしていくか自由に書いてください。 組織的にスケールする構成やフレームワーク、優先順位などを検討したうえで、 なぜそういう設計にしたかを自分なりの言葉で説明してください。 ## 問3 XSS (Cross-Site Scripting) とは何か、自分の言葉で説明してください。 またあなたが Web サービスを開発・運用するとしたら XSS 攻撃に対してどんな対策を取るかを、 できるだけ多くの視点から考え、思いついたことを教えてください。 ## 問4 OpenIDやOAuthといった技術を使ったアプリケーションのメリットとデメリットについて回答してください。 なお、FacebookTwitterなどのソーシャルログインを実装したことがある場合には、 その環境(ライブラリやフレームワーク、開発言語など)と開発してみて感じたことを自由に回答してください。 ## 問5 コンテナや関連技術を使って今からクラウドホスティング、マネージドサービスを作る場合に どういう設計にするかを自由に書いてください。 設計の際には大規模にスケールすることとセキュリティをどう担保するかを検討の上、 自分らしい創意工夫をひとつ以上明示してください。 ## 問6 UNIXpingやtraceroute、dig、vimemacsといったコマンドの利用経験があれば、 それをどのようなときにどのように使ったか、使ってどのように考えたかを教えてください。 また、DNSサーバやルータの設定経験があれば、どのような理由で設定したか、 どのように設定したか、設定してどのように考えたかを教えてください。 ## 問7 「セキュリティ」は幅広い分野から成り立っていますが、 その中で自分がもっとも興味があるテーマについて、『好きなだけ』書いてください。

 

出典: https://www.ipa.go.jp/files/000073094.txt

思ったより分量があって、正直諦めかけました。

(他のトラックの問題も覗いてみたんですが、「いや、わかんね〜」になりました。)

 

気を取り直してまずは共通課題から晒していきましょう。

2.2 共通問題への回答

問1

ブログや、TwitterGitHubSlideshare、Speaker Deckなど公開している活動や資料があれば、URL等を記載してください。

回答

https://github.com/FujishigeTemma?tab=repositories

解説

Githubだけです。しかも、ほぼ何も上がってませんでした。(内容はこの後書きます)

 

問2 セキュリティ・キャンプ地方大会などセキュリティに関するイベントに参加していれば、それを記入してください。
&問3 オープンソースなどの活動に参加していれば、どんな実績があるかを記入してください。参加の形態は開発だけには限りません。

回答

参加していない

解説

参加していません。

 

問4 自分のスキルについて、得意としている、あるいは得意としたい技術領域について、 なぜその技術領域が好きなのか、その技術領域でどんな世界を作っていきたいのか、 『好きなだけ』語ってください。

回答

初心者で、現在は大学のサークルの「webエンジニアになろう」という講習会に参加してtwitter cloneを最終目標にフロントエンドとバックエンドの両方を最低限書ける技術を学んでいます。まだ得意な技術領域というものはありませんが、将来の夢である完全なVR空間の実現に少しでも関わりがありそうな分野ならなんでも噛み付いてみたいと思っています。本来の夢はより手軽でより没入感のあるVRハードウェアの開発ですが、自分がソフト面に少しでも知見を持っていることで使用者にも技術者にも使いやすいデバイスとしてVRハードを普及させることができたらいいなと思っています。

解説

セキュキャンを紹介してくれた先輩が開催してくれた講習会がめちゃくちゃためになりました。といってもこの時点でほぼ何も自力で書けませんでしたが。書いてること自体は本当ですね。Webの技術のこととかも「まぁ知ってて損はないか」程度のモチベーションです。

アピールしたかったのは

少しでも関わりがありそうな分野ならなんでも噛み付いてみたいと思っています

の部分ですね。技術面でアピールできることがほとんどなかったのでやる気だけでも見せておこうって感じです。

 

問5

あなたが今まで作ってきたソフトウェアにはどのようなものがありますか? また、それらはどんな言語やライブラリを使って作ったのか、 どこにこだわって作ったのか、たくさん自慢してください。

回答

上記講習会で先輩から教わりながら作ったtodoリストとWorldDataBaseという資料を元に作った世界の都市情報検索サイトがGithubに揚げてあります。UIはVue.jsで、サーバー側はGoでかきました。全体の構造などは教えてもらいながら作ったのですが、コードに関しては後から読んでもわかりやすいコードになっているよう心がけました。

解説

これもさっき出てきた講習会でやったことですね。ちなみに、応募課題の技術面に関してこの講習会の内容一本で書いてます。後から読み返して気づいたんですが揚げてますね。問1で回答したGithubアカウントの内容ですが、「test」みたいなリポジトリを除けばtodoリストと世界の都市情報検索サイトのソースコード以外上がってない(なかった)です。実績というか制作物はあるといいのかもしれませんがなくても大丈夫です(だと思ってます)。やる気でなんとかなります。(todoリストぐらいはあった方がいいのかも←その時の技量に応じたアウトプットがあればいい程度の考えです)

 

問6

あなたがこれまで利用したことがあるインターネットサービスの中で一番すごい!と思ったものについて、 技術的なのか、仕組み的なのか、ビジネス的なのか、 どんなところがすごいと思ったのかを説明してください。

回答

"Discord"はビジネス面ですごいと思いました。Skype等の大手アプリが先行している中で、e-sportsという概念の浸透を予期し、ゲーマーに顧客を絞ったことに驚きを感じました。また、グループ機能の充実は後発アプリである事のアドバンテージを十分に生かしていると思ったし、リンクを共有する事で相手を知らずとも簡単にグループに参加できるのはtwitter等のSNSをうまく利用した機能だと思いました。

解説

っぽいことをひりだしました。「e-sportsという概念の浸透を予期し」とか知らないです。もしかしたらe-sportsめちゃくちゃ有名になってからリリースされてるかも(調べてないので知らないままです)。LINEとの比較はあえて書きませんでした。LINE的な立ち位置にある各サービスに触れることになりそうだったので。

「リンクを共有する事で相手を知らずとも簡単にグループに参加できるのはtwitter等のSNSをうまく利用した機能」これも多分適当(考えてはいますが)です。僕がそう思っただけで(僕はそういうふうに使われるのが一般的だと思っていた)、実際の利用のされ方はそんなに詳しく知らないです。

 

問7

今年のセキュリティ・キャンプ全国大会で受講したいと思っている講義は何ですか? そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか? 講義を担当する講師に響くようにアピールしてください(複数可)。

回答

つくって学ぶ、インターネットのアーキテクチャと運用
プログラミング初心者として、一番参加したいと思ったのはこの講義です。インターネットの基礎的な仕組みについて専門家から実際に手を動かしながら聞ける機会は少ないと思ったし、自分が作るサービスの根幹を支える仕組みの大まかな全体像を知ることは開発の見通しを立てやすくして、サービス全体の質を向上させると思ったからです。

解説

複数可とか問題に書くのやめてほしいって思いました。いっぱい書かなきゃ評価されなそうですよね(知識がないと書けることがなかなかなくて、量を書こうとすると薄っぺらい内容になりがちなので、僕は大した量は書いてません)

書いたことは本当です。インターネットってなんぞ?みたいな感じだったので。これは結構スッと書けましたね。今見ると微妙に意味を履き違えてそうな言葉選びだなーとか思います、内容は変えないにしてももうちょっと推敲できそうです。

 

2.3 ここまでの感想

多分ここまで読んで薄々感づいてると思うんですが、あんまり実力関係ないです(と思います)。ある風に見せるのは大事かもしれませんが、それを含めてやる気をいかに文章に起こせるかだと思います。やる気はあってもそれを表現できなければ意味はないし(選考に有利に働かせたいという背景の下で)、なくてもあるように表現できれば大丈夫です(だと僕は思います)。

あるに越したことはないというか、あるべき?ですが。

では、選択課題に移ります。

2.4 選択問題への回答

選択問題は7つ用意されていてそのうち2つ以上答えれば良いとのことでした。

僕は問3,6,7の3つに回答しました。選択の基準ですが、「簡単そう」に尽きます。実際に簡単な問題だったかどうかは別ですが、妥当な選択だったとは思います。

 

問3

XSS (Cross-Site Scripting) とは何か、自分の言葉で説明してください。またあなたが Web サービスを開発・運用するとしたら XSS 攻撃に対してどんな対策を取るかを、できるだけ多くの視点から考え、思いついたことを教えてください。

回答

ユーザーの働きかけによってhtmlを生成するwebアプリケーションにおける、本来文字列として扱われる要素がscriptの要素として扱われうる脆弱性を、攻撃者が利用して本来意図されていない挙動を引き起こさせること
 スクリプトを実行するような入力を拒否、無効化する
 スクリプト実行範囲の許可を取ったり、実行されるスクリプトが想定されたものか検証する
 実際にXSSが実行された後でもなんとかなるように大事な情報をjsで読み取れない構造にする

解説

これが多分唯一の技術的な回答ですね。「XSSとは」「XSS 原理」「XSS 対策」とかでググってお気持ち理解した後、曖昧な記述を削って(サイトによっては具体例や典型例を交えて説明してくれていたとこともあったのですが理解できなかった部分は下手に書くより書かないほうが良いと思ったので)回答しました。

対策については"先輩"が"講習会"で言っていたことをそのまま拝借しました。(一応自分なりに理解はしました)

 

問6

UNIXpingやtraceroute、dig、vimemacsといったコマンドの利用経験があれば、 それをどのようなときにどのように使ったか、使ってどのように考えたかを教えてください。 また、DNSサーバやルータの設定経験があれば、どのような理由で設定したか、 どのように設定したか、設定してどのように考えたかを教えてください。

回答

traceroute:インターネット通信の流れについて学んだ時に興味本位で使った。
https://qiita.com/hana_shin/items/f1e84d48cd23b2a18459
上記を参考にしながら実際に海外のサイトと国内のサイトにたどり着くまでの長さなどを比較してみたりした。大手のサイトとマイナーなサイトだと国内よりは海外の方が差が大きかったように感じた。
vim:件の講習会でdatabaseに新しいデータを手動で追加する時に使った。実際にcolumnなどの構成が見れたのはよかったと思う。
DNSサーバの設定:appの接続不良などがあった際の8.8.8.8, 8.8.4.4のgoogleDNSに設定するという解決方法をみて設定していた。
大学内のWiFiに接続しようとした時、この事のせいで繋がらなかったことがありDNSの働きについて調べるきっかけになった。また、パブリックのDNSサーバーはセキュリティ的な危険性があることは先輩に教えていただいた。

解説

共通課題の問7で回答した「つくって学ぶ、インターネットのアーキテクチャと運用」という講義に関連がありそうだったので回答しました。

最後の「DNSサーバーの設定」についてですが多分いろいろ勘違いしてますね。何を書こうとしてるのかわかりにくい文な気がします。

 

問7

「セキュリティ」は幅広い分野から成り立っていますが、その中で自分がもっとも興味があるテーマについて、『好きなだけ』書いてください。

回答

暗号化技術などにも興味はありますが、現在はセキュリティ心理学に特に興味があります。VR空間という新しい世界を構築することを見据えた上で、他者を攻撃することに対する心理的抵抗感を高めるような環境をデザインするためにはどのような要素が必要になるのか調べてみたいと思っています。人の無意識の判断にどのような要素が影響を与えるか個別に調べる研究はこれまで数多く行われてきたと思いますが、それらが組み合わさった総合的なデザインがどのような影響を与えるかについて数字で定式化できればいいなと思っています。

解説

書いてある通りです。THE お気持ちって感じですね。「数字で定式化」できるんですかね?

 

3. まとめ

結論:やる気を表現しよう!!!

 

とりあえず何も考えずに応募してみるといいかもしれませんね。

セキュリティ初心者がセキュリティ・キャンプ全国大会2019に参加してきた。

どうも、temmaです。プログラミングを始めて3ヶ月で、何故かセキュリティ・キャンプ全国大会2019の応募に受かったので、5日間受講してどう感じたかを書きます。

 

 

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

セキュリティ・キャンプとは、日本における将来の高度IT人材となり得る優れた人材の発掘と育成を目的とした独立行政法人情報処理推進機構(IPA)の事業の一つです。

現代においては、情報セキュリティの脅威は高まる一方です。
本事業では、セキュリティ分野に興味を持ち、将来同分野で活躍したいという意志をもった若者に対して、高度な情報セキュリティ技術の習得機会を提供しています。また、モラルや法律遵守の意識、セキュリティ意識、職業意識、自立的な学習意識についても向上のための機会を提供しています。

本事業は、2004年度のスタート以来、2018年度のセキュリティ・キャンプまでで計748名の将来が有望なIT・情報セキュリティ人材を輩出しています。セキュリティ業界はもとより各方面から、高度な情報人材育成に有益なイベントとして高く評価されています。

https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_about.html

って感じで、強い講師の方のいい感じの講義を移動費、宿泊費、食費込み無料(from 税金+スポンサー)で受けられるありがたいキャンプです。

 


参加まで

サークルの先輩にオススメされて応募しました。詳しくは、下の記事を参照してください。

 

temma.hatenablog.com

 

 


Day 0 (開会式前日)

遠方の方はこの日に会場入りして、前泊(食事あり)をしてたみたいですね。

 

 

寝ました。(a.m. 3:00)

 


Day 1 (開会式 + 全体講義)

 

移動時間がかかる人は大変そうですが、僕は1時間ほどで会場に着く距離なのでそれなりに余裕がありました。

 

 

 

電車難民多数出現

 

予定時間より少し遅れましたが無事到着しました。

 

会場に到着し受付で本人確認を終えた後、交通費+Tシャツ+パーカーを受け取り、必要ない荷物を一時的に大部屋に置いてそのまま昼食へ

(初昼食写真を撮り忘れる痛恨のミスです)

ちなみにパーカーはこんな感じ

f:id:temma_f:20190903200611j:plain

あと初日のタイムスケジュールはこんな感じ

f:id:temma_f:20190904023207p:plain

 昼食の後はいよいよ開会式へ 

 

開会式

よく覚えてないけど、5日間頑張ろう的なことを聞いた気がします。始まるな〜って感じでした。協賛企業の方々からいろいろもらいました。

特別講演(倫理)「転ばぬ先の法律入門(サイバー空間編)」

実例を出してもらいながら、その例ではなにが良くなかったのか?とか考察しました。

(無限ポップアップの件とか)

講師の方がまとめとして「自分たちが開発していく上で、全ての法律やガイドラインを把握することは現実的ではないが、倫理観を持っているとルールを知らなくとも、ルールを犯す手前で踏みとどまれる」と言っているのを聞いて、良い(とされる)倫理観を持っていると、ある程度安心して作業できるのかな、とか思いました。

セキュリティ基礎

認証と認可に違いや多段階認証の概念といった基礎的な知識を学んだ後、現代におけるパスワードの役割やその変化などの今後の課題について考えました。良いパスワードとは?という問いについて考えるなかで、パスワードで実現できるセキュティの限界(っぽいもの)について改めて考えることができた気がします。

夕食+LT大会

皆さん強強で圧倒されてました。他の年のLTもみてみたいですね。

グループワーク

毎年、受講生内でいくつかグループを作ってグループワークを行うらしいです。(2日目以外は毎日時間をとって行ったのですが、バラバラに書くのも面倒なのでここで全部書いちゃいます)

今年は"セキュリティキャンプ終了後、何をするか"を考えるグループワークで、例年の競い合う形式のものと比べると少し趣が異なるとのことでした。僕のグループでは「セキュリティ初心者のためのコミュニティの普及」が目標として決まって、小さい活動からコツコツ続けて行こうということになったので、まずはサークルで発表します(僕の場合)。

講師やTAの方々もアシストしてくれるようなので2020年にはミニ・ミニ・キャンプ的なものとか開けたらなーとか思ってます。

就寝!!!

(以下 Day2~Day4 に関しては、簡単な講義の感想になります(企業説明会もあったけど省略します)。大まかな日程だけ知りたい人は Day 5 まで飛ばしても大丈夫です。また、各講義の詳細については(著作者が許可したものに限る)後日それぞれ、別記事にまとめます。時期未定)


Day 2 (必修講義)

健康起床(a.m.6:00)

 

この日の日程はこんな感じ

f:id:temma_f:20190904022507p:plain

1日を通して、選択したトラックの必修講義を受講しました。僕はB(開発と運用トラック)を選択していたので

"B1~3: クラウド時代における大規模分散Webシステムの信頼性制御"

人々が24時間365日快適にWebサービスを利用可能になっている裏側では、Webシステムの信頼性を効果的に制御するために、基盤技術が日々進化しています。ここ10年の代表的な進化の例として、クラウドコンピューティング、NoSQL、コンテナ型仮想化技術などの要素技術の台頭があります。一方で、コンピュータアーキテクチャ、OS、RDBMSTCP/IPなどの根幹となる技術は、形を変えつつも今も昔も計算機システムを支え続けています。このような背景を基に、本講義では、クラウド時代において、高い信頼性をもつ大規模なWebシステムをいかに構築し運用するのかを、負荷増大に対するスケーラビリティの話題を中心に、実際の運用現場の事例と最新の研究動向を踏まえて議論します。 本講義では、事前課題として簡単なクラウドネイティブなWebシステムを開発して持ってきていただきます。その上で、それぞれの持ち寄ったアプリケーションについて、講義内で信頼性について議論しながらその場で高信頼なアプリケーションへと改良してもらいます。 

https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d2-b1

を受講しました。

この講義の前半では「さくらインターネット株式会社 さくらインターネット研究所」所属の "坪内 佑樹" さんから「Webシステムの信頼性制御(SRE)*1」を題材に

といったこと学びました。

佑樹さんは講義の中で「大学で学びにくいWebシステム開発・運用の現場の経験を踏まえつつ、生きた知識の地図をつくることが本講義の動機である」と述べられ、実際の講義内容も、技術の前提となる知識の学習、実際の技術の概要の理解、そしてサーバーレスというモダンな運用形態の習得、といった順序だったものになっていました。

かなりハイペースに進んでいたものの資料がわかりやすく、ある程度全体像を把握しながら受講できたのでまさに「生きた知識の地図」ができていく感じで楽しかったです。

後半には、「株式会社WHERE IoT基盤センター」所属の "仲山 昌宏" さんからハンズオン形式で下記のようなアーキテクチャを持った「サーバレスで動く作りかけのタイムライン型投稿システム」を完成させる、という講義を受けました。

f:id:temma_f:20190904121319p:plain

前半の座学で学んだことを元に高信頼な設計を実現しようということだったのですが、設定の不具合でSOPに引っかかってうまくAuth0が通らなかったり、DynamoDB(NoSQL)に慣れていなかったりと障害が多くて苦しかったです。(そもそも開発に慣れていないというのもある)

コードは全部チームの人が書いてくれました(これがペアプロ...?)

 最後に実際の設計例を紹介してくれたのですが、提供するサービスごとにニーズや要求される信頼性を考え、うまく制限を設けることで、限られたリソースでも全体として高信頼なサービスを実現できていてすごいと思いました。

夕食

 

就寝!!!

 


Day 3 (選択講義)

3日目以降は選択講義で、選択したトラックに関係なく(コースが違うとダメだけど)興味のある講義を受けられます。僕は興味が偏っていたので(後、どれも知らないやつだった)全部Bトラックで受講しましたが、ちょっとできる分野より全く知らない分野に手を出してみるのも面白いと思います。

日程はこんな感じ

f:id:temma_f:20190904141631p:plain

絶起!!!!!!

 

"B4 認証の課題とID連携の実装"

計算機と寄り添うように使われてきたIDとパスワードによる"認証"は、既に社会においても個人の生活から社会システムにおいてまで日々利用されている、重要な基礎技術です。 一方で、古典的な攻撃手法であるパスワードクラック等を始め、サイバーセキュリティにおける攻撃の基本ともいえる領域ともなっており、計算機の歴史においては重要な要素技術として常に磨かれ、進化してきました。 もちろん、社会に普及したものである以上、完璧ということはなく既に数々の課題が存在します。多くの課題がある中、最近ではLINEやFacebookTwitterなどによる、いわゆるソーシャルログインのような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の概要
  • FIDOの概要
  • 認証と認可の仕組み
  • OpenID ConnectとFIDOの具体的なフローと実装
  • それらのセキュリティリスクと対策

 と言ったことを学びました。

OpenID Connectに関しては事前課題で、OpenID Connectのサービスを提供しているYahoo! JAPANYahoo! ID 連携 v2を使用して実際のフローを確認していたのでわかりやすかったです。(その過程で認証認可の基礎的な概念を結構調べた)

シーケンス図を使うと、どの部分に脆弱性が生じうるかわかりやすいということで、資料中にも図が多かったのですが、こんなこともしてていろいろ闇?を垣間見ました。


"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 をやってみてパズルみたいで面白いな(語彙力)って思いました。

 

講義資料が公開されているのでぜひ参考にしてください。(めちゃくちゃわかりやすい)

speakerdeck.com

夕食

就寝!!! 

 


Day 4 (選択講義)

日程はこんな感じ

f:id:temma_f:20190904204500p:plain

"B6 つくって学ぶ、インターネットのアーキテクチャと運用"

インターネットの仕組みとその考え方について、手を動かしながら楽しく学ぶことのできる講座です。 IPアドレスやルーティング、DNSといった基礎知識に加えて、これらの運用について体系的な知識が身につく事を目指します。本講座では、ルータなどの設定を実際に行ってインターネットと同じものを構築していただきます。相互運用性、規模拡張性といった性質を持つインターネットのアーキテクチャを学びつつ、その運用を体験していきます。ルーティングを使った、影響範囲の大きい攻撃と防御の技術についても紹介します。

https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d4-b6

実は、誰にも言わなかったんですがこの講義を一番楽しみにしてました。

この講義では、「一般社団法人日本ネットワークインフォメーションセンター(JPNIC) / 慶應義塾大学大学院メディアデザイン研究科(KMD)附属メディアデザイン研究所」所属の "木村 泰司" さんから「IPアドレスやルーティング、 DNSといった基礎知識に加えて、これらの運用について体系的な知識が身につく事」をテーマに

  • IPv4IPv6
  • IPルーティング
  • DNS と キャッシュ
  • DNSSEC
  • BGP
  • etc

等の概念学習の講義を受けつつ、配布されたPC上で以下のような仮想的なネットワーク環境を構築しました。

f:id:temma_f:20190904185500p:plain

ルーターの設定をしたり、IPアドレスを自分の手で割り当てたりしつつ、疑問に思ったことを調べていると、なんとなくルーティング周りのインターネットの仕組みの概要がわかってよかったです。

事前学習で用語を調べたり、使いそうなコマンドを調べたりしても、ふんわりとしかわからなかった内容が、実際に手を動かしながら返ってくる結果の共通項を見出したり、設定の中でよく使われる用語を見つけたりすることで、実感を伴って理解できたのでそれはとてもよかったです。あと逆に、差異を比べることで自分が何をしているかわかってくるのも面白かったです。

またBGPの設定が終わった後、ルーターを何台か停止させる中でその経路が動的ルーティングによってうまく切り替わる様子を確認したが、めちゃくちゃ早かった。(そう言ってたので多分早いんだと思う...)

講義時間内に実際に攻撃するところまでは行かなかったけど、攻撃の手段を知ることで様々な技術によって正常なネットワークの確立が担保されているんだなーとか考えられました。

 


"B7 ユーザー企業における情報システムとセキュリティ"

ユーザー企業ではユーザーとビジネスを守る(Protect)ため、様々なリスク管理を実施しています。それ自体の変化はありませんが、業務システムやサービスをホスティングする環境が多様化するかたわら、新しいリスクが生まれてきているのも事実です。 本講義では、ビジネスを継続成長させていく中で、経営的なお話、新しいセキュリティの概念「ゼロトラスト」、サイバーセキュリティフレームワークなどをまじえて、どのようにユーザー企業内でのセキュリティ体制を構築・運用していくか学んでいきます。最終的なゴールはユーザー企業にセキュリティ担当で入った場合の動き方をイメージできるようになっていることを目標にします。

https://www.ipa.go.jp/jinzai/camp/2019/zenkoku2019_program_list.html#list_d4-b7

この講義では"FOLIO, Inc."所属の"鈴木 研吾"さんから「実際の現場でのセキュリティを考える」ことをテーマに講義を受けました。

導入の部分では「これまでの枠組みを超えた連携や、より生活に密着した連携により、サイバー空間とフィジカル空間が近付くことで新しい価値が創出されるようになったが価値が変容する中で、コンテキストの変化による新しいリスクもまた生じつつある」と言ったことを述べられ、"きちんとした運用"とは

  1. イノベーションの最速化
  2. 価値の最大化
  3. リスクの最小化

を同時に実現するものだと定義しました。

以下のようなケーススタディを提示され、講義の前後でどのような考えの変化が生じるか発表しました。

創立2年目の証券会社に、1人目のセキュリティ担当として入社したとします。(環境は下図)

- どのようなセキュリティ的な課題がありそうかリスト化してください

- 優先度が高いものを順番に3つ上げてください

f:id:temma_f:20190904200545p:plain

 

また、運用環境のクラウド化(物理リソースの抽象化)に伴う Trusted Zone の変化に関しても、Google社の実践する「BeyondCorp」(いわゆるゼロ・トラスト)という考え方を、その具体的な仕組みとともに紹介してくれました。
 BeyondCorpの考えの中では、社内or社外といったネットワークの境界に応じた信頼領域の設定を排除し、その代わりにユーザー・デバイスを元に認証することでリモートな作業環境でもセキュリティを維持できるとしていました。


ラストナイトイベント!!!!!!!!!!!!

 

行ってみてのお楽しみです。

就寝!!!

 


Day 5 (成果発表会 + 閉会式)

成果発表会(+グループワークの内容)

各トラックごとに代表者が活動成果を発表してくれました。強い人の発表だとわからないことが多いがみんな楽しそうに話すので、後で調べようとか思ったりします(した)。

同年代でこれだけできる人が周りにいるのか、と感動したりしました。

(いちいち全部書いてるとあれなので後で他の人のブログのリンクとか貼っておきます。)

全体を通してよかったこと

(注: 正確だと自信を持って僕が言える部分が少ないので技術的なことにはあまり触れません(でした)が実際の講義内容は技術的なことが多いです。)

僕僕にとって一番よかったのは、セキュリティ分野を学ぶ上での土台となるものがなんとなく見えたことでした。

(何かを学び始める時に共通して言えるかもしれないですが、)何も知らない状況からだと**漠然としたイメージだけはあるものの何から手をつけていいかわからない**状態からなかなかうまく抜け出せないですよね(僕はそうでした)。

しかも、どうせ学ぶならできるだけ効率よく学びたいというのはあると思います。

「そもそも学問に効率を求めるのはどうなの?」というのは置いといて、人生が限りあるものである以上(少なくとも僕は)効率のいい道を選んでいきたいと思うんですよね。

その上で大事なのが「**学びたいことの全体像**(それなりの範囲)をぼんやりでもいいから把握すること」だと思います。

つまり、 **何から手をつけていいかわからないのは、何があるかわかっていないからで、その状況を打開するには、何があるかを知ることが必要じゃないか?** ってことです。

卵が先か〜みたいな話ですが全体像をギュッと詰め込む方法はいくつかあると思っていて、今回のセキュキャンでは「わかってる人から切り分けた分野毎に教えてもらうことでなんとなく全体像を掴む」ことができました。

人から教えてもらう(あるいは教科書的なものを使う)と何をどこまで理解すればいいかなんとなくわかるので、適度なペースで知識の範囲を広げていけます。(僕はどこまで深掘りすれば良いか判断するのが苦手なので講義を受けてよかったと思っています)

最後に

企業説明会のこととか書いてないし、教室解放の感想とかも書いてないです。後、ほかの参加者との交流のこととかもあんまり書いてないですね。

全部書いてたらめんどくさそうってことでカットしたんですが、みんな(講師の方、TA、参加者、運営の方、etc)優しくて、わからないこととか聞くとわかりやすく説明してくれて(事前知識がなさすぎてわからないことも多かったです、悲しい)、本当にこの分野が好きなんだなって思いました。

こうやって専門的なことを気軽に話せる人がいる環境ってのはなかなかないのでもしかしたらそこが一番よかったのかも知れません。

正直、技術的な話を自分からできることはほとんどなくてずっと人の話を聞いてるだけだったのは面白くも悔しくもあったところです。

それでもこのタイミングでこのイベントに参加できたことはよかったと思っています。

技術が身についてからとか、自分には無理かもとか思って応募しないのはすごく勿体無いんじゃないかな、とか思います。(参加のモチベーションにもよるとは思いますが)

とりあえず応募してみて(そもそも応募課題がきついのでとりあえずとはならないかも知れないが)、受かればよし、受からなければまた今度、みたいな感覚がいいのじゃないかなーって思います。

是非、セキュリティキャンプ2020に応募してみてください。

 

最後の最後になりますが、講師の方をはじめとした関係者の方々、本当に貴重な機会をいただきありがとうございました。

 

f:id:temma_f:20190904211159j:plain

各講義ごとのブログ

また書けばリンク貼っときます

 

(後、脚注も後から書きます、後から)

*1:クラウド時代における大規模Webアプリケーションは

  • ライフサイクルの長期化
  • システムを分散させる手法による複雑化の影響で状態把握が困難
  • etc

といった性質をもつため、100%の信頼性(システムが求められる機能を、定められた条件の下で、定められた期間にわたり、障害を起こすことなく実行する確率)を実現したまま運用することが難しくなっている。そこで失敗を許容する前提で運用を設計し、上下させる信頼性の程度を見積もり、信頼性を制御することで変更速度を最大化する。

Oculus Go を使ってみた ~prologueと1日目~

こんにちは、@temma です。

突然ですが、Oculus Goを @GOROman さんから頂きました

 

事の発端は先輩からこんなメッセージが届いた事でした。

f:id:temma_f:20190831011141j:plain

リンクを踏むと

 

!!??!?!?!?!何かすごそうなことをやっている...と

 

(いや、これよくある詐欺のやつじゃん)なんだか信用できそうな感じだったし、

せっかくのチャンスなので僕もお願いしてみることに。

......めちゃくちゃ胡散臭い感じのリプライを送ってしまった(意識高い系という言葉はそんなに好きではないが、まさにそのイメージドンピシャみたいな表現である)

 

流石に良くなさそう(反応が渋い...)なので二度目のリプライを送ることにした。

.........

(実際は"やったー"なんてもんじゃないです、"ヒャッホー、あびゃびゃえへへくぁwせdrftgyふじこlp"みたいになってました)

 

ということでOculus Goを頂きました。

@GOROmanさん、@campa_rabb、及び関係者の方々貴重な機会を頂きありがとうございます。あと教えてくれた先輩にも感謝してます。

 

そして8/30(金)、もう本体が配送されてきました!(ムーブが早いのすごい)

f:id:temma_f:20190831015410j:plain

パッケージはこんな感じでした。

開けてみると

f:id:temma_f:20190831015425j:plain

 いや、本当に感動...(楽しみでしょうがなかった)

 

f:id:temma_f:20190831015903j:plain

ちなみに、中身はこんな感じですね。

 

いざ、起動

iPhoneに繋げと言われたので、App StoreからOculusのAppをダウンロードして

iPhone上で初期設定を進めていく...

 

(スクショ撮り忘れてたので以下の画像はAndroidの物になります)

f:id:temma_f:20190831143557j:plain

f:id:temma_f:20190831143608j:plain

f:id:temma_f:20190831143624j:plain

設定の後は (Oculus GoはiPhone上でAppの管理もできるようなので) アップデートを待つ間、面白そうなものをライブラリに追加して待ちます。

f:id:temma_f:20190831143730j:plain

(実はアップデートがうまくいかなかったりしてここまでで、結構時間を使っちゃったんですよね)

 

最初にプレイしたのはジェットコースターゲーム『Epic Roller Coasters』だったのですが、調子に乗って遊びすぎてめちゃくちゃVR酔いしました。

(Todo: スクショを後から載せておく)

 

そして楽しみにしてたのがソーシャルVRと呼ばれる『ambr』です。

 

f:id:temma_f:20190831153100p:plain

https://ambr.co.jp

現在ambrには、Facebook Technologies社発売のVR機器Oculus Goからアクセスすることができます。
今後、その他のVR機器にも対応予定です。
また、現在ambrは毎日22:00~22:30の時間帯に現実世界からのアクセスが可能となっています。詳細は、infoの公式Twitterをご覧ください。
(出典: https://ambr.co.jp)

とのことで、22:00まで待機していました。(それまでにWebサイトでのSign Upが必要そう)

 

22:00になったところでアプリを起動してみると、うまくログインできました!

(Todo: 後から)

そして簡単な操作方法のチュートリアルを受けた後、オリジンと呼ばれる空間へ飛ばされました。

(Todo: )

まずはCafeに行くといいと案内されたので、行ってみる。

(Todo)

Cafeには今回"学生GOプロジェクト"で新しく参加した人も、もともとプレイしていた方もいましたー!

(Todo)

慣れてる方がフレンド申請の仕方に始まり、アイテムの使い方とか(実際に使ってくれた)(手裏剣欲しい)、アバターの仕様とか教えてくれた!(みんな優しくていい雰囲気)

(Todo)

その後もオリジンぶらぶらしたりして、初日は終了

f:id:temma_f:20190831161002j:plain

(最後の方、公衆電話アバターの方とあって写真撮りたかったんですがうまく操作できなくて時間切れになっちゃいました...😭)

 

感想:

- スタンドアローン型だとコードがかさばらなくて使いやすい!!(充電コードは短いので注意が必要、僕はいきなりぶっ壊したので新しいのをAmazonで注文しました...)

- 音は結構周りに聞こえてそう

- もうちょい使ってみないと色々わからないことがある

- ambrの人優しそうでよかった

- アバターとか自作したいなーって思った

- 楽しい!!!!!!!!!

 

最後に:

今日の22:00からも遊んでみたいと思います!

また、僕なりに何か発信していけたらなーって思います。

改めて今回の #学生GOプロジェクト を推し進めてくれた方、ありがとうございましたー!

 

(スクショとか後から撮って貼っときます)