セキュリティ・キャンプ全国大会2015 応募用紙 氏名: (ふりがな): 電話番号(昼間に連絡できる電話番号): E-mailアドレス(必ず書いてください): 所 属(学校・学科・学年): 年齢(応募現在):(  )才 (※2016年3月31日時点において22歳以下の学生・生徒であることが応募条件です) Twitterアカウント(ある場合のみ): ホームページまたはブログのURL(ある場合のみ): =================== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =================== ### 共通問題 下記の共通問題にはすべて回答してください。 ■ 共通問題1 セキュリティ・キャンプに応募した自分なりの理由とセキュリティ・キャンプで学んだことを何に役立てたいかを教えてください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 ■ 共通問題2 セキュリティに関することで、過去に自分が経験したことや、ニュースなどで知ったことの中から、最も印象に残っていることを教えてください。また、その印象に残った理由も教えてください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 ■ 共通問題3 その他に自己アピールしたいことがあれば自由に書いてください。(たとえば、あなたが希望する講座を受講する上で、どのような技術力を持っているか、部活動、技術ブログ、GitHub、ソフトウェア開発、プログラミングコンテスト、勉強会での発表・運営などの実績や熱意があれば、あるだけ書いてください。) 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 =================== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =====         ===== 空白行として、あけたままにしてください =================== ### 選択問題 下記の選択問題の中から 5つ 選択して回答してください。 なお、回答した問題は、冒頭の□を■にしてください。 □選択問題1 (左側の□について、回答した問題は■にしてください) 過去に家電製品や電子機器を分解して中身を見てみたことはありますか?(ある場合のみ回答) (1) もしもあれば何を分解したのか具体的な製品名を添えて2個以上教えてください。 (2) 何の目的のためにそれを分解しようと思ったのでしょうか。理由を教えてください。 (3) 分解してみて中に何があったのか、わかったこと、自分で発見できたことを書いてください。 (4) 分解してみてもわからなかったこと、今後勉強してみたいと思っている内容を書いてください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題2 (左側の□について、回答した問題は■にしてください) ある機械語をobjdumpにより逆アセンブルしたところ、以下の結果が得られました。このダンプに見られる問題点を指摘してください。 --- 00000000 <.text>: 0: b8 de 07 00 00 mov $0x7de,%eax 5: 3d df 07 00 00 cmp $0x7df,%eax a: 75 06 jne 0x12 c: 89 c0 mov %eax,%eax e: ff e3 jmp *%ebx 10: 75 01 jne 0x13 12: e9 5b ba 0e 00 jmp 0xeba72 17: 00 00 add %al,(%eax) 19: b9 00 00 00 00 mov $0x0,%ecx 1e: bb 01 00 00 00 mov $0x1,%ebx 23: b8 04 00 00 00 mov $0x4,%eax 28: cd 80 int $0x80 2a: b8 01 00 00 00 mov $0x1,%eax 2f: cd 80 int $0x80 --- 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題3 (左側の□について、回答した問題は■にしてください) 過去に作成したプログラムのうち最も気に入っているものについて答えてください。 ここでいうプログラムは、Webサービスやモバイルアプリ、サーバ/デスクトップアプリケーションあるいはOS、VMなどといったソフトウェア全般のことです。 (1)どのようなソフトウェアであるかを教えてください (2)何の目的のためにそれを作ろうと思ったのか、理由を教えてください (3)開発するにあたって工夫したところを教えてください (4)新たな課題、今後勉強してみたいと思っている内容を書いてください 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題4 (左側の□について、回答した問題は■にしてください) 通信やプロトコルに関する問題です。次の1-3の問いに回答してください。ただし3は任意とします。 (1)インターネット上で自分が興味を持ったサイト(又はホスト)を見つけ、 自分の端末からそのサイトへ ping を打ちなさい。その結果とそのサイトに興味を持った理由を記述してください (2)自分の端末から1のサイトの間のネットワーク通信が、技術的にどのような仕組みで何が行われているのか考察して記述してください(使用する通信は ping に限定しません) (3)可能であれば、自分の端末から1のサイトの間で、どのようなプロトコルを使ってどういったサービスが実現できているのか、また将来どんな事が実現できれば良いだろうか、考察して記述してください 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □ 選択問題5 (左側の□について、回答した問題は■にしてください) 以下のようなC言語の関数functionがあるとします。 void function(int *array, int n) { int i; for(i = 0; i < n; i++) { array[i] = i * n; } } 上記プログラムをコンパイルした結果の一例 (i386)は以下となりました。 00000000 : 0: 56 push %esi 1: 53 push %ebx 2: 8b 5c 24 0c mov 0xc(%esp),%ebx 6: 8b 4c 24 10 mov 0x10(%esp),%ecx a: 85 c9 test %ecx,%ecx c: 7e 18 jle 26 e: 89 ce mov %ecx,%esi 10: ba 00 00 00 00 mov $0x0,%edx 15: b8 00 00 00 00 mov $0x0,%eax 1a: 89 14 83 mov %edx,(%ebx,%eax,4) 1d: 83 c0 01 add $0x1,%eax 20: 01 f2 add %esi,%edx 22: 39 c8 cmp %ecx,%eax 24: 75 f4 jne 1a 26: 5b pop %ebx 27: 5e pop %esi 28: c3 ret このとき以下の(1)~(5)の設問について、回答と好きなだけ深い考察を記述してください。知らない点は、調査したり自分で想像して書いてもらっても結構です。どうしてもわからない部分は、具体的にここがわかりませんと記述しても良いです。(1)~(2)の回答は必ず答えてください。(3)~(5)の回答は任意です。わかることを書いてください。CPU やコンパイラは特定の実装を例に説明しても良いですし、理想を自由に考えても良いです。 (1)【必須】上記の C 言語のプログラムはどのような動作をしますか。また、この関数を呼び出して利用する main 関数の例を作成してください。 (2)【必須】上記のアセンブリコードを、いくつかのブロックに分割して、おおまかに何をしている部分かを説明してください。もし、上記のアセンブリが気に入らないのであれば、好きなアーキテクチャやコンパイラのアセンブル結果を載せて説明しても良いです。 (3)【任意】 コンパイラがソースコードの関数を解釈して、ターゲットのアーキテクチャのバイナリを生成するまで、どのように内部で処理を行っていると思いますか。(キーワード: 構文解析、変数、引数、呼出規約、レジスタ、スタック、アセンブラ、命令セット) (4)【任意】CPU の内部では、プログラムのバイナリはどのように解釈され実行されていると思いますか。(キーワード: フェッチ、デコード、オペコード、オペランド、命令パイプライン、回路) (5)【任意】現在の CPU やコンパイラの不満点があれば自由に記述してください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題6 (左側の□について、回答した問題は■にしてください) Linux システムの問題解決であなたが使ったことのあるツール(例: strace, gcore, gdb, kdump など)について記述してください(差支えの無い範囲で構わないので、問題の内容/使用したツール/どのように使用して解決したのかをなるべく詳しく説明 してください)。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題7 (左側の□について、回答した問題は■にしてください) あなたのネットワークに不審な通信を行っているPCがあります。このPCを特定し、中身を調査するためにとるべきアプローチについて具体例を挙げて熱烈にアピールしてください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題8 (左側の□について、回答した問題は■にしてください) gccが持つ-fno-stack-protectorは、どのようなセキュリティ機能を無効にするオプションであるのか、またこの機能により、どういった脆弱性からソフトウェアを守れるのかをそれぞれ記述してください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題9 (左側の□について、回答した問題は■にしてください) 以下のコードは、与えられたテキスト内からURLらしき文字列を探して、それらを要素でリンクにしたHTMLを生成するJavaScriptの関数であるとします。攻撃者が引数 text の中身を自由に制御可能な場合、このコードにはどのような問題点があるか、またこのコードを修正するとすればどのようにすればよいか、自分なりに考察して書いてください。 function makeUrlLinks( text ){ var html = text.replace( /[\w]+:\/\/[\w\.\-]+\/[^\r\n \t<>"']*/g, function( url ){ return "" + url + ""; } ); document.getElementById( "output" ).innerHTML = html; } 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題10 (左側の□について、回答した問題は■にしてください) アンチデバッグ、難読化といった単語をキーワードとする技術について、あなたが知っていること、調べたことを具体的に記述してください。基本的にPCのソフトウェアにおける技術を想定していますが、他端末、またはハードウェアに関する内容でもかまいません。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題11 (左側の□について、回答した問題は■にしてください) 下記バイナリを解析し、判明した情報を自由に記述してください ------------------------------------------------ D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00 00 00 04 00 01 00 00 00 88 EB 40 54 A2 BE 09 00 52 00 00 00 52 00 00 00 22 22 22 22 22 22 11 11 11 11 11 11 08 00 45 00 00 44 1A BD 40 00 80 06 3A 24 C0 A8 92 01 C0 A8 92 80 10 26 01 BB 86 14 7E 80 08 B3 C8 21 50 18 00 FC 0D 0E 00 00 18 03 03 00 17 01 0E FB 06 F6 CD A3 69 DC CA 0B 99 FF 1D 26 09 E1 52 8F 71 77 45 FA ------------------------------------------------ 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題12 (左側の□について、回答した問題は■にしてください) CentOS 6.5 リリース時点のパッケージを使用して構築された CentOS 6 サーバがあります。ユーザ test のログインシェルには、特定のディレクトリ内のファイルを scp を用いてダウンロードできるようにすることを意図した、以下に示すログインシェルが使われています。 このサーバのホスト名を shell.scamp2015.comとし、/etc/ssh/sshd_config の内容がデフォルト設定のままであると仮定して、このログインシェルの脆弱性と、このログインシェルから起動されるプログラムの脆弱性の両方を突いて、書き込み可能なディレクトリ(好きな場所を仮定してよい)の中に任意のファイルをアップロードする手順を、コマンドラインを交えながら解説してください。 ---------- ログインシェルのソースコード ここから ---------- #include #include #include #include #include int main(int argc, char *argv[]) { int i; int err = EINVAL; wordexp_t p; char *w; static char *args[1024] = { }; if (argc != 3 || strcmp(argv[1], "-c")) { fprintf(stderr, "You are not permitted to login.\n"); return 1; } w = argv[2]; if (strncmp(w, "scp -f ", 7) || strspn(w + 7, "abcdefghijklmnopqrstuvwxyz0123456789./+-_$[{()}]=`?*'") != strlen(w + 7) || wordexp(w, &p, WRDE_NOCMD) || p.we_wordc < 3 || p.we_wordc > 1023) goto out; for (i = 0; i < p.we_wordc; i++) { w = p.we_wordv[i]; if (strncmp(w, "/home/", 6) && strncmp(w, "/var/ftp/", 9) && strncmp(w, "/var/www/html/public/", 21) && i >= 2) goto out; args[i] = w; } execv("/usr/bin/scp", args); err = errno; out: fprintf(stderr, "%s : %s\n", argv[2], strerror(err)); return 1; } ---------- ログインシェルのソースコード ここまで ---------- 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題13 (左側の□について、回答した問題は■にしてください) これまでに起こったこと(データ)から、これまでにまだ起こっていないことを事前に予想する場合、どのような点に注意し、どのようなことを考慮すべきか熱烈にアピールしてください。 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 □選択問題14 (左側の□について、回答した問題は■にしてください) 以下はWebViewを使用したAndroidアプリのコードです。このコードには、不正なアプリやWebView上で開かれた悪意のあるページによる攻撃を受け、情報流出などの被害をもたらす恐れのある箇所が存在します。それはどこか、またどのような攻撃を受けた場合にどのような被害が生じるか、可能な限り述べてください。なお、コメント欄に付記したCVEの番号は、類似のコードに起因する過去の脆弱性事例です。これらの脆弱性の原因を調べることが回答の手がかりとなります。 public class MainActivity extends Activity { private static final String ACTION_LOAD = "jp.example.app.action.LOAD"; private static final String ALLOW_ORIGIN = "http://www.ipa.go.jp"; private WebView webview; private BroadcastReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView) findViewById(R.id.webView); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setAllowUniversalAccessFromFileURLs(true); // CVE-2012-4009 webview.addJavascriptInterface(this, "android"); // CVE-2012-6636 webview.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // CVE-2014-5991 } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // CVE-2014-1883 Pattern p = Pattern.compile(ALLOW_ORIGIN); // CVE-2012-6637 Matcher m = p.matcher(url); return !(m.find()); } }); webview.loadUrl(ALLOW_ORIGIN); IntentFilter filter = new IntentFilter(ACTION_LOAD); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { webview.loadUrl(intent.getStringExtra("url")); // CVE-2014-3500 } }; registerReceiver(receiver, filter); } @Override protected void onDestroy() { unregisterReceiver(receiver); } } 【以下に回答してください(行は適宜追加してください)】 【回答ここまで】 以上 ※応募用紙にご記入いただいた、事務局が取得した個人情報を含む一切の内容につきましては、独立行政法人情報処理推進機構(IPA)の個人情報保護方針に基づき、セキュリティ・キャンプ実施協議会と共に適正に取扱いを行います。取得した情報は、セキュリティ・キャンプ関連の連絡・案内、資料送付、セキュリティ・キャンプ実施協議会からの案内など、「セキュリティ・キャンプ」の事業に関連する用途においてのみ使用し、それ以外の目的には一切使用しません。詳しくは、ホームページをご覧ください。http://www.ipa.go.jp/about/privacypolicy/index.html