SSTIC 2012 - 20 years of PaX

Et c’est reparti pour un nouveau SSTIC 😀

10 ans, ça se fĂȘte, et je sent que ça va troller sĂ©vĂšre sur twitter (#SSTIC #anSSTIC et #trollSSTIC sur twitter).

On commence avec du lourd avec :

20 years of PaX

SLIDES

On commence avec un petit historique de PaX, qui Ă  commencĂ© en 2000 comme un outil de prĂ©vention d’intrusions au niveau de l’hĂŽte (HIPS). Au lieu de se concentrer sur la remĂ©diation des divers bugs et failles prĂ©sentes, l’Ă©quipe s’est concentrĂ© sur des techniques permettant d’empĂȘcher l’exploitation de ces bugs.

PaX Ă©tait et reste un hobbie pour l’orateur. A l’origine ils Ă©taient 3, mais la vraie vie a Ă©loignĂ© les autres membres de la Team.  Les fonctionnalitĂ©s de PAX visent Ă  protĂ©ger les exĂ©cutables d’une quelconque exploitation au travers de pages mĂ©moires non exĂ©cutables, d’ASLR etc.. (notamment la Stack dans le cadre de buffer overflow). Ces fonctionnalitĂ©s ont depuis Ă©tĂ© reprises dans les systĂšmes d’exploitation de Microsoft (DEP, ASLR, etc…).

L’auteur fait ensuite un focus sur les techniques d’exploitation : corruption mĂ©moire (buffer overflow, heap overflow…), execution de code injectĂ© (shellcodes), Execution de code existant dans un ordre qui n’Ă©tait pas prĂ©vu (ROP, Return into libc). Execution de code existant dans l’ordre prĂ©vu par le programme (attaques basĂ©s sur l’altĂ©ration des donnĂ©es utilisĂ©s par l’application).

PaX vise Ă  protĂ©ger les programmes contre ces attaques sans altĂ©rer ou ajouter de code Ă  ces derniers Ă  l’aide de  PAGEEXEC/SEGMEXEC/MPROTECT, ASLR, Non executable Kernel pages (KERNEXEC), sections mĂ©moire du kernel en lecture seule (KERNEXEC,CONSTIFY), SĂ©grĂ©gation des pages mĂ©moire Kernel et Utilisateur (UDEREF)… l’ensemble des features dĂ©veloppĂ©s par l’Ă©quipe de PaX est juste Ă©norme.

Comme tout projet, il Ă  aussi ses fonctionnalitĂ©s non documentĂ© 🙂

KERNEXEC fournit des pages mĂ©moires non executable, et repose sur des fonctionnalitĂ©s spĂ©cifiques du jeux d’instruction du CPU. 

CONSTIFY permet de crĂ©er des mappings en lecture seule. 

UDEREF permet d’empĂ©cher le code userland d’accĂ©der au code Kernel via des zones mĂ©moires partagĂ©s. Sous i386 la sĂ©grĂ©gation est assurĂ©e par la segmentation, sous amd64 c’est la pagination qui est utilisĂ©e pour passer la zone mĂ©moire userland en non-executable pendant l’appel systĂšme.

USERCOPY permet de valider les bornes mĂ©moire lors d’une copie de donnĂ©es depuis l’espace mĂ©moire Kernel vers l’espace mĂ©moire d’un processus Userland (fuite d’information) ou inversement (buffer overflow). (NDLR : ça pique, la prĂ©sentation est dense en informations).

(NDLR : et je viens de rater 3 slides de features Ă  cause d’un pĂ©pin rĂ©seau :s ça va trop vite).

L’auteur nous prĂ©sente en suite un ensemble de plugins GCC pour renforcer le kernel Ă  la compilation (simplifiant l’implĂ©mentation de certaines fonctionnalitĂ©s de PaX). On retrouve les fonctionnalitĂ©s prĂ©sentĂ©es prĂ©cĂ©demment et des dĂ©tails quand Ă  leur implĂ©mentation. (NDLR : vivement les actes
). Certaines de ces fonctionnalitĂ©s ajoutent du code au kernel au travers du plugin GCC, ce qui impacte parfois la performance du noyau.

Pour le futur de PaX, l’auteur prĂ©voit de lutter contre les dĂ©tournements du flot de contrĂŽle de l’application (return into libc, rop) Ă  l’aide d’un plugin de compilateur et par de l’instrumentation du code assembleur.
L’auteur aimerait aussi explorer des techniques de dĂ©tection des bug de type Use After Free, en se reposant sur la taille Ă©norme de l’espace d’adressage de la mĂ©moire pour empĂȘcher la rĂ©utilisation d’une adresse mĂ©moire dans le programme. KERNSEAL est une fonctionnalitĂ© future pour luter contre l’Ă©criture arbitraire d’information dans la mĂ©moire Kernel.

HYPEREXEC : d’aprĂšs l’auteur la virtualisation n’apporte pas de sĂ©curitĂ©, car la complexitĂ© des hyperviseurs est tellement grande qu’ils ajoutent leur propres failles Ă  celles des noyaux qui sont dĂ©jĂ  trĂšs complexes.

Voila qui conclut cette premiÚre présentation de SSTIC 2012