Azure Attestation
プラットフォームの信頼性(セキュリティ情報)や実行バイナリの整合性をリモートで検証可能にするためのソリューションであり、2021年2月にGAとなった。 このプラットフォームとして、Intel SGX、VBS、TPMが現在対応しているが、ここでは特にIntel SGXのケースについて紹介する。
例えば、Azure Attestaionを活用することにより、AzureのSGX-enabled VMインスタンス(DCsv2)における特定のバイナリがAzure Attestationのセキュリティベースラインに基づいて信頼できるプラットフォーム上で適切に動作していることをリモートで検証することができる。
また、ユースケースに基づいてカスタムポリシーに基づくAttestationを可能にする。
ワークフロー
https://gyazo.com/b7f473509b3a2e339674f1c7d493b11c
大枠のワークフローとしては、以下の通りである。
1. EnclaveからEnclave環境の信頼性に関する"Evidence"(QUOTEを含む)をクライアントが取得する。クライアントとEnclaveは同一マシン上でも問題ない。
2. クライアントはAzure Attestationに"Evidence"を送信
3. Azure Attestationがポリシーにしたがって検証し、成功した場合はAttestationトークンをレスポンス。失敗した場合はエラーをレスポンス。
cipepser.icon このポリシーはAzure Attestationが定めるもので合ってます?(Intel定義でもユーザ定義でもなく)→後述されてた
4. クライアントは証明書利用者にAttestationトークンを送信する。証明書利用者は公開されている証明書を利用し、Attestationトークンの署名を検証し、Enclaveの信頼性を検証する。
上記フローのサンプル実装は以下に公開されている。
Azure Attestationサービスを利用することにより、インターネットに接続することなくIntelから取得する最新のセキュリティベースライン(Intel証明書、CRL、TCBなど)で検証が可能になる。
cipepser.icon private netに閉じれるのよさそう(サービス運営者のポリシー的にインターネット接続はNGだけど、Attestationしたいユーザの需要に応えられる)
Attestationトークン
https://gyazo.com/315f0e963bef44d3b9e1902d737b9d94
https://sharedeus.eus.attest.azure.net/certから証明書を取得
Attestationトークンの有効期間は8時間
DCAP
Intel SGXのAzure Attestationでは、以下で紹介しているDCAPベースのQUOTE生成を利用している。
すでにIntel root CAの証明書チェーンが含まれていることが特徴
https://gyazo.com/2106113b45b6bdf1a3e9a2ffe01cd911
ref: Intel® Software Guard Extensions (Intel® SGX) Data Center Attestation Primitives: ECDSA Quote Library API
https://gyazo.com/3b0b5ce414c8b70b29b3e9b2a8804d1d
Azure Atteststionによる検証事項
署名されたQUOTEのIntelルートCA証明書チェーンで検証
最新バージョンのIntel証明書、CRL、TCB情報に基づくセキュリティベースラインを定義
Enclave Held Data(EHD)のSha256がreportDataの最初の32bytesと一致するか
ユーザーのカスタムポリシー
Attestationポリシー
Azure Attestationに、AttestationポリシーをアップロードすることでカスタマイズしたテナントごとのAttestationを実行することも可能である。このポリシーはテナントが自身の秘密鍵で署名をすることによりポリシー自体が改ざんされていないことをAttestationに含めることが可能である。
データ具体例
Azure Attestationへのリクエストデータ"Evidence"の例(hex系はbase64 encoded)
code:evidence.json
{
"Type": 2, // MAAは常にこれ
"MrEnclaveHex": "66FA35D3AE3F00F8078475009E76B41A31F57BCE4DDDF9CBD628D935A4DD78BD", // optional
"MrSignerHex": "68D0154819AD17AD4EBA30ECA03ED26D0FD71EF96F5704CE30BB488327C5F639", // optional
"ProductIdHex": "01000000000000000000000000000000", // optional
"SecurityVersion": 1, // optional
"Attributes": 7, // optional
"QuoteHex": "03000D.........2D0A00", // 通常のSGX QUOTE
"EnclaveHeldDataHex": "010203040506" // 任意のデータ。このハッシュ値がREPORT DATAの最初の32バイトと一致する必要性。証明書利用者が確かにEnclaveで生成した値であるとAttestationトークンで検証可能。
}
Azure Attestationのエンドポイントは、カスタムポリシーを利用しない場合はリージョンごとの共有プロバイダーを利用可能。(例:https://sharedeus.eus.attest.azure.net)カスタムポリシーを利用する場合は自分で立てる。
Attestation証明書取得エンドポイント
Azure AttestationからレスポンスされるAttestationトークン(JWT形式)の例
code:attestation-token.jwt
{
"alg": "RS256",
"kid": <self signed certificate reference to perform signature verification of attestation token,
"typ": "JWT"
}.{
"aas-ehd": <input enclave held data>,
"exp": 1568187398,
"iat": 1568158598,
"is-debuggable": false,
"maa-attestationcollateral":
{
"qeidcertshash": <SHA256 value of QE Identity issuing certs>,
"qeidcrlhash": <SHA256 value of QE Identity issuing certs CRL list>,
"qeidhash": <SHA256 value of the QE Identity collateral>,
"quotehash": <SHA256 value of the evaluated quote>,
"tcbinfocertshash": <SHA256 value of the TCB Info issuing certs>,
"tcbinfocrlhash": <SHA256 value of the TCB Info issuing certs CRL list>,
"tcbinfohash": <SHA256 value of the TCB Info collateral>
},
"maa-ehd": <input enclave held data>,
"nbf": 1568158598,
"product-id": 4639,
"sgx-mrenclave": <SGX enclave mrenclave value>,
"sgx-mrsigner": <SGX enclave msrigner value>,
"svn": 0,
"tee": "sgx"
"x-ms-attestation-type": "sgx",
"x-ms-policy-hash": <>,
"x-ms-sgx-collateral":
{
"qeidcertshash": <SHA256 value of QE Identity issuing certs>,
"qeidcrlhash": <SHA256 value of QE Identity issuing certs CRL list>,
"qeidhash": <SHA256 value of the QE Identity collateral>,
"quotehash": <SHA256 value of the evaluated quote>,
"tcbinfocertshash": <SHA256 value of the TCB Info issuing certs>,
"tcbinfocrlhash": <SHA256 value of the TCB Info issuing certs CRL list>,
"tcbinfohash": <SHA256 value of the TCB Info collateral>
},
"x-ms-sgx-ehd": <>,
"x-ms-sgx-is-debuggable": true,
"x-ms-sgx-mrenclave": <SGX enclave mrenclave value>,
"x-ms-sgx-mrsigner": <SGX enclave msrigner value>,
"x-ms-sgx-product-id": 1,
"x-ms-sgx-svn": 1,
"x-ms-ver": "1.0"