Anspruchsätze
Ansprüche, die während der Nachweisgenerierung für Enclaves mit Microsoft Azure Attestation generiert werden, können in diese Kategorien unterteilt werden:
- Eingehende Ansprüche: Die Ansprüche, die von Microsoft Azure Attestation generiert werden, nachdem der Nachweisbeweis analysiert wurde. Die Ansprüche können von Richtlinienerstellern verwendet werden, um Autorisierungsregeln in einer benutzerdefinierten Richtlinie zu definieren.
- Ausgehende Ansprüche: Von Azure Attestation generierte und im Nachweistoken enthaltene Ansprüche.
- Eigenschaftsansprüche: Ansprüche, die von Azure Attestation als Ausgabe erstellt werden. Dies enthält alle Ansprüche, die Eigenschaften des Nachweistokens darstellen, wie z. B. die Codierung des Berichts, die Gültigkeitsdauer des Berichts usw.
Eingehende Ansprüche
SGX-Nachweis
Ansprüche, die von Richtlinienerstellern verwendet werden, um Autorisierungsregeln in einer SGX-Nachweisrichtlinie zu definieren:
x-ms-sgx-is-debuggable: Ein boolescher Wert, der angibt, ob Debugging für die Enclave aktiviert ist.
SGX-Enclaves können mit deaktiviertem oder aktiviertem Debuggen geladen werden. Wenn das Flag in der Enclave auf „true“ festgelegt ist, werden Debugfeatures für den Enclave-Code aktiviert, einschließlich der Möglichkeit, auf den Speicher der Enklave zuzugreifen. Daher sollte das Flag nur zu Entwicklungszwecken auf „true“ festgelegt werden. Wenn diese Option in der Produktionsumgebung aktiviert ist, werden die SGX-Sicherheitsgarantien nicht beibehalten.
Azure Attestation-Benutzer können mithilfe der Nachweisrichtlinie überprüfen, ob das Debuggen für die SGX-Enclave deaktiviert ist. Sobald die Richtlinienregel hinzugefügt wurde, schlägt die Überprüfung fehl, wenn ein böswilliger Benutzer die Debugging-Unterstützung aktiviert, um Zugriff auf den Enclave-Inhalt zu erhalten.
x-ms-sgx-product-id: Ein ganzzahliger Wert, der die Produkt-ID der SGX-Enclave angibt.
Vom Enclave-Autor wird jeder Enclave eine Produkt-ID zugewiesen. Die Produkt-ID ermöglicht es dem Enclave-Autor, Enclaves zu segmentieren, die mit dem gleichen MRSIGNER-Wert signiert wurden. Durch Hinzufügen einer Validierungsregel zur Nachweisrichtlinie können Kunden überprüfen, ob sie die beabsichtigten Enclaves verwenden. Beim Nachweis tritt ein Fehler auf, wenn die Produkt-ID der Enclave nicht dem vom Enclave-Autor veröffentlichten Wert entspricht.
x-ms-sgx-mrsigner: Ein Zeichenfolgenwert, der den Autor der SGX-Enclave identifiziert.
MRSIGNER ist der Hash des öffentlichen Schlüssels des Enclave-Autors, der dem privaten Schlüssel zugeordnet ist, der zum Signieren der Binärdatei der Enclave verwendet wird. Durch die Überprüfung des MRSIGNER-Werts über eine Nachweisrichtlinie können Kunden prüfen, ob innerhalb einer Enclave vertrauenswürdige Binärdateien ausgeführt werden. Wenn der Richtlinienanspruch nicht dem MRSIGNER-Wert des Enclave-Autors entspricht, deutet dies darauf hin, dass die Binärdatei der Enclave nicht von einer vertrauenswürdigen Quelle signiert wurde, und bei dem Nachweis tritt ein Fehler auf.
Wenn ein Enclave-Autor MRSIGNER aus Sicherheitsgründen rotieren möchte, muss die Azure Attestation-Richtlinie aktualisiert werden, um die neuen und alten MRSIGNER-Werte zu unterstützen, bevor die Binärdateien aktualisiert werden. Andernfalls tritt bei Autorisierungsprüfungen und somit bei Nachweisen ein Fehler auf.
Die Nachweisrichtlinie muss im folgenden Format aktualisiert werden.
Vor der Schlüsselrotation
version= 1.0; authorizationrules { [ type=="x-ms-sgx-is-debuggable", value==false]&& [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); };
Während der Schlüsselrotation
version= 1.0; authorizationrules { [ type=="x-ms-sgx-is-debuggable", value==false]&& [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); [ type=="x-ms-sgx-is-debuggable", value==false ]&& [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); };
Nach der Schlüsselrotation
version= 1.0; authorizationrules { [ type=="x-ms-sgx-is-debuggable", value==false]&& [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); };
x-ms-sgx-mrenclave: Ein Zeichenfolgenwert, der den Code und die Daten identifiziert, die in den Enclave-Arbeitsspeicher geladen wurden.
MRENCLAVE ist eine der Enclave-Messungen, die zum Überprüfen der Enclave-Binärdateien verwendet werden können. Hierbei handelt es sich um den Hash des Codes, der innerhalb der Enclave ausgeführt wird. Die Messung ändert sich mit jeder Änderung am Binärcode der Enclave. Durch die Überprüfung des MRENCLAVE-Werts über eine Nachweisrichtlinie können Kunden prüfen, ob innerhalb einer Enclave die beabsichtigten Binärdateien ausgeführt werden. Da sich MRENCLAVE jedoch bei jeder noch so kleinen Änderung des vorhandenen Codes ändert, empfiehlt es sich, Enclave-Binärdateien mithilfe der MRSIGNER-Überprüfung in einer Nachweisrichtlinie zu überprüfen.
x-ms-sgx-svn: Ein ganzzahliger Wert, der die Sicherheitsversionsnummer der SGX-Enclave angibt.
Der Enclave-Autor weist jeder Version der SGX-Enclave eine Sicherheitsversionsnummer (SVN) zu. Wird im Enclave-Code ein Sicherheitsproblem erkannt, erhöht der Enclave-Autor den SVN-Wert nach der Beseitigung des Sicherheitsrisikos. Um die Interaktion mit unsicherem Enclave-Code zu verhindern, können Kunden der Nachweisrichtlinie eine entsprechende Validierungsregel hinzufügen. Wenn die SVN des Enclave-Codes nicht der vom Enclave-Autor empfohlenen Version entspricht, tritt bei dem Nachweis ein Fehler auf.
Diese Ansprüche werden als veraltet eingestuft, aber sie werden vollständig unterstützt und sind auch in Zukunft noch vorhanden. Es wird empfohlen, die nicht als veraltet eingestuften Anspruchsnamen zu verwenden:
Veralteter Anspruch | Empfohlener Anspruch |
---|---|
$is-debuggable | x-ms-sgx-is-debuggable |
$product-id | x-ms-sgx-product-id |
$sgx-mrsigner | x-ms-sgx-mrsigner |
$sgx-mrenclave | x-ms-sgx-mrenclave |
$svn | x-ms-sgx-svn |
TPM-Nachweis
Ansprüche, die von Richtlinienerstellern verwendet werden, um Autorisierungsregeln in einer TPM-Nachweisrichtlinie zu definieren:
- aikValidated: Ein boolescher Wert, der Informationen dazu enthält, ob das Zertifikat des Nachweisidentitätsschlüssels (Attestation Identity Key, AIK) gültig ist oder nicht.
- aikPubHash: Eine Zeichenfolge mit base64 (SHA256) (öffentlicher AIK-Schlüssel im DER-Format).
- tpmVersion: Ein ganzzahliger Wert, der die Hauptversion des Trusted Platform Module (TPM) enthält.
- secureBootEnabled: Ein boolescher Wert, der angibt, ob der sichere Start aktiviert ist.
- iommuEnabled: Ein boolescher Wert, der angibt, ob die Input-output memory management unit (Iommu) aktiviert ist.
- bootDebuggingDisabled: Ein boolescher Wert, der angibt, ob das Startdebugging deaktiviert ist.
- notSafeMode: Ein boolescher Wert, der angibt, ob das Fenster im abgesicherten Modus ausgeführt wird.
- notSafeMode: Ein boolescher Wert, der angibt, ob das Fenster im WinPE-Modus ausgeführt wird.
- vbsEnabled: Ein boolescher Wert, der angibt, ob VBS aktiviert ist.
- vbsReportPresent: Ein boolescher Wert, der angibt, ob der VBS-Enclavebericht verfügbar ist.
VBS-Nachweis
Zusätzlich zu den TPM-Nachweisrichtlinienansprüchen können Richtlinienersteller auch diese Ansprüche verwenden, um Autorisierungsregeln in einer VBS-Nachweisrichtlinie zu definieren:
- enclaveAuthorId: Ein Zeichenfolgenwert, der den Base64Url-codierten Wert der Enclave-Autor-ID enthält – den Autorenbezeichner des primären Moduls für die Enclave.
- enclaveImageId: Ein Zeichenfolgenwert, der den Base64Url-codierten Wert der Enclave-Image-ID enthält – den Imagebezeichner des primären Moduls für die Enclave.
- enclaveOwnerId: Ein Zeichenfolgenwert, der den Base64Url-codierten Wert der Enclave-Besitzer-ID enthält – den Bezeichner des Besitzers des primären Moduls für die Enclave.
- enclaveFamilyId: Ein Zeichenfolgenwert, der den Base64Url-codierten Wert der Enclave-Familien-ID enthält. der Familienbezeichner des primären Moduls für die Enclave
- enclaveSvn: Ein ganzzahliger Wert, der die Sicherheitsversionsnummer des primären Moduls für die Enclave enthält.
- enclavePlatformSvn: Ein ganzzahliger Wert, der die Sicherheitsversionsnummer der Plattform enthält, die die Enclave hostet.
- enclaveFlags: Der enclaveFlags-Anspruch ist ein ganzzahliger Wert, der Flags enthält, die die Runtimerichtlinie für die Enclave beschreiben.
Ausgehende Ansprüche
Für alle Nachweistypen
Von Azure Attestation werden in das Nachweistoken diese Ansprüche für alle Nachweistypen eingeschlossen:
- x-ms-ver: Die JWT-Schemaversion („1.0“ wird erwartet).
- x-ms-attestation-type: Der Zeichenfolgenwert für den Nachweistyp.
- x-ms-policy-hash: Der Hash der Azure Attestation-Auswertungsrichtlinie, der als BASE64URL(SHA256(UTF8(BASE64URL(UTF8(Richtlinientext))))) berechnet wird.
- x-ms-policy-signer: JSON-Objekt mit Member „jwk“, das den Schlüssel repräsentiert, den ein Kunde zum Signieren seiner Richtlinie verwendet hat, anwendbar, wenn der Kunde eine signierte Richtlinie hochlädt.
- x-ms-runtime: JSON-Objekt, das „Ansprüche“ enthält, die in der geprüften Umgebung definiert und generiert werden, eine Spezialisierung des Konzepts „enclave held data“, wobei „enclave held data“ als UTF-8-Kodierung von wohlgeformtem JSON formatiert sind.
- x-ms-inittime: JSON-Objekt, das „Ansprüche“ enthält, die bei der Initialisierungszeit der bestätigten Umgebung definiert und überprüft werden.
Die folgenden Anspruchsnamen stammen aus der IETF-JWT-Spezifikation.
- Anspruch „jti“ (JWT ID) – Eindeutiger Bezeichner für das JWT.
- Anspruch „iss“ (Issuer; Aussteller) – Der Prinzipal, der das JWT ausgestellt hat.
- Anspruch „iat“ (Issued At; Ausgestellt um) – Der Zeitpunkt, zu dem das JWT ausgestellt wurde.
- Anspruch „exp“ (Expiration Time; Ablaufzeitpunkt) – Der Ablaufzeitpunkt, nach dem das JWT nicht mehr für die Verarbeitung akzeptiert werden darf.
- Anspruch „nbf“ (Not Before; Nicht vor) – Die Zeit, vor der das JWT nicht für die Verarbeitung akzeptiert werden darf.
Diese Anspruchsnamen stammen aus der IETF-EAT-Entwurfsspezifikation:
- „Nonce-Anspruch“ (Nonce) – Eine nicht transformierte direkte Kopie eines optionalen, von einem Client bereitgestellten Nonce-Werts.
Die unten angegebenen Ansprüche werden als veraltet eingestuft, aber sie werden vollständig unterstützt und sind auch in Zukunft noch vorhanden. Es wird empfohlen, die nicht als veraltet eingestuften Anspruchsnamen zu verwenden.
Veralteter Anspruch | Empfohlener Anspruch |
---|---|
ver | x-ms-ver |
tee | x-ms-attestation-type |
policy_hash | x-ms-policy-hash |
maa-policyHash | x-ms-policy-hash |
policy_signer | x-ms-policy-signer |
rp_data | nonce |
SGX-Nachweis
Diese Ansprüche werden vom Dienst generiert und für den SGX-Nachweis in das Nachweistoken eingefügt:
- x-ms-sgx-is-debuggable: Ein boolescher Wert, der angibt, ob Debugging für die Enclave aktiviert ist oder nicht.
- x-ms-sgx-product-id: Produkt-ID-Wert der SGX-Enclave.
- x-ms-sgx-mrsigner: Hexadezimal codierter Wert des Felds MRSIGNER des Angebots.
- x-ms-sgx-mrenclave: Hexadezimal codierter Wert des Felds MRSIGNER des Angebots.
- x-ms-sgx-svn: Im Angebot codierte Sicherheitsversionsnummer.
- x-ms-sgx-ehd: In Enklave enthaltene Daten im Format „BASE64URL(Enclave Held Data)“.
- x-ms-sgx-collateral: JSON-Objekt mit der Beschreibung der Begleitdaten für die Durchführung des Nachweisvorgangs. Der Wert für den Anspruch „x-ms-sgx-collateral“ ist ein geschachteltes JSON-Objekt mit den folgenden Schlüssel-Wert-Paaren:
- qeidcertshash: SHA256-Wert der QE-Identität (Quoting Enclave), von der Zertifikate ausgestellt werden.
- qeidcrlhash: SHA256-Wert der QE-Identität, von der Zertifikate (Zertifikatssperrliste) ausgestellt werden.
- qeidhash: SHA256-Wert der Begleitdaten der QE-Identität.
- quotehash: SHA256-Wert des ausgewerteten Angebots.
- tcbinfocertshash: SHA256-Wert der TCB-Informationen zum Ausstellen von Zertifikaten.
- tcbinfocrlhash: SHA256-Wert der TCB-Informationen zum Ausstellen von Zertifikaten (Zertifikatssperrliste).
- tcbinfohash: SHA256-Wert der Begleitdaten für TCB-Informationen.
- x-ms-sgx-report-data: Datenfeld des SGX-Enclave-Berichts (in der Regel ein SHA256-Hash von x-ms-sgx-ehd).
Diese Ansprüche kommen nur in dem Nachweistoken vor, das für die Serverplattformen mit Intel® Xeon® Scalable-Prozessoren erstellt wurde. Die Ansprüche werden nicht angezeigt, wenn die SGX-Enclave nicht mit Unterstützung für Schlüsseltrennung und -freigabe konfiguriert ist. Die Anspruchsdefinitionen finden Sie hier:
- x-ms-sgx-config-id
- x-ms-sgx-config-svn
- x-ms-sgx-isv-extended-product-id
- x-ms-sgx-isv-family-id
Diese Ansprüche werden als veraltet eingestuft, aber sie werden vollständig unterstützt und sind auch in Zukunft noch vorhanden. Es wird empfohlen, die nicht als veraltet eingestuften Anspruchsnamen zu verwenden:
Veralteter Anspruch | Empfohlener Anspruch |
---|---|
$is-debuggable | x-ms-sgx-is-debuggable |
$product-id | x-ms-sgx-product-id |
$sgx-mrsigner | x-ms-sgx-mrsigner |
$sgx-mrenclave | x-ms-sgx-mrenclave |
$svn | x-ms-sgx-svn |
$maa-ehd | x-ms-sgx-ehd |
$aas-ehd | x-ms-sgx-ehd |
$maa-attestationcollateral | x-ms-sgx-collateral |
SEV-SNP-Nachweis
Die folgenden Ansprüche werden ebenfalls vom SevSnpVm-Nachweistyp unterstützt:
- x-ms-sevsnpvm-authorkeydigest: SHA384-Hash des Autorsignaturschlüssels.
- x-ms-sevsnpvm-bootloader-svn: Sicherheitsversionsnummer (SVN) des AMD-Bootloaders.
- x-ms-sevsnpvm-familyId: HCL-Familienidentifikations-Zeichenfolge (Host Compatibility Layer).
- x-ms-sevsnpvm-guestsvn: HCL-Sicherheitsversionsnummer (SVN).
- x-ms-sevsnpvm-hostdata: Beliebige Daten, die vom Host zur Startzeit der VM definiert werden.
- x-ms-sevsnpvm-idkeydigest: SHA384-Hash des Identifikationssignaturschlüssels.
- x-ms-sevsnpvm-imageId: HCL-Image-ID.
- x-ms-sevsnpvm-is-debuggable: Boolescher Wert, der angibt, ob AMD SEV-SNP-Debugging aktiviert ist.
- x-ms-sevsnpvm-launchmeasurement: Messung des gestarteten Gastimages.
- x-ms-sevsnpvm-microcode-svn: Sicherheitsversionsnummer (SVN) des AMD-Microcodes.
- x-ms-sevsnpvm-migration-allowed: Boolescher Wert, der angibt, ob Unterstützung für die AMD SEV-SNP-Migration aktiviert ist.
- x-ms-sevsnpvm-reportdata: Von HCL übergebene Daten, die in den Bericht aufgenommen werden sollen, um zu überprüfen, ob Übertragungsschlüssel und VM-Konfiguration korrekt sind.
- x-ms-sevsnpvm-reportid: Berichts-ID des Gastes.
- x-ms-sevsnpvm-smt-allowed: Boolescher Wert, der angibt, ob SMT auf dem Host aktiviert ist.
- x-ms-sevsnpvm-snpfw-svn: Sicherheitsversionsnummer (SVN) der AMD-Firmware.
- x-ms-sevsnpvm-tee-svn: Sicherheitsversionsnummer (SVN) der AMD TEE (Trusted Execution Environment, vertrauenswürdige Ausführungsumgebung).
- x-ms-sevsnpvm-vmpl: VMPL, die diesen Bericht generiert hat (0 für HCL).
TPM- und VBS-Nachweis
- cnf (Bestätigung): Der Anspruch „cnf“ wird verwendet, um den Eigentumsnachweisschlüssel zu identifizieren. Bestätigungsanspruch wie in RFC 7800 definiert, enthält den öffentlichen Teil des nachgewiesenen Enclaveschlüssel, der als JSON Web Key-Objekt (JWK) dargestellt ist (RFC 7517)
- rp_data (Daten der vertrauenden Seite) : Die Daten der vertrauenden Seite, sofern in der Anforderung angegeben, die von der vertrauenden Seite als Nonce verwendet wird, um sicherzustellen, dass der Bericht aktuell ist rp_data wird nur hinzugefügt, wenn rp_data vorhanden ist.
Eigenschaftsansprüche
TPM- und VBS-Nachweis
- report_validity_in_minutes: Ein ganzzahliger Anspruch zur Angabe der Gültigkeitsdauer des Tokens
- Default value(time) : Ein Tag in Minuten
- Maximum value(time) : Ein Jahr in Minuten
- omit_x5c: Boolescher Wert, der angibt, ob Azure Attestation das Zertifikat auslassen soll, mit dem die Dienstauthentizität nachgewiesen werden soll. Wenn dieser Wert „true“ ist, wird x5t zum Nachweistoken hinzugefügt. Wenn dieser Wert „false“ ist (Standard), wird x5c zum Nachweistoken hinzugefügt.