# 開発コース Y01【Code Sanitizer・Fuzzer自作ゼミ】応募課題 セキュリティ・キャンプ全国大会2025 ## 注意 - 文字数が多い事により採点に有利になることはありません。 - これまた採点には関係ありませんが、早め早めの提出をおすすめします! - 本課題は応募者が現時点で知らないだろうと想定される知識を調べながら回答してもらう想定になっています。わからないことがあっても、何をどう調べてみたかなどを記述してもらえると嬉しいです。 - 大規模言語モデル (LLM) の使用は制限しませんが、LLMの出力した内容を理解することなくそのまま提出することはおすすめしません。出力内容のどの部分がわからなかったのかを自分の言葉で書き足してもらえると、採点時に有利に取り扱える場合があります。 ## 設問1 本講義の受講生には、大会期間中にサニタイザまたはFuzzer、あるいはその両方を受講生のすきな形で実装していただきます。 そのどちらをどのように実装していくかは事前学習期間中に話し合いながら決めていく予定ですが、現時点でのご興味をお伺いします。 サニタイザまたはFuzzerのうち、興味のあるほうを選択し、その理由を簡潔に述べてください。 また、特定のサニタイザやFuzzerを実装することに興味がある場合は、そのアイデアを教えてください。 ## 設問2 以下の条件を満たす脆弱性報告を1つ選び、続く質問に答えてください。 - CVE識別番号が発行されている - 2019年以降に発見された (CVE-2019以降) - CまたはC++で書かれたプログラムにおける未定義動作に起因する - Fuzzingにより発見された [質問] - 脆弱性の原因となった未定義動作について、数文で簡単に説明してください。 - 動作が未定義であると明示的に定義している C または C++ 言語仕様のセクションはどれですか。この際、正式なISOの言語仕様を閲覧するためには高額な費用が必要となるため、無料で閲覧可能なworking draftをバージョンを明示したうえで引用することとしてください。 - Fuzzingに使用されたツールはどのようなものでしたか。 ## 設問3 コンパイラを自作した経験がある方は、そのソースコードを閲覧できるURL (GitHubリポジトリ等)を記入してください。 自作経験がない方でも、提出期間内に実装する時間と異常なまでのやる気がある場合はチャレンジしてくださっても大丈夫ですが、無理はなさらないでください。 (関数呼び出しが可能な程度完成度の)コンパイラの実装経験がある場合は、応募課題は以上となります。設問4以降は無回答として問題ありません。 実装経験がない方は、設問4に進んでください。本講義では、講師の用意したコンパイラの上にサニタイザ・Fuzzerを実装する形で進めることも可能です。コンパイラの実装経験がなくても全く問題はありません。 ## 設問4 アドレスサニタイザが以下のHeap Use-after-Freeを検知できる仕組みを簡潔に説明してください。 ```c #include "stdlib.h" #include "stdio.h" int main(void) { char* p1 = malloc(1); free(p1); printf("char: '%c'\n", *p1); return 0; } ``` https://godbolt.org/z/PoP18P8We ## 設問5 本講義はC++を主に使用していきます。C/C++をはじめとした言語におけるプログラミング経験等を簡単にPRしてください。 また、サニタイザやFuzzerを使った経験があれば、そちらも記述してください。 応募期間中に取り組んでいただいた内容でも結構です。