Zestawy oświadczeń
Oświadczenia wygenerowane w procesie zaświadczania enklaw przy użyciu zaświadczania platformy Microsoft Azure można podzielić na następujące kategorie:
- Oświadczenia przychodzące: oświadczenia generowane przez zaświadczanie platformy Microsoft Azure po przeanalizowaniu dowodów zaświadczania. Oświadczenia mogą być używane przez autorów zasad do definiowania reguł autoryzacji w zasadach niestandardowych.
- Oświadczenia wychodzące: oświadczenia wygenerowane przez zaświadczenie platformy Azure i uwzględnione w tokenie zaświadczania.
- Oświadczenia właściwości: oświadczenia utworzone jako dane wyjściowe za pomocą zaświadczania platformy Azure. Zawiera wszystkie oświadczenia reprezentujące właściwości tokenu zaświadczania, takie jak kodowanie raportu, czas trwania ważności raportu itd.
Oświadczenia przychodzące
Zaświadczenie SGX
Oświadczenia używane przez autorów zasad do definiowania reguł autoryzacji w zasadach zaświadczania SGX:
x-ms-sgx-is-debuggable: wartość logiczna, która wskazuje, czy debugowanie enklawy jest włączone, czy nie.
Enklawy SGX można załadować z wyłączonym debugowaniem lub włączonym. Gdy flaga jest ustawiona na wartość true w enklawie, włącza funkcje debugowania dla kodu enklawy, co obejmuje możliwość uzyskiwania dostępu do pamięci enklawy. Dlatego zaleca się ustawienie flagi na wartość true tylko w celach programistycznych. W przypadku włączenia w środowisku produkcyjnym gwarancje zabezpieczeń SGX nie są zachowywane.
Użytkownicy zaświadczania platformy Azure mogą używać zasad zaświadczania, aby sprawdzić, czy debugowanie jest wyłączone dla enklawy SGX. Po dodaniu reguły zasad zaświadczanie kończy się niepowodzeniem, gdy złośliwy użytkownik włączy obsługę debugowania w celu uzyskania dostępu do zawartości enklawy.
x-ms-sgx-product-id: wartość całkowita wskazująca identyfikator produktu enklawy SGX.
Autor enklawy przypisuje identyfikator produktu do każdej enklawy. Identyfikator produktu umożliwia autorowi enklawy segmentowanie enklaw podpisanych przy użyciu tego samego elementu MRSIGNER. Klienci mogą dodać regułę weryfikacji do zasad zaświadczania, aby sprawdzić, czy używają zamierzonych enklaw. Zaświadczenie kończy się niepowodzeniem, jeśli identyfikator produktu enklawy nie jest zgodny z wartością opublikowaną przez autora enklawy.
x-ms-sgx-mrsigner: wartość ciągu, która identyfikuje autora enklawy SGX.
MRSIGNER to skrót klucza publicznego autora enklawy, który jest skojarzony z kluczem prywatnym używanym do podpisywania pliku binarnego enklawy. Weryfikując mrSIGNER za pośrednictwem zasad zaświadczania, klienci mogą sprawdzić, czy zaufane pliki binarne są uruchomione wewnątrz enklawy. Jeśli oświadczenie zasad nie jest zgodne z mrSIGNER autora enklawy, oznacza to, że enklawa binarna nie jest podpisana przez zaufane źródło, a zaświadczenie kończy się niepowodzeniem.
Gdy autor enklawy woli obracać narzędzie MRSIGNER ze względów bezpieczeństwa, należy zaktualizować zasady zaświadczania platformy Azure, aby obsługiwać nowe i stare wartości MRSIGNER przed zaktualizowaniem plików binarnych. W przeciwnym razie sprawdzanie autoryzacji kończy się niepowodzeniem, co powoduje niepowodzenia zaświadczania.
Zasady zaświadczania muszą zostać zaktualizowane przy użyciu poniższego formatu.
Przed rotacją klucza
version= 1.0; authorizationrules { [ type=="x-ms-sgx-is-debuggable", value==false]&& [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); };
Podczas rotacji klucza
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(); };
Po rotacji klucza
version= 1.0; authorizationrules { [ type=="x-ms-sgx-is-debuggable", value==false]&& [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); };
x-ms-sgx-mrenclave: wartość ciągu, która identyfikuje kod i dane załadowane w pamięci enklawy.
MRENCLAVE jest jednym z pomiarów enklawy, które mogą służyć do weryfikowania plików binarnych enklawy. Jest to skrót kodu uruchomionego wewnątrz enklawy. Pomiar zmienia się z każdą zmianą w kodzie binarnym enklawy. Weryfikując mrENCLAVE za pośrednictwem zasad zaświadczania, klienci mogą sprawdzić, czy zamierzone pliki binarne są uruchomione wewnątrz enklawy. Jednak ponieważ oczekuje się, że funkcja MRENCLAVE będzie często zmieniana przy użyciu wszelkich trywialnych modyfikacji istniejącego kodu, zaleca się zweryfikowanie plików binarnych enklawy przy użyciu walidacji MRSIGNER w zasadach zaświadczania.
x-ms-sgx-svn: wartość całkowita wskazująca numer wersji zabezpieczeń enklawy SGX
Autor enklawy przypisuje numer wersji zabezpieczeń (SVN) do każdej wersji enklawy SGX. Po wykryciu problemu z zabezpieczeniami w kodzie enklawy autor enklawy zwiększa wartość SVN po rozwiązaniu luki w zabezpieczeniach. Aby zapobiec interakcji z niezabezpieczonym kodem enklawy, klienci mogą dodać regułę walidacji w zasadach zaświadczania. Jeśli nazwa SVN kodu enklawy nie jest zgodna z wersją zalecaną przez autora enklawy, zaświadczenie kończy się niepowodzeniem.
Te oświadczenia są uznawane za przestarzałe, ale są w pełni obsługiwane i będą nadal uwzględniane w przyszłości. Zaleca się używanie nazw oświadczeń, które nie są nieoznaczone:
Przestarzałe oświadczenie | Zalecane oświadczenie |
---|---|
$is debugowanie | 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 |
Poświadczanie za pomocą modułu TPM
Oświadczenia używane przez autorów zasad do definiowania reguł autoryzacji w zasadach zaświadczania modułu TPM:
- aikValidated: wartość logiczna zawierająca informacje, jeśli certyfikat attestation Identity Key (AIK) weryfikuje lub nie.
- aikPubHash: ciąg zawierający klucz publiczny base64(SHA256(AIK w formacie DER)).
- tpmVersion: wartość całkowita zawierająca wersję główną modułu TPM (Trusted Platform Module).
- secureBootEnabled: wartość logiczna wskazująca, czy bezpieczny rozruch jest włączony.
- iommuEnabled: wartość logiczna wskazująca, czy jest włączona jednostka zarządzania pamięcią wejściową (Iommu).
- bootDebuggingDisabled: wartość logiczna wskazująca, czy debugowanie rozruchu jest wyłączone.
- notSafeMode: wartość logiczna wskazująca, czy system Windows nie działa w trybie awaryjnym.
- notWinPE: wartość logiczna wskazująca, czy system Windows nie jest uruchomiony w trybie WinPE.
- vbsEnabled: wartość logiczna wskazująca, czy język VBS jest włączony.
- vbsReportPresent: wartość logiczna wskazująca, czy raport enklawy VBS jest dostępny.
Zaświadczenie VBS
Oprócz oświadczeń zasad zaświadczania modułu TPM autorzy zasad mogą używać tych oświadczeń do definiowania reguł autoryzacji w zasadach zaświadczania VBS:
- enklawaAuthorId: wartość ciągu zawierająca wartość zakodowaną w formacie Base64Url identyfikatora autora enklawy - identyfikator autora modułu podstawowego dla enklawy.
- enklawaImageId: wartość ciągu zawierająca wartość zakodowaną w formacie Base64Url identyfikatora obrazu enklawy — identyfikator obrazu podstawowego modułu enklawy.
- enklawaOwnerId: wartość ciągu zawierająca zakodowaną wartość Base64Url enklawy Owner id-Identyfikator właściciela enklawy dla enklawy.
- enklawaFamilyId: wartość ciągu zawierająca zakodowaną wartość Base64Url identyfikatora rodziny enklawy. Identyfikator rodziny modułu podstawowego dla enklawy.
- enklawaSvn: wartość całkowita zawierająca numer wersji zabezpieczeń modułu podstawowego dla enklawy.
- enklawaPlatformSvn: wartość całkowita zawierająca numer wersji zabezpieczeń platformy, która hostuje enklawę.
- enklawaFlags: oświadczenie enklawyFlags jest wartością całkowitą zawierającą flagi opisujące zasady środowiska uruchomieniowego dla enklawy.
Oświadczenia wychodzące
Wspólne dla wszystkich typów zaświadczania
Zaświadczenie platformy Azure obejmuje te oświadczenia w tokenie zaświadczania dla wszystkich typów zaświadczania:
- x-ms-ver: wersja schematu JWT (oczekiwana wartość to "1.0").
- x-ms-attestation-type: wartość ciągu reprezentująca typ zaświadczania.
- x-ms-policy-hash: skrót zasad oceny zaświadczania platformy Azure obliczony jako BASE64URL(SHA256(UTF8(BASE64URL(UTF8(tekst zasad))))).
- x-ms-policy-signer: obiekt JSON z elementem członkowskim "jwk" reprezentującym klucz, który klient użył do podpisania zasad, ma zastosowanie w przypadku przekazywania podpisanych zasad przez klienta.
- x-ms-runtime: obiekt JSON zawierający "oświadczenia", które są zdefiniowane i generowane w środowisku testowanym, specjalizacja koncepcji "enklawy przechowywane dane", gdzie "enklawy przechowywane dane" jest sformatowany jako kodowanie UTF-8 dobrze sformułowanego kodu JSON.
- x-ms-inittime: obiekt JSON zawierający "oświadczenia", które są zdefiniowane i weryfikowane w czasie inicjowania środowiska testowanego.
Te nazwy oświadczeń są używane ze specyfikacji JWT IETF.
- Oświadczenie "jti" (identyfikator JWT) — unikatowy identyfikator dla zestawu JWT.
- Oświadczenie "iss" (Wystawca) — podmiot zabezpieczeń, który wydał JWT.
- "iat" (wystawione na) Oświadczenie — czas wydania JWT.
- Oświadczenie "exp" (czas wygaśnięcia) — czas wygaśnięcia, po którym nie można zaakceptować JWT do przetwarzania.
- "nbf" (Nie przed) Oświadczenie — nie przed upływem czasu, przed którym nie można zaakceptować JWT do przetwarzania.
Te nazwy oświadczeń są używane ze specyfikacji wersji roboczej IETF EAT:
- "Oświadczenie niezwiązane" (nonce) — nieprzetłumaczona bezpośrednia kopia opcjonalnej wartości innej niż podana przez klienta.
Poniższe oświadczenia są uznawane za przestarzałe, ale są w pełni obsługiwane i będą nadal uwzględniane w przyszłości. Zaleca się używanie nazw oświadczeń, które nie są nieoznaczone.
Przestarzałe oświadczenie | Zalecane oświadczenie |
---|---|
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 |
Zaświadczenie SGX
Te oświadczenia są generowane i uwzględniane w tokenie zaświadczania przez usługę na potrzeby zaświadczania SGX:
- x-ms-sgx-is-debuggable: wartość logiczna, która wskazuje, czy enklawa ma włączone debugowanie, czy nie.
- x-ms-sgx-product-id: wartość identyfikatora produktu enklawy SGX.
- x-ms-sgx-mrsigner: wartość zakodowana szesnastkowy pola MRSIGNER cudzysłowu.
- x-ms-sgx-mrenclave: wartość zakodowana szesnastkowy pola MRSIGNER cudzysłowu.
- x-ms-sgx-svn: numer wersji zabezpieczeń zakodowany w cudzysłowie.
- x-ms-sgx-ehd: enklawa przechowywała dane sformatowane jako BASE64URL (enklawa przechowywana danych).
- x-ms-sgx-collateral: obiekt JSON opisujący zabezpieczenia używane do zaświadczania. Wartość oświadczenia x-ms-sgx-collateral jest zagnieżdżonym obiektem JSON z następującymi parami klucz/wartość:
- qeidcertshash: wartość SHA256 cytowania enklawy (QE) Identity wystawiających certyfikaty.
- qeidcrlhash: wartość SHA256 listy CRL certyfikatów wystawiających certyfikaty.
- qeidhash: wartość SHA256 zabezpieczenia QE Identity.
- quotehash: wartość SHA256 obliczonego cudzysłowu.
- tcbinfocertshash: wartość SHA256 certyfikatów wystawiających informacje TCB.
- tcbinfocrlhash: wartość SHA256 listy CRL certyfikatów TCB Info wystawiających certyfikaty.
- tcbinfohash: wartość SHA256 zabezpieczenia TCB Info.
- x-ms-sgx-report-data: pole danych raportu enklawy SGX (zazwyczaj skrót SHA256 x-ms-sgx-ehd).
Te oświadczenia są wyświetlane tylko w tokenie zaświadczania wygenerowanym dla platform serwerów opartych na procesorach Intel® Xeon® Scalable. Oświadczenia nie będą wyświetlane, jeśli enklawa SGX nie jest skonfigurowana z obsługą separacji kluczy i udostępniania. Definicje oświadczeń można znaleźć tutaj:
- x-ms-sgx-config-id
- x-ms-sgx-config-svn
- x-ms-sgx-isv-extended-product-id
- x-ms-sgx-isv-family-id
Te oświadczenia są uznawane za przestarzałe, ale są w pełni obsługiwane i będą nadal uwzględniane w przyszłości. Zaleca się używanie nazw oświadczeń, które nie są nieoznaczone:
Przestarzałe oświadczenie | Zalecane oświadczenie |
---|---|
$is debugowanie | 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 zaświadczaniacollateral | x-ms-sgx-collateral |
Zaświadczenie SEV-SNP
Następujące oświadczenia są również obsługiwane przez typ zaświadczania SevSnpVm:
- x-ms-sevsnpvm-authorkeydigest: skrót SHA384 klucza podpisywania autora.
- x-ms-sevsnpvm-bootloader-svn: numer wersji zabezpieczeń modułu ładującego rozruchu AMD (SVN).
- x-ms-sevsnpvm-familyId: ciąg identyfikacji rodziny warstwy zgodności hosta (HCL).
- x-ms-sevsnpvm-guestsvn: numer wersji zabezpieczeń listy HCL (SVN).
- x-ms-sevsnpvm-hostdata: dowolne dane zdefiniowane przez hosta w czasie uruchamiania maszyny wirtualnej.
- x-ms-sevsnpvm-idkeydigest: skrót SHA384 klucza podpisywania identyfikacji.
- x-ms-sevsnpvm-imageId: identyfikacja obrazu HCL.
- x-ms-sevsnpvm-is-debuggable: wartość logiczna wskazująca, czy debugowanie AMD SEV-SNP jest włączone.
- x-ms-sevsnpvm-launchmeasurement: Pomiar uruchomionego obrazu gościa.
- x-ms-sevsnpvm-microcode-svn: numer wersji zabezpieczeń mikrokodu AMD (SVN).
- x-ms-sevsnpvm-migration-allowed: wartość logiczna wskazująca, czy obsługa migracji AMD SEV-SNP jest włączona.
- x-ms-sevsnpvm-reportdata: dane przekazane przez listę HCL do uwzględnienia w raporcie, aby sprawdzić, czy klucz transferu i konfiguracja maszyny wirtualnej są poprawne.
- x-ms-sevsnpvm-reportid: identyfikator raportu gościa.
- x-ms-sevsnpvm-smt-allowed: wartość logiczna wskazująca, czy protokół SMT jest włączony na hoście.
- x-ms-sevsnpvm-snpfw-svn: numer wersji zabezpieczeń oprogramowania układowego AMD (SVN).
- x-ms-sevsnpvm-tee-svn: numer wersji zabezpieczeń zaufanego środowiska wykonawczego AMD (TEE).
- x-ms-sevsnpvm-vmpl: VMPL, która wygenerowała ten raport (0 dla listy HCL).
Zaświadczania TPM i VBS
- cnf (potwierdzenie): oświadczenie "cnf" służy do identyfikowania klucza dowodu posiadania. Oświadczenie potwierdzenia zdefiniowane w dokumencie RFC 7800 zawiera publiczną część testowanego klucza enklawy reprezentowanego jako obiekt JSON Web Key (JWK) (RFC 7517).
- rp_data (dane jednostki uzależnionej): dane jednostki uzależnionej, jeśli istnieją określone w żądaniu, używane przez jednostkę uzależnioną jako nonce w celu zagwarantowania aktualności raportu. rp_data jest dodawany tylko wtedy, gdy istnieje rp_data.
Oświadczenia właściwości
Zaświadczania TPM i VBS
- report_validity_in_minutes: oświadczenie liczby całkowitej, które oznacza, jak długo token jest prawidłowy.
- Wartość domyślna (czas): jeden dzień w minutach.
- Wartość maksymalna (czas): rok w minutach.
- omit_x5c: oświadczenie logiczne wskazujące, czy zaświadczanie platformy Azure powinno pominąć certyfikat używany do zapewnienia weryfikacji autentyczności usługi. Jeśli wartość true, x5t zostanie dodany do tokenu zaświadczania. Jeśli wartość false(wartość domyślna), x5c zostanie dodany do tokenu zaświadczania.