2020年 プロダクトセキュリティトラック 応募課題 以下、「共通問題」と「選択問題」の両方に回答してください。 ■共通問題 以下の問題全てに回答してください。 ==================================================================================================== 問1-1. ブログや、Twitter、GitHub、Slideshare、SpeakerDeckなど公開している活動や資料があれば、URL等を記載してください。 問1-2. これまでにセキュリティやプログラミングに関するコンテスト(CTFや競技プログラミングなど)に参加している場合は、それを記入してください。その際の得点や順位なども教えてください。 問1-3. オープンソースなどの活動に参加していれば、どんな実績があるかを記入してください。参加の形態は開発だけには限りません。 問1-4. 自分のスキルについて、得意としている、あるいは得意としたい技術領域について、なぜその技術領域が好きなのか、その技術領域でどんな世界を作っていきたいのか、『好きなだけ』語ってください。 問1-5. あなたが今まで作ってきたソフトウェアにはどのようなものがありますか?また、それらはどんな言語やライブラリを使って作ったのか、どこにこだわって作ったのか、たくさん自慢してください。 問1-6. 今年のセキュリティ・キャンプ全国大会で受講したいと思っている講義は何ですか?そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか?講義を担当する講師に響くようにアピールしてください(複数可)。 ■選択問題 以下の中から、2問以上を選んで回答してください。 ==================================================================================================== 問2-1. Twitterのように、フォローしたユーザーが投稿したメッセージをタイムラインとして表示可能なサービスをあなたが開発することになったとします。ユーザー数や投稿数に対して、大規模にスケールさせるために、コンピューターリソースを効率よく利用できるようなデータ構造とそれを実現するシステム構成を自由に書いてください。自分らしい創意工夫をひとつ以上明示してください。 問2-2. SameSite Cookieとはどのようなものであるかを簡潔に説明してください。説明には、これが Webのどのような問題を解決するのかの説明を必ず含むようにしてください。なお、SameSite Cookieをもってしても解決されない Web の問題として、自分が面白いと感じるものがあれば、SameSite Cookieの説明に加え、それについても自由に論じてください。 問2-3. OpenID ConnectやOAuth、SAMLといった認証・認可技術を使ったアプリケーションのメリットとデメリットについて回答してください。なお、FacebookやTwitterなどのソーシャルログインを実装したことがある場合には、その環境(ライブラリやフレームワーク、開発言語など)の説明と、開発してみて感じたことを自由に回答してください。実装したことがない人は、可能であればどこかでソーシャルログインを試し、感じたことやセキュリティ課題について自由に回答してください。 問2-4. tracerouteの仕組みがどうなっているかを考えられる限り説明して下さい。間にNAPTがあったとき、プログラムの動作がどうなるのか、期待した結果になるのか、説明してください。 問2-5. drillまたはdigコマンドを用いて、DNSのルートゾーンから www.nic.ad.jp. のゾーンを辿り、次の4点を回答してください。(1) ルートサーバをどのように見つけたか教えてください。(2) ネームサーバを辿っていく際に調べたこと・考えたことを自分の言葉で記述してください、(3) コマンドから返ってきた中で、気になったレコードについて、調べたこと・考えたことを記述してください。(4) NSとは何か、ご自分の言葉で説明してください。 問2-6. nginx特有のalias traversalという攻撃テクニックがあります。この攻撃テクニックを用いて http://54.168.144.153:30001/ を解き、サーバー内に置かれた/var/www/app/flag.txtの中身を解答してください。また、どのようにして攻撃を成功させたかについて簡単な解説も提出してください。攻撃まで成功しなかった方は何を試したかについて説明して下さい。ここで使われているnginxの設定ファイルは次のものです。 ---------------------------------------- server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; } location /static { alias /var/www/app/static/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } ---------------------------------------- 問2-7. Ruby on Rails(以下、Rails)のunmarshalの脆弱性に関する問題です。http://54.168.144.153:30000/users(ID: seccamp2020 PW: cKkwkn5yFg)でユーザを作成し、ユーザ詳細ページ(/users/)に移動してください。このページにある脆弱性を用いて、サーバ内に置かれた /secret/flag.txt の中身を取得し、回答して下さい。 不正なクエリパラメータをGETリクエストに付けることで、デバッグメッセージから情報が得られるかもしれません。Railsではpublic配下に置いたファイルは静的ファイルとして公開されるため、 /secret/flag.txt の内容を public/camp/yyy に書き込むことで http://54.168.144.153:30000/camp/yyy として表示されます。yyy の部分は他の応募者と共通ですので、攻撃に成功した方は他の応募者が答えを推測できないように配慮(ユニークな名前を利用するなど)してください。また、どのように攻撃を成功させたかを説明してください。攻撃が成功しなかった方は、何を試したかを説明して下さい。 問2-8. 「セキュリティ」は幅広い分野から成り立っていますが、その中で自分がもっとも興味があるテーマについて、『好きなだけ』書いてください。