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


Поставщик служб конфигурации HealthAttestation

Логотип программы предварительной оценки Windows.

Важно.

Этот 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:

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

Поток аттестации с помощью Microsoft Аттестация Azure Service

Процесс аттестации может быть в целом в трех main шагах:

  • Экземпляр службы Аттестация Azure настраивается с соответствующей политикой аттестации. Политика аттестации позволяет поставщику MDM засвидетельствовать определенные события в загрузке, а также функции безопасности.
  • Поставщик MDM активирует вызов службы аттестации, а затем устройство выполняет аттестацию проверка сохраняя отчет готовым к получению.
  • Поставщик MDM после проверки, что маркер поступает из службы аттестации, он может проанализировать маркер аттестации, чтобы отразить состояние устройства.

Дополнительные сведения см. в разделе Протокол аттестации.

Шаги интеграции MAA CSP

  1. Настройка экземпляра поставщика MAA: MAA экземпляр можно создать, выполнив действия, описанные в разделе Краткое руководство. Настройка Аттестация Azure с помощью портал Azure.

  2. Обновите поставщик с помощью соответствующей политики. Экземпляр 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]")));
    
    };
    
  3. Вызовите TriggerAttestation с помощью rpidи Azure Active Directory tokenattestURI: используйте URL-адрес аттестации, созданный на шаге 1, и добавьте соответствующую версию API, которую вы хотите использовать. Дополнительные сведения о версии API см. в разделе Аттестация — Attest TPM — REST API.

  4. Вызовите Метод 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

    • 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 (данные сеанса работоспособности устройства): в одной транзакции 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)

Схема службы аттестации работоспособности для различных служб DHS

тип DHA-Service Описание Операционные затраты
Аттестация работоспособности устройств — облако (DHA-Cloud) DHA-Cloud является принадлежащим и управляемым DHA-Service корпорации Майкрософт, который:
  • Доступно в Windows бесплатно
  • Работа в облачной инфраструктуре с высоким уровнем доступности и геобалансирована
  • Поддерживается большинством DHA-Enabled решений по управлению устройствами в качестве поставщика службы аттестации устройств по умолчанию
  • Доступно для всех корпоративных устройств, управляемых следующими способами:
    • Полное доменное имя = порт has.spserv.microsoft.com
    • Порт = 443
    • Протокол = TCP
  • Без затрат
    Аттестация работоспособности устройства — локальная(DHA-OnPrem) DHA-OnPrem относится к DHA-Service, выполняемой локально:
  • Предложение для Windows Server 2016 клиента (без дополнительных затрат на лицензирование для включения и запуска DHA-Service)
  • Размещено на корпоративном и управляемом серверном устройстве или оборудовании
  • Поддерживается сторонними поставщиками DHA-Enabled решений для управления устройствами, поддерживающими локальные и гибридные сценарии аттестации оборудования (Cloud + OnPrem)
  • Доступ для всех устройств, управляемых предприятием, с помощью следующих параметров:
    • Полное доменное имя = (назначено предприятием)
    • Port = (назначено предприятием)
    • Протокол = TCP
  • Операционные затраты на запуск одного или нескольких экземпляров Локального сервера Server 2016.
    Аттестация работоспособности устройств — облако Enterprise-Managed (DHA-EMC) DHA-EMC — это управляемая предприятием DHA-Service, которая выполняется в качестве виртуального узла или службы в Windows Server 2016 совместимой облачной службе, управляемой предприятием, например Microsoft Azure.
  • Предложение для Windows Server 2016 клиентов без дополнительных затрат на лицензирование (без дополнительных затрат на лицензирование для включения и запуска DHA-Service)
  • Поддерживается сторонними поставщиками DHA-Enabled решений для управления устройствами, поддерживающими локальные и гибридные сценарии аттестации оборудования (Cloud + OnPrem)
  • Доступ для всех устройств, управляемых предприятием, с помощью следующих параметров:
    • Полное доменное имя = (назначено предприятием)
    • Port = (назначено предприятием)
    • Протокол = TCP
  • Операционные затраты на запуск Server 2016 в совместимой облачной службе, например Microsoft Azure.

    Шаги интеграции DHA-CSP

    Для интеграции функции аттестации работоспособности устройств (Майкрософт) с решением управления устройствами (MDM) требуется следующий список задач проверки и разработки:

    1. Проверка доступа по протоколу HTTPS
    2. Назначение корпоративной доверенной службы DHA-Service
    3. Указание клиенту подготовить DHA-data к проверке
    4. Выполните действия на основе ответа клиентов
    5. Указание клиенту пересылать DHA-данные для проверки
    6. Передача данных DHA в службу DHA
    7. Получение ответа от службы DHA
    8. Анализ данных 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

    Шаг 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 не может гарантировать работоспособность устройства для этого устройства.

    Дополнительные сведения см. в разделе Сертификация доверенного платформенного модуля клиента ПК.

    Справочник по поставщикам служб конфигурации