web-dev-qa-db-fra.com

ASLR est-il inutile dans la prévention des attaques telles que RetourNet-Libc à Linux?

Si je suis correct, ASLR que nous chargons Libc dans une adresse aléatoire. Et puis pour que cela se produise sans permettre d'autoriser des autorisations d'écriture de pages de texte dans la mémoire, nous utilisons plt/got. Maintenant, je peux simplement revenir dans une fonction de libc @ plt qui est bien connue avant l'exécution du programme et de la dérivation à peu près. Donc, le retour à PLT rend le concept entier inutile?

4
DrPrItay

Oui, si la tarte est désactivée. On dit souvent que l'efficacité de l'ASLR est considérablement réduite pour les applications qui ne sont pas compilées avec la tarte (Position Code indépendant) Support. Lorsque la tarte n'est pas utilisée, le programme doit s'appuyer sur un PLT fixe , créé lors de la liaison, pour résoudre les adresses des fonctions dans les bibliothèques partagées. Lorsque ASLR est utilisé et que la tarte est activée, les attaques de la réutilisation de code en général sont atténuées, bien que les infoSaks soient toujours omniprésents que l'ASLR peut souvent être vaincu avec attaques de canal latéraux , ce qui le rend proche de l'inutile Code malveillant et limitant son efficacité aux attaques sur le réseau et Exploits sans scripts . Il y a plusieurs autres raisons ASLR sans tarte sont plus faibles et pourquoi moins de randomisation est utilisée, comme expliqué dans une autre réponse .

4
forest

retour à PLT et retourner à Libc sont des attaques légèrement différentes.

retour à libc

L'un des moyens d'empêcher le débordement de la mémoire tampon est d'utiliser une pile non exécutable. Pour faire une pile non exécutable, de la CPU et du niveau système, ils utilisent quelque chose appelé NX Bit. Si NX Bit est défini, cette adresse mémoire n'est pas exécutable. Même si nous effectuons un débordement de tampon et sur l'écriture de la pile pour rediriger le pointeur de retour sur la pile lorsque notre code shell réside, le code shell ne fonctionnerait pas car il serait dans une section de mémoire non exécutable.

C'est à ce moment-là que nous utilisons le retour à la LIBC Attack pour frayer une coquille. Au lieu d'utiliser l'approche classique pour écraser l'adresse de retour à l'adresse du code shell, nous utilisons l'adresse de l'appel du système LIBC ().

retour à PLT

ASLR ou Adresse Space Layout La randomisation est une autre méthode permettant de contrôler les débordements tampons. Comme je l'ai dit dans la section précédente, les gens contournent NX en trouvant des exécutables chargés à la mémoire par système. Comme Libc. Cela a été possible car il était facile d'identifier l'emplacement des exécutables chargés du système. Aslr a randomisé l'adresse de ces exécutables et a ainsi réduit la probabilité de frayer une coquille en leur redirige.

La raison pour laquelle cette attaque est possible est que, dans les exécutables avec des bibliothèques liées dynamiquement, l'adresse de fonction LIBC peut être obtenue à partir de PLT et obtenu. L'adresse PLT n'est pas randomisée et cela rend l'attaque facile.

2
hax