719 Views
August 14, 25
スライド概要
の SGX out-of-tree ドライバを移植した話 1
$ whoami 名前: 山田ハヤオ 大学: 群馬大学情報学部 千田研究室3年 専門: TEE 趣味: ロードバイク, CTF, ArchLinux, シェルスクリプト, ジャンクPC, PC-98集め 技術: Next.js, Go, Bash, PHP, Rust, C++ 2
と TEE Intel SGX の概要 TEE(Trusted Execution Environment) とは 専用のハードウェアによって秘密計算を行えるようにする技術でPETsの1つ。 準同型暗号や秘密分散は速度や運用において発展途上→最も実用的な秘密計算の手法。 速い CPUベンダーを信用しないといけない 主な脅威モデルはOSカーネル/UEFI/マザーボード/メモリ/システム管理者 https://qliphoth.io/media/2024-1-what-is-tee.pdf Intel SGX とは Intelの一部のCPUに搭載されているTEEの実装の1つで、最もメジャーで広く研究されている。 2025 L3ゼミ「TEEスクラップ&ビルドゼミ」ではIntel SGXでアプリを構築し破壊する。 3
大まかな仕組み CPU とメモリ SGXを扱うための専用の命令( ENCLS , ENCLU ) Enclaveと呼ばれる秘密計算領域をRAM上に確保して計算を行う https://qliphoth.io/media/2024-2-intel-sgx-basics.pdf OS SGXの機能とプロセスの通信をカーネルランドに実装し、橋渡しを行うのがSGX Driver In-kernel Driver 最新の機能(DCAP/FLC)にのみ対応し、最近のXeonでしか使えない https://github.com/torvalds/linux/tree/2b38afce25c4e1b8f943ff4f0a2b51d6c40f2ed2/arch/x8 6/kernel/cpu/sgx Out-of-tree Driver 古い機能(EPID/LE)しか対応していないCPU(6th~10th)用のドライバ https://github.com/intel/linux-sgx-driver Xeonは 高い!! 古いCPU(Intel 第6世代 i5)でもSGXを使いたい!! 4
out-of-tree ドライバを現代のマシンでコンパイルする 5
コンパイルエラーの中身 一旦公式に出されているPRを全てマージしてエラーが変化しないか確認してみる。 6
手修正 1. wrmsr_safe の関数名変更 sgx_main.c:189:13: エラー: implicit declaration of function ‘wrmsrl_safe’; did you mean ‘wrmsr_safe’? [-Wimplicit-function-declaration] 189 | if (wrmsrl_safe(MSR_IA32_SGXLEPUBKEYHASH0, 0xa6053e051270b7acULL) || | ^~~~~~~~~~~ wrmsr_safe はMSRへ値の書き込みを行うための関数。 wrmsrl_safe が wrmsrq_safe にリネームされたらしい。 https://patchew.org/linux/174457057849.31282.1557821601937809402.tip-bot2@tip-bot2/ 2. get_unmapped_area の廃止 sgx_main.c:145:27: エラー: ‘struct mm_struct’ は ‘get_unmapped_area’ という名前のメンバを持っていません 145 | addr = current->mm->get_unmapped_area(file, addr, 2 * len, pgoff, | ^~ ユーザー空間へメモリ割り当てをカーネルが行う際に、空いてるアドレスを返す関数。 かつては mm_struct (プロセスが1つ持ってるメモリ構造の情報)の中で定義されていた関数だったが、グ ローバルの mm_get_unmapped_area に変更になった。 7
その他の変更 DKMSに対応した Dynamic Kernel Module Supportの略称。カーネルの外にあるドライバについて、カーネルが更 新されたタイミングで自動で更新を行ってくれる便利なシステム。 Clang Formatを導入した。 ソースコードを見た感じ一定のルールで整形されているようには見えなかったが、Intel社内でな にかルールがあるわけではないのか? 成果物 https://github.com/hayao0819/linux-sgx-driver 8
現状 /dev/isgx と /dev/mei0 が作成され、無事にLinux 6.15で正常に起動できた。 しかしEnclaveの起動はできず。Launch Enclave周りで問題が起きているのではないか。 9
終わりに L3講師の櫻井さんに協力して頂いております。Enclave起動まで頑張っていきます。 参考文献 TEEの概要とSGXについて https://www.docswell.com/s/hayao/59VPEY-sgx セキュリティキャンプ L3ゼミ講義資料(2024&2025) https://qliphoth.io/seccamp/ https://patchew.org/linux/174457057849.31282.1557821601937809402.tip-bot2@tip-bot2/ https://www.kernel.org/doc/html/v6.16/arch/x86/sgx.html https://www.kernel.org/doc/html/v6.16/core-api/mm-api.html 10