# 開発コース S09【サニタイザ自作ゼミ】応募課題 セキュリティ・キャンプ全国大会2024 ## 注意 - 文字数が多い事により採点に有利になることはありません。 - これまた採点には関係ありませんが、早め早めの提出をおすすめします! - 本課題は応募者が現時点で知らないだろうと想定される知識を調べながら回答してもらう想定になっています。わからないことがあっても、何をどう調べてみたかなどを記述してもらえると嬉しいです。 ## 設問1 本講義で扱うサニタイザとは、アドレスサニタイザ(ASan)をはじめとした、コンパイル時に追加の命令を挿入することでプログラム中のバグを実行時に検出するツールのことです。 このようなツールはすでに複数提案・実装されており、以下のような種類があります。 - アドレスサニタイザ(ASan): Use after FreeやBuffer Overflowといったメモリバグの検出 - リークサニタイザ(LSan): メモリリークの検出 - スレッドサニタイザ(TSan): データ競合やデッドロックの検出 - メモリサニタイザ(MSan): 未初期化領域の使用の検出 - 未定義動作サニタイザ(UBSan): 未定義動作の検出 本ゼミは、講師またはあなた自身の用意したコンパイラに、何かしらのサニタイザを実装するゼミとなっていますが、どのようなサニタイザを実装するかは自由となっています。 そこで、これらのツールの働きについて自分なりに調べた上で、どのようなサニタイザを実装することに興味があるのかを簡潔に教えてください。 もちろん、ここに書かれていないオリジナルのサニタイザを提案・実装していただいても構いません。 また、本課題で提出した内容を必ずしも実装しなければいけないわけではありませんので、現時点での興味をなんとなく共有していただく程度にとどめてくださっても大丈夫です。 ## 設問2 コンパイラを自作した経験がある方は、そのソースコードを閲覧できるURL (GitHubリポジトリ等)を記入してください。 自作経験がない方でも、提出期間内に実装する時間と異常なまでのやる気がある場合はチャレンジしてくださっても大丈夫ですが、無理はなさらないでください。 (関数呼び出しが可能な程度完成度の)コンパイラの実装経験がある場合は、応募課題は以上となります。設問3以降は無回答として問題ありません。 実装経験がない方は、設問3に進んでください。本講義では、講師の用意したコンパイラの上にサニタイザを実装する形で進めるために、コンパイラの実装経験がなくても全く問題はありません。 ## 設問3 アドレスサニタイザが以下の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 ## 設問4 本講義はC++を主に使用していきます。C/C++をはじめとした言語におけるプログラミング経験等を簡単にPRしてください。