La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

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


Télécharger ppt "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."

Présentations similaires


Annonces Google