ASLR n'est pas très utile.
Déjà, contrairement à ce qui est écrit, il ne rend aléatoire que les adresses dans la pile, et pas le tas (ils ont dû confondre avec les adresses renovoyées pa mmap() quisont, elles, aléatoires). On le voit dans l'article:
Lors d'un second lancement du même processus, nous constatons que l'adresse de la pile a effectivement changé et se trouve désormais entre 0xBF865000 et BxBF87B000 :
L'adresse de la pile a changé, pas celle du tas. On peut aussi le vérifier avec un programme du style:
/* test.c */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
int *p;
p = malloc(10 * sizeof(int));
/* pile */
printf("Dans la pile: %p\n", (void *)&i);
/* tas */
printf("Dans le tas: %p\n", (void *)p);
free(p);
return 0;
}
renvoie:
$ for i in `seq 1 10`; do ./test; done
Dans la pile: 0xbfe185cc
Dans le tas: 0x804a008
Dans la pile: 0xbf99c95c
Dans le tas: 0x804a008
Dans la pile: 0xbfd0d4cc
Dans le tas: 0x804a008
Dans la pile: 0xbf80afcc
Dans le tas: 0x804a008
Dans la pile: 0xbfe485fc
Dans le tas: 0x804a008
Dans la pile: 0xbfbf83ac
Dans le tas: 0x804a008
Dans la pile: 0xbff256dc
Dans le tas: 0x804a008
Dans la pile: 0xbff4df0c
Dans le tas: 0x804a008
Dans la pile: 0xbfa9824c
Dans le tas: 0x804a008
Dans la pile: 0xbfd4dd0c
Dans le tas: 0x804a008
Ensuite, "aléatoire" est un grand mot.
L'une des critiques quand il a été introduit est la suivante:
One of the biggest complaints that has been raised is that the amount of randomization is insufficient. The patches, as posted, vary the stack base within a 64KB area and the mmap() base within a 1MB range. Alignment requirements prevent just any address from being used with the result that only a relatively small number of possible base addresses exists. So a determined attacker could repeatedly run a hardcoded exploit with some assurance that, within a reasonable amount of time, the stack would land at the right place and the exploit would work. Placing a long series of no-op instructions at the beginning of the payload can also make an exploit more robust when faced with randomization.
En gros, la plage de valeur possible n'est pas très étendue, et quand on enlève les adressesquivontpas (alignement toussa...), et bien on se dit qu'il suffit de lancer l'exploit en boucle et au bout de peu de temps on va tomber sur une adresse qui correspond à celle codée dans l'exploit.
Voilà. Après, je ne pense pas qu'il y ait un inpact visible sur les performances. De toute façon, avec la rapidité des machines actuelles, j'en ai rien à foutre de perdre 10% de performances si j'ai un OS fiable et sûr. Une machine à laver marche 24/7, il devrait en être de même d'un ordinateur...
[^] # Re: L'ASLR ne sert à rien
Posté par neologix . En réponse à la dépêche Dossier sur le renforcement des fonctions de sécurité du noyau sur Secuobs.com. Évalué à 1.
Déjà, contrairement à ce qui est écrit, il ne rend aléatoire que les adresses dans la pile, et pas le tas (ils ont dû confondre avec les adresses renovoyées pa mmap() quisont, elles, aléatoires). On le voit dans l'article:
L'adresse de la pile a changé, pas celle du tas. On peut aussi le vérifier avec un programme du style:
/* test.c */
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
int *p;
p = malloc(10 * sizeof(int));
/* pile */
printf("Dans la pile: %p\n", (void *)&i);
/* tas */
printf("Dans le tas: %p\n", (void *)p);
free(p);
return 0;
}
renvoie:
$ for i in `seq 1 10`; do ./test; done
Dans la pile: 0xbfe185cc
Dans le tas: 0x804a008
Dans la pile: 0xbf99c95c
Dans le tas: 0x804a008
Dans la pile: 0xbfd0d4cc
Dans le tas: 0x804a008
Dans la pile: 0xbf80afcc
Dans le tas: 0x804a008
Dans la pile: 0xbfe485fc
Dans le tas: 0x804a008
Dans la pile: 0xbfbf83ac
Dans le tas: 0x804a008
Dans la pile: 0xbff256dc
Dans le tas: 0x804a008
Dans la pile: 0xbff4df0c
Dans le tas: 0x804a008
Dans la pile: 0xbfa9824c
Dans le tas: 0x804a008
Dans la pile: 0xbfd4dd0c
Dans le tas: 0x804a008
Ensuite, "aléatoire" est un grand mot.
L'une des critiques quand il a été introduit est la suivante:
En gros, la plage de valeur possible n'est pas très étendue, et quand on enlève les adressesquivontpas (alignement toussa...), et bien on se dit qu'il suffit de lancer l'exploit en boucle et au bout de peu de temps on va tomber sur une adresse qui correspond à celle codée dans l'exploit.
Voilà. Après, je ne pense pas qu'il y ait un inpact visible sur les performances. De toute façon, avec la rapidité des machines actuelles, j'en ai rien à foutre de perdre 10% de performances si j'ai un OS fiable et sûr. Une machine à laver marche 24/7, il devrait en être de même d'un ordinateur...