なぜSGXに呪われたか

本記事はAcompany Advent Calendar 2022の25日目の記事です。

自己紹介

現在ご縁があって株式会社Acompanyで働かせてもらっております櫻井です。

学生時代は早稲田大学におり、学部4年の時に研究室に配属されて少ししてからタイトルにもあるSGXに手を染め、IPAの未踏の場も借りつつ大学院卒業まで専らSGXをこねくり回しておりました。
(当時開発したプロダクト(BI-SGX)の数年更新していない公式ページ:https://bi-sgx.net/

その後は日本IBMの平凡なSIer職に就き、微塵も面白くない仕事を2年少々やっておりましたが、Acompanyの近藤さんに拾っていただき、晴れてAcompanyのR&Dチームのメンバとして研究に復帰している状況です。

今年のAcompanyのアドベントカレンダーでは、既に以下2つのQiita記事を投稿しております。

TEE(SGX)に取り憑かれた人間

筆者のTwitterをご存知の方は、筆者がまともではないと薄々感じているかも知れません。
ここで、筆者のTwitterのスクショを載せてみます。

この人、SGXの話しかしていません。

実際は恣意的にそう見える部分を切り抜いているので、他の話題にも触れているのですが、それにしても常にSGXの事話しているな、と思う方が大半だと思います。

言ってしまえば完全に「SGXに呪われている(取り憑かれている)」のですが、本記事では何故そんな事になってしまったのかについて書き連ねていきます。

そもそもSGXって何?

さっきから一般にSGXなる技術が知られているのが当たり前であるかのように話してきましたが、全くそんな事はございません。ドマイナーの極みです。

ここでは技術的な議論は可能な限り排しますが、SGXとはIntel製の一部CPUに搭載されている、Software Guard eXtensionsと呼ばれるセキュリティ機能です。

イメージとしては、CPUのセキュリティ機能でメモリ上に保護された領域を作り、その中に守りたいデータを置いてその状態で処理を進める事で、守りたいデータを保護しながら安全に処理を完了させられる、という技術です。

技術の大分類としてはTEE(Trusted Execution Environment)と呼ばれるものに属する技術の一つとなります。
これらのより詳しい説明は、自著の以下の記事に譲ります。

比較的新しい技術というのもあり、大学時代に研究していた際には、参考にできる日本語のサイトや日本人による論文はほぼ存在しなかったという有様でした。
現在ではTEEの需要の(ニッチな)高まりもあり、大分認知されてきている気がしますが、それでもまだマイナー寄りの技術でしょう。

SGXとの因縁

その出会いは、至って平凡なものでした。

当時、センシティブデータを扱う分野であれば、元々好きだったセキュリティにも触れられるであろうという思考で生命情報解析系の研究室に入りました。

その後、ゼミで先輩方の準同型暗号や秘密分散の話(だったと思います)を聞いて、秘密計算という面白い分野があるんだなと思っていたのですが、特段どれをやりたいかは定まっておりませんでした。

そんな中、自己紹介でファミコンゲームをアセンブリで作ったりする、という話をしたからか、比較的低レイヤにも触れながらセキュリティ利用ができそうという事で、指導教員からとある技術を紹介されました。

そう、それこそがIntel SGXです。
(今筆者がこうなっているのを鑑みると、やはり指導教員の選択眼は恐ろしく鋭かったなという感じです)

そこからのSGXに対する悪戦苦闘は後述しますが、学部ではGraphene-SGXというSGXプラットフォームを利用して簡易的な秘密計算っぽい事をし、未踏や修士ではSGX上でインタプリタを構え、そこに送られたコードに従い秘密計算を行うクラウド(BI-SGX)を開発していました。

その後は、IBMの就業規則の魔の手により未踏アドバンストへの道が絶たれたりしましたが、LayerXさんの主催されたイベントでTEEとSGXの解説をしたり、産総研さんでレクチャしたり、現在も副業としてSGX関係のサーベイをさせてもらっています。

本業(Acompany)では、今の所メインウェポンとしてTEEを扱う事はあまりしていませんが、それでもちょくちょく出てくる度に触っています。

なぜ呪われてしまったのか

では何故SGXにそこまで取り憑かれているのかを、自分の思いつく範囲で載せていこうと思います。

成功体験、というのは恐らくある

元も子もない話ですが、筆者というのは卑しい人間で、到底解脱とは程遠い欲まみれの存在です。

よって、現在よりもSGXがドマイナーだった時代に、SGXで一定のアウトプットをしたからという回路は、無意識部分を分析すると恐らくあるでしょう。(普段はそんな事は全く意識していませんが)

また、日本語の情報源が全く整備されておらず、Intelによる膨大な量のドキュメントや論文を読み解き、その上で明文化されていない謎の仕様も暴いた苦悶の作業を味わっている経緯があるので、簡単には捨てられない所もあるのでしょう。人間の弱い所ですね。

ただ、無意識部分に存在するかも知れないこれらによってここまで固執しているのかというと、個人的にはあり得ないに近い、と考えています。

TEE(SGX)は画期的なパフォーマンスを誇る

やはりここまで取り憑かれるという事は、SGX自体に何らかの魅力があるからだと真っ先に考えられるでしょう。
その観点で見た時、確かにSGX(TEE)というのは、対抗技術と比べても非常に魅力的な側面があります。

TEEの対抗馬としてよく槍玉に上がる技術として「秘密分散」と「準同型暗号」がありますが、これらをTEEと比べてみると、

  • 秘密分散と比べると、必要なマシン数や通信量は少なく、おまけに処理速度も通常速く、全マシンが攻撃者に掌握された際に危殆化するといった事もない

  • 準同型暗号と比べると、CPUベンダに依存しているという観点やサイドチャネル脆弱性等により安全性では劣るが、圧倒的に処理速度が速い

といった具合で、現代の情報技術で実現可能な中では最も効率的にセキュア処理を実現できる技術であるように映ります。

ただ、これも呪いのメインの理由では無いと思っています。
技術に限った話では無いとは思いますが、徹頭徹尾完璧すぎる要素に対して愛着を感じたり、あるいは取り憑かれたりする人ってあまりいないのではないかと思います。(筆者だけでしょうか?)

そう、つまり裏を返せば、上記ではSGXがいかにも優れているかのように書いていますが、実際は全然そんな事が無いから、という事になります。

触ってみて分かるSGXの惨状

ええ、もうそれは酷い有様です。

SGXは、上手く取り扱えた場合は前述のようなTEEのメリットを発揮できますが、それに至るまでと言いますか、SGX自体があまりにもお粗末であり惜しすぎるという欠点を抱えています。

全部列挙していたらNoteが保有(利用)しているストレージを枯渇させてしまいそうなのでしませんが、一例を挙げると、

  • ドライバの導入時点で異常に不親切(筆者がSGXに触れ始めた当時)

  • 一部環境で保護領域のサイズに苛烈な上限がある

  • SGXSDKが極悪

    • これを利用したビルドコマンドはもはや怪文書

    • 提供されているAPIの仕様の気が狂っている

    • 恐ろしいほどにコードが肥大化する(SGXElideという論文の報告では、412行のコードをSGX対応させたら3523行にまで爆発)

    • 無駄に量産されているTypedef

  • 保護領域内では利用できるC/C++関数が著しく制限される

  • EDLという謎のインタフェース定義言語

  • Remote Attestationという遠隔検証プロトコルの実装難易度が極悪

  • サンプルコードがサンプルの意味を為していない

  • 知らないとドハマリする仕様が全く明文化されていない

  • おびただしい量の攻撃の餌食になっている

と、あまりにも残念な要素のオンパレードです。
(この辺りは開発記として個人ブログにも書いていますので、興味があればご覧ください。免責事項として、個人ブログですので表現が極めて汚いです)

こんなもの、専門ではない人間、例えば生命情報解析であれば生物学系の研究者の方が使うでしょうか?私だったら絶対に使いません。

このように、現代社会に生まれた便利な技術の皮を被ったド畜生であるSGXに対して、私は強い怒りを覚えました。

この怒りこそが原動力であり、BI-SGXという形で少しでも利用者の負担を減らそうとしたり、Qiita記事を書くことで不運にもSGXと関わることになった方が取っ掛かりと出来る日本語文献を用意したり、各所でアドバイスやレクチャをしたりする事で、私以外の人間が少しでもSGXに苦しめられずに済むようにとしていました。

同時に、あまりにもポンコツすぎるSGXを見ていると、ある種の憐憫の情のようなものが湧いてきます。

あまりにも仕様がぎこちなく、第11世代以降のCoreシリーズCPUでは廃止にされ、尋常ではない量の攻撃の餌食になっているSGXを見ていると、「あーあーまたやらかしているのか」みたいな「世話焼きの感情」が湧いてきます。

何せちょっと思い浮かべるだけでも、Controlled-Channel Attacks、Foreshadow、LVI、ÆPIC Leak、SGXPectre、Plundervoltといったネームドな攻撃がわらわら出てくるレベルです。ボコボコにされ具合が尋常ではありません。

唐突ですが、GTAオンラインというゲームの一モードである「強盗:ドゥームズ・デイ」のストーリーでは、開発者に似て滅茶苦茶に性格が悪いAI(Cliffford)に対し、開発者であるAvon Hertzが愛着を持っている描写が終盤でされていました。

「少々性格に問題があったが 何にでも向き不向きはある… あいつはすごいヤツだった…」

GTAオンライン「ドゥームズ・デイ・シナリオ」より、Avonのセリフ

SGXを触るとその心理が分かるような気がします。

後はここまで開発上の制約が苛烈ですと、「そもそもこんなんSGX使って実装できるのか?」という根本的な部分のリスクが出てきます。
インタプリタの実装がまさにそうでしたが、1つでも駄目だった場合全部オシマイになる、というハラハラ感から来る、異常な興奮ももしかしたらあったかも知れません。

今考えると大分メサイアコンプレックスじみた側面がありますが、特に「怒りによる原動力」と「世話焼きの感情」は、呪いの強さに大きく寄与していると筆者自身も感じています。

技術的に「謎の魅力」がある

これは今更ながら筆者が異常なマニアである事が露呈してしまう話なのですが、SGXというのは技術的に形容し難い魅力があると思っています。

SGXに限らず、TEEというのは一筋縄に実現できる技術ではありません。
ハードウェア・ソフトウェア双方から、様々な技術や要素が協力しあい、そこで初めて実現される技術です。

ではSGXではどのような技術や要素が動いているのかを見てみると、例えばメモリ暗号化エンジン(MEE)、Architectural Enclave、EPID(DAAの一種)、各種CPU命令(ENCLU、ENCLS)、Edger8r、REPORT構造体、シーリング、MRENCLAVEポリシ、Asynchronous Enclave Exit、Local Attestation…等々、初見ではまずわけがわからんものが大量に出てきます。

こういった(特にセキュリティの分野で)わけわからん要素が大量に詰まっているのを目にした時、筆者は謎の魅力を覚えます。

この部分はどういう機能なのか、こいつらは互いに何をしているのか、この動きを解明できたら他の部分も芋づる式に分かるな、等、極めてマニアックな感情が出てくるのです。

この感情、人生で他にも感じた事がありまして、かつてガキの頃にPSPの脆弱性を突いてCFWを入れ、膨大な追加機能や自作アプリを入れられる状況になった時の感情そのものなのです。

こういった未知の複雑な機構に対するワクワク感、そしてある程度全容を把握してもなお面白いといった魅力を持つ技術は、TEE以外では情報技術の中でもあまり見かけません。

言語処理系なんかは様々な解析器等のユニットで成り立っているので、その観点では微妙に似ているでしょうか。
難しすぎて筆者はインタプリタが限界でしたが、実際に開発していてこれは楽しいと感じました。

さらに言えば、TEEでは当然何らかのプログラムをデータを守りつつ動かしますから、TEEの上で動かす処理の面で見ても、これまた多種多様となります。
それこそBI-SGXのように言語処理系、機械学習、生命情報解析を動かしても良し、SGX-BigMatrixのように大規模行列演算をしても良し、UHD BDのように映像のDRM処理をしても良しと、TEEのニーズを通して自分の知らなかった分野にも足を踏み入れる事が出来ます。(その分野に興味があるかどうかは別)

守りだけではなくSGXへの攻撃に目を向けると、これまた色とりどりです。ページフォールトを悪用する攻撃、投機的実行を悪用する攻撃、DRAMの特定の部位に電荷を異常集中させる攻撃など、よくもまあそんなもの思いつくなという代物ばかりです。
SGXで守る際に使う技術だけではなく、SGXを攻撃する技術に目を向けても勉強になるのは、この分野のおいしい所なのではないか、と思っています。

こんな感じで偏っている人間なので、例えば世の中では話題である機械学習や深層学習などは、正直一ミリも興味がありません。(TEE上で動かせる他分野の例として挙げたのに(笑))
BI-SGXの組み込み関数でそれ系の機能も実装・提供していましたが、それも義務感によるものに過ぎませんでした。

機械学習や特に深層学習も色々な要素が絡み合ってるだろ、という指摘は尤もだと思うのですが、個人的に大嫌いな統計の色が強い事、セキュリティの文脈ではない事などがあるかも知れません。こうしてみると、自分自身でもわからんレベルの厄介な趣味をしているのが分かります。

話が逸れましたが、このTEE(SGX)独特の「謎の魅力」も、呪いに寄与している大きな要素であると筆者は考えています。

最後に

長々と書いてきた通り、特にSGXはあまりにもポンコツなのですが、その謎の魅力には形容し難い中毒性があります。

かつ、現代の情報技術の中では、特に秘密計算利用を考えた場合、上手く取り扱えば爆発的なパフォーマンスを叩き出せるポテンシャルも秘めており、TEEという技術は廃れさせるにはもったいない技術であると感じています。

もちろん、特に本業ではTEEに触れている時間の方が少なく、TEE以外の技術にもかなり触れているのですが、やはりSGXやTEEほどに魅力を感じる技術にはなかなか出会えていない状況です。

TEEという技術が普及し応用されていくに従い、この世の中は間違いなくより良い世界になっていくと確信していますので、これからも筆者は「呪われた身」としてTEEやSGXに取り憑かれていようと考えています。

TEEが駄目になったら、その時はその時で、あんなオーパーツがあったなと懐かしむまでです。

この記事が気に入ったらサポートをしてみませんか?