Du code JavaScript pour contourner la protection ASLR

Par:
fredericmazue

ven, 17/02/2017 - 15:53

Vous ne savez pas quoi faire de votre week-end ? Il y a longtemps que vous n'avez pas eu mal à la tête et ça vous manque ? Dans ce cas, lisez l'article publié par 5 chercheurs en sécurité de l'Université Vrije aux Pays-Bas, et vulgarisé (si l'on peut dire), ici.

Un article qui n'est pas sans en rappeler un autre, également très ardu, publié en avril 2015. Là aussi, il était question d'espionner dans le cache du microprocesseur, l'activité d'une machine, par exemple une saisie de touches de clavier, avec du code JavaScript injecté depuis une page web malveillante. Comment est-il possible de réaliser une telle chose avec un langage de haut niveau comme JavaScript ?

Le truc est qu'au final tout code devient du code machine pour son exécution et que tout code exécuté transite inévitablement par le cache du processeur, et est référencé par les espaces d'adressages géré par ce dernier.

Le code JavaScript de nos 5 chercheurs néerlandais, s'attaque à la MMU (Memory Management Unit) des microprocesseurs, un composant qui fait partie des microprocesseurs modernes et qui gère la mémoire paginée. Les systèmes d'exploitation modernes ont quant à eux une fonctionnalité d'adressage aléatoire, ou ALSR (Adress Space Layout Randomization), qui normalement rend très difficile les attaques. Par exemple, une attaque par débordement de tampon basique aura besoin de connaître l'adresse du tampon attaqué en mémoire. Mais cette adresse n'est à priori pas connue, en vertu du mécanisme ALSR.

Seulement voilà, les zones mémoire bien qu'aléatoires, finissent toutes dans le cache des microprocesseurs à un moment ou à un autre et sont gérés par leur MMU. Or les MMU modernes comportent une hiérarchie de caches dont le dernier niveau est une zone partagée. Il est donc possible d'attaquer ici, de dé-aléatoiriser des zones mémoire et d'y réaliser ensuite une attaque puisque les adresses sont connues.

Certes ce n'est pas du gâteau. Les chercheurs n'ont pas su conduire avec un succès total leur attaque, qu'ils baptisent ASLR⊕Cache ou AnC, sur toutes les architectures, mais cela n'en est pas moins impressionnant. D'autant plus que l'attaque ASLR⊕Cache peut être réalisée via 2 navigateur au moins : Chrome ou Firefox.