L'annonce est parue hier sur le blog de Microsoft Security Research & Defense: la release d'EMET(Enhanced Mitigation Evaluation Toolkit), un outil gratuit permettant d'appliquer des protections comme DEP sur vos programmes.
Jusqu'ici, l'ajout de ces protections était soumis au bon vouloir du développeur. Soit on activait les options dans Visual Studio, soit on utilisait ma bidouille avec peflags. EMET permet d'activer les protections chez vous, sur les processus que vous voulez de façon très simple: EMET_conf --add <executable>. Quel que soit le dossier contenant votre programme, EMET se chargera de le lancer avec les protections choisies.
EMET gère ainsi une liste de processus et leur apporte les protections suivantes:
- SEHOP (Structured Exception Handler Overwrite Protection): validation de la chaines des gestionnaires d'exception
- DEP (Data Execution Prevention): marque certaines parties de la mémoire, par exemple la stack, comme non exécutables
- NULL page allocation: protection contre les "NULL dereferences" en résevant la première page mémoire
- Heap spray allocation: "heap spray" est une attaque qui consiste à balancer du shellcode un peu partout dans la mémoire, et à sauter plus ou moins au hasard dans les zones mémoires affectées en espérant pouvoir exécuter le shellcode. EMET réserve les adresses mémoire généralement utilisées dans les exploits pour les empêcher d'y écrire.
Bon, maintenant, les critiques (j'ai bien appris la présentation classique thèse/antithèse/synthèse à l'école, maintenant, j'applique!):
- J'aurais bien aimé voir ASLR(Address Source Layout Randomization) là-dedans, parce que ça va bien avec DEP et SEHOP.
- On ne peut pas choisir quelle protection on applique à quel binaire: les options sont dans des clefs registres dans HKLM/Software/Microsoft/EMET, et quand on en désactive une, on la désactive pour tous les programmes. Par contre, il y a une clef registre assez fun nommée "heap_pages", qui permet d'indiquer à EMET quelles adresses réserver pour la partie heap spray allocation.
- Ce serait sympa d'avoir une interface "oh, look, shiny!", même si ça sert à rien :)
Comparé à peflags, EMET apporte la protection contre les null pointer dereferences et les heap sprays, et permet de protéger un exécutable en se basant sur son nom. Par contre, peflags permet d'appliquer les protections beaucoup plus finement (par exemple, SEHOP pour un programme et pas pour l'autre), et peut ajouter le flag ASLR (qui doit être appliqué sur toutes les DLLs chargées par un programme pour fonctionner correctement).
En résumé, un outil sympa, mais qui devrait être travaillé encore un peu. Ca reste un programme utile pour les développeurs qui veulent tester le comportement de leur application lorsque les protections sont activées. Dommage, c'est déjà fait avec VLC media player!
