Поставщик служб конфигурации HealthAttestation
Важно.
Этот CSP содержит некоторые параметры, находящиеся в стадии разработки и применимые только для сборок Windows Insider Preview. Эти параметры могут изменяться и зависеть от других функций или служб в предварительной версии.
Поставщик службы конфигурации "Работоспособность устройства" (DHA-CSP) позволяет ИТ-администраторам предприятия оценивать, загружено ли устройство в доверенное и соответствующее состояние, а также выполнять действия корпоративной политики.
В следующем списке приведено описание функций, выполняемых поставщиком служб CSP работоспособности устройства.
- Собирает журналы загрузки устройства, журналы аудита доверенного платформенного модуля (TPM) и сертификат доверенного платформенного модуля (DHA-BootData) с управляемого устройства.
- Пересылает DHA-BootData в службу аттестации работоспособности устройств (DHA-Service)
- Получает зашифрованный большой двоичный объект (DHA-EncBlob) от DHA-Service и сохраняет его в локальном кэше на устройстве.
- Получает запросы на аттестацию (DHA-Requests) от DHA-Enabled MDM и отвечает с данными аттестации работоспособности устройств (DHA-Data)
В следующем списке показаны узлы поставщика службы конфигурации HealthAttestation:
- ./Vendor/MSFT/HealthAttestation
AttestErrorMessage
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows Insider Preview |
./Vendor/MSFT/HealthAttestation/AttestErrorMessage
AttestErrorMessage сохраняет сообщение об ошибке для последнего сеанса аттестации, если оно возвращается службой аттестации.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получите |
AttestStatus
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 11, версия 21H2 [10.0.22000] и более поздние |
./Vendor/MSFT/HealthAttestation/AttestStatus
AttestStatus поддерживает код состояния успешного или неудачного завершения последнего сеанса аттестации.
Состояние всегда очищается перед вызовом службы аттестации.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | int |
Тип доступа | Получите |
Пример:
Шаблонный вызов SyncML:
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Get> <Item> <Target> <LocURI> ./Device/Vendor/MSFT/HealthAttestation/AttestStatus </LocURI> </Target> </Item> </Get> <Final/> </SyncBody> </SyncML>
Пример ответа:
If Successful: 0 If Failed: A corresponding HRESULT error code. Example: 0x80072efd, WININET_E_CANNOT_CONNECT
Сертификат
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/Certificate
Указывает DHA-CSP перенаправить DHA-Data на сервер MDM.
Тип значения — строка base64.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получите |
Correlationid
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/CorrelationID
Определяет уникальный сеанс аттестации работоспособности устройства. CorrelationId используется для сопоставления журналов DHA-Service с событиями сервера MDM и журналами событий клиента для отладки и устранения неполадок.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получите |
CurrentProtocolVersion
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1709 [10.0.16299] и более поздние |
./Vendor/MSFT/HealthAttestation/CurrentProtocolVersion
Предоставляет текущую версию протокола, которую клиент использует для взаимодействия со службой аттестации работоспособности.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | int |
Тип доступа | Получите |
ForceRetrieve
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/ForceRetrieve
Указывает клиенту инициировать новый запрос к службе DHA-Service и получить новый DHA-EncBlob (сводка состояния загрузки, выданного службой DHA-Service). Этот параметр следует использовать только в том случае, если сервер MDM применяет политику актуальности сертификатов, которая должна заставить устройство получить новый зашифрованный BLOB-объект из DHA-Service.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | bool |
Тип доступа | Получение, замена |
Значение по умолчанию | False |
Допустимые значения:
Значение | Описание |
---|---|
false (по умолчанию) | Ложных. |
true | Истинный. |
GetAttestReport
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 11, версия 21H2 [10.0.22000] и более поздние |
./Vendor/MSFT/HealthAttestation/GetAttestReport
Получите отчет о сеансе аттестации, если он существует.
Отчет хранится в разделе реестра в соответствующем хранилище регистрации MDM.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получите |
Пример:
Шаблонный вызов SyncML:
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Get> <Item> <Target> <LocURI> ./Device/Vendor/MSFT/HealthAttestation/GetAttestReport </LocURI> </Target> </Item> </Get> <Final/> </SyncBody> </SyncML>
Пример данных:
If Success: JWT token: aaaaaaaaaaaaa.bbbbbbbbbbbbb.cccccccccc If failed: Previously cached report if available (the token may have already expired per the attestation policy). OR Sync ML 404 error if no cached report available.
GetServiceCorrelationIDs
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 11, версия 21H2 [10.0.22000] и более поздние |
./Vendor/MSFT/HealthAttestation/GetServiceCorrelationIDs
Получение идентификаторов корреляции служб, если они существуют.
Если существует несколько идентификаторов корреляции, они разделяются символом ";" в строке.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получите |
Пример:
Шаблонный вызов SyncML:
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Get> <Item> <Target> <LocURI> ./Device/Vendor/MSFT/HealthAttestation/GetServiceCorrelationIDs </LocURI> </Target> </Item> </Get> <Final/> </SyncBody> </SyncML>
Пример данных:
If success: GUID returned by the attestation service: 1k9+vQOn00S8ZK33;CMc969r1JEuHwDpM If Trigger Attestation call failed and no previous data is present: The field remains empty. Otherwise, the last service correlation id will be returned. In a successful attestation there are two calls between client and MAA and for each call the GUID is separated by semicolon.
HASEndpoint
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/HASEndpoint
Определяет полное доменное имя (FQDN) DHA-Service, назначенной для выполнения аттестации. Если полное доменное имя не назначено, в качестве службы аттестации по умолчанию будет использоваться DHA-Cloud (облачная служба, принадлежащей и управляемой корпорацией Майкрософт).
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получение, замена |
Значение по умолчанию | has.spserv.microsoft.com. |
MaxSupportedProtocolVersion
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1709 [10.0.16299] и более поздние |
./Vendor/MSFT/HealthAttestation/MaxSupportedProtocolVersion
Возвращает максимальную версию протокола, которую может поддерживать этот клиент.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | int |
Тип доступа | Получите |
Nonce
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/Nonce
Позволяет MDM защищать данные аттестации работоспособности устройства от атак типа "человек в среднем" (MITM) с помощью случайного значения, защищенного шифрованием, которое создается сервером MDM. Параметр nonce имеет шестнадцатеричный формат с минимальным размером 8 байт и максимальным размером 32 байта.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Получение, замена |
Значение по умолчанию | \0 |
PreferredMaxProtocolVersion
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1709 [10.0.16299] и более поздние |
./Vendor/MSFT/HealthAttestation/PreferredMaxProtocolVersion
Предоставляет максимальную предпочтительную версию протокола, для взаимодействия с которым настроен клиент. Если это значение выше версий протокола, поддерживаемых клиентом, он будет использовать самую высокую версию протокола, доступную ему.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | int |
Тип доступа | Получение, замена |
Значение по умолчанию | 3 |
Состояние
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/Status
Предоставляет текущее состояние запроса на работоспособность устройства. Полный список значений состояния см. в разделе HealthAttestation CSP состояние и коды ошибок.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | int |
Тип доступа | Получите |
TpmReadyStatus
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1607 [10.0.14393] и более поздние |
./Vendor/MSFT/HealthAttestation/TpmReadyStatus
Возвращает битовую маску сведений, описывающих состояние доверенного платформенного модуля. Он указывает, находится ли TPM устройства в состоянии готовности и доверия.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | int |
Тип доступа | Получите |
TriggerAttestation
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 11, версия 21H2 [10.0.22000] и более поздние |
./Vendor/MSFT/HealthAttestation/TriggerAttestation
Уведомляет устройство о запуске сеанса аттестации асинхронно.
Если процесс аттестации запущен успешно, этот узел вернет код 202, указывающий, что запрос получен и обрабатывается. В противном случае будет возвращена ошибка.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат |
chr (строка) |
Тип доступа | Exec |
Пример:
Шаблонный вызов SyncML:
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Exec> <CmdID>VERIFYHEALTHV2</CmdID> <Item> <Target> <LocURI> ./Vendor/MSFT/HealthAttestation/TriggerAttestation </LocURI> </Target> <Data> { rpID : "rpID", serviceEndpoint : "MAA endpoint", nonce : "nonce", aadToken : "aadToken", "cv" : "CorrelationVector" } </Data> </Item> </Exec> <Final/> </SyncBody> </SyncML>
Поля данных:
- rpID (идентификатор проверяющей стороны). Это поле содержит идентификатор, который можно использовать для определения вызывающего объекта.
- serviceEndpoint. Это поле содержит полный URL-адрес экземпляра поставщика microsoft Аттестация Azure, который будет использоваться для оценки.
- nonce: это поле содержит произвольное число, которое можно использовать только один раз в криптографической связи. Это часто случайное или псевдослучайное число, выдаваемое в протоколе проверки подлинности, чтобы гарантировать, что старые коммуникации не могут использоваться повторно при атаках на воспроизведение.
- aadToken: маркер Microsoft Entra, используемый для проверки подлинности в службе Microsoft Аттестация Azure.
- cv: это поле содержит идентификатор (вектор корреляции), который будет передан вызову службы и который можно использовать для диагностика целей.
Пример
<Data>
:{ "rpid" : "https://www.contoso.com/attestation", "endpoint" : "https://contoso.eus.attest.azure.net/attest/tpm?api-version=2020-10-01", "nonce" : "5468697320697320612054657374204e6f6e6365", "aadToken" : "dummytokenstring", "cv" : "testonboarded" }
VerifyHealth
Область применения | Выпуски | Применимая ОС |
---|---|---|
Устройство ✅ Пользователь ❌ |
✅ Pro ✅ Enterprise ✅ для образования ✅ Windows SE ✅ IIoT Enterprise или IoT Enterprise LTSC |
✅Windows 10, версия 1511 [10.0.10586] и более поздние версии |
./Vendor/MSFT/HealthAttestation/VerifyHealth
Уведомляет устройство о подготовке запроса на проверку работоспособности устройства.
Описание свойств инфраструктуры:
Имя свойства | Значение свойства |
---|---|
Формат | null |
Тип доступа | Exec |
аттестация работоспособности устройства Windows 11
Windows 11 представлено обновление функции аттестации работоспособности устройств. Это обновление помогает добавить поддержку более глубокой аналитики в безопасность загрузки Windows, поддерживая подход "никому не доверяй" для безопасности устройств. Доступ к аттестации работоспособности устройств в Windows можно получить с помощью поставщика CSP HealthAttestation. Этот CSP помогает оценить, загружено ли устройство в доверенное и соответствующее состояние, а затем предпринять соответствующие действия. Windows 11 вводит дополнительные дочерние узлы к узлу HealthAttestation, чтобы поставщики MDM подключались к службе Microsoft Аттестация Azure, что обеспечивает упрощенный подход к аттестации.
Отчет об аттестации содержит оценку работоспособности свойств устройства во время загрузки, чтобы убедиться, что устройства автоматически защищены, как только они включено. Затем результат аттестации работоспособности можно использовать для разрешения или запрета доступа к сетям, приложениям или службам в зависимости от работоспособности устройства.
Используемые термины:
- TPM (доверенный платформенный модуль). TPM — это специализированная аппаратная защищенная логика, которая выполняет ряд аппаратных операций безопасности, включая предоставление защищенного хранилища, случайное создание чисел, шифрование и подписывание.
- Функция DHA (работоспособность устройств): функция работоспособности устройств (DHA) позволяет ИТ-администраторам предприятия удаленно отслеживать состояние безопасности управляемых устройств с помощью аппаратно защищенных и аттестованных данных через канал коммуникации, устойчивый к незаконному изменению.
- MAA-Session (Microsoft Аттестация Azure Service Based Device HealthAttestation Session): сеанс работоспособности устройства на основе службы Microsoft Аттестация Azure (MAA-Session) описывает сквозной поток связи, выполняемый в одном сеансе аттестации работоспособности устройства.
-
узлы MAA-CSP (поставщик службы конфигурации на основе Microsoft Аттестация Azure): узлы поставщика служб конфигурации, добавленные в Windows 11 для интеграции со службой Microsoft Аттестация Azure. MAA-CSP выполняет следующий список операций:
- Получает запросы триггера аттестации от поставщика MDM с поддержкой HealthAttestation.
- Устройство собирает свидетельство аттестации (журналы загрузки устройства, журналы аудита доверенного платформенного модуля и сертификат доверенного платформенного модуля) с управляемого устройства.
- Пересылает свидетельство аттестации в экземпляр службы Аттестация Azure, настроенный поставщиком MDM.
- Получает подписанный отчет от экземпляра службы Аттестация Azure и сохраняет его в локальном кэше на устройстве.
- MAA конечная точка. Служба аттестации Microsoft Azure — это ресурс Azure, и каждый экземпляр службы получает URL-адрес, настроенный администратором. Созданный URI уникален по своей природе, и для целей аттестации работоспособности устройства называется конечной точкой MAA.
- JWT (веб-токен JSON): веб-токен JSON (JWT) — это открытый стандартный метод RFC7519 для безопасной передачи информации между сторонами в виде объекта Нотации объектов JavaScript (JSON). Эти сведения можно проверить и доверять, так как они подписаны цифровой подписью. JWT можно подписывать с помощью секрета или пары открытого и закрытого ключей.
Поток аттестации с помощью Microsoft Аттестация Azure Service
Процесс аттестации может быть в целом в трех main шагах:
- Экземпляр службы Аттестация Azure настраивается с соответствующей политикой аттестации. Политика аттестации позволяет поставщику MDM засвидетельствовать определенные события в загрузке, а также функции безопасности.
- Поставщик MDM активирует вызов службы аттестации, а затем устройство выполняет аттестацию проверка сохраняя отчет готовым к получению.
- Поставщик MDM после проверки, что маркер поступает из службы аттестации, он может проанализировать маркер аттестации, чтобы отразить состояние устройства.
Дополнительные сведения см. в разделе Протокол аттестации.
Шаги интеграции MAA CSP
Настройка экземпляра поставщика MAA: MAA экземпляр можно создать, выполнив действия, описанные в разделе Краткое руководство. Настройка Аттестация Azure с помощью портал Azure.
Обновите поставщик с помощью соответствующей политики. Экземпляр MAA должен быть обновлен с помощью соответствующей политики. Дополнительные сведения см. в статье Создание политики Аттестация Azure.
Пример политики аттестации:
version=1.2; configurationrules{ }; authorizationrules { => permit(); }; issuancerules { // SecureBoot enabled c:[type == "events", issuer=="AttestationService"] => add(type = "efiConfigVariables", value = JmesPath(c.value, "Events[?EventTypeString == 'EV_EFI_VARIABLE_DRIVER_CONFIG' && ProcessedData.VariableGuid == '8BE4DF61-93CA-11D2-AA0D-00E098032B8C']")); c:[type == "efiConfigVariables", issuer=="AttestationPolicy"]=> issue(type = "secureBootEnabled", value = JsonToClaimValue(JmesPath(c.value, "[?ProcessedData.UnicodeName == 'SecureBoot'] | length(@) == `1` && @[0].ProcessedData.VariableData == 'AQ'"))); ![type=="secureBootEnabled", issuer=="AttestationPolicy"] => issue(type="secureBootEnabled", value=false); // Retrieve bool properties c:[type=="events", issuer=="AttestationService"] => add(type="boolProperties", value=JmesPath(c.value, "Events[? EventTypeString == 'EV_EVENT_TAG' && (PcrIndex == `12` || PcrIndex == `13` || PcrIndex == `19` || PcrIndex == `20`)].ProcessedData.EVENT_TRUSTBOUNDARY")); c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="codeIntegrityEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_CODEINTEGRITY"))); c:[type=="codeIntegrityEnabledSet", issuer=="AttestationPolicy"] => issue(type="codeIntegrityEnabled", value=ContainsOnlyValue(c.value, true)); ![type=="codeIntegrityEnabled", issuer=="AttestationPolicy"] => issue(type="codeIntegrityEnabled", value=false); // Bitlocker Boot Status, The first non zero measurement or zero. c:[type=="events", issuer=="AttestationService"] => add(type="srtmDrtmEventPcr", value=JmesPath(c.value, "Events[? EventTypeString == 'EV_EVENT_TAG' && (PcrIndex == `12` || PcrIndex == `19`)].ProcessedData.EVENT_TRUSTBOUNDARY")); c:[type=="srtmDrtmEventPcr", issuer=="AttestationPolicy"] => issue(type="bitlockerEnabledValue", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_BITLOCKER_UNLOCK | @[? Value != `0`].Value | @[0]"))); [type=="bitlockerEnabledValue"] => issue(type="bitlockerEnabled", value=true); ![type=="bitlockerEnabledValue"] => issue(type="bitlockerEnabled", value=false); // Elam Driver (windows defender) Loaded c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="elamDriverLoaded", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_LOADEDMODULE_AGGREGATION[] | [? EVENT_IMAGEVALIDATED == `true` && (equals_ignore_case(EVENT_FILEPATH, '\\windows\\system32\\drivers\\wdboot.sys') || equals_ignore_case(EVENT_FILEPATH, '\\windows\\system32\\drivers\\wd\\wdboot.sys'))] | @ != `null`"))); [type=="elamDriverLoaded", issuer=="AttestationPolicy"] => issue(type="WindowsDefenderElamDriverLoaded", value=true); ![type=="elamDriverLoaded", issuer=="AttestationPolicy"] => issue(type="WindowsDefenderElamDriverLoaded", value=false); // Boot debugging c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="bootDebuggingEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_BOOTDEBUGGING"))); c:[type=="bootDebuggingEnabledSet", issuer=="AttestationPolicy"] => issue(type="bootDebuggingDisabled", value=ContainsOnlyValue(c.value, false)); ![type=="bootDebuggingDisabled", issuer=="AttestationPolicy"] => issue(type="bootDebuggingDisabled", value=false); // Kernel Debugging c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="osKernelDebuggingEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_OSKERNELDEBUG"))); c:[type=="osKernelDebuggingEnabledSet", issuer=="AttestationPolicy"] => issue(type="osKernelDebuggingDisabled", value=ContainsOnlyValue(c.value, false)); ![type=="osKernelDebuggingDisabled", issuer=="AttestationPolicy"] => issue(type="osKernelDebuggingDisabled", value=false); // DEP Policy c:[type=="boolProperties", issuer=="AttestationPolicy"] => issue(type="depPolicy", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_DATAEXECUTIONPREVENTION.Value | @[-1]"))); ![type=="depPolicy"] => issue(type="depPolicy", value=0); // Test Signing c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="testSigningEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_TESTSIGNING"))); c:[type=="testSigningEnabledSet", issuer=="AttestationPolicy"] => issue(type="testSigningDisabled", value=ContainsOnlyValue(c.value, false)); ![type=="testSigningDisabled", issuer=="AttestationPolicy"] => issue(type="testSigningDisabled", value=false); // Flight Signing c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="flightSigningEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_FLIGHTSIGNING"))); c:[type=="flightSigningEnabledSet", issuer=="AttestationPolicy"] => issue(type="flightSigningNotEnabled", value=ContainsOnlyValue(c.value, false)); ![type=="flightSigningNotEnabled", issuer=="AttestationPolicy"] => issue(type="flightSigningNotEnabled", value=false); // VSM enabled c:[type=="events", issuer=="AttestationService"] => add(type="srtmDrtmEventPcr", value=JmesPath(c.value, "Events[? EventTypeString == 'EV_EVENT_TAG' && (PcrIndex == `12` || PcrIndex == `19`)].ProcessedData.EVENT_TRUSTBOUNDARY")); c:[type=="srtmDrtmEventPcr", issuer=="AttestationPolicy"] => add(type="vbsEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_VBS_VSM_REQUIRED"))); c:[type=="srtmDrtmEventPcr", issuer=="AttestationPolicy"] => add(type="vbsEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_VBS_MANDATORY_ENFORCEMENT"))); c:[type=="vbsEnabledSet", issuer=="AttestationPolicy"] => issue(type="vbsEnabled", value=ContainsOnlyValue(c.value, true)); ![type=="vbsEnabled", issuer=="AttestationPolicy"] => issue(type="vbsEnabled", value=false); c:[type=="vbsEnabled", issuer=="AttestationPolicy"] => issue(type="vbsEnabled", value=c.value); // HVCI c:[type=="srtmDrtmEventPcr", issuer=="AttestationPolicy"] => add(type="hvciEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_VBS_HVCI_POLICY | @[?String == 'HypervisorEnforcedCodeIntegrityEnable'].Value"))); c:[type=="hvciEnabledSet", issuer=="AttestationPolicy"] => issue(type="hvciEnabled", value=ContainsOnlyValue(c.value, 1)); ![type=="hvciEnabled", issuer=="AttestationPolicy"] => issue(type="hvciEnabled", value=false); // IOMMU c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="iommuEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_VBS_IOMMU_REQUIRED"))); c:[type=="iommuEnabledSet", issuer=="AttestationPolicy"] => issue(type="iommuEnabled", value=ContainsOnlyValue(c.value, true)); ![type=="iommuEnabled", issuer=="AttestationPolicy"] => issue(type="iommuEnabled", value=false); // Find the Boot Manager SVN, this is measured as part of a sequence and find the various measurements // Find the first EV_SEPARATOR in PCR 12, 13, Or 14 c:[type=="events", issuer=="AttestationService"] => add(type="evSeparatorSeq", value=JmesPath(c.value, "Events[? EventTypeString == 'EV_SEPARATOR' && (PcrIndex == `12` || PcrIndex == `13` || PcrIndex == `14`)] | @[0].EventSeq")); c:[type=="evSeparatorSeq", value != "null", issuer=="AttestationPolicy"] => add(type="beforeEvSepClause", value=AppendString(AppendString("Events[? EventSeq < `", c.value), "`")); [type=="evSeparatorSeq", value=="null", issuer=="AttestationPolicy"] => add(type="beforeEvSepClause", value="Events[? `true` "); // Find the first EVENT_APPLICATION_SVN. c:[type=="beforeEvSepClause", issuer=="AttestationPolicy"] => add(type="bootMgrSvnSeqQuery", value=AppendString(c.value, " && EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `12` && ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_APPLICATION_SVN] | @[0].EventSeq")); c1:[type=="bootMgrSvnSeqQuery", issuer=="AttestationPolicy"] && c2:[type=="events", issuer=="AttestationService"] => add(type="bootMgrSvnSeq", value=JmesPath(c2.value, c1.value)); c:[type=="bootMgrSvnSeq", value!="null", issuer=="AttestationPolicy"] => add(type="bootMgrSvnQuery", value=AppendString(AppendString("Events[? EventSeq == `", c.value), "`].ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_APPLICATION_SVN | @[0]")); // The first EVENT_APPLICATION_SVN. That value is the Boot Manager SVN c1:[type=="bootMgrSvnQuery", issuer=="AttestationPolicy"] && c2:[type=="events", issuer=="AttestationService"] => issue(type="bootMgrSvn", value=JsonToClaimValue(JmesPath(c2.value, c1.value))); // OS Rev List Info c:[type=="events", issuer=="AttestationService"] => issue(type="osRevListInfo", value=JsonToClaimValue(JmesPath(c.value, "Events[? EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `13`].ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_OS_REVOCATION_LIST.RawData | @[0]"))); // Safe mode c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="safeModeEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_SAFEMODE"))); c:[type=="safeModeEnabledSet", issuer=="AttestationPolicy"] => issue(type="notSafeMode", value=ContainsOnlyValue(c.value, false)); ![type=="notSafeMode", issuer=="AttestationPolicy"] => issue(type="notSafeMode", value=true); // Win PE c:[type=="boolProperties", issuer=="AttestationPolicy"] => add(type="winPEEnabledSet", value=JsonToClaimValue(JmesPath(c.value, "[*].EVENT_WINPE"))); c:[type=="winPEEnabledSet", issuer=="AttestationPolicy"] => issue(type="notWinPE", value=ContainsOnlyValue(c.value, false)); ![type=="notWinPE", issuer=="AttestationPolicy"] => issue(type="notWinPE", value=true); // CI Policy c:[type=="events", issuer=="AttestationService"] => issue(type="codeIntegrityPolicy", value=JsonToClaimValue(JmesPath(c.value, "Events[? EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `13`].ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_SI_POLICY[].RawData"))); // Secure Boot Custom Policy c:[type=="events", issuer=="AttestationService"] => issue(type="secureBootCustomPolicy", value=JsonToClaimValue(JmesPath(c.value, "Events[? EventTypeString == 'EV_EFI_VARIABLE_DRIVER_CONFIG' && PcrIndex == `7` && ProcessedData.UnicodeName == 'CurrentPolicy' && ProcessedData.VariableGuid == '77FA9ABD-0359-4D32-BD60-28F4E78F784B'].ProcessedData.VariableData | @[0]"))); // Find the first EV_SEPARATOR in PCR 12, 13, Or 14 c:[type=="events", issuer=="AttestationService"] => add(type="evSeparatorSeq", value=JmesPath(c.value, "Events[? EventTypeString == 'EV_SEPARATOR' && (PcrIndex == `12` || PcrIndex == `13` || PcrIndex == `14`)] | @[0].EventSeq")); c:[type=="evSeparatorSeq", value != "null", issuer=="AttestationPolicy"] => add(type="beforeEvSepClause", value=AppendString(AppendString("Events[? EventSeq < `", c.value), "`")); [type=="evSeparatorSeq", value=="null", issuer=="AttestationPolicy"] => add(type="beforeEvSepClause", value="Events[? `true` "); // No restriction of EV_SEPARATOR in case it's not present //Finding the Boot App SVN // Find the first EVENT_TRANSFER_CONTROL with value 1 or 2 in PCR 12 which is before the EV_SEPARATOR c1:[type=="beforeEvSepClause", issuer=="AttestationPolicy"] && c2:[type=="bootMgrSvnSeq", value != "null", issuer=="AttestationPolicy"] => add(type="beforeEvSepAfterBootMgrSvnClause", value=AppendString(AppendString(AppendString(c1.value, "&& EventSeq >= `"), c2.value), "`")); c:[type=="beforeEvSepAfterBootMgrSvnClause", issuer=="AttestationPolicy"] => add(type="tranferControlQuery", value=AppendString(c.value, " && EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `12`&& (ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_TRANSFER_CONTROL.Value == `1` || ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_TRANSFER_CONTROL.Value == `2`)] | @[0].EventSeq")); c1:[type=="tranferControlQuery", issuer=="AttestationPolicy"] && c2:[type=="events", issuer=="AttestationService"] => add(type="tranferControlSeq", value=JmesPath(c2.value, c1.value)); // Find the first non-null EVENT_MODULE_SVN in PCR 13 after the transfer control. c:[type=="tranferControlSeq", value!="null", issuer=="AttestationPolicy"] => add(type="afterTransferCtrlClause", value=AppendString(AppendString(" && EventSeq > `", c.value), "`")); c1:[type=="beforeEvSepClause", issuer=="AttestationPolicy"] && c2:[type=="afterTransferCtrlClause", issuer=="AttestationPolicy"] => add(type="moduleQuery", value=AppendString(AppendString(c1.value, c2.value), " && EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `13` && ((ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_LOADEDMODULE_AGGREGATION[].EVENT_MODULE_SVN | @[0]) || (ProcessedData.EVENT_LOADEDMODULE_AGGREGATION[].EVENT_MODULE_SVN | @[0]))].EventSeq | @[0]")); c1:[type=="moduleQuery", issuer=="AttestationPolicy"] && c2:[type=="events", issuer=="AttestationService"] => add(type="moduleSeq", value=JmesPath(c2.value, c1.value)); // Find the first EVENT_APPLICATION_SVN after EV_EVENT_TAG in PCR 12. c:[type=="moduleSeq", value!="null", issuer=="AttestationPolicy"] => add(type="applicationSvnAfterModuleClause", value=AppendString(AppendString(" && EventSeq > `", c.value), "`")); c1:[type=="beforeEvSepClause", issuer=="AttestationPolicy"] && c2:[type=="applicationSvnAfterModuleClause", issuer=="AttestationPolicy"] => add(type="bootAppSvnQuery", value=AppendString(AppendString(c1.value, c2.value), " && EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `12`].ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_APPLICATION_SVN | @[0]")); c1:[type=="bootAppSvnQuery", issuer=="AttestationPolicy"] && c2:[type=="events", issuer=="AttestationService"] => issue(type="bootAppSvn", value=JsonToClaimValue(JmesPath(c2.value, c1.value))); // Finding the Boot Rev List Info c:[type=="events", issuer=="AttestationService"] => issue(type="bootRevListInfo", value=JsonToClaimValue(JmesPath(c.value, "Events[? EventTypeString == 'EV_EVENT_TAG' && PcrIndex == `13`].ProcessedData.EVENT_TRUSTBOUNDARY.EVENT_BOOT_REVOCATION_LIST.RawData | @[0]"))); };
Вызовите TriggerAttestation с помощью
rpid
иAzure Active Directory token
attestURI
: используйте URL-адрес аттестации, созданный на шаге 1, и добавьте соответствующую версию API, которую вы хотите использовать. Дополнительные сведения о версии API см. в разделе Аттестация — Attest TPM — REST API.Вызовите Метод GetAttestReport и декодируйте и синтаксический анализ отчета, чтобы убедиться, что аттестованный отчет содержит необходимые свойства: GetAttestReport возвращает подписанный маркер аттестации в виде JWT. JWT можно декодировать для анализа информации в соответствии с политикой аттестации.
{ "typ": "JWT", "alg": "RS256", "x5c": [ "MIIE.....=", "MIIG.....=", "MIIF.....=" ], "kid": "8FUer20z6wzf1rod044wOAFdjsg" }.{ "nbf": 1633664812, "exp": 1634010712, "iat": 1633665112, "iss": "https://contosopolicy.eus.attest.azure.net", "jti": "2b63663acbcafefa004d20969991c0b1f063c9be", "ver": "1.0", "x-ms-ver": "1.0", "rp_data": "AQIDBA", "nonce": "AQIDBA", "cnf": { "jwk": { "kty": "RSA", "n": "yZGC3-1rFZBt6n6vRHjRjvrOYlH69TftIQWOXiEHz__viQ_Z3qxWVa4TfrUxiQyDQnxJ8-f8tBRmlunMdFDIQWhnew_rc3-UYMUPNcTQ0IkrLBDG6qDjFFeEAMbn8gqr0rRWu_Qt7Cb_Cq1upoEBkv0RXk8yR6JXmFIvLuSdewGs-xCWlHhd5w3n1rVk0hjtRk9ZErlbPXt74E5l-ZZQUIyeYEZ1FmbivOIL-2f6NnKJ-cR4cdhEU8i9CH1YV0r578ry89nGvBJ5u4_3Ib9Ragdmxm259npH53hpnwf0I6V-_ZhGPyF6LBVUG_7x4CyxuHCU20uI0vXKXJNlbj1wsQ", "e": "AQAB" } }, "x-ms-policy-hash": "GiGQCTOylCohHt4rd3pEppD9arh5mXC3ifF1m1hONh0", "WindowsDefenderElamDriverLoaded": true, "bitlockerEnabled": true, "bitlockerEnabledValue": 4, "bootAppSvn": 1, "bootDebuggingDisabled": true, "bootMgrSvn": 1, "bootRevListInfo": "gHWqR2F-1wEgAAAACwBxrZXHbaiuTuO0PSaJ7WQMF8yz37Z2ATgSNTTlRkwcTw", "codeIntegrityEnabled": true, "codeIntegrityPolicy": [ "AAABAAAAAQBWAAsAIAAAAHsAOABmAGIANAA4ADYANQBlAC0AZQA5ADAAYgAtADQANAA0AGYALQBiADUAYgA1AC0AZQAyAGEAYQA1ADEAZAA4ADkAMABmAGQAfQAuAEMASQBQAAAAVnW86ERqAg5n9QT1UKFr-bOP2AlNtBaaHXjZODnNLlk", "AAAAAAAACgBWAAsAIAAAAHsAYgBjADQAYgBmADYAZAA3AC0AYwBjADYAMAAtADQAMABmADAALQA4ADYANAA0AC0AMQBlADYANAA5ADEANgBmADgAMQA4ADMAfQAuAEMASQBQAAAAQ7vOXuAbBRIMglSSg7g_LHNeHoR4GrY-M-2W5MNvf0o", "AAAAAAAACgBWAAsAIAAAAHsAYgAzADEAOAA5ADkAOQBhAC0AYgAxADMAZQAtADQANAA3ADUALQBiAGMAZgBkAC0AMQBiADEANgBlADMAMABlADYAMAAzADAAfQAuAEMASQBQAAAALTmwU3eadNtg0GyAyKIAkYed127RJCSgmfFmO1jN_aI", "AAAAAAAACgBWAAsAIAAAAHsAZgBlADgAMgBkADUAOAA5AC0ANwA3AGQAMQAtADQAYwA3ADYALQA5AGEANABhAC0AZQA0ADUANQA0ADYAOAA4ADkANAAxAGIAfQAuAEMASQBQAAAA8HGUwA85gHN_ThItTYtu6sw657gVuOb4fOhYl-YJRoc", "AACRVwAACgAmAAsAIAAAAEQAcgBpAHYAZQByAFMAaQBQAG8AbABpAGMAeQAuAHAANwBiAAAAYcVuY0HdW4Iqr5B-6Sl85kwIXRG9bqr43pVhkirg4qM" ], "depPolicy": 0, "flightSigningNotEnabled": false, "hvciEnabled": true, "iommuEnabled": true, "notSafeMode": true, "notWinPE": true, "osKernelDebuggingDisabled": true, "osRevListInfo": "gHLuW2F-1wEgAAAACwDLyDTUQILjdz_RfNlShVgNYT9EghL7ceMReWg9TuwdKA", "secureBootEnabled": true, "testSigningDisabled": true, "vbsEnabled": true }.[Signature]
Подробнее
Дополнительные сведения об аттестации доверенного платформенного модуля см. здесь: Microsoft Аттестация Azure.
Windows 10 работоспособности устройстваПримечание
Используемые термины:
TPM (доверенный платформенный модуль). TPM — это специализированная аппаратная защищенная логика, которая выполняет ряд аппаратных операций безопасности, включая предоставление защищенного хранилища, случайное создание чисел, шифрование и подписывание.
Функция DHA (работоспособность устройств): функция работоспособности устройств (DHA) позволяет ИТ-администраторам предприятия удаленно отслеживать состояние безопасности управляемых устройств с помощью аппаратно защищенных и аттестованных данных через канал коммуникации, устойчивый к незаконному изменению.
Устройство с поддержкой DHA (устройство с поддержкой работоспособности устройства). Устройство с поддержкой работоспособности устройства (С поддержкой DHA) — это вычислительное устройство (телефон, настольный компьютер, ноутбук, планшет, сервер), которое работает Windows 10 и поддерживает TPM версии 1.2 или 2.0.
DHA-Session (Device HealthAttestation session): сеанс работоспособности устройства (DHA-Session) описывает сквозной поток связи, выполняемый в одном сеансе аттестации работоспособности устройства. Следующий список транзакций выполняется в одном сеансе DHA:
- DHA-CSP и DHA-Service обмен данными:
- DHA-CSP перенаправит данные загрузки устройства (DHA-BootData) в DHA-Service
- DHA-Service ответы с зашифрованным большим двоичным объектом данных (DHA-EncBlob)
- DHA-CSP и MDM-Server обмен данными:
- MDM-Server отправляет запрос на проверку работоспособности устройства в DHA-CSP
- DHA-CSP отвечает с полезными данными с именем DHA-Data, который включает зашифрованный (DHA-EncBlob) и подписанный (DHA-SignedBlob) большой двоичный объект данных
- MDM-Server и DHA-Service связи:
- MDM-Server публикует данные, полученные с устройств, в DHA-Service
- DHA-Service проверяет полученные данные и отвечает с отчетом о работоспособности устройства (DHA-Report)
- DHA-CSP и DHA-Service обмен данными:
Данные сеанса DHA (данные сеанса работоспособности устройства): в одной транзакции DHA создается или используется следующий список данных:
- DHA-BootData: данные загрузки устройства (журналы TCG, значения PCR, сертификат устройства или доверенного платформенного модуля, счетчики загрузки и доверенного платформенного модуля), необходимые для проверки работоспособности загрузки устройства.
- DHA-EncBlob: зашифрованный сводный отчет, который DHA-Service проблем с устройством после просмотра DHA-BootData оно получает от устройств.
- DHA-SignedBlob: это подписанный snapshot текущего состояния среды выполнения устройства, который записывается DHA-CSP во время аттестации работоспособности устройства.
- DHA-Data: большой двоичный объект данных в формате XML, который устройства перенаправляют для проверки работоспособности устройства для DHA-Service через MDM-Server. DHA-Data состоит из двух частей:
- DHA-EncBlob: зашифрованный большой двоичный объект данных, который устройство получает от DHA-Service
- DHA-SignedBlob: текущий snapshot текущего состояния безопасности устройства, созданного DHA-CSP.
- DHA-Report: отчет, выданный DHA-Service для MDM-Server
- Nonce: защищенный от шифрования номер, созданный MDM-Server, который защищает DHA-Session от атак типа "злоумышленник в середине".
MDM с поддержкой DHA (решение для управления устройствами с поддержкой "Работоспособность устройств"): решение для управления устройствами с поддержкой DHA с поддержкой DHA — это средство управления устройствами, интегрированное с функцией DHA. DHA-Enabled решения по управлению устройствами позволяют ИТ-менеджерам предприятия повышать уровень безопасности для своих управляемых устройств на основе данных, защищенных оборудованием (TPM), которым можно доверять, даже если устройство скомпрометировано расширенными угрозами безопасности или запущена вредоносная операционная система (со снятой защитой). DHA-Enabled-MDM выполняет следующий список операций:
- Включает функцию DHA на устройстве DHA-Enabled
- Выдает запросы на аттестацию работоспособности устройств для зарегистрированных или управляемых устройств
- Собирает данные аттестации работоспособности устройства (DHA-Data) и отправляет их в службу аттестации работоспособности устройств (DHA-Service) для проверки.
- Возвращает отчет о работоспособности устройства (DHA-Report) от DHA-Service, который активирует действие соответствия требованиям.
DHA-CSP (поставщик службы конфигурации устройства): поставщик службы конфигурации работоспособности устройства (DHA-CSP) использует TPM устройства и встроенное ПО для измерения критических свойств безопасности BIOS и загрузки Windows устройства, так что даже в системе, зараженной вредоносными программами на уровне ядра или rootkit, эти свойства нельзя подделать. DHA-CSP выполняет следующий список операций:
- Собирает данные загрузки устройства (DHA-BootData) с управляемого устройства.
- Пересылает DHA-BootData в службу аттестации работоспособности устройств (DHA-Service)
- Получает зашифрованный большой двоичный объект (DHA-EncBlob) от DHA-Service и сохраняет его в локальном кэше на устройстве.
- Получает запросы на аттестацию (DHA-Requests) от DHA-Enabled MDM и отвечает с данными аттестации работоспособности устройств (DHA-Data)
DHA-Service (Служба работоспособности устройств): служба работоспособности устройства (DHA-Service) проверяет данные, получаемые от DHA-CSP, и выдает защищенный отчет с высоким уровнем доверия (TPM) (DHA-Report) для DHA-Enabled решений по управлению устройствами через устойчивый к незаконному изменению и явному каналу коммуникации. DHA-Service доступна в двух вариантах: "DHA-Cloud" и "DHA-Server2016". DHA-Service поддерживает различные сценарии реализации, включая облачные, локальные, воздушные и гибридные сценарии. DHA-Service выполняет следующий список операций:
- Получает данные загрузки устройства (DHA-BootData) с устройства DHA-Enabled
- Пересылает DHA-BootData в службу аттестации работоспособности устройств (DHA-Service)
- Получает зашифрованный большой двоичный объект (DHA-EncBlob) от DHA-Service и сохраняет его в локальном кэше на устройстве.
- Получает запросы на аттестацию (DHA-Requests) от DHA-Enabled-MDM и отвечает с отчетом о работоспособности устройства (DHA-Report)
тип DHA-Service | Описание | Операционные затраты |
---|---|---|
Аттестация работоспособности устройств — облако (DHA-Cloud) | DHA-Cloud является принадлежащим и управляемым DHA-Service корпорации Майкрософт, который:
|
Без затрат |
Аттестация работоспособности устройства — локальная(DHA-OnPrem) | DHA-OnPrem относится к DHA-Service, выполняемой локально:
|
Операционные затраты на запуск одного или нескольких экземпляров Локального сервера Server 2016. |
Аттестация работоспособности устройств — облако Enterprise-Managed (DHA-EMC) | DHA-EMC — это управляемая предприятием DHA-Service, которая выполняется в качестве виртуального узла или службы в Windows Server 2016 совместимой облачной службе, управляемой предприятием, например Microsoft Azure.
|
Операционные затраты на запуск Server 2016 в совместимой облачной службе, например Microsoft Azure. |
Шаги интеграции DHA-CSP
Для интеграции функции аттестации работоспособности устройств (Майкрософт) с решением управления устройствами (MDM) требуется следующий список задач проверки и разработки:
- Проверка доступа по протоколу HTTPS
- Назначение корпоративной доверенной службы DHA-Service
- Указание клиенту подготовить DHA-data к проверке
- Выполните действия на основе ответа клиентов
- Указание клиенту пересылать DHA-данные для проверки
- Передача данных DHA в службу DHA
- Получение ответа от службы DHA
- Анализ данных DHA-Report. Принятие соответствующих мер политики на основе результатов оценки
Каждый шаг подробно описан в следующих разделах этого раздела.
Шаг 1. Проверка доступа по протоколу HTTPS
Убедитесь, что сервер MDM и устройство (клиент MDM) могут получить доступ к has.spserv.microsoft.com по протоколу TCP через порт 443 (HTTPS).
Вы можете использовать OpenSSL для проверки доступа к DHA-Service. Ниже приведен пример команды OpenSSL и ответ, созданный DHA-Service:
PS C:\openssl> ./openssl.exe s_client -connect has.spserv.microsoft.com:443
CONNECTED(000001A8)
---
Certificate chain
0 s:/CN=*.spserv.microsoft.com
i:/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=Microsoft IT/CN=Microsoft IT SSL SHA2
1 s:/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=Microsoft IT/CN=Microsoft IT SSL SHA2
i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGOTCCBCGgAwIBAgITWgAA1KJb40tpukQoewABAADUojANBgkqhkiG9w0BAQsFA4ICAQCJaKewFQuqQwR5fkAr9kZOmtq5fk03p82eHWLaftXlc4RDvVFp4a2ciSjZL8f3f+XWPVdUj9DAi3bCSddlrcNOPRXNepFC1OEmKtE9jM0r7M8qnqFkIfbNrVNUtPxHoraQeMIgbk0SHEOlShY2GXETVBqZdDZ5Rmk4rA+3ggoeV8hNzm2dfNp0iGSrZzawbLzWU1D2Tped1k5IV63yb+cU/TmM ……………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………………………………………………………………………
……………2RXXwogn1UM8TZduCEjz+b05mAkvytugzzaI4wXkCP4OgNyy8gul2z5Gj/51pCTN
-----END CERTIFICATE-----
subject=/CN=*.spserv.microsoft.com
issuer=/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=Microsoft IT/CN=Microsoft IT SSL SHA2
---
No client certificate CA names sent
Peer signing digest: SHA1
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 3681 bytes and written 561 bytes
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol: TLSv1.2
Cipher: ECDHE-RSA-AES256-SHA384
Session-ID: B22300009621370F84A4A3A7D9FC40D584E047C090604E5226083A02ED239C93
Session-ID-ctx:
Master-Key: 9E3F6BE5B3D3B55C070470CA2B62EF59CC1D5ED9187EF5B3D1BBF4C101EE90BEB04F34FFD748A13C92A387104B8D1DE7
Key-Arg: None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1432078420
Timeout: 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
Шаг 2. Назначение корпоративного доверенного DHA-Service
Существует три типа DHA-Service:
- Аттестация работоспособности устройств — облако (принадлежит и управляется корпорацией Майкрософт)
- Аттестация работоспособности устройств — локальная (принадлежит и управляется предприятием, выполняется на Windows Server 2016 локально)
- Аттестация работоспособности устройств — Enterprise-Managed cloud (принадлежит и управляется предприятием, работает в Windows Server 2016 совместимом облаке, управляемом предприятием)
DHA-Cloud является параметром по умолчанию. Если предприятие планирует использовать Microsoft DHA-Cloud в качестве доверенного поставщика DHA-Service, никаких дальнейших действий не требуется.
Для DHA-OnPrem & сценариев DHA-EMC отправьте команду SyncML в узел HASEndpoint, чтобы указать управляемому устройству взаимодействовать с доверенной корпоративной службой DHA-Service.
В следующем примере показан пример вызова, который указывает управляемому устройству взаимодействовать с корпоративной службой DHA-Service.
<Replace>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/HASEndpoint</LocURI>
</Target>
<Data> www.ContosoDHA-Service</Data>
</Item>
</Replace>
Шаг 3. Указание клиенту подготовить данные работоспособности для проверки
Отправьте вызов SyncML, чтобы начать сбор данных DHA-Data.
В следующем примере показан пример вызова, который активирует сбор и проверку данных аттестации работоспособности с управляемого устройства.
<Exec>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/VerifyHealth</LocURI>
</Target>
</Item>
</Exec>
<Get>
<CmdID>2</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/Status</LocURI>
</Target>
</Item>
</Get>
Шаг 4. Выполнение действий на основе ответа клиента
После того как клиент получит запрос на аттестацию работоспособности, он отправляет ответ. В следующем списке описаны ответы, а также рекомендуемые действия.
- Если ответ HEALTHATTESTATION_CERT_RETRIEVAL_COMPLETE (3), перейдите к следующему разделу.
- Если ответ HEALTHATTESTATION_CERT_RETRIEVAL_REQUESTED (1) или HEALTHATTESTATION_CERT_RETRIEVAL_UNINITIALIZED (0) подождите оповещение, перейдите к следующему разделу.
Ниже приведен пример оповещения, выдаваемого DHA_CSP:
<Alert>
<CmdID>1</CmdID>
<Data>1226</Data>
<Item>
<Source>
<LocURI>./Vendor/MSFT/HealthAttestation/VerifyHealth</LocURI>
</Source>
<Meta>
<Type xmlns="syncml:metinf">com.microsoft.mdm:HealthAttestation.Result</Type>
<Format xmlns="syncml:metinf">int</Format>
</Meta>
<Data>3</Data>
</Item>
</Alert>
- Если ответ на узел состояния не равно 0, 1 или 3, устраните проблему. Полный список кодов состояния см. в разделе HealthAttestation CSP status and error codes.
Шаг 5. Указание клиенту пересылать данные аттестации работоспособности для проверки
Создайте вызов узлов Nonce, Certificate и CorrelationId и соберите зашифрованные полезные данные, которые включают сертификат работоспособности и связанные данные с устройства.
Вот пример.
<Replace>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/Nonce</LocURI>
</Target>
<Data>AAAAAAAAAFFFFFFF</Data>
</Item>
</Replace>
<Get>
<CmdID>2</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/Certificate</LocURI>
</Target>
</Item>
</Get>
<Get>
<CmdID>3</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/CorrelationId </LocURI>
</Target>
</Item>
</Get>
Шаг 6. Пересылка данных аттестации работоспособности устройства в службу DHA
В ответ на запрос, отправленный на предыдущем шаге, клиент MDM перенаправит большой двоичный объект в формате XML (ответ от узла ./Vendor/MSFT/HealthAttestation/Certificate) и идентификатор вызова с именем CorrelationId (ответ на узел ./Vendor/MSFT/HealthAttestation/CorrelationId).
Когда MDM-Server получает указанные выше данные, он должен:
Зайдите в журнал CorrelationId, полученный от устройства (для устранения неполадок или ссылки на него), связанный с вызовом.
Декодирование большого двоичного объекта данных в формате XML, полученного с устройства
Добавьте nonce, созданный службой MDM (добавьте nonce, который был переадресован на устройство на шаге 5), в структуру XML, пересылаемую устройством в следующем формате:
<?xml version='1.0' encoding='utf-8' ?> <HealthCertificateValidationRequest ProtocolVersion='1' xmlns='http://schemas.microsoft.com/windows/security/healthcertificate/validation/request/v1'> <Nonce>[INT]</Nonce> <Claims> [base64 blob, eg ‘ABc123+/…==’] </Claims> <HealthCertificateBlob> [base64 blob, eg ‘ABc123+/...==’] </HealthCertificateBlob> </HealthCertificateValidationRequest>
Перенаправляя структуру xml-данных (включая nonce, добавленную на предыдущем шаге) (http post) в назначенный DHA-Service, который выполняется на:
- сценарий DHA-Cloud (принадлежащей корпорации Майкрософт и управляемой DHA-Service):
https://has.spserv.microsoft.com/DeviceHealthAttestation/ValidateHealthCertificate/v3
- DHA-OnPrem или DHA-EMC:
https://FullyQualifiedDomainName-FDQN/DeviceHealthAttestation/ValidateHealthCertificate/v3
- сценарий DHA-Cloud (принадлежащей корпорации Майкрософт и управляемой DHA-Service):
Шаг 7. Получение ответа от службы DHA
Когда служба аттестации работоспособности устройств Майкрософт получает запрос на проверку, она выполняет следующие действия:
- Расшифровывает полученные зашифрованные данные.
- Проверяет полученные данные.
- Создает отчет и предоставляет результаты оценки серверу MDM по протоколу SSL в формате XML.
Шаг 8. Выполнение соответствующих действий политики на основе результатов оценки
После того как сервер MDM получит проверенные данные, эти сведения можно использовать для принятия решений по политике путем оценки данных. Ниже приведены некоторые возможные действия.
- Разрешите устройству доступ.
- Разрешите устройству доступ к ресурсам, но пометка устройства для дальнейшего исследования.
- Запретить устройству доступ к ресурсам.
схема DHA-Report версии 3
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/windows/security/healthcertificate/validation/response/v3"
targetNamespace="http://schemas.microsoft.com/windows/security/healthcertificate/validation/response/v3"
elementFormDefault="qualified">
<xs:element name="HealthCertificateValidationResponse" type="HealthCertificateValidationResponse_T"/>
<xs:complexType name="ResponseCommon_T">
<xs:attribute name="ErrorCode" type="xs:int" use="required"/>
<xs:attribute name="ErrorMessage" type="xs:string" use="required"/>
<xs:attribute name="ProtocolVersion" use="required">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="HealthCertificatePublicProperties_T">
<xs:annotation>
<xs:documentation>Health certificate non machine identifiable properties </xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Issued" type="xs:dateTime"/>
<xs:element name="AIKPresent" type="Boolean_T" />
<xs:element name="ResetCount" type="xs:unsignedInt"/>
<xs:element name="RestartCount" type="xs:unsignedInt"/>
<xs:element name="DEPPolicy" type="xs:unsignedInt"/>
<xs:element name="BitlockerStatus" type="xs:unsignedInt"/>
<xs:element name="BootManagerRevListVersion" type="xs:unsignedInt"/>
<xs:element name="CodeIntegrityRevListVersion" type="xs:unsignedInt"/>
<xs:element name="SecureBootEnabled" type="Boolean_T"/>
<xs:element name="BootDebuggingEnabled" type="Boolean_T"/>
<xs:element name="OSKernelDebuggingEnabled" type="Boolean_T"/>
<xs:element name="CodeIntegrityEnabled" type="Boolean_T"/>
<xs:element name="TestSigningEnabled" type="Boolean_T"/>
<xs:element name="SafeMode" type="Boolean_T"/>
<xs:element name="WinPE" type="Boolean_T"/>
<xs:element name="ELAMDriverLoaded" type="Boolean_T"/>
<xs:element name="VSMEnabled" type="Boolean_T"/>
<xs:element name="PCRHashAlgorithmID" type="xs:unsignedInt"/>
<xs:element name="BootAppSVN" type="xs:unsignedInt"/>
<xs:element name="BootManagerSVN" type="xs:unsignedInt"/>
<xs:element name="TpmVersion" type="xs:unsignedInt"/>
<xs:element name="PCR0" type="xs:hexBinary"/>
<xs:element name="CIPolicy" type="xs:hexBinary" minOccurs ="0" maxOccurs ="1"/>
<xs:element name="SBCPHash" type="xs:hexBinary" minOccurs ="0" maxOccurs ="1"/>
<xs:element name="BootRevListInfo" type="xs:hexBinary" minOccurs ="0" maxOccurs ="1"/>
<xs:element name="OSRevListInfo" type="xs:hexBinary" minOccurs ="0" maxOccurs ="1"/>
<!--
<xs:element name="PCRCount" type="xs:unsignedInt"/>
<xs:element name="PCRSize" type="xs:unsignedShort"/>
<xs:element name="PCRHashAlgorithmID" type="xs:unsignedShort"/>
<xs:element name="PCR" type="xs:hexBinary"/>
-->
</xs:sequence>
</xs:complexType>
<xs:complexType name="HealthStatusMismatchFlags_T">
<xs:annotation>
<xs:documentation>If there's a status mismatch, these flags will be set</xs:documentation>
</xs:annotation>
<xs:sequence>
<!-- Hibernate/Resume count -->
<xs:element name="ResumeCount" type="Boolean_T"/>
<!-- Reboot count -->
<xs:element name="RebootCount" type="Boolean_T"/>
<xs:element name="PCR" type="Boolean_T"/>
<xs:element name="BootAppSVN" type="Boolean_T"/>
<xs:element name="BootManagerSVNChain" type="Boolean_T"/>
<xs:element name="BootAppSVNChain" type="Boolean_T"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="HealthCertificateValidationResponse_T" >
<xs:annotation>
<xs:documentation>Health certificate validation response </xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ResponseCommon_T">
<xs:sequence>
<!--Optional element, present only when the certificate can be verified and decrypted-->
<xs:element name="HealthCertificateProperties" type="HealthCertificatePublicProperties_T" minOccurs="0"/>
<!--Optional element, present only when the reason for a validation failure is a mismatch between the
current health state and the certificate health state-->
<xs:element name="HealthStatusMismatchFlags" type="HealthStatusMismatchFlags_T" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="Boolean_T">
<xs:restriction base="xs:boolean">
<xs:pattern value="true|false"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Следующий список точек данных проверяется DHA-Service в DHA-Report версии 3.
Выдано: дата и время оценки или выдачи отчета DHA в MDM.
AIKPresent. Если на устройстве присутствует ключ удостоверения аттестации (AIK), это означает, что у устройства есть сертификат ключа подтверждения (EK). Ему можно доверять больше, чем устройству без сертификата EK.
Если AIKPresent = True (1), то разрешите доступ.
Если AIKPresent = False (0), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Разрешить условный доступ на основе других точек данных, которые присутствуют во время оценки. Например, другие атрибуты сертификата работоспособности или прошлые действия и журнал доверия устройства.
- Выполните одно из предыдущих действий и дополнительно поместите устройство в список watch, чтобы более тщательно отслеживать устройство на наличие потенциальных рисков.
ResetCount (сообщается только для устройств с поддержкой доверенного платформенного модуля 2.0). Этот атрибут сообщает о количестве операций гибернации или возобновления работы устройства с пк.
RestartCount (сообщается только для устройств, поддерживающих TPM 2.0): этот атрибут сообщает о количестве перезагрузок устройства ПК.
DEPPolicy: устройство может быть более доверенным, если на устройстве включена политика DEP.
Политика защиты от выполнения данных (DEP) определяет набор аппаратных и программных технологий, которые выполняют дополнительные проверки памяти, чтобы предотвратить запуск вредоносного кода в системе. Безопасная загрузка позволяет использовать ограниченный список в x86/amd64, а в ARM NTOS блокирует его в.
DEPPolicy можно отключить или включить с помощью следующих команд в WMI или скрипте PowerShell:
- Чтобы отключить DEP, введитеbcdedit.exe /set {current} nx AlwaysOff.
- Чтобы включить DEP, введитеbcdedit.exe /set {current} nx AlwaysOn.
Если DEPPolicy = 1 (Включено), разрешите доступ.
Если DEPPolicy = 0 (Выкл.), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Разрешить условный доступ на основе других точек данных, которые присутствуют во время оценки. Например, другие атрибуты сертификата работоспособности или прошлые действия и журнал доверия устройства.
- Выполните одно из предыдущих действий и дополнительно поместите устройство в список watch, чтобы более тщательно отслеживать устройство на наличие потенциальных рисков.
Оценка политики DEP — это не двоичное состояние при запросе. Затем он сопоставляется с состоянием Вкл. или Выкл.
Уровень политики DEP Описание Зарегистрированный уровень аттестации Значение свойства OptIn (конфигурация по умолчанию) DeP применяется только к системным компонентам и службам Windows. 0 2 OptOut DEP включен для всех процессов. Администраторы могут вручную создать список конкретных приложений, к которым не применен dep. 1 3 AlwaysOn DEP включен для всех процессов. 3 1 AlwaysOff DEP не включен ни для одного процесса. 2 0 BitLockerStatus (сообщает, был ли bitLocker включен во время начальной загрузки).
Если bitLocker сообщается о том, что во время загрузки он включен, устройство может защитить данные, хранящиеся на диске, от несанкционированного доступа, когда система отключена или переходит в режим гибернации.
Шифрование диска Windows BitLocker шифрует все данные, хранящиеся на томе операционной системы Windows. BitLocker использует доверенный платформенный модуль для защиты операционной системы Windows и пользовательских данных, а также помогает гарантировать, что компьютер не был изменен, даже если он оставлен без присмотра, потерян или украден.
Если компьютер оснащен совместимым TPM, BitLocker использует TPM для блокировки ключей шифрования, которые защищают данные. В результате доступ к ключам будет невозможно, пока доверенный платформенный модуль не проверит состояние компьютера.
Если BitLockerStatus = 1 (включено), то разрешите доступ.
Если BitLockerStatus = 0 (Выкл.), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Разрешить условный доступ на основе других точек данных, которые присутствуют во время оценки. Например, другие атрибуты сертификата работоспособности или прошлые действия и журнал доверия устройства.
- Выполните одно из предыдущих действий и дополнительно поместите устройство в список watch, чтобы более тщательно отслеживать устройство на наличие потенциальных рисков.
BootManagerRevListVersion: этот атрибут указывает версию диспетчера загрузки, запущенную на устройстве, чтобы отслеживать и управлять безопасностью последовательности загрузки или среды.
Если BootManagerRevListVersion = [CurrentVersion], разрешите доступ.
Если
BootManagerRevListVersion !
= [CurrentVersion], выполните одно из следующих действий, которые соответствуют корпоративным политикам:- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI и MBI.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
- Активируйте корректирующее действие, например сообщите группе технической поддержки, чтобы связаться с владельцем, расследующим проблему.
CodeIntegrityRevListVersion: этот атрибут указывает версию кода, который выполняет проверки целостности во время последовательности загрузки. С помощью этого атрибута можно определить, выполняет ли устройство последнюю версию кода, выполняющую проверки целостности, или подвержено ли оно риску безопасности (отозвано), и применить соответствующее действие политики.
Если CodeIntegrityRevListVersion = [CurrentVersion], разрешите доступ.
Если
CodeIntegrityRevListVersion !
= [CurrentVersion], выполните одно из следующих действий, которые соответствуют корпоративным политикам:- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI и MBI.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
- Активируйте корректирующее действие, например сообщите группе технической поддержки, чтобы связаться с владельцем, расследующим проблему.
SecureBootEnabled. Если включена безопасная загрузка, основные компоненты, используемые для загрузки компьютера, должны иметь правильные криптографические сигнатуры, которыми доверяет организация, изготовивляющая устройство. Встроенное ПО UEFI проверяет это требование, прежде чем позволит запустить компьютер. Если какие-либо файлы были изменены, что нарушает их сигнатуру, система не загружается.
Если SecureBootEnabled = 1 (True), то разрешите доступ.
Если SecurebootEnabled = 0 (False), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Разрешить условный доступ на основе других точек данных, которые присутствуют во время оценки. Например, другие атрибуты сертификата работоспособности или прошлые действия и журнал доверия устройства.
- Выполните одно из предыдущих действий и дополнительно поместите устройство в список watch, чтобы более тщательно отслеживать устройство на наличие потенциальных рисков.
BootDebuggingEnabled: загрузка с поддержкой отладки указывает на устройство, которое используется при разработке и тестировании. Устройства, используемые для тестирования и разработки, как правило, менее безопасны: устройство может выполнять нестабильный код или иметь меньше ограничений безопасности, необходимых для тестирования и разработки.
Отладку загрузки можно отключить или включить с помощью следующих команд В WMI или скрипта PowerShell:
- Чтобы отключить отладку загрузки, введитеbcdedit.exe /set {current} bootdebug off.
- Чтобы включить отладку загрузки, введитеbcdedit.exe /set {current} bootdebug on.
Если BootdebuggingEnabled = 0 (False), то разрешите доступ.
Если BootDebuggingEnabled = 1 (True), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
- Активируйте корректирующее действие, например включение VSM с помощью WMI или скрипта PowerShell.
OSKernelDebuggingEnabled: OSKernelDebuggingEnabled указывает на устройство, используемое при разработке и тестировании. Устройства, используемые для тестирования и разработки, как правило, менее безопасны: они могут выполнять нестабильный код или настраиваться с меньшим количеством ограничений безопасности, необходимых для тестирования и разработки.
Если OSKernelDebuggingEnabled = 0 (False), то разрешите доступ.
Если OSKernelDebuggingEnabled = 1 (True), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
- Активируйте корректирующее действие, например сообщите группе технической поддержки, чтобы связаться с владельцем, расследующим проблему.
CodeIntegrityEnabled: если включена целостность кода, выполнение кода ограничивается проверенным кодом.
Целостность кода — это функция, которая проверяет целостность драйвера или системного файла при каждой загрузке в память. Целостность кода определяет, загружается ли неподписанный драйвер или системный файл в ядро или системный файл был изменен вредоносным программным обеспечением, запущенным учетной записью пользователя с правами администратора.
В 64-разрядных версиях операционной системы драйверы режима ядра должны иметь цифровую подпись.
Если CodeIntegrityEnabled = 1 (True), то разрешите доступ.
Если CodeIntegrityEnabled = 0 (False), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Разрешить условный доступ на основе других точек данных, которые присутствуют во время оценки. Например, другие атрибуты сертификата работоспособности или прошлые действия и журнал доверия устройства.
- Выполните одно из предыдущих действий и дополнительно поместите устройство в список watch, чтобы более тщательно отслеживать устройство на наличие потенциальных рисков.
TestSigningEnabled. Если тестовая подпись включена, устройство не применяет проверку подписи во время загрузки и позволяет неподписанным драйверам (например, неподписанным модулям UEFI) загружаться во время загрузки.
Тестовое подписывание можно отключить или включить с помощью следующих команд в WMI или скрипте PowerShell:
- Чтобы отключить отладку загрузки, введитеbcdedit.exe /set {current} testsigning off.
- Чтобы включить отладку загрузки, введитеbcdedit.exe /set {current} testsigning on.
Если TestSigningEnabled = 0 (False), то разрешите доступ.
Если TestSigningEnabled = 1 (True), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI и MBI.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
- Активируйте корректирующее действие, например включение тестовой подписи с помощью WMI или скрипта PowerShell.
SafeMode: безопасный режим — это вариант устранения неполадок для Windows, который запускает компьютер в ограниченном состоянии. Запускаются только основные файлы и драйверы, необходимые для запуска Windows.
Если SafeMode = 0 (False), разрешите доступ.
Если SafeMode = 1 (True), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Активируйте корректирующее действие, например сообщите группе технической поддержки, чтобы связаться с владельцем, расследующим проблему.
WinPE. Среда предварительной установки Windows (Windows PE) — это минимальная операционная система с ограниченным количеством служб, которая используется для подготовки компьютера к установке Windows, копирования образов дисков с сетевого файлового сервера и запуска программы установки Windows.
Если WinPE = 0 (False), то разрешите доступ.
Если WinPE = 1 (True), ограничьте доступ к удаленным ресурсам, необходимым для установки ОС Windows.
ELAMDriverLoaded (Защитник Windows). Чтобы использовать эту функцию отчетов, необходимо отключить "Гибридное возобновление" на устройстве. Защита от вредоносных программ при раннем запуске (ELAM) обеспечивает защиту компьютеров в сети при запуске и до инициализации сторонних драйверов.
В текущем выпуске этот атрибут отслеживает или сообщает, только если во время начальной загрузки был загружен сторонний ELAM (Защитник Windows) Майкрософт.
Если ожидается, что устройство будет использовать стороннюю антивирусную программу, игнорируйте сообщаемое состояние.
Если ожидается, что устройство будет использовать Защитник Windows и ELAMDriverLoaded = 1 (True), разрешите доступ.
Если ожидается, что устройство будет использовать Защитник Windows и ELAMDriverLoaded = 0 (False), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Активируйте корректирующее действие, например сообщите группе технической поддержки, чтобы связаться с владельцем, расследующим проблему.
VSMEnabled: виртуальный безопасный режим (VSM) — это контейнер, который защищает ценные ресурсы от скомпрометированного ядра. Для VSM требуется около 1 ГБ памяти. Она имеет достаточно возможностей для запуска службы LSA, которая используется для всех брокеров проверки подлинности.
VSM можно включить с помощью следующей команды в WMI или скрипте PowerShell:
bcdedit.exe /set {current} vsmlaunchtype auto
Если VSMEnabled = 1 (True), то разрешите доступ. Если VSMEnabled = 0 (False), выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Запретить доступ к ресурсам HBI.
- Активация корректирующего действия, например уведомление в службу технической поддержки, чтобы связаться с владельцем, расследующим проблему
PCRHashAlgorithmID: этот атрибут является информационным атрибутом, который определяет хэш-алгоритм, используемый доверенным платформенный платформенный модуль; не требуется никаких действий по соответствию.
BootAppSVN: этот атрибут определяет номер версии безопасности загрузочного приложения, загруженного во время начальной загрузки на аттестовом устройстве.
Если указано, bootAppSVN равно принятому значению, то разрешите доступ.
Если указано, что BootAppSVN не равно принятому значению, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Перенаправляйте устройство в корпоративный honeypot для дальнейшего мониторинга действий устройства.
BootManagerSVN. Этот атрибут определяет номер версии безопасности диспетчера загрузки, который был загружен во время начальной загрузки на аттестовом устройстве.
Если указано, bootManagerSVN равно принятому значению, то разрешите доступ.
Если указано, что BootManagerSVN не равно принятому значению, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Перенаправляйте устройство в корпоративный honeypot для дальнейшего мониторинга действий устройства.
TPMVersion: этот атрибут идентифицирует версию доверенного платформенного модуля, которая выполняется на аттестовом устройстве. Узел TPMVersion предоставляет ответы "1" и "2":
- 1 означает спецификацию доверенного платформенного модуля версии 1.2
- 2 означает спецификацию доверенного платформенного модуля версии 2.0
В зависимости от ответа, полученного от узла TPMVersion:
- Если сообщаемое значение TPMVersion равно принятому значению, то разрешите доступ.
- Если сообщаемое значение TPMVersion не равно принятому значению, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Запретить любой доступ
- Перенаправляйте устройство в корпоративный honeypot для дальнейшего мониторинга действий устройства.
PCR0. Измерение, записанное в PCR[0], обычно представляет согласованное представление хост-платформы между циклами загрузки. Он содержит измерение компонентов, предоставляемых производителем платформы узла.
Руководители предприятий могут создать список разрешений из доверенных значений PCR[0], сравнить значение PCR[0] управляемых устройств (значение, проверенное и сообщаемое HAS) с списком разрешений, а затем принять решение о доверии на основе результата сравнения.
Если в вашем предприятии нет списка разрешенных значений PCR[0], никаких действий не предпринимать. Если PCR[0] равно допустимому значению списка разрешений, то разрешите доступ.
Если PCR[0] не равен любому принятому указанному значению, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Перенаправляйте устройство в корпоративный honeypot для дальнейшего мониторинга действий устройства.
SBCPHash. SBCPHash — это отпечаток пользовательской политики конфигурации безопасной загрузки (SBCP), загруженной во время загрузки на устройствах Windows, кроме компьютеров.
Если SBCPHash отсутствует или является допустимым разрешенным значением, то разрешите доступ.
Если SBCPHash присутствует в DHA-Report и не является разрешенным значением, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
CIPolicy: этот атрибут указывает на политику целостности кода, которая управляет безопасностью загрузочной среды.
Если CIPolicy отсутствует или является допустимым значением, указанным в списке разрешений, разрешите доступ.
Если ciPolicy присутствует и не является допустимым значением, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Поместите устройство в список watch, чтобы более тщательно отслеживать его на наличие потенциальных рисков.
BootRevListInfo. Этот атрибут определяет загрузочный список редакций, который был загружен во время начальной загрузки на аттестовом устройстве.
Если указано, что версия BootRevListInfo равна принятому значению, то разрешите доступ.
Если указанная версия BootRevListInfo не равна принятому значению, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Перенаправляйте устройство в корпоративный honeypot для дальнейшего мониторинга действий устройства.
OSRevListInfo: этот атрибут определяет список версий операционной системы, который был загружен во время начальной загрузки на аттестовом устройстве.
Если сообщаемая версия OSRevListInfo равна принятому значению, то разрешите доступ.
Если указанная версия OSRevListInfo не равна принятому значению, выполните одно из следующих действий, которые соответствуют корпоративным политикам:
- Заблокировать любой доступ.
- Перенаправляйте устройство в корпоративный honeypot для дальнейшего мониторинга действий устройства.
HealthStatusMismatchFlags: атрибут HealthStatusMismatchFlags отображается, если DHA-Service обнаруживает проблему целостности (несоответствие) в DHA-Data он получает от решений по управлению устройствами для проверки.
При обнаружении проблемы список затронутых элементов DHA-отчета будет указан в атрибуте HealthStatusMismatchFlags.
пример DHA-Report
<?xml version="1.0" encoding="utf-8"?>
<HealthCertificateValidationResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ErrorCode="0" ProtocolVersion="0"
xmlns="http://schemas.microsoft.com/windows/security/healthcertificate/validation/response/v3">
<HealthCertificateProperties>
<Issued>2016-10-21T02:12:58.6656577Z</Issued>
<AIKPresent>false</AIKPresent>
<ResetCount>2107533174</ResetCount>
<RestartCount>2749041230</RestartCount>
<DEPPolicy>0</DEPPolicy>
<BitlockerStatus>0</BitlockerStatus>
<BootManagerRevListVersion>0</BootManagerRevListVersion>
<CodeIntegrityRevListVersion>0</CodeIntegrityRevListVersion>
<SecureBootEnabled>false</SecureBootEnabled>
<BootDebuggingEnabled>false</BootDebuggingEnabled>
<OSKernelDebuggingEnabled>false</OSKernelDebuggingEnabled>
<CodeIntegrityEnabled>true</CodeIntegrityEnabled>
<TestSigningEnabled>true</TestSigningEnabled>
<SafeMode>false</SafeMode>
<WinPE>false</WinPE>
<ELAMDriverLoaded>true</ELAMDriverLoaded>
<VSMEnabled>false</VSMEnabled>
<PCRHashAlgorithmID>0</PCRHashAlgorithmID>
<BootAppSVN>1</BootAppSVN>
<BootManagerSVN>1</BootManagerSVN>
<TpmVersion>2</TpmVersion>
<PCR0>4ACCBE0ADB9627FFD6285C2E06EC5AC59ABF62C7</PCR0>
<CIPolicy>00000000000001001A000B00200000005300690050006F006C006900630079002E007000370062000000A4BF7EF05585876A61CBFF7CAE8123BE756D58B1BBE04F9719D15D6271514CF5</CIPolicy>
<BootRevListInfo>005D447A7CC6D101200000000B00CBB56E8B19267E24A2986C4A616CCB58B4D53F6020AC8FD5FC205C20F2AB00BC</BootRevListInfo>
<OSRevListInfo>8073EEA7F8FAD001200000000B00A8285B04DE618ACF4174C59F07AECC002D11DD7D97FA5D464F190C9D9E3479BA</OSRevListInfo>
</HealthCertificateProperties>
</HealthCertificateValidationResponse>
HealthAttestation CSP и коды ошибок
Код ошибки | Имя ошибки | Описание ошибки |
---|---|---|
0 | HEALTHATTESTATION_CERT_RETRIEVAL_UNINITIALIZED | Это состояние является начальным состоянием для устройств, которые никогда не участвовали в сеансе DHA. |
1 | HEALTHATTESTATION_CERT_RETRIEVAL_REQUESTED | Это состояние означает, что вызов Exec клиента MDM на узле VerifyHealth был активирован, и теперь ОС пытается получить DHA-EncBlob от DHA-Server. |
2 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED | Это состояние означает, что устройству не удалось получить DHA-EncBlob из DHA-Server. |
3 | HEALTHATTESTATION_CERT_RETRIEVAL_COMPLETE | Это состояние означает, что устройство успешно извлекло DHA-EncBlob из DHA-Server. |
4 | HEALTHATTESTATION_CERT_RETRIEVAL_PCR_FAIL | Не рекомендуется использовать в Windows 10 версии 1607. |
5 | HEALTHATTESTATION_CERT_RETRIEVAL_GETQUOTE_FAIL | DHA-CSP не удалось получить цену утверждения. |
6 | HEALTHATTESTATION_CERT_RETRIEVAL_DEVICE_NOT_READY | DHA-CSP не удалось открыть дескриптор для поставщика шифрования платформы Майкрософт. |
7 | HEALTHATTESTATION_CERT_RETRIEVAL_WINDOWS_AIK_FAIL | DHA-CSP не удалось получить Windows AIK |
8 | HEALTHATTESTATION_CERT_RETRIEVAL_FROM_WEB_FAIL | Не рекомендуется использовать в Windows 10 версии 1607. |
9 | HEALTHATTESTATION_CERT_RETRIEVAL_INVALID_TPM_VERSION | Недопустимая версия доверенного платформенного платформенного модуля (TPM не 1.2 или 2.0) |
10 | HEALTHATTESTATION_CERT_RETRIEVAL_GETNONCE_FAIL | Nonce не найден в реестре. |
11 | HEALTHATTESTATION_CERT_RETRIEVAL_GETCORRELATIONID_FAIL | Идентификатор корреляции не найден в реестре. |
12 | HEALTHATTESTATION_CERT_RETRIEVAL_GETCERT_FAIL | Не рекомендуется использовать в Windows 10 версии 1607. |
13 | HEALTHATTESTATION_CERT_RETRIEVAL_GETCLAIM_FAIL | Не рекомендуется использовать в Windows 10 версии 1607. |
14 | HEALTHATTESTATION_CERT_RETRIEVAL_ENCODING_FAIL | Сбой в функциях кодирования. (Крайне маловероятный сценарий) |
15 | HEALTHATTESTATION_CERT_RETRIEVAL_ENDPOINTOVERRIDE_FAIL | Не рекомендуется использовать в Windows 10 версии 1607. |
16 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_LOAD_XML | DHA-CSP не удалось загрузить полезные данные, полученные от DHA-Service. |
17 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_CORRUPT_XML | DHA-CSP получил поврежденный ответ от DHA-Service. |
18 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_EMPTY | DHA-CSP получил пустой ответ от DHA-Service. |
19 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_DECRYPT_AES_EK | DHA-CSP не удалось расшифровать ключ AES из задачи EK. |
20 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_DECRYPT_CERT_AES_EK | DHA-CSP не удалось расшифровать сертификат работоспособности с помощью ключа AES. |
21 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_EXPORT_AIKPUB | DHA-CSP не удалось экспортировать открытый ключ AIK. |
22 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_CREATE_CLAIMAUTHORITYONLY | DHA-CSP не удалось создать утверждение с данными аттестации AIK. |
23 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_APPEND_AIKPUB | DHA-CSP не удалось добавить AIK Pub в большой двоичный объект запроса. |
24 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_APPEND_AIKCERT | DHA-CSP не удалось добавить сертификат AIK в большой двоичный объект запроса. |
25 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_INIT_HTTPHANDLE | DHA-CSP не удалось получить дескриптор сеанса. |
26 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_GETTARGET_HTTPHANDLE | DHA-CSP не удалось подключиться к службе DHA-Service. |
27 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_CREATE_HTTPHAND | DHA-CSP не удалось создать дескриптор HTTP-запроса. |
28 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_SET_INTERNETOPTION | DHA-CSP не удалось задать параметры. |
29 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_ADD_REQUESTHEADERS | DHA-CSP не удалось добавить заголовки запросов. |
30 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_SEND_REQUEST | DHA-CSP не удалось отправить HTTP-запрос. |
31 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_RECEIVE_RESPONSE | DHA-CSP не получил ответ от службы DHA-Service. |
32 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_QUERY_HEADERS | DHA-CSP не удалось запросить заголовки при попытке получить код состояния HTTP. |
33 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_EMPTY_RESPONSE | DHA-CSP получил пустой ответ от DHA-Service даже если состояние HTTP было ОК. |
34 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_MISSING_RESPONSE | DHA-CSP получил пустой ответ вместе с кодом ошибки HTTP от DHA-Service. |
35 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_IMPERSONATE_USER | DHA-CSP не удалось олицетворить пользователя. |
36 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_ACQUIRE_PDCNETWORKACTIVATOR | DHA-CSP не удалось получить активаторы PDC, необходимые для сетевого взаимодействия, когда устройство находится в режиме ожидания подключено. |
0xffff | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_UNKNOWN | Сбой DHA-CSP по неизвестной причине. Эта ошибка вряд ли возникнет. |
400 | Bad_Request_From_Client | DHA-CSP получил неправильный (неправильный) запрос на аттестацию. |
404 | Endpoint_Not_Reachable | DHA-Service недоступен DHA-CSP |
Вопросы обеспечения безопасности
DHA привязывает доверие к TPM и его измерениям. Если измерения доверенного платформенного модуля можно подделать или изменить, DHA не может гарантировать работоспособность устройства для этого устройства.
Дополнительные сведения см. в разделе Сертификация доверенного платформенного модуля клиента ПК.