週末、ここ数か月で最も注目すべき更新のひとつが Linux 6.19 ブランチに取り込まれました。カーネルが、PCI Express リンクを暗号化し、接続デバイスを認証するための基盤的なインフラストラクチャを獲得したのです。複数のベンダーが同時並行でこの取り組みに参加しており、新コードの最初の実利用者は AMD のセキュア I/O 技術である SEV-TIO で、現在アップストリームへの取り込みが始まったところです。
PCI サブシステムの更新に関するプルリクエストは、Intel の Dan Williams によって提出されました。彼は、PCIe リンク暗号化とデバイス認証のための統一カーネルフレームワークを導入しました。これは、さまざまなメーカーによる実装がその上に構築できる土台となるものです。すでに最初の実装として、AMD SEV-TIO Trusted I/O のサポートが含まれています。Intel TDX や ARM CCA を含む追加のソリューションは、依存関係が解決され次第、おおよそバージョン 6.20 から 7.0 の間の将来のカーネルリリースで登場すると見込まれています。
PCIe リンク暗号化は、印象的だが覚えにくい略語を持つ一連の技術群に依存しています。その中心にあるのが IDE(Integrity and Data Encryption)プロトコルで、リンクの両端にある送信側と受信側それぞれで鍵を確立する役割を担います。IDE の制御トラフィックは、PCI コンフィギュレーションリクエストを用いて DOE(Data Object Exchange)メールボックス経由でやり取りされます。舞台裏では、これらすべてが信頼実行環境内で動作するセキュリティマネージャ、すなわち TEE Security Manager(TSM)によってオーケストレーションされています。これは、AMD SEV-TIO のように専用コプロセッサ上で動作するファームウェアという形を取る場合もあれば、Intel TDX や ARM CCA のように、セキュアなプロセッサモードで実行される専用ソフトウェアコンポーネントという形を取る場合もあります。
重要なポイントは、リンク暗号化用の鍵は Linux ドライバーではなく、TSM 自身によってインストールされるという点です。この設計により、機密性を備えた仮想マシンがマネージャに直接問い合わせることが可能になります。たとえば、特定のデバイスが認証可能かどうかを尋ねるといった具合です。ホストシステムは VM の信頼境界の外側にあるため、鍵をすり替えることができてはなりません。さらに問題を複雑にしているのは、ほとんどのアーキテクチャには、OS が PCIe ルートポートに鍵を設定するための標準的なメカニズムが存在しないという事実です。その結果として、TSM によってインストールされるリンク暗号化に依存することが、現時点ではアーキテクチャをまたいだサポートを実現する唯一の現実的なアプローチとなっています。
このプルリクエストの受け入れにより、次の開発フェーズが解き放たれました。次の段階では、機密デバイスを仮想マシンに割り当てるための、完全なエンドツーエンドのワークフローを実装することになります。PCIe 仕様では、この統合は TEE Device Interface Security Protocol(TDISP)という別個のプロトコルによって定義されています。現時点では、Linux はメモリ暗号化と精神的に類似した価値あるリンク暗号化フレームワークを獲得した段階です。カーネルは証明書を用いてデバイスを認証し、暗号化されていない PCIe データを傍受しようとする中間の「スニッフィング」ボードを用いた攻撃からトラフィックを保護できるようになります。
このカーネル変更は、AMD SEV-TIO のアップストリーム化における第一段階に過ぎません。このステップだけで、およそ 4,000 行の新しいコードが追加され、TEE Security Manager を取り巻く新しい sysfs インターフェースに関するドキュメントも導入されました。PCIe デバイス(ネットワークカード、アクセラレータ、ストレージシステムなど)を保護するための本格的な SEV-TIO サポートは、すでに最新の AMD EPYC 9005 Turin プラットフォームで利用可能であり、今後の Linux リリースとともに進化を続けていく予定です。
翻訳元: https://meterpreter.org/linux-6-19-kernel-gains-foundational-pcie-link-encryption-for-amd-sev-tio/