EMET : un « nouvel » outil de prévention des vulnérabilités
Date : 04 Octobre 2010
L’objet du présent article est de présenter l’outil de prévention d’exploitation de vulnérabilités EMET (Enhanced Mitigation Experience Toolkit) développé par Microsoft. Distribué publiquement depuis un an déjà, il a été récemment mis à jour le 2 septembre dernier en version 2.0. Passé inaperçu malgré une annonce sur le blog sécurité de Microsoft, ce n’est que récemment grâce à la faille dans Adobe Reader, que l’outil de sécurisation revient sur le devant de la scène.
En effet la récente exploitation « 0-day » de la vulnérabilité CVE-2010-2884 dans Adobe Reader (cf. CERT-IST/AV-2010.433), a poussé l’éditeur Adobe à recommander l'utilisation de l'outil EMET de Microsoft, dans l’attente de la publication d’un correctif, afin de contenir l’exploitation de cette vulnérabilité.
Objectifs de l’outil
L’outil EMET est un outil de prévention d’exploitation de vulnérabilités fonctionnant de façon « non intrusive». Il ne nécessite ni compilation ou recompilation du code, ni inclusion sous forme de composant ou module dans les logiciels à protéger, ni exécution en environnement confiné.
EMET intervient en profondeur au niveau des couches noyaux du système d’exploitation afin d’appliquer des techniques de protections telles que DEP, ASLR et SEHOP, introduites dans les dernières versions du système d’exploitation Windows. Ces technologies permettent la protection des logiciels et applications afin de contrer les attaques communément menées par des programmes malveillants, notamment pour la plupart les débordements de mémoire (buffer overflow, heap overflow, integer overflow, etc.).
Nota : Il est important de noter que les techniques utilisées par EMET fonctionnent en mode utilisateur (user mode), il ne permet donc pas de se prémunir contre les attaques en mode noyau (kernel mode).
Techniques de protection
La première version de l’outil (1.0.2) a été distribuée par Microsoft le 27 octobre 2009. Cette version n’intégrait que 4 techniques de protection (protection du tas, protection des pages Null, DEP et SEHOP). La nouvelle version (2.0), distribuée depuis le 2 septembre 2010 intègre 2 nouvelles technologies (ASLR et EATAF).
EMET est compatible avec les systèmes Windows 32 bits et 64 bits. Il supporte les environnements suivants : Windows 7, Windows Server 2003 Service Pack 1, Windows Server 2008, Windows Server 2008 R2, Windows Vista Service Pack 1 et Windows XP Service Pack 3.
Bien qu’EMET soit un outil disponible gratuitement, Microsoft ne fournit actuellement aucun support sur l’outil.
Nota : Toutes les technologies ne sont pas disponibles sur tous les systèmes d’exploitation (ex. SEHOP et ASLR ne peuvent pas être configurés sur Windows XP et Windows Server 2003).
#1 - Protection SEHOP (Structure Exception Handler Overwrite Protection)
SEHOP permet de protéger la chaine de gestion des exceptions SEH (Structured Exception Handling) incluse dans les exécutables. Ce mécanisme protège contre les attaques par débordement de mémoire qui consistent à écraser un enregistrement de pointeur d’exception avec une valeur maitrisée. Cette technique permet en effet à l'attaquant de faire exécuter du code arbitraire en déclenchant une exception après avoir modifié la structure SEH.
Nota :
- Cette protection existe sur les systèmes Windows depuis Windows Vista SP1. Elle n’est pas disponible sous Windows XP.
#2 - Dynamic DEP (Data Execution Prevention)
DEP est un mécanisme de protection qui consiste à marquer certaines régions de la mémoire comme « non exécutables ». Ce mécanisme permet par exemple d'empêcher l'exécution d'un code que l'attaquant aurait placé dans une variable du programme ou dans la pile d'exécution.
Nota : Le Cert-IST a publié un article dédié à ce mécanisme dans le bulletin d’avril 2010 (cf. « Le DEP (Data Execution Prevention) »)
#3 - NULL page allocation
Ce mécanisme consiste à bloquer les programmes d’exploitation utilisant des déréférencements de pointeurs NULL. Il fonctionne en pré-allouant la première page mémoire avant que l’application ne soit lancée. Cette technique permet de prévenir les attaques de type « pointeur Nul » (Null pointer attack) exploitables dans certains programmes.
Nota : EMET ne fonctionne qu’en mode utilisateur, il ne permet donc pas de lutter contre les déréférencements de pointeurs NULL en mode noyau.
#4 - Heap spray allocation
Ce mécanisme permet de se prémunir contre les attaques exploitant la zone d’allocation dynamique de la mémoire (le tas). Ces attaques ont la particularité de pré-allouer de multiples zones en mémoire pour stocker de multiples copies du code malveillant (généralement un code shell). En multipliant les occurrences du code malveillant (effet de « spray » - diffusion), le programme malveillant augmente la probabilité que ce code soit exécuté.
La pré-allocation de pages mémoire par EMET bloque alors l’attaque par diffusion, puisque les emplacements mémoires sont déjà occupés.
#5 - Mandatory ASLR
Certains programmes malveillants peuvent prédire les adresses allouées par les librairies dynamiques (DLL) chargées en mémoire par une application, et contourner également les protections de type DEP. Ce type d’attaque est communément appelé attaque ROP (Return Oriented Programming). Afin de lutter contre ce type d’attaque, EMET utilise le mécanisme d’ASLR.
La technique ASLR (Address Space Layout Randomization) permet de charger des modules à des adresses choisies aléatoirement afin que les codes malveillants ne puissent prédire l’adressage des modules. La difficulté de cette technique est que tous les modules chargés doivent être compilés spécifiquement pour utiliser cette technique.
Nota : La fonction ASLR n’est disponible que sur les systèmes Windows Vista, Windows server 2008, Windows server 2008 R2 et Windows 7.
#6 - Export Address Table Access Filtering (EATAF)
Certains programmes malveillants utilisent des fonctions d’itération parcourant l’espace d’adressage des tables EAT (Export Address Table) du système à la recherche de modules chargés en mémoire. Une fois un module localisé, le code malveillant recherche l’adresse d’une API qui l’intéresse pour exploiter sa « payload ».
Le mécanisme EATAF consiste à filtrer les accès en lecture et en écriture aux tables EAT afin d’empêcher tout programme malveillant d’exploiter les API de ces modules, généralement « kernel32.dll » ou « ntdll.dll ».
Modes de fonctionnement d’EMET
Lors du lancement de l’application, EMET affiche les techniques de protection disponibles pour le système, et liste les processus actuellement lancés. Il est ensuite possible de paramétrer les protections directement depuis l’interface.
Concrètement, EMET dispose de 3 modes de fonctionnement.
Le premier mode permet d’établir une liste d’applications à protéger. Pour chaque application il est possible d’activer ou de désactiver unitairement les protections choisies via un modèle de souscription (Opt In/Opt out). Ceci offre une souplesse dans le paramétrage des protections et permet notamment d’éviter certains effets de bord sur les applications « non compatibles » avec les modes de protection proposés.
Le second mode permet d’appliquer les protections DEP, SEHOP et ASLR de façon globale sur le système d’exploitation. Par conséquent toutes les applications en bénéficient implicitement.
Nota : Ce mode de fonctionnement ne permet cependant pas l’activation de toutes les protections puisque les techniques SEHOP et ASLR ne sont pas utilisables sur les systèmes Windows XP et Windows Server 2003.
Le dernier mode de fonctionnement d’EMET est le mode en ligne de commande. Ce mode permet aux administrateurs de déployer spécifiquement leur politique de protection à l’aide de fichiers scripts.
Conclusions
Les fonctionnalités apportées par la dernière version d’EMET offrent de nouveaux horizons pour combattre les programmes malveillants. La version 2.0 montre notamment de nombreux avantages par rapport à la précédente :
- Pas de recompilation nécessaire : Jusqu’à présent une mesure de prévention telle que DEP (Data Execution Prevention) nécessitait que les applications soient recompilées pour pouvoir être protégées. EMET permet désormais d’autoriser un utilisateur à activer DEP sans avoir à recompiler l’application. Ceci est très intéressant dans le cas de déploiement de mesures de protections dans l’entreprise pour les applications et les logiciels dont on ne dispose pas des sources.
- Configuration et ergonomie : EMET offre une interface simple qui permet une meilleure granularité en termes d’options de configuration, et notamment au niveau du choix des applications ou des processus susceptibles d’être protégés. Il est possible de configurer les applications compatibles et non-compatibles avec les protections proposées (DEP, ASLR, SEHOP).
- Renforcement des anciennes applications : EMET permet la gestion des anciennes applications (legacy) non conçues pour exploiter les protections natives du système. Il permet de réduire la couverture d’exposition de celles-ci face aux risques d’exploitation de vulnérabilités inconnues au moment de leur développement.
- Evolutivité : L’équipe de développement d’EMET envisage de s’adapter aux nouvelles techniques d’attaques des pirates et de faire évoluer l’outil en intégrant de nouvelles techniques de protection. Des nouvelles techniques sont déjà en cours de tests, mais leur déploiement et leur réelle efficacité n’est pas encore suffisamment vérifiée. Une fonction interne d’EMET permettra à l’outil d’être mis à jour pour et d’intégrer ces nouvelles technologies au fur et à mesure de leur développement.
Bien que l’outil présente de nombreux atouts, il convient d’être prudent quant à son utilisation généralisée sur le poste de travail des utilisateurs. Plusieurs points sont à considérer :
- En termes de sécurité : Les techniques de protections employées semblent efficaces dans certains contextes d’attaques, néanmoins on peut penser que les techniques des pirates vont également évoluer pour s’adapter aux contre-mesures de l’outil.
- En termes de développement : Même si EMET présente de nombreux avantages son utilisation ne doit pas justifier de la part des développeurs de négliger ou d’abandonner les bonnes pratiques en matière de développements sécurisés.
- En termes de déploiement : Il est important de noter que les techniques de protection utilisées par EMET sont extrêmement dépendantes des systèmes d’exploitation et des applications protégées.
Certaines protections peuvent ne pas convenir à certains type de programmes (pare-feu, anti-virus, anciennes applications 16 bits, etc.). Microsoft met notamment en garde son utilisation avec certaines « vieilles » applications ou applications bas niveau, qui pourraient ne plus fonctionner (notamment avec l’ASLR).
Le manque de retours d’expérience de la communauté ne permet pour le moment pas de garantir l’innocuité de l’outil sur le fonctionnement du système d’exploitation ou des applications. Au même titre que pour toute installation d’une nouvelle application sur le poste de travail, EMET doit être qualifié dans l’environnement de l’utilisateur avant d’envisager son déploiement.