はじめに

セキュリティキャンプ2023の開発コースL5『TEEの活用と攻撃実践ゼミ』に受講生として参加していました。
実はセキュリティキャンプ2020に受講生をしていましたが、当時はコロナ禍でオンライン開催でした。
オフライン開催する場合はもう一度参加できるため、参加させていただきました。
やったことや感想を参加記として記載します。

セキュリティキャンプとは何かや、講義の概要はセキュリティキャンプ2023のホームページのほうに記載してありますのでそちらもふせてご参照ください。
※応募課題回答に関しては私はほとんど間違っていたので記載しません。

準備

オフライン開催ということもあって何を持っていくのかを考えながらパッキングしていました。
海外にいくような気分でした。
下着も足りなかったのでいろいろと買いに行ったりしていたら結構お金が無くなってしまいました。
講義にも事前学習があり、Intel SGXとは何かなどの概念や技術について学びました。

一日目

私は関西周辺に住んでいることもあり、前泊が必要なく朝早くから新幹線に乗って会場まで行きました。
会場は東京都府中といったところで、都内から離れているため新幹線から降りた後の在来線も約一時間ぐらい掛かった気がします。
私は京王線の府中駅に到着してからバスに乗り換える場所で迷いました。
どのバスが目的地を通るのかを知らなかったのが一番の原因だと思いますが、結構時間をかけてしまいました。
12時集合のぎりぎりで到着しました。

会場に到着してからお昼ごはんでした。
私は写真を撮っていないので他の方の写真を見てください。
その後に開講式、共通講義、LT会、グループワークといった感じでお話を聞いたりしておりました。
初日の夕ごはんが焼肉、その後にデザートタイムがありました。
お肉が焼けるのが遅いことや、他の参加者と交流していたらすぐに時間が無くなってしまって、あまりデザートタイムを満喫できませんでした。
もっとデザートをたくさん食べておくべきだったと後悔しています。
デザートタイムが終わると同時にここから専門コースと開発コースそれぞれ分かれて対面でのゼミが始まります。
初日はIntel SGXプログラミングの基礎を教えてもらい、Intel SGXさんに挨拶(Hello Enclave)を実装して一日が終わりました。
ここで毎日腹筋をしようと思い、初日から50回腹筋してました。
9時に寝たことを覚えています。

二日目

6時に起きて身支度を済ませ、昨日の腹筋による筋肉痛を抱え朝ごはんを食べに行きました。
朝ごはんはバイキング形式で自分の好きな量をとって食べることができます。
たくさん食べている方や、朝ビーガンになっている方を確認してます。
二日目はお昼ごはんを挟んでゼミが8時間ありました。
そこではSealingと呼ばれる一種の暗号化を文字列に対して行い、OSディレクトリに配置する実装や、uswitchlessと呼ばれるスレッドの力を借りることでECALL/OCALLによるオーバヘッドを軽減する技術を使用し、Hello Enclaveを書きなおし、実際に速度も計測しました。
大体5倍ほどの速度向上がでていたのでスレッドの力すごいとなっていました。
夕ご飯後に協賛企業イベントがあり、私はFuture, SST, NTT, SBテクノロジーさんといった企業さんを回りました。
企業さんごとで伝える内容が多種多様であり、この時間だけでも学びは多かったです。
その後、ホームルームをして二日目が終了です。
10時ぐらいに寝ました。

三日目

だんだんと起床が遅くなってきます。
8時に起床し、まだ筋肉痛が治っていませんが朝ごはんへ向かいます。
朝ごはん後は社会見学でIPAや中央省庁のお話を聞いてきました。
オフィスも見学させてもらい、面白いものを見せてもらいました。
行きも帰りも渋滞がひどく、一時間半ぐらい掛かりましたが私は隣の席の方とお話をしていたのであまり苦行時間ではなかったです。
皆さん普段から私の知らないことをやっておられるのですごいなと思ってました。
会場に返ってきてお昼ご飯、その後夕食を挟んでゼミです。
時間が押していた関係もあって5時間ほどIntel SGXを使ったパスワードマネージャを作成していました。
加えてIntel SGXで簡単にできる脆弱性をつく攻撃手法の解説があったので実際に攻撃してみたりしていました。
ここで簡単にできる脆弱性はほとんどが開発者側のミスによる脆弱性の話でした。
SGXBleedをやってみたり、パスワードマネージャーのパスワードを保存する処理を実装していました。
明日が最後の開発になると聞いて必死で何かしら作っていた気がします。
11時ぐらいに寝ました。

四日目

8時に起床し、急いでご飯を食べに行きました。
朝ごはんを食べたら、昼ごはんを挟んで最後の開発に時間をさける日ということもあり、開発をしていました。
講義スライドも終わってないかったので難しい攻撃手法の解説を聞きながら開発していました。
攻撃手法を教えてもらってCPUのマイクロアーキテクチャについてだんだんとわかってきました。
今後の私の研究にもなりそうだなと思いながら聞いていました。
最後にLトラック内での成果発表を行い、開発は終了です。
最後まで要件を満たすパスワードマネージャーは作成することはできませんでしたが、基本的なものは作成できたので満足です。
夕食を食べて第2回LT会でいろいろな話を聞きました。
自分も何かしら発表する内容があればよかったなと思いました。
その後グループワークを行い、終了です。
寝たのは次の日の1時です。(自分のPCにSGX-SDKをインストールしてました。)

五日目

結局初日の腹筋による筋肉痛は治りませんでした。
8時に起床し、身支度をすませ朝ごはんを食べました。
最終日はほとんどが成果発表会であったので皆さんがこの五日間で何をやっていたのかを聞いてました。
最後のお昼ご飯を食べて再度成果発表を聞いて終了です。
最後に写真を撮り、あっという間に五日間が終わりました。
開発していたパスワードマネージャーは以下のリポジトリにあります。
C++もほとんど書いたことがなかったのでコードは汚いです。
ChatGPTさんありがとうございました。
https://github.com/1uf3/seccamp2023-l5/tree/master/sgx-tmp

さいごに

興味を持っていたTEEに関してIntel SGXを知ることができました。
正直セキュリティキャンプに応募した理由は研究分野を広げたいといった理由でした。
攻撃編ではCPUのマイクロアーキテクチャを理解しないとできない攻撃があり、アタックサーフェスはいろんなところにあるということを再実感しました。
オフラインと比べて対面でお話をすることでより物事を聞きやすかったり、受講生同士とのお話が進んだりして横のつながりや縦のつながりを作りやすかったと思います。
他の開発コースにもお邪魔することで講師の方々とお話しすることもでき、自分が今研究で困っている内容を聞いたりしていました。
2回目の参加になりましたが、まだまだいろいろな人と会え、学習することができてとても楽しかったともに有意義な時間でした。
ありがとうございました。そしてお疲れさまでした。