Поделиться через


Наборы утверждений

Утверждения, созданные в процессе аттестации анклавов с помощью Microsoft Аттестация Azure, можно разделить на следующие категории:

  • Входящие утверждения. Утверждения, созданные Аттестацией Microsoft Azure по итогам синтаксического анализа свидетельства аттестации, которые могут использоваться авторами политик для определения правил авторизации в настраиваемой политике.

  • Исходящие утверждения. Утверждения, созданные Аттестацией Azure и включенные в токен аттестации.

  • Утверждения свойств. Это утверждения, созданные Аттестацией Azure в качестве выходных данных. Сюда относятся все утверждения, которые представляют свойства маркера аттестации, например кодировка отчета, срок действия отчета и т. д.

Входящие утверждения

Аттестация SGX

Утверждения, с помощью которых авторы политик могут определять правила авторизации в политике аттестации SGX:

  • x-ms-sgx-is-debuggable: логическое значение, указывающее на то, включена ли отладка анклава или нет.

    Анклавы SGX могут быть загружены с отключенной или включенной отладкой. Когда для флага в анклаве установлено значение true (верно), он включает функции отладки для кода анклава. Сюда входит возможность доступа к памяти анклава. Следовательно, рекомендуется устанавливать флаг в значение true исключительно в целях разработки. Если этот параметр включен в рабочей среде, гарантии безопасности SGX не сохраняются.

    Пользователи службы Аттестации Azure могут использовать политику аттестации, чтобы проверить, отключена ли отладка для анклава SGX. После добавления правила политики аттестация завершится ошибкой, когда злоумышленник включает поддержку отладки, чтобы получить доступ к содержимому анклава.

  • x-ms-sgx-product-id: целочисленное значение, которое указывает идентификатор продукта анклава SGX.

    Автор анклава присваивает каждому анклаву идентификатор продукта. Идентификатор продукта позволяет автору анклава сегментировать анклавы, подписанные с использованием того же MRSIGNER. Добавив правило проверки в политику аттестации, клиенты могут проверить, используют ли они предполагаемые анклавы. В случае если идентификатор продукта анклава не соответствует значению, опубликованному автором анклава, процедура аттестации завершится ошибкой.

  • x-ms-sgx-mrsigner: строковое значение, которое идентифицирует автора анклава SGX.

    MRSIGNER — это хэш открытого ключа автора анклава, который связан с закрытым ключом, используемым для подписания двоичного файла анклава. Проверяя MRSIGNER посредством политики аттестации, клиенты могут проверить, работают ли доверенные двоичные файлы внутри анклава. Если утверждение политики не соответствует MRSIGNER автора анклава, это означает, что двоичный файл анклава не подписан доверенным источником и аттестация не выполняется.

    Если автор анклава предпочитает чередовать MRSIGNER по соображениям безопасности, необходимо обновить политику аттестации Azure для поддержки новых и старых значений MRSIGNER перед обновлением двоичных файлов. В противном случае процедура проверки аттестации завершится ошибкой, что приведет к ошибкам аттестации.

    Политика аттестации должна быть обновлена в формате ниже.

    Перед сменой ключей

      version= 1.0;
      authorizationrules 
      {
      [ type=="x-ms-sgx-is-debuggable", value==false]&&
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); 
      };
    

    Во время смены ключей

      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(); 
      };
    

    После смены ключей

      version= 1.0;
      authorizationrules 
      { 
      [ type=="x-ms-sgx-is-debuggable", value==false]&& 
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); 
      };
    
  • x-ms-sgx-mrenclave: строковое значение, которое идентифицирует код и данные, загруженные в память анклава.

    MRENCLAVE представляет собой одно из измерений анклава, которое можно использовать для проверки двоичных файлов анклава. Это хеш кода, запущенного внутри анклава. Измерение изменяется с каждым изменением двоичного кода анклава. Проверяя MRENCLAVE посредством политики аттестации, клиенты могут проверить, работают ли предполагаемые двоичные файлы внутри анклава. Однако, поскольку ожидается, что MRENCLAVE будет часто меняться при любых незначительных модификациях существующего кода, рекомендуется проверять двоичные файлы анклава с помощью функции проверки MRSIGNER в политике аттестации.

  • x-ms-sgx-svn: целочисленное значение, которое указывает номер версии безопасности анклава SGX

    Автор анклава назначает номер версии безопасности (SVN) каждой версии анклава SGX. При обнаружении проблемы безопасности в коде анклава, автор анклава увеличивает исправление уязвимости после публикации значения SVN. С целью предотвратить взаимодействие с небезопасным кодом анклава, клиенты могут добавить правило проверки в политику аттестации. Если SVN кода анклава не соответствует версии, рекомендованной автором анклава, аттестация завершится ошибкой.

Эти утверждения считаются устаревшими, но полностью поддерживаются и будут по-прежнему включаться в будущем. Рекомендуется использовать нерекомендуемые имена утверждений:

Нерекомендуемое утверждение Рекомендуемое утверждение
$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

Аттестация доверенного платформенного модуля

Утверждения, с помощью которых авторы политик могут определять правила авторизации в политике аттестации доверенного платформенного модуля:

  • aikValidated. Логическое значение с информацией о том, был ли проверен сертификат AIK (ключ удостоверения подлинности).
  • aikPubHash: строка, содержащая base64(SHA256(открытый ключ AIK в формате DER))
  • tpmVersion: целочисленное значение, содержащее основную версию доверенного платформенного модуля (TPM).
  • secureBootEnabled. Логическое значение, указывающее, что безопасная загрузка включена.
  • iommuEnabled: логическое значение, указывающее, включена ли единица управления памятью ввода-вывода (Iommu).
  • bootDebuggingDisabled. Логическое значение, указывающее, что отладка загрузки отключена.
  • notSafeMode: логическое значение, указывающее, работает ли Windows не в безопасном режиме.
  • notWinPE: логическое значение, указывающее, работает ли Windows не в режиме WinPE.
  • vbsEnabled: логическое значение, указывающее, включена ли VBS.
  • vbsReportPresent: логическое значение, указывающее, доступен ли отчет об анклавах VBS.

Аттестация VBS

В дополнение к утверждениям политики аттестации TPM авторы политик могут использовать эти утверждения для определения правил авторизации в политике аттестации VBS:

  • enclaveAuthorId: строковое значение, содержащее значение в кодировке Base64Url идентификатора автора анклава — идентификатор автора основного модуля для анклава.
  • enclaveImageId: строковое значение, содержащее значение в кодировке Base64Url идентификатора образа анклава — идентификатор образа основного модуля для анклава.
  • enclaveOwnerId: строковое значение, содержащее значение в кодировке Base64Url идентификатора владельца анклава — идентификатор владельца анклава.
  • enclaveFamilyId: строковое значение, содержащее значение в кодировке Base64Url идентификатора семейства анклава. (Это идентификатор семьи главного модуля анклава.)
  • enclaveSvn: целочисленное значение, содержащее номер версии безопасности основного модуля для анклава.
  • enclavePlatformSvn: целочисленное значение, содержащее номер версии безопасности платформы, на котором размещен анклав.
  • enclaveFlags: утверждение enclaveFlags является целочисленным значением, содержащим флаги, которые описывают политику среды выполнения для анклава.

Исходящие утверждения

Общие утверждения для всех типов аттестации

Аттестация Azure включает эти утверждения в маркер аттестации для всех типов аттестации:

  • x-ms-ver — версия схемы JWT (ожидается значение "1.0");
  • x-ms-attestation-type — строковое значение, определяющее тип аттестации;
  • x-ms-policy-hash — хэш политики оценки в Аттестации Azure, который вычисляется по формуле BASE64URL(SHA256(UTF8(BASE64URL(UTF8(текст политики)))));
  • x-ms-policy-signer — объект JSON с элементом jwk, который содержит ключ, примененный клиентом для подписания политики. Это применимо, когда клиент отправляет подписанную политику.
  • x-ms-runtime: объект JSON, содержащий "утверждения", которые определяются и создаются в проверенной среде. Это специализация концепции "данные, хранимые анклава", где "данные, удерживаемые анклава", специально форматируются в кодировке UTF-8 правильного формата JSON.
  • x-ms-inittime: объект JSON, содержащий "утверждения", которые определяются и проверяются во время инициализации аттестифицированной среды.

Следующие имена утверждений взяты из спецификации IETF JWT:

  • утверждение jti (идентификатор JWT) — уникальный идентификатор для JWT;
  • утверждение iss (издатель) — субъект, который создал токен JWT;
  • утверждение iat (время выдачи) — время, в которое был создан токен JWT;
  • утверждение exp (время окончания срока действия) — время окончания срока действия, начиная с которого маркер JWT не должен приниматься в обработку;
  • утверждение nbf (не ранее) — время, до которого маркер JWT не должен приниматься в обработку.

Эти имена утверждений используются из проекта спецификации IETF EAT:

  • утверждение nonce — непреобразованная непосредственная копия необязательного значения nonce, предоставленного клиентом;

Приведенные ниже утверждения считаются нерекомендуемыми, но полностью поддерживаются и будут включаться и далее. Мы советуем не использовать нерекомендуемые имена утверждений.

Нерекомендуемое утверждение Рекомендуемое утверждение
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

Эти caims создаются и включаются в маркер аттестации службой для аттестации SGX:

  • x-ms-sgx-is-debuggable — Логическое значение, определяющее включение отладки в этом анклаве.
  • x-ms-sgx-product-id — значение идентификатора продукта анклава SGX;
  • x-ms-sgx-mrsigner — шестнадцатеричное значение поля mrsigner из предложения;
  • x-ms-sgx-mrenclave — шестнадцатеричное значение поля mrenclave из предложения.
  • x-ms-sgx-svn — номер версии безопасности, зашифрованный в предложении.
  • x-ms-sgx-ehd — хранящиеся в анклаве данные в кодировке BASE64URL.
  • x-ms-sgx-collateral — объект JSON с описанием сопутствующих материалов, которые используются для аттестации. Значение для утверждения x-ms-sgx-collateral представляет собой вложенный объект JSON со следующими парами "ключ-значение":
    • qeidcertshash — значение SHA256 для идентификатора анклава цитирования (QE), выдающего сертификаты;
    • qeidcrlhash — значение SHA256 идентификатора QE, выдающего список отзыва сертификатов;
    • qeidhash — значение SHA256 для идентификатора QE сопутствующих материалов;
    • quotehash — значение SHA256 для оцениваемого предложения;
    • tcbinfocertshash — значение SHA256 для информации о базе TCB, выдающей сертификаты;
    • tcbinfocrlhash — значение SHA256 для информации о базе TCB, выдающей список отзыва сертификатов;
    • tcbinfohash — значение SHA256 информационных материалов TCB.
  • x-ms-sgx-report-data: поле данных отчета анклава SGX (обычно хэш SHA256 x-ms-sgx-ehd)

Эти утверждения будут отображаться только в маркере аттестации, созданном для серверных платформ на основе процессоров Intel® Xeon® Scalable. Утверждения не будут отображаться, если в анклаве SGX не настроена поддержка разделения ключей и общего доступа. Определения утверждений можно найти здесь:

  • x-ms-sgx-config-id
  • x-ms-sgx-config-svn
  • x-ms-sgx-isv-extended-product-id
  • x-ms-sgx-isv-family-id

Эти утверждения считаются устаревшими, но полностью поддерживаются и будут по-прежнему включаться в будущем. Рекомендуется использовать нерекомендуемые имена утверждений:

Нерекомендуемое утверждение Рекомендуемое утверждение
$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

Следующие утверждения дополнительно поддерживаются типом аттестации SevSnpVm:

  • x-ms-sevsnpvm-authorkeydigest: хэш SHA384 ключа подписывания автора
  • x-ms-sevsnpvm-bootloader-svn :номер версии безопасности загрузчика AMD (SVN)
  • x-ms-sevsnpvm-familyId: строка идентификации семейства уровня совместимости узлов (HCL)
  • x-ms-sevsnpvm-guestvn: номер версии безопасности HCL (SVN)
  • x-ms-sevsnpvm-hostdata: произвольные данные, определенные узлом во время запуска виртуальной машины.
  • x-ms-sevsnpvm-idkeydigest: хэш SHA384 ключа подписывания идентификации
  • x-ms-sevsnpvm-imageId: идентификация образа HCL
  • x-ms-sevsnpvm-is-debuggable: логическое значение, указывающее, включена ли отладка AMD SEV-SNP.
  • x-ms-sevsnpvm-launchmeasurement: измерение запущенного гостевого образа
  • x-ms-sevsnpvm-microcode-svn: номер версии безопасности микрокода AMD (SVN)
  • x-ms-sevsnpvm-migration-allowed: логическое значение, указывающее, включена ли поддержка миграции AMD SEV-SNP.
  • x-ms-sevsnpvm-reportdata: данные, передаваемые HCL для включения в отчет, чтобы убедиться, что ключ передачи и конфигурация виртуальной машины верны.
  • x-ms-sevsnpvm-reportid: идентификатор отчета гостя.
  • x-ms-sevsnpvm-smt-allowed: логическое значение, указывающее, включен ли SMT на узле.
  • x-ms-sevsnpvm-snpfw-svn: номер версии безопасности встроенного ПО AMD (SVN)
  • x-ms-sevsnpvm-tee-svn: номер версии безопасности доверенной среды выполнения AMD (TEE) (SVN)
  • x-ms-sevsnpvm-vmpl: VMPL, создающая этот отчет (0 для HCL)

Аттестация доверенного платформенного модуля и VBS

  • cnf (подтверждение) . Утверждение cnf применяется для идентификации ключа, подтверждающего право владения. Утверждение подтверждения определено в стандарте RFC 7800 и содержит открытую часть ключа аттестованного анклава в формате объекта JWK (JSON Web Key) (RFC 7517).
  • rp_data (данные проверяющей стороны). Любые данные проверяющей стороны, если они присутствуют в запросе, которые используются проверяющей стороной как элемент nonce для гарантии актуальности отчета. rp_data добавляется только при наличии rp_data

Утверждения свойств

Аттестация доверенного платформенного модуля и VBS

  • report_validity_in_minutes. Это утверждение содержит целое число, которое обозначает срок действия токена.
    • Значение по умолчанию (время). Один день в минутах.
    • Максимальное значение (время). Один год в минутах.
  • omit_x5c. Логическое значение, которое указывает, что Аттестация Azure должна исключить сертификат, который использовался для подтверждения подлинности службы. Если имеет значение True, к токену аттестации добавляется сертификат x5t. Если имеет значение False (по умолчанию), к токену аттестации добавляется сертификат x5c.

Дальнейшие действия