第三世代AMD EPYC CPUを用いたAzure Confidential Computing VMが発表
AMD EPYC™ 7003シリーズが2021年3月15日に発売開始され、同日にEPYC7003シリーズで備わるSEV-SNPを用いたConfidential Computing VMのプライベートプレビューがAzureから発表された。
AzureのConfidential Computing VMでは以前からDCsv2シリーズでIntel SGXを用いたハードウェアレベルの秘匿性と完全性が提供されていたが、SEV上ではプラットフォーム向けにアプリケーションコードを修正する必要がなくなるのが大きなメリットだ。
Intel SGXはプロセスベースのTEEであり、SGX向けにアプリケーションコードの修正が多く必要であった(一方、libosなどを用いてコード修正が必要ないSDKの開発も活発に進められている)のに対し、AMD SEVはVMベースのTEEであるためコードを修正せずにそのまま動かすことが可能である。一方、信頼すべきコードは増える。
nrryuya.icon > 秘匿化されたVMとのやりとりはどんなイメージなのだろう
SEV-SNPについて
SEV
個々のVMに一意のAES暗号化キーが割り当てられ、自動的にメモリデータを暗号化することで、ハイパーバイザなどが該当メモリを読もうとしても暗号文のみにしかアクセスできない
cipepser.icon このAES暗号化キーはどこに保存されるんです?
→後述のAMD-SP
SEV-SE (2017)
VMが使うCPUレジスタの状態を暗号化しハイパーバイザが状態遷移を認識できないように追加保護
SEV-SNP
メモリ整合性攻撃対策 (Memory Integrity Protection)の追加
ハイパーバイザ等が暗号化されたメモリ領域へRead/Writeをすることは可能であったので、VMが解釈不可能な任意の値に書き換えたり、以前にキャプチャした暗号文を配置するリプレイ攻撃などが可能であった。
cipepser.icon fmfm。VMに割当られたメモリ領域にハイパーバイザはDirect Memory Accessできるんですね。権限attributesを追加して、VM以外はDMAできないようにするみたいな保護なんですかね?
→DMAというより、暗号化されたメモリのR/Wができてしまう。アクセスコントロールはC bitで行う。
他にも様々なセキュリティ機能が強化された。例えば、従来はVM launch時のみにしかAttestationはできなかったが、起動後任意のタイミングで可能になった。
SEV-SNPにおけるRemote Attestationについて
https://gyazo.com/16a8e4f2e0408b25cd80b0ee59e4df13
AMD Secure Processor (AMD-SP)はtrusted componentのfirmwareであり、attestation reportやsealingなどに用いることが可能な派生鍵(Guest Keys)をVMからリクエストすることができる。
Attestation Reportには、MEASUREMENT値やVM側が指定する64bytesの任意のデータフィールドなどが含められ、Versioned Chip Endorsement Key (VCEK) により署名される。
VCEKはそれぞれのAMDチップと特定のTCBバージョンに固有のECDSA秘密鍵である。
nrryuya.icon > ファームウェアのアップデートで変わる
Remote Partyはguest owner等想定で署名検証により正当なSEV-SNP enableなVM/measurementであることを検証可能。
https://gyazo.com/d058f9c2ec87da3df300507aba028295
cipepser.icon REPORT_DATAは511 bits使えるってことですかね?0始まりで、512 bits = 64 bytes?(上に書いてあったmm)
References
memo
The firmware stores the keys used to sign the identity block in the guest context. Attestation
reports for the guest contain the public keys to reflect the binding of the guest to the guest owner. A guest owner that sees its public keys in the attestation report knows that the launch process used an identity block provided by that guest owner to validate the guest.