Fournisseur de services de configuration HealthAttestation
Important
Ce csp contient certains paramètres en cours de développement et qui s’appliquent uniquement aux builds Windows Insider Preview. Ces paramètres sont susceptibles d’être modifiés et peuvent avoir des dépendances vis-à-vis d’autres fonctionnalités ou services en préversion.
Le fournisseur de services de configuration Device HealthAttestation (DHA-CSP) permet aux administrateurs informatiques d’entreprise d’évaluer si un appareil est démarré dans un état approuvé et conforme, et d’effectuer des actions de stratégie d’entreprise.
La liste suivante est une description des fonctions effectuées par le csp Device HealthAttestation :
- Collecte les journaux de démarrage de l’appareil, les pistes d’audit du module de plateforme sécurisée (TPM) et le certificat TPM (DHA-BootData) à partir d’un appareil géré
- Transfère DHA-BootData à un service d’attestation d’intégrité de l’appareil (DHA-Service)
- Reçoit un objet blob chiffré (DHA-EncBlob) de DHA-Service et le stocke dans un cache local sur l’appareil
- Reçoit des demandes d’attestation (DHA-Requests) d’un DHA-Enabled GPM et répond avec les données d’attestation d’intégrité de l’appareil (DHA-Data)
La liste suivante présente les nœuds du fournisseur de services de configuration HealthAttestation :
- ./Vendor/MSFT/HealthAttestation
AttestErrorMessage
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows Insider Preview |
./Vendor/MSFT/HealthAttestation/AttestErrorMessage
AttestErrorMessage conserve le message d’erreur pour la dernière session d’attestation, s’il est retourné par le service d’attestation.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Télécharger |
AttestStatus
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 11, version 21H2 [10.0.22000] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/AttestStatus
AttestStatus conserve le code de réussite ou d’échec status de la dernière session d’attestation.
Le status est toujours effacé avant d’effectuer l’appel du service d’attestation.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | int |
Type d’accès | Télécharger |
Exemple :
Appel SyncML avec modèle :
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Get> <Item> <Target> <LocURI> ./Device/Vendor/MSFT/HealthAttestation/AttestStatus </LocURI> </Target> </Item> </Get> <Final/> </SyncBody> </SyncML>
Exemple de réponse :
If Successful: 0 If Failed: A corresponding HRESULT error code. Example: 0x80072efd, WININET_E_CANNOT_CONNECT
Certificat
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/Certificate
Indique au fournisseur de solutions DHA-CSP de transférer DHA-Data au serveur MDM.
Le type valeur est une chaîne base64.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Télécharger |
Correlationid
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/CorrelationID
Identifie une session d’attestation d’intégrité d’appareil unique. CorrelationId est utilisé pour mettre en corrélation DHA-Service journaux avec les événements du serveur MDM et les journaux des événements client pour le débogage et la résolution des problèmes.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Télécharger |
CurrentProtocolVersion
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1709 [10.0.16299] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/CurrentProtocolVersion
Fournit la version actuelle du protocole que le client utilise pour communiquer avec le service d’attestation d’intégrité.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | int |
Type d’accès | Télécharger |
ForceRetrieve
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/ForceRetrieve
Indique au client de lancer une nouvelle demande auprès du service DHA et d’obtenir une nouvelle DHA-EncBlob (résumé de l’état de démarrage émis par DHA-Service). Cette option doit être utilisée uniquement si le serveur MDM applique une stratégie d’actualisation de certificat, qui doit forcer un appareil à obtenir un nouvel objet blob chiffré à partir de DHA-Service.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | bool |
Type d’accès | Obtenir, remplacer |
Valeur par défaut | Faux |
Valeurs autorisées:
Valeur | Description |
---|---|
false (par défaut) | Faux. |
true | Vrai. |
GetAttestReport
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 11, version 21H2 [10.0.22000] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/GetAttestReport
Récupérez le rapport de session d’attestation s’il existe.
Le rapport est stocké dans une clé de Registre dans le magasin d’inscription MDM respectif.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Télécharger |
Exemple :
Appel SyncML avec modèle :
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Get> <Item> <Target> <LocURI> ./Device/Vendor/MSFT/HealthAttestation/GetAttestReport </LocURI> </Target> </Item> </Get> <Final/> </SyncBody> </SyncML>
Exemples de données :
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
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 11, version 21H2 [10.0.22000] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/GetServiceCorrelationIDs
Récupérez les ID de corrélation de service s’ils existent.
S’il existe plusieurs ID de corrélation, ils sont séparés par « ; » dans la chaîne.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Télécharger |
Exemple :
Appel SyncML avec modèle :
<SyncML xmlns="SYNCML:SYNCML1.2"> <SyncBody> <Get> <Item> <Target> <LocURI> ./Device/Vendor/MSFT/HealthAttestation/GetServiceCorrelationIDs </LocURI> </Target> </Item> </Get> <Final/> </SyncBody> </SyncML>
Exemples de données :
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
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/HASEndpoint
Identifie le nom de domaine complet (FQDN) du DHA-Service affecté à l’attestation. Si aucun nom de domaine complet n’est attribué, DHA-Cloud (service cloud appartenant et géré par Microsoft) est utilisé comme service d’attestation par défaut.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Obtenir, remplacer |
Valeur par défaut | has.spserv.microsoft.com. |
MaxSupportedProtocolVersion
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1709 [10.0.16299] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/MaxSupportedProtocolVersion
Retourne la version maximale du protocole que ce client peut prendre en charge.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | int |
Type d’accès | Télécharger |
Nonce
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/Nonce
Permet aux mdms de protéger les communications d’attestation d’intégrité de l’appareil contre les attaques mitm (man-in-the-middle type) avec une valeur aléatoire protégée par chiffrement générée par le serveur MDM. Le nonce est au format hexadécimal, avec une taille minimale de 8 octets et une taille maximale de 32 octets.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Obtenir, remplacer |
Valeur par défaut | \0 |
PreferredMaxProtocolVersion
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1709 [10.0.16299] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/PreferredMaxProtocolVersion
Fournit la version de protocole par défaut maximale sur laquelle le client est configuré pour communiquer. Si cette valeur est supérieure aux versions de protocole prises en charge par le client, elle utilise la version de protocole la plus élevée disponible.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | int |
Type d’accès | Obtenir, remplacer |
Valeur par défaut | 3 |
Statut
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/Status
Fournit la status actuelle de la demande d’intégrité de l’appareil. Pour obtenir la liste complète des valeurs status, consultez HealthAttestation CSP status et codes d’erreur.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | int |
Type d’accès | Télécharger |
TpmReadyStatus
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1607 [10.0.14393] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/TpmReadyStatus
Retourne un masque de bits d’informations décrivant l’état du TPM. Il indique si le module de plateforme sécurisée de l’appareil est prêt et approuvé.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | int |
Type d’accès | Télécharger |
TriggerAttestation
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 11, version 21H2 [10.0.22000] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/TriggerAttestation
Avertit l’appareil de déclencher une session d’attestation de manière asynchrone.
Si le processus d’attestation est lancé avec succès, ce nœud retourne le code 202 indiquant que la demande est reçue et en cours de traitement. Sinon, une erreur est retournée.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format |
chr (chaîne) |
Type d’accès | Exec |
Exemple :
Appel SyncML avec modèle :
<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>
Champs de données :
- rpID (Relying Party Identifier) : ce champ contient un identificateur qui peut être utilisé pour aider à déterminer l’appelant.
- serviceEndpoint : ce champ contient l’URL complète du fournisseur microsoft Azure Attestation instance à utiliser pour l’évaluation.
- nonce : ce champ contient un nombre arbitraire qui ne peut être utilisé qu’une seule fois dans une communication de chiffrement. Il s’agit souvent d’un nombre aléatoire ou pseudo-aléatoire émis dans un protocole d’authentification pour garantir que les anciennes communications ne peuvent pas être réutilisées dans les attaques par relecture.
- aadToken : jeton Microsoft Entra à utiliser pour l’authentification auprès du service microsoft Azure Attestation.
- cv : ce champ contient un identificateur (vecteur de corrélation) qui sera transmis à l’appel de service et qui peut être utilisé à des fins diagnostics.
Exemple
<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
Étendue | Éditions | Système d’exploitation applicable |
---|---|---|
✅ Appareil ❌Utilisateur |
✅Pro ✅ Enterprise ✅ Éducation ✅Windows SE ✅ IoT Enterprise / IoT Enterprise LTSC |
✅Windows 10, version 1511 [10.0.10586] et versions ultérieures |
./Vendor/MSFT/HealthAttestation/VerifyHealth
Avertit l’appareil de préparer une demande de vérification de l’intégrité de l’appareil.
Propriétés de l’infrastructure de description :
Nom de la propriété | Valeur de la propriété |
---|---|
Format | null |
Type d’accès | Exec |
Windows 11 Attestation d’intégrité de l’appareil
Windows 11 introduit une mise à jour de la fonctionnalité d’attestation d’intégrité de l’appareil. Cette mise à jour permet d’ajouter la prise en charge d’insights plus approfondis à la sécurité de démarrage de Windows, en prenant en charge une approche de confiance zéro pour la sécurité des appareils. L’attestation d’intégrité de l’appareil sur Windows est accessible à l’aide du csp HealthAttestation. Ce csp permet d’évaluer si un appareil est démarré à un état approuvé et conforme, puis de prendre les mesures appropriées. Windows 11 introduit davantage de nœuds enfants dans le nœud HealthAttestation pour que les fournisseurs GPM se connectent au service Microsoft Azure Attestation, ce qui offre une approche simplifiée de l’attestation.
Le rapport d’attestation fournit une évaluation de l’intégrité des propriétés de démarrage de l’appareil pour s’assurer que les appareils sont automatiquement sécurisés dès qu’ils sont mis sous tension. Le résultat de l’attestation d’intégrité peut ensuite être utilisé pour autoriser ou refuser l’accès aux réseaux, applications ou services, en fonction de l’intégrité de l’appareil.
Termes utilisés :
- Module de plateforme sécurisée (TPM) : TPM est une logique spécialisée protégée par le matériel qui effectue une série d’opérations de sécurité protégées par le matériel, notamment la fourniture d’un stockage protégé, la génération de nombres aléatoires, le chiffrement et la signature.
- Fonctionnalité DHA (Device HealthAttestation) : la fonctionnalité Device HealthAttestation (DHA) permet aux administrateurs informatiques d’entreprise de surveiller à distance la posture de sécurité des appareils gérés à l’aide de données protégées et attestées par le matériel (TPM) via un canal de communication inviolable et inviolable.
- MAA-Session (session d’intégrité de l’appareil basée sur le service Microsoft Azure Attestation) : la session HealthAttestation de l’appareil basée sur le service Microsoft Azure Attestation (MAA-Session) décrit le flux de communication de bout en bout qui est effectué dans une session d’attestation d’intégrité de l’appareil.
-
nœuds MAA-CSP (fournisseur de services de configuration basé sur Microsoft Azure Attestation) : les nœuds du fournisseur de services de configuration ajoutés à Windows 11 pour s’intégrer à Microsoft Azure Attestation Service. La liste suivante d’opérations est effectuée par MAA-CSP :
- Reçoit les demandes de déclencheur d’attestation d’un fournisseur MDM avec HealthAttestation.
- L’appareil collecte des preuves d’attestation (journaux de démarrage de l’appareil, pistes d’audit TPM et certificat TPM) à partir d’un appareil géré.
- Transfère la preuve d’attestation au instance service Azure Attestation tel que configuré par le fournisseur GPM.
- Reçoit un rapport signé de la instance de service Azure Attestation et le stocke dans un cache local sur l’appareil.
- MAA point de terminaison : le service d’attestation Microsoft Azure est une ressource Azure, et chaque instance du service obtient l’URL configurée par l’administrateur. L’URI généré est unique par nature et, aux fins de l’attestation d’intégrité de l’appareil, est appelé point de terminaison MAA.
- JWT (JSON Web Token) : JSON Web Token (JWT) est une méthode de RFC7519 standard ouverte permettant de transmettre en toute sécurité des informations entre parties en tant qu’objet JSON (JavaScript Object Notation). Ces informations peuvent être vérifiées et approuvées, car elles sont signées numériquement. Les JWT peuvent être signés à l’aide d’un secret ou d’une paire de clés publique/privée.
Flux d’attestation avec microsoft Azure Attestation Service
Le flux d’attestation peut se faire en trois étapes main :
- Une instance du service Azure Attestation est configurée avec une stratégie d’attestation appropriée. La stratégie d’attestation permet au fournisseur GPM d’attester des événements particuliers dans le démarrage, ainsi que des fonctionnalités de sécurité.
- Le fournisseur GPM déclenche un appel au service d’attestation, l’appareil effectue ensuite une attestation case activée en maintenant le rapport prêt à être récupéré.
- Le fournisseur GPM après avoir vérifié que le jeton provient du service d’attestation, il peut analyser le jeton d’attestation pour refléter l’état attesté de l’appareil.
Pour plus d’informations, consultez Protocole d’attestation.
MAA étapes d’intégration csp
Configurez un fournisseur MAA instance : MAA instance pouvez être créé en suivant les étapes décrites dans Démarrage rapide : Configurer Azure Attestation à l’aide du Portail Azure.
Mettez à jour le fournisseur avec une stratégie appropriée : le MAA instance doit être mis à jour avec une stratégie appropriée. Pour plus d’informations, consultez Comment créer une stratégie de Azure Attestation.
Exemple de stratégie d’attestation :
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]"))); };
Appelez TriggerAttestation avec votre
rpid
,Azure Active Directory token
et leattestURI
: utilisez l’URL d’attestation générée à l’étape 1, puis ajoutez la version d’API appropriée que vous souhaitez atteindre. Pour plus d’informations sur la version de l’API, consultez Attestation - Attester Tpm - API REST.Appelez GetAttestReport, décodez et analysez le rapport pour vous assurer que le rapport attesté contient les propriétés requises : GetAttestReport retourne le jeton d’attestation signé en tant que JWT. Le JWT peut être décodé pour analyser les informations en fonction de la stratégie d’attestation.
{ "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]
En savoir plus
Vous trouverez plus d’informations sur l’attestation TPM ici : Microsoft Azure Attestation.
Windows 10 Device HealthAttestation
Termes utilisés :
Module de plateforme sécurisée (TPM) : TPM est une logique spécialisée protégée par le matériel qui effectue une série d’opérations de sécurité protégées par le matériel, notamment la fourniture d’un stockage protégé, la génération de nombres aléatoires, le chiffrement et la signature.
Fonctionnalité DHA (Device HealthAttestation) : la fonctionnalité Device HealthAttestation (DHA) permet aux administrateurs informatiques d’entreprise de surveiller à distance la posture de sécurité des appareils gérés à l’aide de données protégées et attestées par le matériel (TPM) via un canal de communication inviolable et inviolable.
Appareil compatible DHA (État de l’appareilAttestation d’appareil) : un appareil device HealthAttestation enabled (DHA-Enabled) est un appareil informatique (téléphone, ordinateur de bureau, ordinateur portable, tablette, serveur) qui s’exécute Windows 10 et prend en charge TPM version 1.2 ou 2.0.
DHA-Session (Device HealthAttestation session) : la session Device HealthAttestation (DHA-Session) décrit le flux de communication de bout en bout qui est effectué dans une session d’attestation d’intégrité de l’appareil. La liste suivante de transactions est effectuée dans une session DHA :
- DHA-CSP et communication DHA-Service :
- DHA-CSP transfère les données de démarrage de l’appareil (DHA-BootData) vers DHA-Service
- DHA-Service réponses avec un objet blob de données chiffré (DHA-EncBlob)
- DHA-CSP et communication MDM-Server :
- MDM-Server envoie une demande de vérification de l’intégrité de l’appareil à DHA-CSP
- DHA-CSP répond avec une charge utile appelée DHA-Data qui inclut un objet blob de données chiffré (DHA-EncBlob) et signé (DHA-SignedBlob)
- communication MDM-Server et DHA-Service :
- MDM-Server publie les données qu’il reçoit des appareils vers DHA-Service
- DHA-Service examine les données qu’il reçoit et répond avec un rapport d’intégrité de l’appareil (rapport DHA)
- DHA-CSP et communication DHA-Service :
Données de session DHA (Device HealthAttestation session data) : la liste suivante de données est produite ou consommée dans une transaction DHA :
- DHA-BootData : données de démarrage de l’appareil (journaux TCG, valeurs PCR, certificat d’appareil/TPM, démarrage et compteurs TPM) requises pour valider l’intégrité du démarrage de l’appareil.
- DHA-EncBlob : rapport de synthèse chiffré qui DHA-Service des problèmes sur un appareil après avoir examiné les DHA-BootData qu’il reçoit des appareils.
- DHA-SignedBlob : il s’agit d’un instantané signé de l’état actuel du runtime d’un appareil qui est capturé par DHA-CSP au moment de l’attestation d’intégrité de l’appareil.
- DHA-Data : objet blob de données au format XML qui transfère les appareils pour la validation de l’intégrité de l’appareil à DHA-Service via MDM-Server. DHA-Data comprend deux parties :
- DHA-EncBlob : objet blob de données chiffrés que l’appareil reçoit de DHA-Service
- DHA-SignedBlob : un instantané actuel de l’état de sécurité actuel de l’appareil généré par DHA-CSP
- Rapport DHA : rapport émis par DHA-Service à MDM-Server
- Nonce : nombre protégé par chiffrement généré par MDM-Server, qui protège le DHA-Session contre les attaques de type man-in-the-middle
GPM compatible DHA (Device HealthAttestation enabled device management solution) : La solution de gestion des appareils Device HealthAttestation enabled (DHA-Enabled) est un outil de gestion des appareils intégré à la fonctionnalité DHA. DHA-Enabled solutions de gestion des appareils permettent aux responsables informatiques d’entreprise de lever la barre de protection de la sécurité pour leurs appareils gérés en fonction des données protégées par le matériel (TPM) qui peuvent être approuvées même si un appareil est compromis par des menaces de sécurité avancées ou exécute un système d’exploitation malveillant (jailbreaké). La liste suivante d’opérations est effectuée par DHA-Enabled-MDM :
- Active la fonctionnalité DHA sur un appareil DHA-Enabled
- Émet des demandes d’attestation d’intégrité d’appareil aux appareils inscrits/gérés
- Collecte les données d’attestation d’intégrité de l’appareil (DHA-Data) et les envoie au service d’attestation d’intégrité de l’appareil (DHA-Service) pour vérification
- Obtient le rapport d’intégrité de l’appareil (DHA-Report) à partir de DHA-Service, qui déclenche une action de conformité
DHA-CSP (Device HealthAttestation Configuration Service Provider) : le fournisseur de services de configuration de Device HealthAttestation (DHA-CSP) utilise le module de plateforme sécurisée et le microprogramme d’un appareil pour mesurer les propriétés de sécurité critiques du BIOS et du démarrage Windows de l’appareil, de sorte que même sur un système infecté par un programme malveillant au niveau du noyau ou un rootkit, ces propriétés ne peuvent pas être usurpées. La liste suivante d’opérations est effectuée par DHA-CSP :
- Collecte les données de démarrage de l’appareil (DHA-BootData) à partir d’un appareil géré
- Transfère DHA-BootData au service d’attestation d’intégrité de l’appareil (DHA-Service)
- Reçoit un objet blob chiffré (DHA-EncBlob) de DHA-Service et le stocke dans un cache local sur l’appareil
- Reçoit des demandes d’attestation (DHA-Requests) d’un DHA-Enabled GPM et répond avec les données d’attestation d’intégrité de l’appareil (DHA-Data)
DHA-Service (Device HealthAttestation Service) : Device HealthAttestation Service (DHA-Service) valide les données qu’il reçoit de DHA-CSP et émet un rapport protégé par un matériel hautement fiable (DHA-Report) pour DHA-Enabled solutions de gestion des appareils via un canal de communication inviolable et inviolable. DHA-Service est disponible en deux versions : « DHA-Cloud » et « DHA-Server2016 ». DHA-Service prend en charge différents scénarios d’implémentation, notamment les scénarios cloud, locaux, air-gapped et hybrides. La liste suivante d’opérations est effectuée par DHA-Service :
- Reçoit des données de démarrage d’appareil (DHA-BootData) à partir d’un appareil DHA-Enabled
- Transfère DHA-BootData au service d’attestation d’intégrité de l’appareil (DHA-Service)
- Reçoit un objet blob chiffré (DHA-EncBlob) de DHA-Service et le stocke dans un cache local sur l’appareil
- Reçoit des demandes d’attestation (DHA-Requests) à partir d’un DHA-Enabled-MDM et répond avec un rapport d’intégrité de l’appareil (DHA-Report)
DHA-Service type | Description | Coût de l’opération |
---|---|---|
Attestation d’intégrité de l’appareil - Cloud (DHA-Cloud) | DHA-Cloud est un DHA-Service microsoft qui est :
|
Aucun coût |
Attestation d’intégrité de l’appareil - On Premises (DHA-OnPrem) | DHA-OnPrem fait référence à DHA-Service qui s’exécute localement :
|
Coût d’opération de l’exécution d’une ou de plusieurs instances de Server 2016 en local. |
Attestation d’intégrité des appareils - Enterprise-Managed Cloud (DHA-EMC) | DHA-EMC fait référence à un DHA-Service géré par l’entreprise qui s’exécute en tant qu’hôte/service virtuel sur un service cloud géré par l’entreprise Windows Server 2016 compatible, tel que Microsoft Azure.
|
Coût d’opération de l’exécution de Server 2016 sur un service cloud compatible, tel que Microsoft Azure. |
Étapes d’intégration DHA-CSP
La liste suivante de tâches de validation et de développement est requise pour l’intégration de la fonctionnalité Attestation d’intégrité des appareils Microsoft à une solution de gestion des appareils Windows Mobile (GPM) :
- Vérifier l’accès HTTPS
- Affecter un service DHA approuvé d’entreprise
- Demander au client de préparer les données DHA pour la vérification
- Effectuer une action en fonction de la réponse des clients
- Demander au client de transférer les données DHA à des fins de vérification
- Post-DHA-data to DHA-service
- Recevoir la réponse du service DHA
- Analyser les données DHA-Report. Prendre les mesures de stratégie appropriées en fonction des résultats de l’évaluation
Chaque étape est décrite en détail dans les sections suivantes de cette rubrique.
Étape 1 : Vérifier l’accès HTTPS
Vérifiez que le serveur MDM et l’appareil (client MDM) peuvent accéder à has.spserv.microsoft.com à l’aide du protocole TCP sur le port 443 (HTTPS).
Vous pouvez utiliser OpenSSL pour valider l’accès à DHA-Service. Voici un exemple de commande OpenSSL et la réponse générée par 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)
Étape 2 : Attribuer un DHA-Service approuvé d’entreprise
Il existe trois types de DHA-Service :
- Attestation d’intégrité de l’appareil - Cloud (détenu et géré par Microsoft)
- Attestation d’intégrité de l’appareil - Localement (détenue et gérée par une entreprise, s’exécute sur Windows Server 2016 localement)
- Attestation d’intégrité de l’appareil : Enterprise-Managed Cloud (détenu et géré par une entreprise, s’exécute sur Windows Server 2016 cloud géré par l’entreprise compatible)
DHA-Cloud est le paramètre par défaut. Aucune autre action n’est nécessaire si une entreprise envisage d’utiliser Microsoft DHA-Cloud en tant que fournisseur de DHA-Service approuvé.
Pour DHA-OnPrem & scénarios DHA-EMC, envoyez une commande SyncML au nœud HASEndpoint pour indiquer à un appareil géré de communiquer avec le service DHA approuvé de l’entreprise.
L’exemple suivant montre un exemple d’appel qui indique à un appareil géré de communiquer avec un service DHA géré par l’entreprise.
<Replace>
<CmdID>1</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/HealthAttestation/HASEndpoint</LocURI>
</Target>
<Data> www.ContosoDHA-Service</Data>
</Item>
</Replace>
Étape 3 : Demander au client de préparer les données d’intégrité pour la vérification
Envoyez un appel SyncML pour démarrer la collecte des données DHA.
L’exemple suivant montre un exemple d’appel qui déclenche la collecte et la vérification des données d’attestation d’intégrité à partir d’un appareil géré.
<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>
Étape 4 : Prendre des mesures en fonction de la réponse du client
Une fois que le client a reçu la demande d’attestation d’intégrité, il envoie une réponse. La liste suivante décrit les réponses, ainsi qu’une action recommandée.
- Si la réponse est HEALTHATTESTATION_CERT_RETRIEVAL_COMPLETE (3), passez à la section suivante.
- Si la réponse est HEALTHATTESTATION_CERT_RETRIEVAL_REQUESTED (1) ou HEALTHATTESTATION_CERT_RETRIEVAL_UNINITIALIZED (0) attendre une alerte, passez à la section suivante.
Voici un exemple d’alerte émis par 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>
- Si la réponse au nœud status n’est pas 0, 1 ou 3, résolvez le problème. Pour obtenir la liste complète des codes status, consultez HealthAttestation CSP status et codes d’erreur.
Étape 5 : Demander au client de transférer les données d’attestation d’intégrité à des fins de vérification
Créez un appel aux nœuds Nonce, Certificate et CorrelationId , puis récupérez une charge utile chiffrée qui inclut un certificat d’intégrité et les données associées de l’appareil.
Voici un exemple :
<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>
Étape 6 : Transférer les données d’attestation d’intégrité de l’appareil au service DHA
En réponse à la requête envoyée à l’étape précédente, le client MDM transfère un objet blob au format XML (réponse du nœud ./Vendor/MSFT/HealthAttestation/Certificate) et un identificateur d’appel appelé CorrelationId (réponse au nœud ./Vendor/MSFT/HealthAttestation/CorrelationId).
Lorsque le MDM-Server reçoit les données ci-dessus, il doit :
Consignez le CorrelationId qu’il reçoit de l’appareil (à des fins de résolution des problèmes/références ultérieures), corrélé à l’appel.
Décoder l’objet blob de données au format XML qu’il reçoit de l’appareil
Ajoutez la valeur nonce générée par le service GPM (ajoutez le nonce qui a été transféré à l’appareil à l’étape 5) à la structure XML qui a été transférée par l’appareil au format suivant :
<?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>
Transférez (HTTP Post) le struct de données XML (y compris le nonce qui a été ajouté à l’étape précédente) au DHA-Service affecté qui s’exécute sur :
- scénario DHA-Cloud (service DHA détenu et géré par Microsoft) :
https://has.spserv.microsoft.com/DeviceHealthAttestation/ValidateHealthCertificate/v3
- DHA-OnPrem ou DHA-EMC :
https://FullyQualifiedDomainName-FDQN/DeviceHealthAttestation/ValidateHealthCertificate/v3
- scénario DHA-Cloud (service DHA détenu et géré par Microsoft) :
Étape 7 : Recevoir la réponse du service DHA
Lorsque le service d’attestation d’intégrité de l’appareil Microsoft reçoit une demande de vérification, il effectue les étapes suivantes :
- Déchiffre les données chiffrées qu’il reçoit.
- Valide les données qu’il a reçues.
- Crée un rapport et partage les résultats de l’évaluation sur le serveur MDM via SSL au format XML.
Étape 8 : Prendre les mesures de stratégie appropriées en fonction des résultats de l’évaluation
Une fois que le serveur MDM a reçu les données vérifiées, les informations peuvent être utilisées pour prendre des décisions de stratégie en évaluant les données. Voici quelques actions possibles :
- Autorisez l’accès à l’appareil.
- Autorisez l’appareil à accéder aux ressources, mais marquez l’appareil pour qu’il soit examiné plus en détail.
- Empêcher un appareil d’accéder aux ressources.
schéma DHA-Report V3
<?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>
La liste suivante de points de données est vérifiée par le DHA-Service dans DHA-Report version 3.
Émis : date et heure d’évaluation ou d’émission du rapport DHA à GPM.
AIKPresent : lorsqu’une clé d’identité d’attestation (AIK) est présente sur un appareil, cela indique que l’appareil dispose d’un certificat de clé d’approbation (EK). Il peut être approuvé plus qu’un appareil qui n’a pas de certificat EK.
Si AIKPresent = True (1), autorisez l’accès.
Si AIKPresent = False (0), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Autorisez l’accès conditionnel en fonction d’autres points de données présents au moment de l’évaluation. Par exemple, d’autres attributs sur le certificat d’intégrité, ou les activités passées d’un appareil et l’historique d’approbation.
- Effectuez l’une des actions précédentes et placez l’appareil dans une liste de watch pour surveiller de plus près les risques potentiels de l’appareil.
ResetCount (signalé uniquement pour les appareils qui prennent en charge TPM 2.0) : cet attribut indique le nombre de fois qu’un appareil PC a été hhibé ou repris.
RestartCount (signalé uniquement pour les appareils qui prennent en charge TPM 2.0) : cet attribut indique le nombre de redémarrages d’un appareil PC.
DEPPolicy : un appareil peut être plus fiable si la stratégie DEP est activée sur l’appareil.
La stratégie de prévention de l’exécution des données (DEP) définit un ensemble de technologies matérielles et logicielles qui effectuent des vérifications supplémentaires sur la mémoire pour empêcher l’exécution de code malveillant sur un système. Le démarrage sécurisé autorise une liste limitée sur x86/amd64 et sur ARM NTOS le verrouille sur activé.
DEPPolicy peut être désactivé ou activé à l’aide des commandes suivantes dans WMI ou un script PowerShell :
- Pour désactiver DEP, tapez bcdedit.exe /set {current} nx AlwaysOff
- Pour activer DEP, tapez bcdedit.exe /set {current} nx AlwaysOn
Si DEPPolicy = 1 (Activé), autorisez l’accès.
Si DEPPolicy = 0 (Désactivé), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Autorisez l’accès conditionnel en fonction d’autres points de données présents au moment de l’évaluation. Par exemple, d’autres attributs sur le certificat d’intégrité, ou les activités passées d’un appareil et l’historique d’approbation.
- Effectuez l’une des actions précédentes et placez l’appareil dans une liste de watch pour surveiller de plus près les risques potentiels de l’appareil.
L’évaluation de la stratégie DEP est une status non binaire lorsqu’elle est interrogée. Il est ensuite mappé à un état Activé/Désactivé.
Niveau de stratégie DEP Description Niveau d’attestation signalé Valeur de la propriété OptIn (configuration par défaut) Seuls les composants et services système Windows sont appliqués. 0 2 Refuser DEP est activé pour tous les processus. Les administrateurs peuvent créer manuellement une liste d’applications spécifiques qui n’ont pas DEP appliquées. 1 3 AlwaysOn DEP est activé pour tous les processus. 3 1 AlwaysOff Dep n’est activé pour aucun processus. 2 0 BitLockerStatus (indique si BitLocker a été activé lors du démarrage initial.) :
Lorsque BitLocker est signalé « activé » au moment du démarrage, l’appareil est en mesure de protéger les données stockées sur le lecteur contre tout accès non autorisé, lorsque le système est éteint ou passe en veille prolongée.
Le chiffrement de lecteur Windows BitLocker chiffre toutes les données stockées sur le volume du système d’exploitation Windows. BitLocker utilise le module de plateforme sécurisée pour protéger le système d’exploitation Windows et les données utilisateur, et permet de s’assurer qu’un ordinateur n’est pas falsifié, même s’il est laissé sans assistance, perdu ou volé.
Si l’ordinateur est équipé d’un module TPM compatible, BitLocker utilise le module de plateforme sécurisée pour verrouiller les clés de chiffrement qui protègent les données. Par conséquent, les clés ne sont pas accessibles tant que le module de plateforme sécurisée n’a pas vérifié l’état de l’ordinateur.
Si BitLockerStatus = 1 (On), autorisez l’accès.
Si BitLockerStatus = 0 (Désactivé), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Autorisez l’accès conditionnel en fonction d’autres points de données présents au moment de l’évaluation. Par exemple, d’autres attributs sur le certificat d’intégrité, ou les activités passées d’un appareil et l’historique d’approbation.
- Effectuez l’une des actions précédentes et placez l’appareil dans une liste de watch pour surveiller de plus près les risques potentiels de l’appareil.
BootManagerRevListVersion : cet attribut indique la version du gestionnaire de démarrage en cours d’exécution sur l’appareil, pour vous permettre de suivre et de gérer la sécurité de la séquence de démarrage/de l’environnement.
Si BootManagerRevListVersion = [CurrentVersion], autorisez l’accès.
Si
BootManagerRevListVersion !
= [CurrentVersion], effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :- Interdire tout accès.
- Interdire l’accès aux ressources HBI et MBI.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
- Déclenchez une action corrective, par exemple en informant l’équipe de support technique de contacter le propriétaire pour examiner le problème.
CodeIntegrityRevListVersion : cet attribut indique la version du code qui effectue des vérifications d’intégrité pendant la séquence de démarrage. L’utilisation de cet attribut peut vous aider à détecter si l’appareil exécute la dernière version du code qui effectue des vérifications d’intégrité, ou s’il est exposé à des risques de sécurité (révoqué) et à appliquer une action de stratégie appropriée.
Si CodeIntegrityRevListVersion = [CurrentVersion], autorisez l’accès.
Si
CodeIntegrityRevListVersion !
= [CurrentVersion], effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :- Interdire tout accès.
- Interdire l’accès aux ressources HBI et MBI.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
- Déclenchez une action corrective, par exemple en informant l’équipe de support technique de contacter le propriétaire pour examiner le problème.
SecureBootEnabled : lorsque le démarrage sécurisé est activé, les composants principaux utilisés pour démarrer l’ordinateur doivent avoir des signatures de chiffrement correctes approuvées par le organization qui a fabriqué l’appareil. Le microprogramme UEFI vérifie cette exigence avant de laisser l’ordinateur démarrer. Si des fichiers ont été falsifiés en cassant leur signature, le système ne démarre pas.
Si SecureBootEnabled = 1 (True), autorisez l’accès.
Si SecurebootEnabled = 0 (False), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Autorisez l’accès conditionnel en fonction d’autres points de données présents au moment de l’évaluation. Par exemple, d’autres attributs sur le certificat d’intégrité, ou les activités passées d’un appareil et l’historique d’approbation.
- Effectuez l’une des actions précédentes et placez l’appareil dans une liste de watch pour surveiller de plus près les risques potentiels de l’appareil.
BootDebuggingEnabled : les points activés pour le débogage de démarrage vers un appareil utilisé dans le développement et le test. Les appareils utilisés pour le test et le développement sont généralement moins sécurisés : l’appareil peut exécuter du code instable ou être configuré avec moins de restrictions de sécurité requises pour le test et le développement.
Le débogage de démarrage peut être désactivé ou activé à l’aide des commandes suivantes dans WMI ou un script PowerShell :
- Pour désactiver le débogage de démarrage, tapez bcdedit.exe /set {current} bootdebug off.
- Pour activer le débogage de démarrage, tapez bcdedit.exe /set {current} bootdebug on.
Si BootdebuggingEnabled = 0 (False), autorisez l’accès.
Si BootDebuggingEnabled = 1 (True), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
- Déclenchez une action corrective, telle que l’activation de VSM à l’aide de WMI ou d’un script PowerShell.
OSKernelDebuggingEnabled : OSKernelDebuggingEnabled pointe vers un appareil utilisé dans le développement et les tests. Les appareils utilisés pour le test et le développement sont généralement moins sécurisés : ils peuvent exécuter du code instable ou être configurés avec moins de restrictions de sécurité requises pour le test et le développement.
Si OSKernelDebuggingEnabled = 0 (False), autorisez l’accès.
Si OSKernelDebuggingEnabled = 1 (True), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
- Déclenchez une action corrective, par exemple en informant l’équipe de support technique de contacter le propriétaire pour examiner le problème.
CodeIntegrityEnabled : lorsque l’intégrité du code est activée, l’exécution du code est limitée au code vérifié par l’intégrité.
L’intégrité du code est une fonctionnalité qui valide l’intégrité d’un fichier de pilote ou système chaque fois qu’il est chargé en mémoire. L’intégrité du code détecte si un pilote ou un fichier système non signé est chargé dans le noyau, ou si un fichier système a été modifié par un logiciel malveillant exécuté par un compte d’utilisateur disposant de privilèges d’administrateur.
Sur les versions x64 du système d’exploitation, les pilotes en mode noyau doivent être signés numériquement.
Si CodeIntegrityEnabled = 1 (True), autorisez l’accès.
Si CodeIntegrityEnabled = 0 (False), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Autorisez l’accès conditionnel en fonction d’autres points de données présents au moment de l’évaluation. Par exemple, d’autres attributs sur le certificat d’intégrité, ou les activités passées d’un appareil et l’historique d’approbation.
- Effectuez l’une des actions précédentes et placez l’appareil dans une liste de watch pour surveiller de plus près les risques potentiels de l’appareil.
TestSigningEnabled : lorsque la signature de test est activée, l’appareil n’applique pas la validation de signature pendant le démarrage et autorise le chargement des pilotes non signés (tels que les modules UEFI non signés).
La signature de test peut être désactivée ou activée à l’aide des commandes suivantes dans WMI ou un script PowerShell :
- Pour désactiver le débogage de démarrage, tapez bcdedit.exe /set {current} testsigning off.
- Pour activer le débogage de démarrage, tapez bcdedit.exe /set {current} testsigning on.
Si TestSigningEnabled = 0 (False), autorisez l’accès.
Si TestSigningEnabled = 1 (True), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI et MBI.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
- Déclenchez une action corrective, telle que l’activation de la signature de test à l’aide de WMI ou d’un script PowerShell.
SafeMode : le mode sans échec est une option de résolution des problèmes pour Windows qui démarre votre ordinateur dans un état limité. Seuls les fichiers et pilotes de base nécessaires à l’exécution de Windows sont démarrés.
Si SafeMode = 0 (False), autorisez l’accès.
Si SafeMode = 1 (True), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Déclenchez une action corrective, par exemple en informant l’équipe de support technique de contacter le propriétaire pour examiner le problème.
WinPE : l’environnement de préinstallation Windows (Windows PE) est un système d’exploitation minimal avec des services limités qui est utilisé pour préparer un ordinateur pour l’installation de Windows, copier des images disque à partir d’un serveur de fichiers réseau et lancer le programme d’installation de Windows.
Si WinPE = 0 (False), autorisez l’accès.
Si WinPE = 1 (True), limitez l’accès aux ressources distantes requises pour l’installation du système d’exploitation Windows.
ELAMDriverLoaded (Windows Defender) : pour utiliser cette fonctionnalité de création de rapports, vous devez désactiver « Reprise hybride » sur l’appareil. L’anti-programme malveillant à lancement anticipé (ELAM) offre une protection pour les ordinateurs de votre réseau lorsqu’ils démarrent et avant l’initialisation des pilotes tiers.
Dans la version actuelle, cet attribut surveille/signale uniquement si un ELAM interne Microsoft (Windows Defender) a été chargé lors du démarrage initial.
Si un appareil est censé utiliser un programme antivirus tiers, ignorez l’état signalé.
Si un appareil est censé utiliser Windows Defender et ELAMDriverLoaded = 1 (True), autorisez l’accès.
Si un appareil est censé utiliser Windows Defender et ELAMDriverLoaded = 0 (False), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Déclenchez une action corrective, par exemple en informant l’équipe de support technique de contacter le propriétaire pour examiner le problème.
VSMEnabled : le mode VSM (Virtual Secure Mode) est un conteneur qui protège les ressources de valeur élevée contre un noyau compromis. VSM nécessite environ 1 Go de mémoire : il dispose de suffisamment de capacité pour exécuter le service LSA utilisé pour tous les répartiteur d’authentification.
VSM peut être activé à l’aide de la commande suivante dans WMI ou un script PowerShell :
bcdedit.exe /set {current} vsmlaunchtype auto
Si VSMEnabled = 1 (True), autorisez l’accès. Si VSMEnabled = 0 (False), effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Interdire l’accès aux ressources HBI.
- Déclencher une action corrective, par exemple informer l’équipe de support technique de contacter le propriétaire pour examiner le problème
PCRHashAlgorithmID : cet attribut est un attribut informationnel qui identifie l’algorithme HASH utilisé par TPM. aucune action de conformité requise.
BootAppSVN : cet attribut identifie le numéro de version de sécurité de l’application de démarrage qui a été chargée lors du démarrage initial sur l’appareil attesté
Si bootAppSVN signalé est égal à une valeur acceptée, autorisez l’accès.
Si bootAppSVN signalé n’est pas égal à une valeur acceptée, effectuez l’une des actions suivantes qui s’alignent sur les stratégies de votre entreprise :
- Interdire tout accès.
- Dirigez l’appareil vers un pot de miel d’entreprise pour surveiller davantage les activités de l’appareil.
BootManagerSVN : cet attribut identifie le numéro de version de sécurité du Gestionnaire de démarrage qui a été chargé lors du démarrage initial sur l’appareil attesté.
Si bootManagerSVN signalé est égal à une valeur acceptée, autorisez l’accès.
Si bootManagerSVN signalé n’est pas égal à une valeur acceptée, effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Dirigez l’appareil vers un pot de miel d’entreprise pour surveiller davantage les activités de l’appareil.
TPMVersion : cet attribut identifie la version du module de plateforme sécurisée qui s’exécute sur l’appareil attesté. Le nœud TPMVersion fournit aux réponses « 1 » et « 2 » :
- 1 signifie la spécification TPM version 1.2
- 2 signifie spécification TPM version 2.0
En fonction de la réponse que vous recevez du nœud TPMVersion :
- Si le TPMVersion signalé est égal à une valeur acceptée, autorisez l’accès.
- Si la valeur TPMVersion signalée n’est pas égale à une valeur acceptée, effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès
- Dirigez l’appareil vers un pot de miel d’entreprise pour surveiller davantage les activités de l’appareil.
PCR0 : la mesure capturée dans LAP[0] représente généralement une vue cohérente de la plateforme hôte entre les cycles de démarrage. Il contient une mesure des composants fournis par le fabricant de la plateforme hôte.
Les responsables d’entreprise peuvent créer une liste d’autorisation de valeurs PCR[0] approuvées, comparer la valeur PCR[0] des appareils gérés (valeur vérifiée et signalée par HAS) avec la liste d’autorisation, puis prendre une décision d’approbation en fonction du résultat de la comparaison.
Si votre entreprise ne dispose pas d’une liste d’autorisation de valeurs PCR[0] acceptées, n’effectuez aucune action. Si LAP[0] est égale à une valeur de liste d’autorisation acceptée, autorisez l’accès.
Si LAP[0] n’est pas égale à une valeur répertoriée acceptée, effectuez l’une des actions suivantes qui s’alignent sur les stratégies de votre entreprise :
- Interdire tout accès.
- Dirigez l’appareil vers un pot de miel d’entreprise pour surveiller davantage les activités de l’appareil.
SBCPHash : SBCPHash est l’empreinte digitale de la stratégie de configuration de démarrage sécurisé personnalisée (SBCP) qui a été chargée pendant le démarrage sur les appareils Windows, à l’exception des PC.
Si SBCPHash n’est pas présent ou s’il s’agit d’une valeur autorisée acceptée, autorisez l’accès.
Si SBCPHash est présent dans DHA-Report et n’est pas une valeur de liste verte, effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
CIPolicy : cet attribut indique la stratégie d’intégrité du code qui contrôle la sécurité de l’environnement de démarrage.
Si CIPolicy n’est pas présent ou s’il s’agit d’une valeur autorisée acceptée, autorisez l’accès.
Si CIPolicy est présent et n’est pas une valeur autorisée, effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Placez l’appareil dans une liste watch pour surveiller l’appareil de plus près à la recherche de risques potentiels.
BootRevListInfo : cet attribut identifie la liste de révisions de démarrage qui a été chargée lors du démarrage initial sur l’appareil attesté.
Si la version de BootRevListInfo signalée est égale à une valeur acceptée, autorisez l’accès.
Si la version de BootRevListInfo signalée n’est pas égale à une valeur acceptée, effectuez l’une des actions suivantes qui s’alignent sur vos stratégies d’entreprise :
- Interdire tout accès.
- Dirigez l’appareil vers un pot de miel d’entreprise pour surveiller davantage les activités de l’appareil.
OSRevListInfo : cet attribut identifie la liste de révisions du système d’exploitation qui a été chargée lors du démarrage initial sur l’appareil attesté.
Si la version d’OSRevListInfo signalée est égale à une valeur acceptée, autorisez l’accès.
Si la version d’OSRevListInfo signalée n’est pas égale à une valeur acceptée, effectuez l’une des actions suivantes qui s’alignent sur les stratégies de votre entreprise :
- Interdire tout accès.
- Dirigez l’appareil vers un pot de miel d’entreprise pour surveiller davantage les activités de l’appareil.
HealthStatusMismatchFlags : l’attribut HealthStatusMismatchFlags s’affiche si DHA-Service détecte un problème d’intégrité (incompatibilité) dans le DHA-Data qu’il reçoit des solutions de gestion des appareils, à des fins de validation.
Si un problème est détecté, une liste d’éléments DHA-report impactés est répertoriée sous l’attribut HealthStatusMismatchFlags.
DHA-Report exemple
<?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>
Codes d’erreur et status csp HealthAttestation
Code d'erreur | Nom de l’erreur | Description de l’erreur |
---|---|---|
0 | HEALTHATTESTATION_CERT_RETRIEVAL_UNINITIALIZED | Cet état est l’état initial pour les appareils qui n’ont jamais participé à une session DHA. |
1 | HEALTHATTESTATION_CERT_RETRIEVAL_REQUESTED | Cet état signifie que l’appel Exec du client MDM sur le nœud VerifyHealth a été déclenché et que le système d’exploitation tente maintenant de récupérer DHA-EncBlob à partir de DHA-Server. |
2 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED | Cet état signifie que l’appareil n’a pas pu récupérer DHA-EncBlob à partir de DHA-Server. |
3 | HEALTHATTESTATION_CERT_RETRIEVAL_COMPLETE | Cet état signifie que l’appareil a correctement récupéré DHA-EncBlob à partir du serveur DHA. |
4 | HEALTHATTESTATION_CERT_RETRIEVAL_PCR_FAIL | Déconseillé dans Windows 10, version 1607. |
5 | HEALTHATTESTATION_CERT_RETRIEVAL_GETQUOTE_FAIL | DHA-CSP n’a pas pu obtenir un devis de revendication. |
6 | HEALTHATTESTATION_CERT_RETRIEVAL_DEVICE_NOT_READY | DHA-CSP n’a pas pu ouvrir un handle au fournisseur de chiffrement de plateforme Microsoft. |
7 | HEALTHATTESTATION_CERT_RETRIEVAL_WINDOWS_AIK_FAIL | DHA-CSP n’a pas pu récupérer Windows AIK |
8 | HEALTHATTESTATION_CERT_RETRIEVAL_FROM_WEB_FAIL | Déconseillé dans Windows 10, version 1607. |
9 | HEALTHATTESTATION_CERT_RETRIEVAL_INVALID_TPM_VERSION | Version TPM non valide (la version du module de plateforme sécurisée n’est pas 1.2 ou 2.0) |
10 | HEALTHATTESTATION_CERT_RETRIEVAL_GETNONCE_FAIL | Nonce n’a pas été trouvé dans le registre. |
11 | HEALTHATTESTATION_CERT_RETRIEVAL_GETCORRELATIONID_FAIL | L’ID de corrélation n’a pas été trouvé dans le Registre. |
12 | HEALTHATTESTATION_CERT_RETRIEVAL_GETCERT_FAIL | Déconseillé dans Windows 10, version 1607. |
13 | HEALTHATTESTATION_CERT_RETRIEVAL_GETCLAIM_FAIL | Déconseillé dans Windows 10, version 1607. |
14 | HEALTHATTESTATION_CERT_RETRIEVAL_ENCODING_FAIL | Échec dans les fonctions d’encodage. (Scénario extrêmement improbable) |
15 | HEALTHATTESTATION_CERT_RETRIEVAL_ENDPOINTOVERRIDE_FAIL | Déconseillé dans Windows 10, version 1607. |
16 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_LOAD_XML | DHA-CSP n’a pas pu charger la charge utile qu’il a reçue de DHA-Service. |
17 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_CORRUPT_XML | DHA-CSP a reçu une réponse endommagée de DHA-Service. |
18 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_EMPTY | DHA-CSP a reçu une réponse vide de DHA-Service. |
19 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_DECRYPT_AES_EK | DHA-CSP n’a pas réussi à déchiffrer la clé AES à partir du défi EK. |
20 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_DECRYPT_CERT_AES_EK | DHA-CSP n’a pas pu déchiffrer le certificat d’intégrité avec la clé AES. |
21 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_EXPORT_AIKPUB | DHA-CSP n’a pas réussi à exporter la clé publique AIK. |
22 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_CREATE_CLAIMAUTHORITYONLY | DHA-CSP n’a pas réussi à créer une revendication avec des données d’attestation AIK. |
23 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_APPEND_AIKPUB | DHA-CSP n’a pas pu ajouter la pub AIK à l’objet blob de requête. |
24 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_APPEND_AIKCERT | DHA-CSP n’a pas pu ajouter le certificat AIK à l’objet blob de requête. |
25 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_INIT_HTTPHANDLE | DHA-CSP n’a pas pu obtenir de handle de session. |
26 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_GETTARGET_HTTPHANDLE | DHA-CSP n’a pas pu se connecter au DHA-Service. |
27 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_CREATE_HTTPHAND | DHA-CSP n’a pas pu créer de handle de requête HTTP. |
28 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_SET_INTERNETOPTION | DHA-CSP n’a pas pu définir les options. |
29 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_ADD_REQUESTHEADERS | DHA-CSP n’a pas pu ajouter d’en-têtes de requête. |
30 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_SEND_REQUEST | DHA-CSP n’a pas pu envoyer la requête HTTP. |
31 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_RECEIVE_RESPONSE | DHA-CSP n’a pas reçu de réponse du service DHA. |
32 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_QUERY_HEADERS | DHA-CSP n’a pas pu interroger les en-têtes lors de la tentative d’obtention du code status HTTP. |
33 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_EMPTY_RESPONSE | DHA-CSP a reçu une réponse vide de DHA-Service même si la status HTTP était correcte. |
34 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_MISSING_RESPONSE | DHA-CSP a reçu une réponse vide ainsi qu’un code d’erreur HTTP de DHA-Service. |
35 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_IMPERSONATE_USER | DHA-CSP n’a pas réussi à emprunter l’identité de l’utilisateur. |
36 | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_ACQUIRE_PDCNETWORKACTIVATOR | DHA-CSP n’a pas pu acquérir les activateurs PDC nécessaires à la communication réseau lorsque l’appareil est en mode de secours connecté. |
0xFFFF | HEALTHATTESTATION_CERT_RETRIEVAL_FAILED_UNKNOWN | Échec de DHA-CSP en raison d’une raison inconnue, cette erreur est très peu probable. |
400 | Bad_Request_From_Client | DHA-CSP a reçu une demande d’attestation incorrecte (incorrecte). |
404 | Endpoint_Not_Reachable | DHA-Service n’est pas accessible par DHA-CSP |
Considérations de sécurité
DHA ancre sa confiance dans le module TPM et ses mesures. Si les mesures TPM peuvent être usurpées ou falsifiées, DHA ne peut fournir aucune garantie de l’intégrité de l’appareil pour cet appareil.
Pour plus d’informations, consultez Certification TPM du client PC.
Articles connexes
Informations de référence sur les fournisseurs de services de configuration