にっっきっっっっっき

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. まとめ

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

 

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