Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parJosiane Bouchard Modifié depuis plus de 8 années
1
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Sommaire Qu'est ce qu'un buffer overflow ? Stack Execute invalidation Address Space Layout Randomization (ASLR) Stack Smashing Protector Conclusion & questions Paul Rascagnères – RMLL 2011
2
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Un simple bug Un dépassement de l'espace mémoire allouée Paul Rascagnères – RMLL 2011
3
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Exemple : Paul Rascagnères – RMLL 2011 int vuln(char *variable) { char locale_variable[100]; strcpy(locale_variable, variable); return(0); } int main(int argc, char *argv[]) { if (argc <2) { printf("Usage: argument_1\n"); exit(1); } vuln(argv[1]); }
4
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Exemple : Paul Rascagnères – RMLL 2011 pol@laptop:~/RMLL$ gcc bof.c -o bof pol@laptop:~/RMLL$./bof AAAA pol@laptop:~/RMLL$./bof $(perl -e 'print ”A”x100') Segmentation fault
5
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Que se passe-t-il ? Paul Rascagnères – RMLL 2011
6
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Quels sont les risques de sécurités ? Execution de code arbitraire Utilisation des Shellcodes Paul Rascagnères – RMLL 2011
7
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Qu'est ce qu'un Shellcode ? Chaines de charactères hexadecimales permettant l'execution de code Exemple : char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" "\x80\xe8\xdc\xff\xff\xff/bin/sh"; Paul Rascagnères – RMLL 2011
8
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Qu'est ce qu'un bufer overflow ? Exploitation pol@laptop:~/RMLL$./bof $(perl -e 'print ”\x90”x50. ”\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\ x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xf f\xff/bin/sh". ”\x10\xf4\xff\xbf”') Paul Rascagnères – RMLL 2011
9
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Execute Invalidation Principe Contournements Return-to-libc attaque... Paul Rascagnères – RMLL 2011
10
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Execute Invalidation Return-to-libc Obtenir l'adresse d'un fonction particulière sur laquelle ”rebondir” Paul Rascagnères – RMLL 2011
11
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Execute Invalidation Paul Rascagnères – RMLL 2011 int main(int argc,char **argv) { void *handle; long address; char *error; if(argc!=2) { fprintf(stderr,"Usage : %s function\n",argv[0]); exit(1); } address=(long)dlsym(handle,argv[1]); if((error=dlerror()) != NULL) { fprintf(stderr,"function %s() not found\n%s\n",argv[1], error); exit(1); } printf("function %s() address : 0x%lx\n",argv[1],address); } pol@laptop:~/RMLL$ gcc get_address.c -ldl -o get_address pol@laptop:~/RMLL$./get_address execve function execve() address : 0xb77a9350
12
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Address Space Layout Randomization (ASLR) Interdire les Return-to-libc en empêchant de ”rebondir” vers une fonction specifique pol@laptop:~/RMLL$ cat /proc/sys/kernel/randomize_va_space 2 Paul Rascagnères – RMLL 2011
13
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Address Space Layout Randomization (ASLR) Exemple : Paul Rascagnères – RMLL 2011 pol@laptop:~/RMLL$./get_address execve function execve() address : 0xb7669350 pol@laptop:~/RMLL$./get_address execve function execve() address : 0xb7703350 pol@laptop:~/RMLL$./get_address execve function execve() address : 0xb76f1350 pol@laptop:~/RMLL$./get_address execve function execve() address : 0xb76de350 pol@laptop:~/RMLL$./get_address execve function execve() address : 0xb76eb350
14
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Address Space Layout Randomization (ASLR) Limitation de l'entropie en 32bits Necessité de compiler les librairies avec certaines options (-fpie -pie) Une librairie ne profitant pas de l'ASLR peut mettre à mal tout un système Paul Rascagnères – RMLL 2011
15
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Smashing Protector Principe Canary Etude complète sur http://www.r00ted.com Paul Rascagnères – RMLL 2011
16
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Stack Smashing Protector pol@laptop:~/RMLL$ gcc --stack-protector-all bof.c -o bof pol@laptop:~/RMLL$./bof $(perl -e 'print "A"x100') *** stack smashing detected ***:./bof terminated ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0xb765bdf0] /lib/i386-linux-gnu/libc.so.6(+0xe5d9a)[0xb765bd9a]./bof[0x80484b3] [0x41414141] ======= Memory map: ======== 08048000-08049000 r-xp 00000000 08:01 878 /home/pol/RMLL/bof Aborted pol@laptop:~/RMLL$ Paul Rascagnères – RMLL 2011
17
Etat des lieux des systèmes de protection contre les buffer overflows sous Linux Conclusion & questions Sources : @r00tbsd http://www.r00ted.com http://www.acissi.net http://wikipedia.org Paul Rascagnères – RMLL 2011
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.