Vérification de l’intégrité du code

L’intégrité de la mémoire est une fonctionnalité de sécurité basée sur la virtualisation (VBS) disponible dans Windows 10, Windows 11 et Windows Server 2016 et versions ultérieures. L’intégrité de la mémoire et VBS améliorent le modèle de menace de Windows et fournissent des protections plus fortes contre les programmes malveillants qui tentent d’exploiter le noyau Windows. VBS utilise l’hyperviseur Windows pour créer un environnement virtuel isolé qui devient la racine de confiance du système d’exploitation qui suppose que le noyau peut être compromis. L’intégrité de la mémoire est un composant essentiel qui protège et renforce Windows en exécutant l’intégrité du code en mode noyau dans l’environnement virtuel isolé de VBS. L’intégrité de la mémoire limite également les allocations de mémoire du noyau qui peuvent être utilisées pour compromettre le système, en veillant à ce que les pages mémoire du noyau ne soient rendues exécutables qu’après avoir effectué des vérifications d’intégrité du code dans l’environnement d’exécution sécurisé, et que les pages exécutables elles-mêmes ne sont jamais accessibles en écriture.

Notes

L’intégrité de la mémoire est parfois appelée intégrité du code protégée par l’hyperviseur (HVCI) ou intégrité du code appliquée à l’hyperviseur, et a été initialement publiée dans le cadre de Device Guard. Device Guard n’est plus utilisé, sauf pour localiser l’intégrité de la mémoire et les paramètres VBS dans stratégie de groupe ou le Registre Windows.

Les vérifications de l’intégrité du code garantissent la compatibilité avec les exigences d’utilisation de la mémoire du noyau de l’intégrité de la mémoire et détectent les violations suivantes :

Code d'erreur Problème d’intégrité du code
0x2000 :
  • 2 - Adresse dans le code du pilote où l’erreur a été détectée.
  • 3 - Type de pool.
  • 4 - Balise de pool (si elle est fournie).

L’appelant a spécifié un type de pool exécutable. (Attendu : NonPagedPoolNx)
0x2001 :
  • 2 - Adresse dans le code du pilote où l’erreur a été détectée.
  • 3 - Protection de page (WIN32_PROTECTION_MASK).
L’appelant a spécifié une protection de page exécutable. (Attendu : PAGE_EXECUTE* bits effacés)
0x2002 :
  • 2 - Adresse dans le code du pilote où l’erreur a été détectée.
  • 3 - Priorité de page (MM_PAGE_PRIORITY logiquement OR’d avec MdlMapping*).
L’appelant a spécifié un mappage MDL exécutable. (Attendu : MdlMappingNoExecute).
0x2003 :
  • 2 - Nom du fichier image (chaîne Unicode).
  • 3 - Adresse de l’en-tête de section.
  • 4 - Nom de section (chaîne encodée en UTF-8).
L’image contient une section exécutable et accessible en écriture.
0x2004 :
  • 2 - Nom du fichier image (chaîne Unicode).
  • 3 - Adresse de l’en-tête de section.
  • 4 - Nom de section (chaîne encodée en UTF-8).
L’image contient une section qui n’est pas alignée sur la page.
0x2005 :
  • 2 - Nom du fichier image (chaîne Unicode).
  • 3 - Répertoire IAT.
  • 4 - Nom de section (chaîne encodée en UTF-8).
L’image contient un IAT situé dans une section exécutable.

Activation de cette option :

Vous pouvez activer la vérification de l’intégrité du code pour un ou plusieurs pilotes à l’aide du Gestionnaire du vérificateur de pilotes ou de la ligne de commande Verifier.exe. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote. Vous devez redémarrer l’ordinateur pour activer ou désactiver l’option de vérification de l’intégrité du code.

  • Sur la ligne de commande

    Sur la ligne de commande, la vérification de l’intégrité du code est représentée par 0x02000000 (bit 25). Par exemple :

    verifier /flags 0x02000000 /driver MyDriver.sys

    La fonctionnalité sera active après le prochain démarrage.

  • Utilisation du Gestionnaire du vérificateur de pilotes

  1. Démarrez le Gestionnaire du vérificateur de pilotes. Tapez Vérificateur dans une fenêtre d’invite de commandes.
  2. Sélectionnez Créer des paramètres personnalisés (pour les développeurs de code), puis cliquez sur Suivant.
  3. Sélectionnez (case activée) vérification de l’intégrité du code.
  4. Redémarrez l'ordinateur.

Implémenter du code compatible avec l’intégrité de la mémoire