セキュリティ・キャンプ全国大会2023 開発コース L5【TEEの活用と攻撃実践ゼミ】応募課題 # TEEの活用と攻撃実践ゼミ応募課題 * 本応募課題では、各問難易度を高めに設定しており、(コード実装含め)完答を前提としてはおりません。 同時に、ゼミの主題であるTEEへの(スタンス的な)適性や、解答までのプロセス、熱意を測る意味合いを多分に含めています。 完答が難しい場合、途中までの調査結果や思考内容、自らの意見等を記述していただければ、そちらも大きく加点対象といたします。 * 文字数が多い事により採点に有利になることはありません。 * フォームの文字数制限を超過する場合は、外部サービスを利用し限定共有の形で共有いただいて構いません。 * 解答を作成する上で、各種参考文献やサービスを参照するのは全く減点要素にはならず、寧ろ大歓迎です。 ただし、文献やサービスを参照した際には必ず参考文献を記載してください。 * 大問Q3、Q4、Q5は、属する小問から自由に選択し解答する選択問題の形を取っています。各大問での指示に従い、問題を選択して解答してください。 余力があれば指定された選択数よりも多くの問題に解答しても構いません。 TEEやその実装例の1つであるSGXについての基本的な前提知識については、例として以下の文献を参考にしてください(勿論以下の文献に限りません)。 * https://www.ieice.org/~dpf/wp-content/uploads/2021/08/DFS%E7%A0%94%E7%A9%B6%E4%BC%9A%E7%94%A3%E7%B7%8F%E7%A0%94%E9%A0%88%E5%B4%8E.pdf * http://www.ipsj.or.jp/sig/os/index.php?plugin=attach&refer=ComSys2020&openfile=ComSys2020-Suzaki.pdf * https://acompany.tech/privacytechlab/trusted-execution-environment/ * https://qiita.com/Cliffford/items/2f155f40a1c3eec288cf # 問題 ## Q1. あなたが本格的にセキュリティ分野に興味を持ち始めた人生におけるイベントと、その時に感じたこの分野の魅力について語ってください。 就活のガクチカではありませんので、無難な解答を求める問題ではありません。遠慮なくさらけ出して いただいた方が高評価に繋がりやすいため、是非ストレートな経験や知識をぶつけてください。 ## Q2. 本ゼミでメインとして取り上げるIntel SGXは、その利用・開発の際にC/C++に強く依存するため、最低限のC/C++のスキルがないと 一切の開発を行う事ができません。そこで、C/C++(特にC++)を使用して行ったものや開発したものを説明してください。 GitHub等にコードがあれば、そのリンクも共有してください。 もし経験がない場合は、ゼミ本番までのC++の習得に関する計画を述べてください。 ## Q3. ここでは、Q3-1かQ3-2の内1つを選択して解答してください。 ### Q3-1. C++において、任意のデータを128bit AES/GCM方式で暗号化及び復号するソースコードを提出してください。 暗号化の際の秘密鍵及び初期化ベクトルは、IntelのRDRAND命令を使用する形で乱数的に生成してください。 Intel CPU以外のマシンを使用している方は、適当なクラウドサービスの無償枠などで 動作確認してください(SGX対応のマシンである必要はありません)。 どうしてもRDRANDの利用が難しい場合は、適切な暗号論的疑似乱数生成器(CSPRNG)を用いてください。 ソースコードには必要最低限のコメントを入れてください。 ### Q3-2.(超難問) 以下のような構造体があるとします。 ``` cpp typedef struct { uint64_t a; uint8_t b; uint64_t c; } sample_struct; ``` Intel SGXのEnclave(保護領域)内で動作するプログラム(ECALL関数)において、この構造体を用いた以下のようなコードが 実行されるとします。 ``` cpp sample_struct example_ecall(char *ciphertext, size_t input_size) { char *planetext; //暗号文であるciphertextを復号した平文(秘密情報)を格納する変数 sample_struct *output; planetext = (char*) malloc(sizeof(char) * input_size); decrypt_cipher(ciphertext, plaintext, inputsize); //復号する。この関数に脆弱性は無い。 // 中略。秘密情報を漏洩させるような処理は行わない。 free(plaintext); output = (sample_struct*)malloc(sizeof(sample_struct)); // 中略。特段の処理は行わない。 output->a = ...; //秘密情報とは無関係の何らかの値を代入 output->b = ...; //秘密情報とは無関係の何らかの値を代入 output->c = ...; //秘密情報とは無関係の何らかの値を代入 return *output; } ``` ところで、ECALL関数はEdger8rと呼ばれるツールによってプロキシ関数(エッジ関数といいます)に変換され、実際の実行時には そのエッジ関数が実行されます。 エッジ関数では、引数と戻り値を管理するための以下のような構造体が生成されます。 ``` cpp typedef struct ms_example_ecall_t { sample_struct ms_retval; //これが戻り値としてEnclave外に返される char* ms_ciphertext; size_t ms_input_size; } ms_example_ecall_t; ``` この構造体に含まれる、戻り値を格納するms_retvalメンバには、エッジ関数では以下のようにして戻り値が格納されます。 ``` cpp ms->ms_retval = example_ecall(ms->ms_ciphertext, ms->ms_input_size); //msはms_example_ecall_t型の変数 ``` このECALLをSGXSDKと一般的なコンパイラを用いてコンパイルし実行する場合、潜在的に秘密情報であるplaintextの中身の 全部あるいは一部がEnclave外に漏洩してしまう可能性があります。 漏洩が発生してしまう可能性がある理由と漏洩までの流れを説明し、対策についても述べてください。 ## Q4. ここでは、以下のQ4-1からQ4-3の中から1つ選択して解答してください。 ### Q4-1. TEEを秘密計算モデル(ユーザがTEEを備えたクラウドサービスの保護領域(Enclave)に秘密情報を送信し、 一定の計算を行ってその結果を得るようなモデル)利用しようとした場合の、信頼性の観点での問題点について説明してください。 ### Q4-2. Transient Execution Attackについて説明してください。また、「Transient Execution Attack」の 和訳として適切であると思われる訳語を理由と共に提示してください。 ### Q4-3. 最近のIntel製CPUに組み込まれている「スーパーキュー(Superqueue)」の役割を説明してください。 ## Q5. ここでは、以下のQ5-1かQ5-2の内1つ選択して解答してください。 ### Q5-1. 最近のIntel製CPUには、Coreと呼ばれる領域とUncoreと呼ばれる領域が存在します。CoreとUncoreについて 説明するとともに、なぜCore内に存在するデータがCPU外部からは直接観測できないのかを述べてください。 また、UncoreとOffcoreの違いについても説明してください。 最後に、LLC(ラストレベルキャッシュ)がCoreとUncoreのどちらに属するかについて理由とともに述べてください。 ### Q5-2. TEEの中でも有名な実装例であるIntel SGXは、主に以下の(暗号)技術を組み合わせて暗号学的保護領域(Enclave)を提供しています: * 微調整された128bit AES/CTR * 複雑な組み合わせのマークル木 * Carter-Wegman式メッセージ認証符号 これを踏まえて、Enclaveのビットセキュリティが何bit相当であるか、また量子コンピュータ耐性があるかを考察してください。 その際、上記暗号技術以外にもIntel製CPUによる各種管理について調査し、それらを加味するのももちろん構いません。 この問題には明確な正答はありませんので、他の問題以上に思考プロセスを問うものであると認識してください。 SGX Enclaveのセキュリティに関する参考資料: * https://eprint.iacr.org/2016/204.pdf ビットセキュリティについての参考資料: * https://www.nict.go.jp/publication/NICT-News/1303/01.html * https://qiita.com/lemiyachi/items/c20a18b172c6f192a262 ## Q6. その他意気込みなどがありましたら自由に記述してください。