ポタージュを垂れ流す。

マイペースこうしん(主に旅行)

セキュリティ・キャンプ2023参加記【L5 チューター】

はじめに

セキュリティキャンプ2023にL5(TEEの活用と攻撃実践ゼミ)のチューターとして参加してきました。講師の櫻井さんとは職場のチームが同じで、チューターをお願いされたので参加することにしたという所以です。(残念ながらTEEについては概念を知っている程度でほぼ何も知らず、毎度のことながら現地キャッチアップ形式で、めちゃくちゃ試されている)

TEE(Trusted Execution Environment)とは、信頼可能な実行環境とも訳され、ハードウェアの力を借りて信頼可能な領域内(CPU内やRAM内の保護領域とか)で秘密データを扱うことで、秘密情報を保護したままの計算が行える、という技術です。

本ゼミで行う内容は、TEEの基本知識と応用的議論の解説、TEEアプリケーションの開発を実践してみること、そして多くの攻撃手法の解説とその攻撃手法の一部を実践的に体験する、というものです。自分でアプリケーションを作り、その脆弱性を攻撃する、ビルド&スクラップなゼミでした。スライドが570枚程度あり、かなり網羅的なゼミだったと思います(スライド作成お疲れ様です)。

2年前の参加記はこちら:

potaxyz.hatenablog.jp

2年前のセキュリティキャンプのグループワークが1年続いた記録はこちら:

potaxyz.hatenablog.jp

ミニキャンプのチューター参加記はこちら:

potaxyz.hatenablog.jp

タイムライン

1日目

京都の自宅で朝6時前に起床。前日に豚骨ラーメンを食べすぎたせいで胃の調子が死ぬほど悪い。途中で薬局に寄って胃薬だけ買いました。なんだかんだ時間がギリギリでしたが新幹線に乗って東京、乗り換えて西国分寺、さらに乗り換えて北府中、ということで約4時間の長時間移動でした。

会場のクロスウェーブ府中に到着。

講師チューター控え室で少し雑談したのち、すぐにお昼ご飯の時間になりました。

チューターの集まりに出席し、よろしくおねがいします〜とかトランシーバーの説明(チューターはトランシーバーを持っており、必要があればそれで連絡をしたり受けたりします)を受けたりしていると、開講式、LT大会、グループワークと続き、すぐに夕食です。

夕食後にスイーツビュッフェで交流会とのことでしたが、胃の調子が悪かったので、ご飯は食べきれず、スイーツビュッフェでも胃によさそうなフルーツをいくつか食べる程度という感じでした。

さて、最初の講義時間です。我々のL5の講義では、TEEの中でもintelSGXを利用するのですが、例えばMacBookとかでは対応していないのでazureのインスタンスを利用して開発を行います。sshのアクセス情報がどこにあるのかわからず(普通にモニターに載ってるのを見てなかっただけ)若干手間取りましたが。

チューターではありますがTEEの開発をしたことはないので、私も受講生と同様にコーディングをしてみることにしました。

コーディングしてみよう!ということでプログラミングの簡単なレクチャーと開発を少しやると初日は終了です。

Trustedな領域とUntrustedな領域をまたぐ為に色々込み入ったことをやらないといけない、変な独自の型が存在する、メモリの管理を色々としないといけない、独自のSDKの利用等々、組み込み開発に似ている部分がかなり多く、中々難しい開発になるなあという印象を受けました*1。開発の難しさには、講師の方や、SGXを利用した開発をされている方が他のクラスのチューターにもいらっしゃいましたが、皆文句を言っています(笑)。

2日目

おはようございます。今日も胃の調子が悪く、朝からヴィーガンの食事です。

今日は朝から開発があり、ワイワイと雑談も挟みながら開発をしていきます。受講生の方が詰まったりしていたらその部分を手伝ったり説明してあげたりもします。自分含めみなさんHello Worldにあたるプログラミングは完成し、いよいよ具体的なアプリケーション(パスワード管理アプリ)の開発に入っていきます。

夜には協賛企業さんからの企業紹介でした。チューターも受講生の方に混じってお話を聞きます。

ホームルームにはNOCの見学に行きました。ネットワークまわりをやってくれている方々です。建物自体のネットワーク機器置いてある配電盤室的なとこ(名前わからず)の機器をそのまま自前のものに取り替えたりとかしてるのはスゲーという気持ちになったりしました。

チューターの夕礼を終え、2日目終了です。

3日目

おはようございます。胃の調子が治りました(やったー)。今日は朝から社会見学ということで、IPA文京オフィスの見学です。内容はあまり言ってはいけないようなので詳細は割愛しますが、中々面白かったです。渋滞がすごくてバスに乗っている時間がけっこう長く、行きも帰りもずっと寝ていました。というわけでスケジュールが1時間近く押してしまっていました。

昼ごはんを食べ終わると途中夜ご飯を挟んで、21時まで開発です。初めにazureのインスタンスを立ち上げようとしたら、更新中とかなってて使えなくなるというトラブルがあり、講師の方がお怒りになっていました(笑)。受講生の方が攻撃手法の実践がやりたい!とのことで、途中で攻撃手法についてのレクチャーも入ります(かなり詳しく攻撃手法の解説があったので、お話の時間がけっこう長かったかも)。しばしば他のコースからの見学が来るので、講師の方と僕とで応対をしたりします。

チューターの夕礼を終え、3日目終了です。

4日目

おはようございます。今日は朝から開発ですが、開発できるのは今日が最後です。

みなさん開発にあたっての目標的なものはなんとか達成できていたので、各自興味があるものを開発していきます。アプリケーションの機能拡充や、攻撃手法をいくつか試してみる等、受講生がやりたいことをやってもらって、また成果発表のスライドも作成してもらっていました。その間自分もアプリケーションの機能を拡充できるように実装していました。これで全日程の開発は終了です。

最後にLトラック内で成果報告会みたいなものをしました。自分もL2トラックの卒業生なので、そんなこともやったなあと想いを馳せたりしていました。

夕食が豪華でした。

夕食後はLT大会でした。面白い発表ばかりで楽しむことができました(広報の方もLT大会出るんだ!と思った)。

グループワークでちょっかいをかけたりしているとあっという間にホームルームです。ホームルームの時間は他のクラスの見学に行こう!ということでしたが、部屋に誰もいなくなってしまうと困るので講師の方と部屋で待機していました。他のトラックから見学に来られた方と、部屋に残っていた受講生とか講師の方とかと名刺交換したりお話したりしました。

チューターの夕礼を終えて、名刺交換会をするなどしていると、あっという間に4日目が終了です。

5日目

7時45分くらいに起床。朝食を摂り、お部屋をチェックアウト。

グループワークの発表を聞きます。色々なアイデアが出ていて面白いです。その後は集合写真を撮ります。合間を縫ってLトラックの集まった人で写真を取ったりしていました。

専門コースとジュニア、ネクストの成果発表が終わると昼食です。

午後からは開発コースの成果発表です。最後にNOCからどういうことをやっているか説明がありました。殆どが自分の専門とは離れた話(そもそも自分はセキュリティやコンピューターサイエンスをやってる人間ではありません)なので、他のコースの成果発表はやはり面白いです。

あっという間に閉講式です。5日間おつかれさまでした。

最後に講師の櫻井さんの車を見せてもらってカッケ〜と思ったりとか、Lトラックのプロデューサーの松岡さんと握手をしたりするなどしていました。

ちなみに、開発していたコードはこんな感じになりました。とりあえずザーっと落書きじゃないですが、そんな感じで書いていたのであまり綺麗ではないです。利用可能な環境に制約があり手元では動かせないので、リファクタとかコードの改善ができるかは未定です。

github.com

さいごに

チューターとしての参加は初めてで、しかも自分の詳しくない分野のチューターではあったので役が務まるか初めは不安でしたが、参加してみると(まるで受講生のように)自分が知らなかった技術を学ぶことができ、また受講生のサポートもそれなりにできたのではないかな、と思います。受講生が少しずつ内容を理解して、成長していく姿を見ることができたのも良かったです。2年前受講生の立場で参加した時はオンラインでしたが、やはりオフラインの方が会話や雑談が自然に発生して、それも良かった点かなと思います。本当にあっという間の5日間で、とても楽しかったです。講師の櫻井さんには大変お世話になりました。また、他の講師やチューターはじめ、関係者の皆様ありがとうございました。そしてお疲れ様でした!

*1:筆者はsony製のマイコンspresenseを利用して放射線測定器の開発を行っています。arduino IDEの開発環境も利用できますが、放射線測定に必要な高サンプリングレートでの電圧取得機能が制限されている為、開発環境としてはspresense SDKというものを使って生のC言語のコードを書いています。