SecurityInsider
Le blog des experts sécurité Wavestone

La sécurité de Windows 10 – Partie 2 : Device Guard


Afficher l'image d'origine

Après un premier article sur le "Virtual Secure Mode", nous continuons notre série d'articles sur Windows 10 avec un focus sur la fonctionnalité "Device Guard". Bonne lecture !

Présentation

Chaque jour, des milliers de nouveaux malwares apparaissent et il devient de plus en plus difficile de lutter contre ce flot de programmes malveillants avec, pour seules armes, des outils et méthodes traditionnelles comme la détection basée sur la signature.
C’est dans ce contexte que Microsoft a développé Device Guard, une fonctionnalité uniquement disponible sur Windows 10 Entreprise permettant de verrouiller des appareils afin qu’ils n’exécutent que des applications, scripts et pilotes approuvés. Une application approuvée est une application dite de confiance, dont le code est signé par des signataires de confiance. Ainsi, un programme non approuvé ne pourra tout simplement pas s’exécuter sur l’appareil.
Dans l’article précédent, nous parlions de Virtual Secure Mode qui permet de protéger le système en protégeant les processus et données critiques dans une partition virtuelle sécurisée. Device Guard utilise cette technologie afin d’isoler Code Integrity, le service permettant de vérifier l’intégrité du noyau Windows. Ainsi, un attaquant aura plus de mal à exécuter un code malveillant puisque celui-ci pourra être bloqué par Device Guard.

Fonctionnement

Aujourd’hui, les postes de travail évoluent sans cesse et de nouvelles applications s’ajoutent, se suppriment ou se mettent à jour régulièrement. Device Guard est plutôt conçu pour les postes maitrisés où l’environnement ne va pas changer aussi souvent qu’un poste classique. Ainsi ce sont les postes dits critiques ou sensibles, telles que les postes d’administration, qui sont visés par Device Guard.
Plus qu’un nouveau mécanisme de sécurité, Device Guard est un ensemble de fonctionnalités de sécurité matérielle et logicielle. C’est lorsque toutes ces fonctionnalités sont activées simultanément que Device Guard apporte le plus haut niveau de sécurité. La première est Hyper-V Code Integrity (HVCI), l’un des services de la sécurité basée sur la virtualisation. Il permet de s’assurer que seuls les drivers, exécutables et DLLs respectant la stratégie d’entreprise sont autorisés à se lancer.
Dès le démarrage de l’appareil, Hyper-V Code Integrity va vérifier l’ensemble de ce qui s’exécute sur celui-ci et en particulier contrôler les drivers qui se chargent en mémoire afin de n’autoriser que les drivers signés. Cette exécution anticipée dans le lancement de la machine a pour but d’empêcher les programmes malveillants de s’exécuter au démarrage de l’appareil.
Figure 1 : Architecture du système avec Device Guard
HVCI utilise la sécurité basée sur la virtualisation afin d’isoler Code Integrity, un contrôleur de signatures des pilotes et fichiers chargés en mémoire qui s’exécute avec le secure kernel, noyau sécurisé de la partition sécurisée du Virtual Secure Mode. Ce service permet d’améliorer la sécurité du système en validant l’intégrité d’un pilote ou d’un fichier chaque fois que celui-ci est chargé dans le noyau. De manière concrète, Code Integrity est chargé de confirmer que le code dans les pages est signé, ce qui va permettre au secure kernel de marquer les entrées dans l’EPT (Extended Page Tables), les pages mémoire du kernel, comme exécutables. Ainsi, les pages mémoire d’un code non signé comme celui d’un malware par exemple n’ont pas les droits d’écriture ni d’exécution (+WX), empêchant de facto la modification d’un code exécutable.
De plus, Device Guard met à disposition une fonctionnalité utilisant UEFI afin d’empêcher sa désactivation, par exemple par un attaquant ayant compromis le poste. Une fois cette fonctionnalité activée, il devient impossible de désactiver Device Guard de manière classique. Une variable UEFI protégée est créée afin de bloquer l’activation de celui-ci, et ce dès le démarrage de la machine. Afin de désactiver Device Guard, il va falloir supprimer cette variable UEFI, ce qui ne peut être fait que poste par poste, ou bien en utilisant un outil de déploiement bas-niveau comme « Management Engine » d’Intel.
Figure 2 : Processus de sécurisation Windows 10
Code Integrity va permettre l’exécution dans le kernel du code de confiance et des programmes approuvés dans l’environnement utilisateur. Pour cela, il s’appuie sur une stratégie appelée « Code Integrity Policy ». Cette stratégie est un fichier déployé sur les postes de travail qui référence les signataires de code de confiance. Ainsi, le code signé par un signataire référencé dans le Code Integrity Policy aura le droit de s’exécuter sans restriction. Il faut aussi savoir que Microsoft est automatiquement un signataire de confiance. Les applications provenant du Windows Store, par exemple, sont signées par Microsoft et ne sont donc pas bloquées par Device Guard. Pour bloquer des applications au cas par cas, il convient de se tourner vers AppLocker et de créer les règles spécifiques. D’une manière générale, Device Guard va faire le gros grain quand AppLocker va permettre d’affiner le filtrage du code autorisé à s’exécuter sur la machine.
Un Code Integrity Policy de référence peut être créé afin d’être déployé sur un nombre important de machines. Cette stratégie de référence est appelée « Golden Code Integrity Policy » et est créée à partir d’une machine de référence contenant les applications que l’entreprise souhaite inclure dans sa stratégie. L’administrateur peut lancer un scan du système à la recherche de tous les fichiers qui va permettre la création de la stratégie. On peut ainsi imaginer une entreprise créer sa « Golden Code Integrity Policy » à partir d’un master Windows 10.
Après avoir déployé la stratégie Code Integrity sur les machines, toutes les applications non signées par un signataire de confiance se verront refuser l’exécution sur la machine. Il reste néanmoins toujours possible de les inclure dans la stratégie d’entreprise. Ceci est possible grâce aux catalogues de fichiers. Les catalogues sont des fichiers au format .cat contenant des empreintes des fichiers approuvés, ils sont créés grâce à des commandes Powershell. Un catalogue ne référence que les empreintes de fichiers, il n’est pas suffisant à lui seul pour permettre aux applications non encore approuvées de s’exécuter sur le système. Afin de les autoriser, il va falloir signer ce catalogue avec un certificat appelé « Device Guard code signing certificate ». Ce dernier peut être acheté ou bien créé en utilisant une autorité de certification interne, selon une procédure fournie par Microsoft. Une fois le catalogue signé par ce certificat de signature, il faut le rajouter dans le Code Integrity Policy. C’est seulement à ce moment que le catalogue, et par extension, les empreintes  de fichiers qu’il contient, est considéré comme signé par un signataire de confiance
Si l’entreprise ne dispose pas d’une infrastructure de gestion des clés interne, il est possible de faire signer le fichier catalogue directement par Microsoft via l’application « Device Guard Signing Portal » et se trouvant sur le Windows Store for Business. Il est ensuite possible de télécharger le certificat pour l’ajouter à la stratégie Code Integrity existante.

Prérequis

Device Guard nécessite quelques prérequis permettant de fournir un haut niveau de sécurité :
  • Windows 10 Enterprise 64-bits
  • Le verrouillage de l’interpréteur de commandes UEFI et des options de la fonction Démarrage sécurisé.
  • Technologies de virtualisation matérielles (Intel VT-x ou AMD-V)
  • Technologie de gestion de mémoire virtualisée  IOMMU (VT-d, AMD-Vi, etc.) afin de gérer les accès mémoire vers le monde sécurisé
  • Les pilotes en mode noyau doivent être compatibles avec Code Integrity.
  • La puce TPM version 2.0 pour le stockage des secrets (informations d’identification).
Néanmoins, la sécurité basée sur la virtualisation peut être activée malgré certaines contraintes matérielles non respectées, la sécurité du système en sera par contre réduite.

Configuration

Les fichiers catalogues

Device Guard en mode appliqué nécessite que chaque application présente sur le système soit signée et approuvée par la stratégie d’intégrité du code. Les applications signées par Windows Store sont automatiquement approuvées par le système, mais si l’on souhaite exécuter d’autres applications, celles-ci doivent être signées avant l’application de la politique Device Guard.
Pour ce faire, Windows 10 propose un outil appelé « Inspecteur de package » qui effectue le suivi de l’installation et l’exécution des applications que l’on souhaite faire approuver, et met leurs empreintes dans un fichier catalogue.
Attention : pour créer un fichier catalogue, il faut s’assurer que la stratégie d’intégrité de code est exécutée en mode audit (Cf. La stratégie d’intégrité du code), car une fois la politique déployée, aucune application ne pourra s’exécuter sur le système, et donc être mise dans le catalogue.
Pour créer le fichier catalogue, il faut tout d’abord exécuter l’inspecteur de package pour capturer les empreintes de chaque fichier binaire des applications que l’on souhaite approuver :
PackageInspector.exe Start C :
Ensuite, il faut copier les supports d’installation des applications sur le lecteur C : (ou n’importe quel autre lecteur) puis les installer et démarrer afin de s’assurer que toutes les mises à jour du produit sont installées.
Une fois cette étape terminée, il faut arrêter l’analyse à l’issue de laquelle deux fichiers sont générés : le fichier catalogue .cat et le fichier de définition .cdf
PackageInspector.exe Stop C :
La dernière étape consiste à signer le fichier catalogue et le déployer afin qu’il soit approuvé par la stratégie d’intégrité du code. On suppose qu’avant cette étape nous avons acheté ou créé un certificat de signature qu’on utilisera pour signer les catalogues :
.\signtool.exe sign /debug /f dg-cert.pfx /fd sha256 /v $CatFileName
dg-cert.pfx est le nom du certificat et $CatFileName est la variable contenant le chemin vers le fichier catalogue créé.
Afin de déployer le fichier, il suffit de le copier à l’emplacement suivant : C:\Windows\System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}

La stratégie d’intégrité du code

Il faut au départ activer la protection de l’intégrité du code basée sur la virtualisation et activer Code Integrity :
Figure 3 : Activation de la sécurité basée sur la virtualisation
On peut ensuite passer au scan des fichiers pour créer la stratégie Code Integrity de référence avec les commandes :
New-CIPolicy –level PcaCertificate –Fallback Hash –ScanPath C : -UserPEs –FilePath .\CIPolicy.xml 3>.\warning.txt
ConvertFrom-CIPolicy .\CIPolicy.xml .\CIPolicy.bin
Une fois la stratégie créée, il faut copier le fichier binaire « CIPolicy.bin » à l’emplacement C:\Windows\System32\CodeIntegrity et le déployer via la configuration ordinateur\Modèles d’administration\Système\Device Guard de la stratégie de groupe locale et copier le chemin d’accès:
Figure 4 : Déploiement de la stratégie d’intégrité du code
Il est également conseillé de soumettre la stratégie de code créée à un audit avant de la déployer. Cette étape permettra de surveiller les exceptions consignées dans le journal des évènements CodeIntegrity lorsque l’exécution des applications ne correspond pas à la stratégie de référence. Pour ce faire, il faut ouvrir l’observateur des évènements, à l’emplacement Journaux des applications et des services\Microsoft\CodeIntegrity\Opérationnel
Finalement, pour appliquer la stratégie créée et auditée, il suffit de supprimer l’option de règle en mode audit et redémarrer la machine:
Set-RuleOption -Option 3 –Delete .\CIPolicyv1.xml
ConvertFrom-CIPolicy .\CIPolicy.xml .\CIPolicy.bin
Restart-Computer

Pour vérifier que les options Device Guard sont disponibles et actives, on peut exécuter msinfo32.exe depuis une session PowerShell avec élévation de privilèges:
Figure 5 : Les options Device Guard actives dans les informations système

 Conclusion

Introduite par Microsoft, Device Guard est à ce jour la meilleure façon de protéger un système Windows 10 entreprise contre les menaces liées aux programmes malveillants et l’une des fonctionnalités majeures pour renforcer l’intégrité des systèmes logiciels et matériels. Toutefois, son déploiement ne se fait pas en un simple clic mais nécessite un certain nombre de configurations matérielles et logicielles, en plus des prérequis nécessaires pour le bon fonctionnement des applications, tels que la création et la signature des fichiers catalogues, choses qui demandent une bonne connaissance de l’environnement Windows. Il faut également noter la nécessité de mettre à jour les fichiers catalogues lors des mises à jour applicatives.

Références

Abderahmane HABAIEB & Imane BELHAOUS

Aucun commentaire:

Enregistrer un commentaire