TEE Fail

3.6K Views

November 18, 25

スライド概要

profile-image

Linuxが好きな情報系学生

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

TEE Fail 2025年12月23日 伊藤 駿 1/67

2.

おことわり 毎度のことですが、TEE関連の説明にあたって専門用語が多すぎる問題があります。 そこで、以下のようにします。 1. 本スライドでは極力専門用語を避けて、わかりやすくしようと試みます 2. 一部の難解な部分の説明を省略します 3. 論文そのものでは説明されていない内容を私が独自に解釈して補足している部分があります 4. 私の過去にゼミで話した内容を前提に説明をしている部分があります わかりやすい参考資料 TEEとそれに対する攻撃に関して網羅的に説明している資料です。 セキュリティキャンプ2025 L3ゼミ 講義資料 https://qliphoth.io/seccamp/ 株式会社Acompany様の技術解説資料 https://www.acompany.tech/privacytechlab/sgx-local-attestation https://www.acompany.tech/privacytechlab/sgx-remote-attestation https://www.acompany.tech/privacytechlab/intel-sgx-dcap-ra 2/67

3.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 事前知識 3/67

4.

用語説明1 - TEE全般の知識 TEE: Trusted Execution Environment AMD SEV-SNP: AMDのCPUに搭載されているVM型TEE技術 Enclave: 飛び地の意。CPU/GPUの中で秘密裏の計算に用いられるメモリ領域 TEEの実態 レポ=と: Enclaveの同一性情報を保持したもの RA: Remote Attestationの略で、構成証明のこと Attester: RAによって検証されるEnclaveを保持している側 RP: Relying Partyの略でAttesterを検証したい主体 Verifier: レポートを検証する主体 Provisioning: 信用チェーンの構築を行うこと及びそのもの Quote: レポートをProvisioningされた鍵で署名したもの マークルツリー: ハッシュを木構造で保持し、再帰的にハッシュをすることで巨大なデータ全体の完全性を保証 するデータ構造 CVM: Confidential Virtual Machineの略でVM型TEEにおけるVMそのものを指す シール/シーリング: Enclave内でデータを暗号化し、untrustedな領域に保存できるようにする仕組み アンシール/アンシーリング: 過去にシールされたデータをEnclave内で復号すること 4/67

5.

用語説明2 - Intel SGX/TDX 固有の知識 Intel SGX: IntelのCPUに搭載されている部分隔離型TEE技術 Intel TDX: IntelのCPUに搭載されているVM型TEE技術 クライアントSGX: Intel 第6~10世代に搭載されていた個人向けのIntel SGX サーバーサイドSGX: Scalable SGXによるXeonプロセッサ向けのIntel SGX AE: Architectural Enclaveの略でSGXの仕組みを実現するためにIntelによって提供されているEnclave QE3: Quoting Enclaveの略でQuoteを生成・署名するAE PCK: Provisioning Certification Keyの略でレポートの署名に使用される鍵 PCE: Provisioning Certification Enclaveの略でQE3 レポートに対して署名するAE コラテラル: Verifierがレポートの検証に用いる情報 EPID: IntelがVerifierとなる古いRAの方式 現在は廃止されている DCAP: EPIDに代わるRA方式 Quoteを自分で定義できたり、Verifierを任意にできたりと柔軟 Leaf関数: アセンブリにおいて、ENCLU命令に対してRAXで数値を指定することで呼び出せる関数 5/67

6.

用語説明3 - ハードウェアの知識 DDR4/DDR5: コンピュータに使用されるRAMの物理的な規格 PCB: 基板のこと L1/L2/L3キャッシュ: CPUの内部に存在しているRAMの値のキャッシュ uncore: CPUの内部のうち、コア以外の部分(MMUやTME-MKエンジン、LLCキャッシュがある) MMU: メモリ管理ユニットの略で、CPUのuncoreに存在するメモリの橋渡しを行うデバイス TPM: Trusted Platform Moduleの略で、秘密鍵の生成や保持、乱数の生成等をCPUと独立して行える vTPM: TPMのソフトウェア実装 ハイパースレッディング: 1つのCPUコア上に論理コアを複数個作成し高速化を図る技術 mTRRs: Memory Type Range Registerでメモリの範囲を指定できる特殊なレジスタ 6/67

7.

用語説明4 - OS/暗号の知識 OS ページ: メモリ管理の単位の1つ 仮想アドレス: OSの世界で利用される、物理的なメモリや他のプロセスを認知しないアドレス 物理アドレス: カーネルランドから観測される物理的な世界に対応付け可能なアドレス 暗号 深く理解できていません。 AES: Advanced Encryption Standardの略で共通鍵暗号の一種 ECDH鍵共有: 楕円曲線ディッフィーヘルマン鍵共有のこと AES-XTS: AES秘密鍵を2つ使う暗号化方式 楕円曲線離散対数問題: 楕円曲線のある点 G とある点Q においてQ = dG を求めるのが難しいという問題 ECDSA:楕円曲線離散対数問題の計算困難性に依存した暗号化方式 参考: https://qiita.com/spc_knakano/items/69b63f084b9bbd2890f2#4-xts 7/67

8.

用語説明5 - ブロックチェーン PoW: Proof of Workの略 PoS: Proof of Stakeの略 スマートコントラクト: ブロックチェーンにおける取引を自動で承認する仕組み 合意形成: 何らかのアルゴリズムで複数のノード全体で合意を取ること トランザクション: ブロックチェーンにおける取引履歴であり、ブロックの中身そのもの SECRET NETWORK: Intel SGXを用いてブロックチェーンを構築したサービス 8/67

9.

サーバーサイドSGXの弱さ クライアントSGX Intel 第6~10世代に搭載されていた個人向けのIntel SGX Intel MEEエンジンによってメモリの完全性(メモリが改竄されていないこと)が保証されていた しかしマークルツリー(メモリ完全性を保証する木構造)の検証には膨大なマシンリソースが必要 →完全性の代償としてEnclave(メモリ)のサイズは96MBまでという厳しい制約 サーバーサイドSGX Xeon プロセッサに搭載されている、データセンターでの秘密計算を目的としたIntel SGX Intel TME-MK (Total Memory Encryption)によってメモリ暗号化が提供されている マークルツリーによる検証がないので1CPUあたり128GBのEnclaveサイズ →Enclaveサイズの代償としてメモリ完全性や再生攻撃に対する耐性無し この広大なメモリ領域を活用して、OSそのものを秘密領域で動作させるのがIntel TDX 9/67

10.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 概要と新規性 10/67

11.

TEE Fail 2025年10月28日に公開された最新のサイドチャネルアタック。今TEE界隈で最もアツい!! CSS中に櫻井さん+横山先輩と「DDR5も時間の問題」と話した次の日に出てきてちょっと笑った。 https://thehackernews.com/2025/10/new-teefail-side-channel-attack.html 新規性 DDR5への攻撃 以下の技術はDDR5上でないと動作しない AMD SEV-SNP Intel TDX NVIDIA H100 Confidential Computing Contribution $1000 未満で実行できる攻撃を提案 完全に信頼された(Remote AttestationにおいてコラテラルのStatusがUp-to-Date)マシンからAttestation秘 密鍵を抽出 抽出したAttestation秘密鍵を用いてTEE外でNVIDIA Confidential Computingを実行 11/67

12.

攻撃 DDR5メモリの中身を覗き見る DDR4 1333への攻撃を拡張 1つのメモリモジュールの中に2つのチャンネル DDR4では136個必要だったロジックアナライザ入力が68個で済む Enclave実行の制御 Intel TDXは8枚のDIMMが必要。一方で、ロジックアナライザでは1枚しか監視できない。 →1. 第5世代 Intel Scalable Xeon上のメモリマッピングをリバースエンジニアリング →2. OSのカーネルを変更し目的のアドレスを監視対象のDIMM上に展開 →3. システムのキャッシングをいい感じに克服することでトランザクションを監視 Attestation Intel SGXのRemote AttestaionにおいてはPCEに依存している PCEに対してトランザクションを監視し、AES-XTS暗号化と組み合わせてPCKを抽出 12/67

13.

サイドチャネルアタック サイドチャネルアタックとは: 物理的な干渉によって秘密情報を盗み出すこと 先行研究1: WireTap https://wiretap.fail/ DDR4上のメモリをロジックアナライザに横流しすることでデータを盗み出す。 先行研究2: Battering RAM WireTapと同様に DDR4 に対する攻撃。Raspberry Piで $50 で作成できる安価なデバイスで攻撃。 WireTap Battering RAM 13/67

14.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 攻撃の準備 14/67

15.

攻撃 脅威モデル TEEの脅威モデルにはシステムの管理者が含まれる サーバー型TEEはデータセンター(物理層のセキュリティをオペレータに依存)に設置される 上記より、データセンターのオペレータはTEEの脅威モデルの範囲内である。 応用 BUILDERNET TDXを用いたブロックチェーンのサービス。悪意のあるオペレータが秘密である設定値を盗み出し、取引におい て利益を出す方法を実証。 Phala NetworkのDSTACKに対して攻撃し、Jupyter NoteBook上のNVIDIA Confidential Computingに対し てTEE無しでRAを偽装 Secret NetworkのOpenSSLのECDH秘密鍵を直接抽出 Intel TDXだけでなくAMD SEV-SNPに対しても同様の攻撃を行う Zen 5に基づいたEPYCプロセッサの持つハイパーバイザからのVM暗号化は物理攻撃に対して無力 15/67

16.

CPUのキャッシュの仕組み ほとんどのプログラムは同じメモリのアドレスに繰り返しアクセスする →これらをCPUパッケージ内でキャッシュする仕組みが存在する CPUパッケージ内であるためこのキャッシュはSGXのTCB内 CPUのメモリキャッシュ CPUの中で、メモリの値はキャッシュされる。遠いほどアクセスは遅くなる。 コアごとに存在する、最も高速なキャッシュ L1 コアごとに存在する、少し遠いキャッシュ L2 システム全体のキャッシュ L3 キャッシュライン 現代的なCPUにおいてキャッシュラインは64byte キャッシュがいっぱいになる→古いものを追い出して新しいキャッシュを挿入する キャッシュが存在しないときのみ、DRAMにコマンドを送信する 16/67

17.

Registered DDR5の仕組み ピンアサイン ピン合計: 288ピン(2チャンネルで動作し、1チャンネルあたり144ピン) データ用ピン: 40ピン/1チャンネル うち8ピンはエラー訂正(ECC) コマンド用ピン: 7ピン/1チャンネル コマンドによって用途が異なる メモリの読み取りの手順 1. 読み取りを行うチャンネルを決定 2. 2サイクル長の行アクティベーションコマンドを発行 17ビットの行アドレス 3ビットのチップID(ランク) CAピン上のバンクグループとアドレス用に5ビット 3. 2サイクル長の読み取りコマンドを送信 チップID バンクグループ およびアドレス、 CAピンにエンコードされた9ビットの列アドレス 4. トランザクションあたり合計64バイトとなる、32データピンの16バーストとしてデータを返す 17/67

18.

脅威モデル 攻撃者 ルートレベルのアクセス権 設定の変更 カスタムカーネル ドライバ ユーザースペースの完全な操作 メモリマッピングの敵対的操作 簡単なはんだ付けを実行できるレベルの物理的なアクセス 電子顕微鏡やPCB回路の編集等の高度な技術は不要 ターゲットマシン MB: Supermicro X13SEI-F CPU: Intel Xeon Silver 4509Y OS: Ubuntu 24.04LTS 最新のSGXSDK及びDCAPライブラリ 18/67

19.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 メモリの監視 19/67

20.

メモリーバストラフィックの監視 わかりやすい概要 1. BIOS設定でバススピードを最小にする 2. DDR5 RDIMMライザーを設置する (DDR5の間にPCBを置いてはんだ付けできるようにするもの) 3. メモリとアナライザを直に接続すると大きな電気的抵抗により起動できない → Keysight SoftTouchを参考に分離回路を作成 4. 中古で安価なN4252A Transition Probe Adaptersを入手。 N4252Aから抵抗とコンデンサを剥ぎ取り、手動ではんだ付け。 5. 電気的に完全に分離された状態でKeysight 90コネクタを設置し、ロジックアナライザとの通信を可能に。 6. Agilent 16962A(ロジックアナライザの型番)の内部コンピュータをLenovo ThinkCentre M920Q MFF i58500Tに改造。 20/67

21.

バストランザクションの監視 1. 行アクティベーション: 行アドレス, バンクアドレス, バンクグループを送信 2. 読み取りコマンドを発行 3. 読み取り遅延の後、完全なデータが観察される 21/67

22.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 Enclaveの制御 22/67

23.

Enclaveメモリと実行の制御 - 物理アドレスの取得 先行研究 マッピング情報の回復には行バッファー競合に依存していた →DDR5ではこのサイドチャネルにおいてノイズが非常に大きい →加えて、複雑なアドレッシングにより誘発が困難 新しいアプローチ 代わりにIntelがLinuxに公開しているアドレスデコードインターフェースを利用。 Intel Memory Address Translation(ADXL)をsysfs経由でユーザーランドに公開。 メモリーコントローラID チャネルID バンクグループとアドレス 行アドレス これらのデータによって物理アドレスを特定可能に。 23/67

24.

物理DIMMの特定 正直、理解できていません。 影響の調査とデータ収集 有効な物理アドレス addr から開始し、Intelのデコードインターフェイス(ADXL)を使ってそのDIMM位 置を取得 アドレス内の特定のビットを反転させ、新しいアドレスごとにDIMM位置をデコードし、結果を記録 「どの入力アドレスビットが、DIMM位置のどの要素に影響するか」というデータセットを作成 線形性のチェック 収集したデータを使用し、ガウス消去法を適用して、マッピング関数が線形(入力ビットのXOR演算で表 せる単純な関係)であるかを判定 非線形関数の特定線形性が確認できなかった場合(関数が複雑な場合)、 影響のある入力アドレスビットのすべての組み合わせをテスト- その出力結果から真理値表を直接作成 この真理値表を最小化 マッピングを支配する非線形な論理関数を特定します。 24/67

25.

物理DIMMの特定 物理アドレスからメモリコントローラを考慮し、物理的な位置を特定する様子 25/67

26.

SGXのメモリページ割当の制御 SGXのEPC(Enclave Page Cache)が監視できるDIMMチャネル上に割り当てられるようにする in-kernel ドライバに対して仮想アドレスと物理アドレスのペアをグローバルに保存 カーネルのメモリ割り当て時に、固定された仮想アドレスでなければ通常のページを返す 固定された仮想アドレスである場合に常に一定の物理アドレスを用いる カーネルレイヤーで仮想アドレスと物理アドレスを確実に紐付けることで、EPCを監視範囲内のDIMMに固定する。 最新のLinuxカーネルのEPC割当のコード https://github.com/torvalds/linux/blob/6a23ae0a96a600d1d12557add110e0bb6e32730c/arch/x86/kernel/cpu/sgx/encl.c#L1158-L1188 26/67

27.

Enclave実行の制御 データ収集と観測を同期できるように、Enclaveを制御する方法を確立する 両者とも非常に複雑なので個別に詳しく説明する。 Enclaveの一時停止 SGXはrootに対してもEnclave内にブレイクポイントを貼ることを許可しない ⇒ Controlled-Channel Attackを仕掛けることでプロダクションモードのEnclaveのフローを制御する。(後述) キャッシュの対処 CPUからRAMへのデータの読み書きは(CPUにとって)低速であり、比較的重い処理である。 そこで、頻繁にアクセスされるメモリの値をCPUの中にキャッシュすることで高速化を図っている。 ところで、Intel SGXの脅威モデルとしてCPUパッケージ内は不可侵領域である → CPUの内部にメモリの値をキャッシュされてしまうと、覗き見ることができない ちょっとしたトリックを使うことでこのキャッシュ機構を事実上無効化 常にCPUがRAMにアクセスすることで確実に秘密情報を盗み見る 27/67

28.

Controlled-Channel Attack サイドチャネルアタックにおいて頻繁に利用される有名な手法。 DDR5の信号を傍受しながらEnclaveの暗号文を確実に取得するためにControlled-Channel Attackを仕掛ける。 注1: Controlled-Channel AttackはTEE Failでは説明されていない 注2: 頻繁に利用されますが、簡単にすぐできる攻撃というわけでもない。 概要 ページフォルト(MMUによる物理アドレス解決の失敗)を悪用することで、Enclaveの中の値や制御機構を擬似的に 観測することを試みる。root権限を奪取しておりソースコードを把握している攻撃者が脅威モデル。 用語説明 入力依存処理: 秘密の値によって処理が分岐する場所 ページフォルト: 仮想アドレスと物理アドレスの対応付が行えない場合に発生する例外 28/67

29.

Controlled-Channel Attack - 理想的な攻撃の手順 入力依存処理とそのアドレスの特定 オフライン環境(秘密情報はないが、手元で動作を確認できる状態)にて 1. 攻撃したい情報とそれに依存した処理を決定する 2. 関連する全メモリページのアクセスを禁止する(ページテーブルエントリの予約ビットを1にする) 3. 発生した例外ハンドラを読んで、入力依存命令のアドレスを確認する ページフォールトの誘発・秘密情報の観測と推定 オンライン環境(実際に盗み出したい秘密を持っているシステム)に対して、先程割り出したアドレスに対して同様に 例外を発生させる。 現実では…… 現実世界ではページフォルト時に例外から取得できるアドレスに大きな制約がある。 この攻撃に関して、詳しくは櫻井さんの以下の解説記事を参照してください。 https://qiita.com/Cliffford/items/f527fd210e3f7866e803#ページフォールトの誘発秘密情報の観測と推定 29/67

30.

Enclave実行の外部からのブレークポイント 当初の目的は「Enclaveの動作を一時停止したい」→そのためにControlled-Channel Attackを使う。 論文の主張 1. Controlled-Channel Attackのオフライン環境にて、対象の命令のアドレスを特定する 2. "トラッカー"がptraceシステムコールを用いてプロセスの読み取り権限と書き込み権限を剥奪 3. 命令を読み取ろうとした瞬間に権限不足によりページフォルトが発生←この時点でEnclaveが一時停止 4. 必要な値をメモリから読み取った後、権限を再設定して処理を再開 わからないこと 読み取り権限と書き込み権限を剥がしただけで例外が投げられるのか? 横山先輩が簡単に実験 →うまくいかず(OSが勝手に権限を付与してしまった?) 30/67

31.

キャッシュの対処 おさらい: メモリの内容をCPU内にキャッシュされてしまうと秘密情報が覗けなくなってしまう! 論文の主張 1. LLCの4倍のサイズのメモリを確保 2. 攻撃プログラムとEPC(Enclave Page Cache)が同じsibling coreで動作することを保証 攻撃プログラムとEPCがキャッシュを共有させる 3. 最初に割り当てた巨大なメモリ空間全てに順次アクセスし続ける →LLCキャッシュよりも大きいサイズをキャッシュする必要があるので、常にDIMMに書き込まれる 疑問 Sibling coreって何? 攻撃プログラムとEPCはどのレイヤーのキャッシュを共有しているの? → これらの疑問に関してTwitter上で櫻井氏と議論 31/67

32.

論文のキャッシュ追い出しの手法に対する仮説 以下の議論は櫻井氏と私による独自の見解であり、論文に記載されているものではありません。 ハイパースレッディングが利用されている? 櫻井氏の言及: https://x.com/dd_cliffford/status/1992488750702797060 櫻井氏の仮説: Sibling coreを使っているのであればハイパースレッディングが有効なのでRAはOKにならないはず 結局Sibling coreとは? https://x.com/dd_cliffford/status/1993728998233530824 CPUのコアを指し、主にサイドチャネルアタックにおいてハイパースレッディングを悪用する際に頻出する単語 TEE Failにおいては、同一の物理コア上でハイパースレッディングにおいて並列する論理コアのことと解釈できる 32/67

33.

論文のキャッシュ追い出しの手法に対する仮説 CPUキャッシュのinclusiveとnon-inclusive inclusive:下位レベルキャッシュは上位レベルキャッシュを必ず保持している non-inclusive: 複雑なアルゴリズムによってinclusiveになる場合とそうでない場合がある https://x.com/Hayao0819/status/1993761614819152104 https://x.com/Hayao0819/status/1993763316494422070 Scalable Xeon 今回の攻撃対象である第3世代Scalable Xeon ProcesserにおいてL3キャッシュはnon-inclusive → 論文の作者たちもこのキャッシュの追い出しについて確実に成功したわけではなく、偶然なのでは? オチ https://x.com/dd_cliffford/status/1994397899791483148 「ハイパースレッドを有効化してRAしてみましたが、まさかのCONFIGURATION_NEEDEDにならず無傷でOK」 → "Sibling core"が物理なのか論理なのかは分からずじまい。 33/67

34.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 Attestationへの攻撃 34/67

35.

Attestationへの攻撃 TMEはブート時に生成されるAES-XTS暗号に依存している。これを突破しAttestation秘密鍵を回復。 さらにこれらをどのように悪用できるかを示し、SGXとTDXのエコシステムを完全に侵害する。 手順 1. TME(Scalable SGXの暗号化エンジン)の決定性の検証 2. 仮想アドレスに対する物理アドレスの影響の検証 3. RAに対して攻撃 4. PCKの抽出 35/67

36.

アドレスの決定性の検証1 TME(Scalable SGXの暗号化エンジン)の決定性の検証 盗み見たメモリの値が、物理アドレスと平文に対する決定的関数であることを検証する。 1. 特定のアドレスへの書き込みと読み取りを繰り返し行うEnclaveを作成 物理アドレスとの対応付が固定された仮想アドレスに対して、以下の手順で読み書きを行う。 1. 0x00を書き込み、読み取りを実行 2. 0xFFを書き込み、読み取りを実行 3. 0x00を再び書き込み、読み取りを実行 2. ロジックアナライザで取得した暗号文が、1と3で一致することを確認する。 36/67

37.

アドレスの決定性の検証2 仮想アドレスに対する物理アドレスの影響の検証 決定性の検証に用いたEnclaveを用意する。以下のパターンで暗号文を比較する。 1. 前回とは違う仮想アドレスに、同じ物理アドレスを割り当てる 2. 前回とは違う仮想アドレスに、前回と違う物理アドレスを割り当てる 3. 前回と同じ仮想アドレスに、前回と同じ物理アドレスを割り当てる 4. 前回と同じ仮想アドレスに、前回と違う物理アドレスを割り当てる この実験の結果、1と3で暗号文が一致した→暗号文には物理アドレスが依存している。 EnclaveのMeasurementの変化の影響 AES-XTS鍵はSGX EnclaveのMeasurementsに一切依存しないことを確認した。 1. 機能を変更せず、コードを改変したEnclaveを作成 2. 同じ物理アドレスを参照するように設定 3. 別の開発者の鍵で署名 4. 元のEnclaveと同じ暗号文が観測された。 37/67

38.

Local Attestation Remote Attestationで通信相手の検証を行う前に、レポートへの署名を行うQE(Quoting Enclave)を信用するため の手続きが必要である。 Local Attestationとは 同じCPU上で動作しているEnclaveが「真に同じ環境で動作しているか」を確認するためのもの。 レポート SGX: Leaf関数 EレポートでMRENCLAVE及びMRSIGNERを含むレポートを生成する。 TDX: Leaf関数 SEAMレポートでMRTDおよびRTMD, TDXモジュール, SEAMレコードのバージョン等の情報を含む レポートを生成する。 検証の仕組み 同じPCで生成されたレポートは一定条件の元で常に同じになる→2つのレポートが完全に同一であればLA成功。 脅威モデル 以前に千田先生にLAの脅威モデルを質問されたが、前述の通りRAの事前準備なので脅威モデルは存在しない。 38/67

39.

Remote Attestation (DCAP) Remote Attestationとは 通信相手が本当にSGXを用いた秘密計算を適切に行っており、脆弱性等がないかを暗号学的に証明するプロセス。 仕組み 1. RPがAttesterにRAのリクエストを送る 2. 前述の通りに生成したレポートをLAで信用したQEに渡してQuoteを生成する。 3. DH鍵交換を行い、暗号通信の経路を確立 4. QuoteをAttsterから受け取る 5. RPがVerifierに検証を依頼する 6. Veryfierの返答(脆弱性情報等が含まれている)をもとに、RPがAttetser信用するかを決定 詳細 以前にゼミで説明した気もするので過去のゼミ資料を見てください。 39/67

40.

RAにおけるQuoteの署名の検証方法 Provisioning Quoteが野良のQEで署名されるのを防ぐために行われる信用チェーンとそれ検証をProvisioningと呼ぶ。 検証を行う実態はPCE(Provisioning Certification Enclave)である。 PCE PCEはLeaf関数 EGETKEYを用いてデバイス固有の鍵 PCK(Provisioning Certification Key)を取得し、レポートに 署名を行うことでQuoteを生成する。 PCKの検証にはPCK Certと呼ばれる信用リストが利用される。PCK Certはなんやかんやあって最終的にIntelの Root証明書で署名される。 “ https://www.acompany.tech/privacytechlab/intel-sgx-dcap-ra 40/67

41.

Attestationへの攻撃 DCAP-RAの手順において、PCEが署名に用いるPCKがSGX/TDXにおいて重要な部分である。 →マシンからPCEからPCKを取り出せればRemote Attestationを完全に侵害できる。 DCAP-RAの署名方式 DCAP-RAの通信はp-256のECDSA楕円曲線暗号を用いる。 Q = dG によって生成された秘密鍵 d に対し、ランダムなnonce k を設定し (x, y) = kG とそれらに続く計算を行 うことで署名を作成する。 このセクションでは論文では暗号のアルゴリズムについて説明されているが、本スライドでは省略する。(私が理解 できてないので……) PCEとIPPCrypto EDCSAの実行に際し、IPPCrypto(Intel Integrated Performance Primitives Cryptography)が利用される。 すべてのテーブルルックアップと点加算は定数時間で実行され、メモリーアクセスパターンを介して情報を漏らさな いという特徴を持つ。 41/67

42.

PCKの抽出 署名作成に用いられたk をメモリの監視により盗み見ることでPCKの復元を試みる。 1. IPPCryptoがスカラー倍点乗算アルゴリズムに使う秘密情報 H の物理アドレスを固定 2. 固定した物理アドレスの値を盗み見て暗号文を監視 3. Controlled-Channel Attackによってループを制御し一時停止(このあたりがよくわからず) 4. 上記を繰り返しH の暗号文を全て取得 5. 事前作成したマッピングを用いて暗号文からスカラーの桁k i を回復 6. 取得した桁をつなぎ合わせてECDSA nonce k を取得 7. 同時に生成さSealingれた公開鍵(r, s)も記録 8. 秘密鍵の導出式s = k −1 (z + r ⋅ d) mod nでdについてとき、PCKを取り出す ​ 所要時間 暗号文マッピングの作成: 2分 PCEの実行+ECDSA署名のトレース: 13分 42/67

43.

SGX/TDXのQuoteの偽装 Provisioningの振り返り PCE(Provisioning Certification Enclave)はPCKを用いてQuoting Enclave 3のAttestation 鍵に署名する。 QEはAttestation 鍵を用いてレポートに署名しQuoteを生成する。 PCKを盗む意味 PCKが手に入った今、任意のQEを用いて自由にAttestation鍵を生成できる → TEEの範囲外で偽物のレポートをもとに自由にQuoteに署名できる 検証 実際に最新のDCAPライブラリでup-to-dateのステータスを得ることに成功。 →完全に信頼されたTDX保護に対する史上初の侵害 43/67

44.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 BUILDERNET 44/67

45.

BUILDERNETとは 概要 Ethereumのブロックビルダーのネットワークで、MEV-Boost市場に貢献するビルダーグループの1つ Ethereumとは 分散型アプリケーションを構築するためのOSSのブロックチェーンプラットフォーム。 スマートコントラクトを実装しており、分散型アプリケーションのための基盤を提供。 暗号通貨ETHの預け入れ者がPoW(Proof of Work)の代わりにPoS(Proof of Stake)として生成の検証者として整合 性を維持している。 MEV-boostとは Flashbot / MEV-boostの概要と課題、これからについて 普及率 Ethereumブロックの90%以上を構築 2024年11月から運用されており、2025年5月には約200万ドル相当のMEVを持つブロックを構築 45/67

46.

BUILDERNETのセキュリティ保証 正しいソフトウェアの実行保証 分散システムにおいて全てのオペレータが正しいビルダーソフトウェアを実行していることをTEEで保証 ビルダーサービスとの通信にはAttestationで確立したTLSを利用 →トランザクションデータと設定値を秘匿し、トランザクション全体の機密性を維持 →フロントラン攻撃の回避 フロントラン攻撃とは 悪意のある当事者が保留中のトランザクションの知識を得て、より高い手数料で新しいトランザクションを構築 し、自分たちのトランザクションが最初に実行されるようにすること。 信頼できる当事者とのみ共有されるプライベートプールにトランザクションを送信することでフロントランを回避 できる。 46/67

47.

BUILDERNETのアーキテクチャ BuilderHubサービス 中央に位置し、ノードの統括を行う。各ノードへの鍵情報と設定の共有に関しての責務を負っている。 BUILDERNETノード TDX内でブロックビルダー, トランザクションプール, Ethereumクライアント等のサービスを稼働させる。 これらはAttestationとTLSによって保護され、カスタムプロキシによってTDXとの通信がラップされている。 47/67

48.

BUILDERNETのAttestation 論文時点でAzureが提供するTDX Attestationのみをサポートしている vTPMとTDXの2つのQuoteを用いる。TDX Quoteは後述するvTPMのProvisioningのために利用される。 vTPM TPM(Trusted Platform Module)をソフトウェア的に実装したもの。 独自にAttestation鍵を保持しており、独自のQuoteを生成する。 Azureを用いたTDXのRemote Attestation TDXもvTPMも少ししか調査しておらず、この部分よくわかってないです。 1. VMインスタンスに関する複数の情報と組み合わさり、ランタイムデータを生成 2. 作成したランタイムデータのハッシュを用いてTDX Quoteを生成 3. レポートとTPMのMeasurementをTPMのAttestation鍵で署名 4. ランタイムデータ、署名されたMeasurement、イベントログが組み合わさりTPM Quoteとなる 48/67

49.

秘匿されたトランザクションへの攻撃 偽造したQuoteを用いてBUILDERNETのセキュリティ認証を突破し、好き放題する。 セットアップ 1. 正当なBUILDERNETインスタンス v0.2.1を構築(正式なTEE Measurementのみ許可されている) 2. TDXをサポートしていないマシンで偽物のリバースプロキシを構築 3. ブロックを受信するローカルトランザクションプロキシとビルダーをTDXの外に構築 Attestationの偽造 1. Azure vTPMと通信するコンポーネントを独自のRSA鍵ペアを構築するだけのものと入れ替える 49/67

50.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 TDXとGPU 50/67

51.

DSTACKへの攻撃の概要 概要 TDX上で動作し、コンテナを複数のTEE上に展開できるDSTACK SDK上に構築されたアプリケーションに対して攻 撃を行う。 Intel TDX上にホストされているCVMにデプロイするAPIを提供 分散型ネットワークの一種であることを示唆 「攻撃者の支配下にあるDSTACKノード上にデプロイされる」or「完全に不正なDSTACKクラウドにデプロイさ れる」危険性 TEEの外でDSTACK API呼び出しと同等の返答を模倣し、TEEによる保護をバイパスする。 シナリオ 改竄されたDSTACK Python SDKでJupyter NoteBookがTEE上で実行されていると信じ込ませる NoteBookの内容をプレーンテキストで表示Impact of Cache Coherence on the Performance of SharedMemory based MPI Primitives: A Case Study for Broadcast on Intel Xeon Scalable Processors NVIDIA Confidential Computing(CC) Attestationを偽装し、CCの保証を破壊 TEEの外でインスタンスを起動 51/67

52.

DSTACKへの攻撃 セットアップ 1. 正当なDSTACKインスタンスをTDXで初期化し、これらの正式なMeasurement値とハッシュを記録 2. TDXの外で、偽物のAttestationを行う悪意あるDSTACKインスタンスを作成 3. 偽造したAttestationを行うように変更しTDXの保護を完全に排除 Attestationの偽造 1. DSTACKが起動時にファイルシステムのハッシュやAttestation等の一連の処理をログに記録する 2. これらのRTMRと以前のMeasurement値を用いて偽物のQuoteを生成 3. Attestation実行時には悪意あるAPIが偽物のQuoteを返却し、RAを偽造 52/67

53.

非機密VMの構築 Phala Networkのような分散型コンピューティングを提供するサービスで動作するJupyter Notebookを提供する プロバイダに注目。 CVM内で動作するJupyter Notebookでは内部のPythonランタイムがTDXのAttestationを行っている。 攻撃 1. DSTACKと同様に悪意のあるAPIを作成 このAPIは環境に依存せず常に有効な偽造されたTDX Quoteを返答する 2. DSTACKのPython SDKが上記のAPIを呼び出し偽造されたQuoteを取得 3. ユーザーからのAttestationで偽造されたQuoteを返却することでTDXの外部にもかかわらずCVMを偽造 Jupyter NotebookをCVMの外で実行成功! 53/67

54.

事前知識 概要と新規性 攻撃の準備 メモリの監視 Enclaveの制御 Attestationへの攻撃 BUILDERNET TDXとGPU 直接攻撃 直接攻撃 54/67

55.

エンクレーブからの秘密の直接抽出 SECRET NETWORKの概要 2020年という最初期にIntel SGXによるスマートコントラクトを実装したTEEベースのブロックチェーン。 スマートコントラクトをEnclave内で実行することでプライバシーの保護を行おうとした。 Intel SGXに対する攻撃の論文で頻繁に攻撃対象にされることでおなじみ。 SECET NETWORKの概要 コンセンサスレイヤー Enclaveの外に存在し、トランザクションの順位付けや合意形成等を行う Intel SGX上に構築されたスマートコントラクト実行レイヤー SECRET NETWORKはSealされた秘密鍵を全員に配布している 1. ユーザーがマスター公開鍵(全てのユーザーが共有している)からトランザクション固有の暗号化鍵を導出 2. 導出した鍵でトランザクションを暗号化(これを複合するにはコンセンサスシードから導出された秘密鍵が必要) 3. 配布されている秘密鍵をアンシールしコンセンサスを復号する 鍵が危殆化した場合には鍵のローテーションが行われる。 55/67

56.

SECET NETWORKのRemote Attestation ValidatorはEnclave内でトランザクションを復号し、次の合意形成を行う。 新しいノードは以下の手順でRAを行った後、分散型ネットワークの一部に参加する。 SECRET NETWORKでは以下のような立場になる。 新しいValidator Node: Attester(レポートを作成し検証される側) 既存のValidator Node: Relying Party兼Verifier 1. Curve 25519によるECDH鍵共有のための鍵ペアを生成する Diffie-Hellman鍵交換を行い、RPとAttesterで共有された秘密情報を生成する この共有秘密にはAttester側のノード公開鍵が含まれており、マスター鍵の暗号化/復号化に使用される 2. Attesterがレポートを生成しブロックチェーンにブロードキャスト 3. 既存のノードがVerifierとしてブロードキャストされたレポートを検証 問題がなければコンセンサスシードをアンシールし、1の共有秘密で再度暗号化しAttesterに送信 4. Attesterは1の共有秘密で暗号化されたコンセンサスシードを復号 56/67

57.

直接攻撃の概要 前述の偽造されたレポートでも十分に攻撃可能だが、何故か筆者たちはそれを利用せずSECRET NETWORKの Enclaveに直接攻撃してビットを盗み出した。 ECDH鍵共有の中のスカラーの乗算にてモンゴメリラダー法を用いる。この乗算の途中の値をメモリから抜き出すこ とで攻撃対象Enclaveから最初の共有秘密を抽出する。 モンゴメリラダー法: 同じ値を繰り返し計算に用いることで高速で計算しながらサイドチャネル攻撃への耐性をもた せたもの let mut bits = scalar.bits_le().rev(); let mut prev_bit = bits.next().unwrap() for cur_bit in bits { let choice = prev_bit ˆ cur_bit; conditional_swap(x0, x1, choice);differential_add_and_double(x0, x1, aff_u); prev_bit = cur_bit; } 57/67

58.

結果 結果 約90分かけてループ中のx0変数の値を取得した。 秘密鍵の復元 このx0は前回のループの値に依存しており、暗号鍵の最初の1bitと最後の3bitは不明のまま → 全パターン 2 4 = 16 通りの鍵を作成し、どれが正しいのか全探索した。 コンセンサスシードの復元 ここまでで復元したのはノードの参加時に最初にECDH鍵共有で共有された鍵である。 この公開鍵をSECRET NETWORKのブロックチェーンにブロードキャストし、コンセンサスシードを受け取る SECRET NETWORKのコンセプトはトランザクションのプライバシーを保護することであるが、それらは全てコン センサスシードで暗号化されている。 → コンセンサスシードをEnclaveの外で手に入れた今、任意の暗号文を復号できる 58/67

59.

AMD SEV-SNP上の機密なVMの攻撃 AMD SEV-SNP AMD SEV-SNPはAMDが提供するVM型TEE。 2016年に第一世代VM型TEEが登場し、幾つかの問題の修正と改善を経た後に2020年にAMD SEV-SNPとなった。 以下の機能を提供する。 メモリの機密性 AMD SME AMD SEV-SNPではAMD SME(Secure Memory Encryption)エンジンがメモリ暗号化に利用される。 AMD SMEがIntelのものと同様に暗号文が決定的であることを同様の方法で検証した。 59/67

60.

AMD SEV-SNPの制御 ターゲットマシン Attestationで完全に有効な以下のマシンを使用。 ASRockRack BERGAMOD8-2L2T AMD EPYC 9015 DDR5-4800 16GB 1枚 Enclaveメモリと制御 Intel SGX/TDXと異なり複数のメモリを刺す必要がない→ページ制御は不要 AMD SEV-SNPはmTRRsを介してCPUでのキャッシングを無効化できる 暗号文の奪取 CVMで動作するUbuntu内のOpenSSLでEDCSA署名を行う簡易的なアプリを作成。 →このアプリのメモリをビット単位で検察して署名鍵を復号 60/67

61.

この攻撃への対策 決定論的暗号化の回避 Intel MEEで採用されていた非決定的な暗号化をやめてしまったことが攻撃の要因の1つ。 Intel MEEによるマークルツリーを用いたメモリの保護は非常に強力である一方でEPC(Enclave Page Cache)を 512MBに制限してしまう。 Intelはメモリ暗号化エンジンを更新するマイクロコードは作成できないとしているので、この攻撃は当分の間有効 である。 メモリバス速度 UEFIでメモリの動作クロックを3200MT/sに低下させられるのは攻撃を容易にさせる。 Enclaveの起動許可 Enclaveを誰でも起動できてしまうことで物理的な介入を容易にしている。信頼されたクラウド事業者に限定するこ とで物理アクセスの難易度を上昇させることができる。 61/67

62.

後日談 https://x.com/dd_cliffford/status/1989370017625047495 解説 “ “ TEE.fail論文で抽出された鍵で偽造RAを生成するbotが作られたのを受けて、念の為当該鍵を PCK CRLで失効させるという通知がIntelから来た これは流石のIntelもちょっと怒ってそう(憶測) AttestationでVerifierが用いるコラテラルが更新され、TEE Failの論文で漏洩したPCK Certが無効化された。 一方で、CPU全体が危殆化したわけではない。 IntelがPCK Certの無効化をアナウンスするのは異例の事態らしく、界隈がざわついていた。 62/67

63.

参考論文 TEE.fail: Breaking Trusted Execution Environments via DDR5 Memory Bus Interposition Battering RAM SGX.Fail Intel SGX Explained Controlled-Channel Attacks: Deterministic Side Channels for Untrusted Operating Systems | IEEE Conference Publication | IEEE Xplore 128 コア CPU エミュレータによる共有キャッシュの挙動について Impact of Cache Coherence on the Performance of Shared-Memory based MPI Primitives: A Case Study for Broadcast on Intel Xeon Scalable Processors 63/67

64.

参考ウェブサイト 【SRE】メモリ全然わからん #OS - Qiita 決定論的署名(Deterministic signature) #crypto - Qiita Flashbot / MEV-boostの概要と課題、これからについて CPUキャッシュ完全ガイド:L1/L2/L3の仕組み・コヒーレンシーと実践的最適化テクニック - EverPlay(エバ ープレイ) RFC 9334 - Remote ATtestation procedureS (RATS) Architecture interface.cqpub.co.jp/wp-content/uploads/if2404_112.pdf 64/67

65.

参考資料(by 櫻井さん) Intel SGX - Controlled-Channel Attacks解説 #tee - Qiita セキュリティキャンプ講義資料 – Cliffford Terminal – aos' website 主に2025年版を参考にしています 【技術】Intel SGX Attestation詳説 - Local Attestation編 【技術】Intel SGX Attestation詳説 - EPID Remote Attestation編 【技術】Intel SGX - DCAP-RA解体新書 65/67

66.

参考ツイート1 “ “ “ 本スライドの制作にあたり、本人のツイートの転載の許可を得ています。 https://x.com/dd_cliffford/status/1989370017625047495 TEE.fail論文で抽出された鍵で偽造RAを生成するbotが作られたのを受けて、念の為当該鍵を “ PCK CRLで失効させるという通知がIntelから来た これは流石のIntelもちょっと怒ってそう(憶測) https://x.com/dd_cliffford/status/1989370469670433271 しかしもし旧MEEが失われた(つまり物理攻撃が通用する)Xeon-SPでもEPID-RAが続いていた “ ら可用性の意味で結構ヤバかったかもな 何せEPID-RAのSigRL失効は滅茶苦茶処理コストが高いとSGX.Fail にも書いてあったので https://x.com/dd_cliffford/status/1992488750702797060 TEE.fail、メインメモリとの読み書きを強制するためのキャッシュ追い出しを同居プログラム経 “ 由で適用するためにハイパースレッドを使っているように見える(Sibling Coreと記述がある) んだが、もしこれが本当なら「RAステータスがOKの状況で攻撃成功!」ってのはおかしいな 66/67

67.

参考ツイート2 “ “ “ https://x.com/dd_cliffford/status/1993728998233530824 まずSibling Coreという表現が圧倒的に論理コアに使われる事、そして別プロセスを同一物理コ “ アで動かしたら「Sibling」という表現が使われない事を考えるとやはり不自然、と考えたので すが、上位キャッシュ(例:L1)にあるデータは必ず下位キャッシュ(例:L2・L3)にも存在 する必要があるという(続 https://x.com/dd_cliffford/status/1993729062477689079 仕様が存在するのを思い出しました。これなら、別物理コアでL3を汚染すれば標的物理コアの “ L1・L2も汚染データで染まる気がします。 ただ、例えば以下の論文ではGen4/5 Xeon-SPではそれに当てはまらないとあり(noninclusive L3)、直感的にどうやってるのかはかなり謎です。 https://fabianrauscher.com/papers/demote.pdf https://x.com/dd_cliffford/status/1994397899791483148 手元でTDXベアメタルを触れる機会があったのでハイパースレッドを有効化してRAしてみました “ が、まさかのCONFIGURATION_NEEDEDにならず無傷でOKでした。こうなるとSibling Logical Core説もまた出てきてしまいますが、真相は著者に聞かないと分からんですね。 67/67