セキュリティ・キャンプ全国大会2015に応募してみた

この記事には間違いがある可能性が非常に高いです.必ず自分で検証してください.

セキュリティキャンプ全国大会2015に応募してみました.
受かっているかどうかは先行次第ですが,自分がどのように解いたか自分自身が忘れないように簡単にまとめます.
間違っていることも多いと思いますが,自分自身の思考を残しておくという意味が強いので過ちに気付いても修正しません.
来年以降同じような問題が出る可能性もあるので簡単にしか書きません.お許しください.
何か問題があればDMをいただけるとうれしいです.
以上よろしくお願いします.

[6月22日21:16 追記 問題9ですがHTTPヘッダインジェクションの脆弱性をつくことのできると買いてありますが正しくはHTTPヘッダインジェクションの脆弱性をつくことのできるリンクを生成することができると考えた、です]

選択問題

問題4

通信やプロトコルに関する問題です。次の1-3の問いに回答してください。ただし3は任意とします。
(1)インターネット上で自分が興味を持ったサイト(又はホスト)を見つけ、 自分の端末からそのサイトへ ping を打ちなさい。その結果とそのサイトに興味を持った理由を記述してください
(2)自分の端末から1のサイトの間のネットワーク通信が、技術的にどのような仕組みで何が行われているのか考察して記述してください(使用する通信は ping に限定しません)
(3)可能であれば、自分の端末から1のサイトの間で、どのようなプロトコルを使ってどういったサービスが実現できているのか、また将来どんな事が実現できれば良いだろうか、考察して記述してください

(1)Pingを送った結果とこんなところが好きだよと書く.
(2)パケットの転送に関することなのかなと思って,自分の端末から出たパケットはルーティングテーブルにしたがっていくつものルータを渡ってゆく,みたいなことを書きました.
(3)自分が選択したサイトにアクセスするためにはDNSで名前解決がされていたり,TLS1.2を用いてログインシステムが実装されていたりしたのでそのことを書きました.将来のことについては,選択したサイトは画像が多く読み込みに時間がかかっていたのでHTTP/2に対応したら読み込み時間が短縮できるのではと書きました.

問題5

以下のようなC言語の関数functionがあるとします。
(C言語ソース)
上記プログラムをコンパイルした結果の一例 (i386)は以下となりました。
(アセンブラソース)
このとき以下の(1)~(5)の設問について、回答と好きなだけ深い考察を記述してください。知らない点は、調査したり自分で想像して書いてもらっても結構です。どうしてもわからない部分は、具体的にここがわかりませんと記述しても良いです。(1)~(2)の回答は必ず答えてください。(3)~(5)の回答は任意です。わかることを書いてください。CPU やコンパイラは特定の実装を例に説明しても良いですし、理想を自由に考えても良いです。

(1)【必須】上記の C 言語のプログラムはどのような動作をしますか。また、この関数を呼び出して利用する main 関数の例を作成してください。
(2)【必須】上記のアセンブリコードを、いくつかのブロックに分割して、おおまかに何をしている部分かを説明してください。もし、上記のアセンブリが気に入らないのであれば、好きなアーキテクチャやコンパイラのアセンブル結果を載せて説明しても良いです。
(3)【任意】 コンパイラがソースコードの関数を解釈して、ターゲットのアーキテクチャのバイナリを生成するまで、どのように内部で処理を行っていると思いますか。(キーワード: 構文解析、変数、引数、呼出規約、レジスタ、スタック、アセンブラ、命令セット)
(4)以降未回答のため省略

(1)nにn-1までの数を掛け合わせてint配列arrayに放り込むプログラムです.
mainの例は,プログラム実行時に引数として与えた数をnとして計算し標準出力に出すというプログラムを書きました.
(2)レジスタ等わからなかったところが非常に多かったのですが,CTF4bのバイナリ講義を受講したことからやってみるかと挑戦してみました.
まず特徴を抽出するところから.
・最後がretで締められてる(return?)
・最初と終わりにpush,pop命令がある
・0xcバイト行(?)にfunctionという文字と0x26というバイト数が記載されている(ということは0x26までがfunctionの中身?)
・0x24バイト行目にジャンプ命令がある(0x1aから0x1aバイト行から0x24バイト行まではforループ?)
・その上には比較に関する命令がある
・0x1aバイト行目に4という数字がある(int1つ分?)
というようにに1行1行からヒントを集めながらCソースと比べブロックごとにここはこうなってという回答をしていきました.
(3)大学の講義で以前習った記憶があり,思い出しながら記述しました.
コンパイラは文句解析,構文解析,意味解析,最適化を通してコードを生成すると書きましたが,時間がないからとキーワードをすべて使わずに回答したのはよくなかったかなと振り返ってます…

問題7

あなたのネットワークに不審な通信を行っているPCがあります。このPCを特定し、中身を調査するためにとるべきアプローチについて具体例を挙げて熱烈にアピールしてください。
不審な通信が行っているということにどう気づいたのかが気になりますが…
通信を行っているであろうネットワークにミラーリングスイッチを設置してパケットをキャプチャ,DNSに関する通信を抽出し,さらに国内アクセス数上位ドメインに関する部分を削除して怪しいドメインが含まれていないかを調査すると書きました.
今思うとDNSだけに絞るのであればDNSサーバでログを取るほうがよかったですね.
また年金機構の問題にも触れて,最初に外部ネットワークと遮断する場合についても少しだけ考察しました.

問題9

以下のコードは、与えられたテキスト内からURLらしき文字列を探して、それらを<a>要素でリンクにしたHTMLを生成するJavaScriptの関数であるとします。攻撃者が引数 text の中身を自由に制御可能な場合、このコードにはどのような問題点があるか、またこのコードを修正するとすればどのようにすればよいか、自分なりに考察して書いてください。
(ソースコード略)

この問題を見て,おっXSSかぁ?正規表現も確認せずにテストサイトを立ち上げて入力テストしたのは内緒.WebはSQLインジェクションとXSSぐらいしか知識がなかったので…
とりあえず正規表現を確認したところ,URLの後半はブラックリスト方式であることに気付きましたがこれ以上のヒントを見つけることができなかったため,Webセキュリティ界隈で有名な徳丸本を買ってURLに関する部分を一通り読みました.
読み進めるうちにパーセントエンコーディングが許されており,HTTPヘッダインジェクションという脆弱性があることに気付くことができました.(正しくはHTTPヘッダインジェクションの脆弱性をつくことのできるリンクを生成することができるですね)
そこで%0A%0D(改行)を許さない正規表現を作ろうと思ったのですが,単文字ではなく文字列となった場合どうすればよいか調べてもわからなかったため,パーセントエンコーディングすべてを許さないように,後半部分に%を追加しました.
この書籍はとても読みやすかったので後日きちんと読み直します.

問題9

下記バイナリを解析し、判明した情報を自由に記述してください.
(バイナリソース略)

とりあえずどんなファイルかわからないので秀丸エディタのバイナリモードにコピペし,通常モードで開きなおしました.
ヤテイ あっ…(察し)
昨年のネットワーククラスの問題と同様にパケットに関するファイルだったのでWireSharkで開いたところ1つのパケットが確認できました.
そのパケット内にHeartbeatという文字が見えたのでもしかしてと思い,調べてみたところ
PayloadLengthが異常に長く
実際のPayloadはもっと短い
という特徴がわかりHeartbleedを利用した攻撃パケットなのではないかと考えました.
セキュリティ関係のニュースやブログを普段から読んでいてよかったなと思った瞬間でした.


共通問題

問題1

セキュリティ・キャンプに応募した自分なりの理由とセキュリティ・キャンプで学んだことを何に役立てたいかを教えてください。
技術力の向上や仲間を作り刺激を受けたいとか書きました.
またキャンプで学んだ経験は後輩たちに話していき,大学でセキュリティに興味を持ってくれる人を増やしたいとも書きました.
素直な気持ちを書けばいいと思います.

問題2

セキュリティに関することで、過去に自分が経験したことや、ニュースなどで知ったことの中から、最も印象に残っていることを教えてください。また、その印象に残った理由も教えてください。
小学校高学年でアダルトサイトのワンクリックを踏んでしまい,父の名前が表示されていたのがすごく怖かったという経験を書きました.
これも素直に書けば大丈夫そうです.

問題3

その他に自己アピールしたいことがあれば自由に書いてください。(たとえば、あなたが希望する講座を受講する上で、どのような技術力を持っているか、部活動、技術ブログ、GitHub、ソフトウェア開発、プログラミングコンテスト、勉強会での発表・運営などの実績や熱意があれば、あるだけ書いてください。)
アピールできる技術力やGitHub等のアピール材料がなかったので,今までこんなセキュリティイベントに参加してきました,今後もイベントに参加するだけでなく誰かに話していくこと,自分で手を動かすこと続けていきたいですと熱意と意欲でアピールしました.


おわりに

最初で(年齢的に)最後のセキュリティキャンプの挑戦となりましたが,自分なりにいろいろ調べ試しながら解いたつもりです.
つっこみどころは多数あると思いますし,努力の足りないところもあるかもしれません.
共通問題では自分の思いはすべて出したつもりなのであとは協議会の皆様にどう感じてもらえるかですかね.

以上長々となりましたが,この記事が自分の覚書としてだけではなく,誰かの参考になればと思います.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>