Contournement de l’ASLR Windows en déterminant l’adresse de la bibliothèque à l’aide de pages partagées

Je connais bien ASLR, mais aujourd’hui, j’ai entendu un nouveau fait intéressant sur l’implémentation d’ASLR sous Windows.

Afin d’optimiser les performances si les processus A et B chargent le même fichier, Windows ne le chargera qu’une seule fois dans la mémoire physique et les deux processus partageront la même instance via des pages partagées.

C’est une vieille nouvelle. Mais la partie intéressante est que les deux processus A et B chargeront la bibliothèque partagée dans la même adresse virtuelle (pourquoi?).

Il me semble que toute attaque locale (ex: élévation de privilèges) peut facilement contourner ASLR de la manière suivante:

1. Create a new dummy process 2. Check the address of dlls of interest (kernel32, user32 ..) 3. Attack the privileged process and bypass ASLR with the information from step 2. 

J’ai fait quelques tests simples en utilisant Olly et j’ai constaté que les bibliothèques partagées étaient en effet chargées dans la même adresse virtuelle.

Si c’est vraiment le cas, ASLR est-il inutile pour une exploitation locale?

Vous avez raison, ASLR est peu de défense contre un attaquant local. Il est principalement conçu pour contrecarrer les adresses codées en dur dans les exploits à distance.

Edit: Certains détails de ma réponse précédente étaient incorrects, même si le point ci-dessus est toujours valable. L’adresse de base d’une DLL compatible ASLR est en fait une fonction des deux: (1) un décalage aléatoire choisi par Windows parmi un ensemble de 256 valeurs possibles au démarrage; et (2) l’ordre dans lequel la DLL est chargée, ce qui, pour les DLL connues, est randomisé par le gestionnaire de sessions lors du démarrage du système. Connaître uniquement le décalage aléatoire n’est donc pas suffisant pour calculer l’adresse de base d’une DLL ASLR arbitraire. Cependant, si vous parvenez à observer directement l’adresse d’une DLL cible en mémoire partagée, comme vous l’avez décrit, tous les paris sont désactivés.

Sources: http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf Windows Internals, 6th Edition