2. Se va abe un folln... 3. De que va esto? 4. Un ejemplo 5. Mientras en algn oscuro strip... 6. Otros programaban esto... 7. El resultado 8. El resultado 9. Reglas
13. Limitaciones y Requisitos
19. Posibles Soluciones
21. Limitaciones y Requisitos
27. Soluciones a nivel de Sistema
30. LD_PRELOAD Hooking No Si Hookeamos la llamada Es Seguro Llamamos astrcpy() Llamamos astrncpy() Servicio llama a strcpy() Se continua con la ejecucin normal 31. Inconvenientes / Limitaciones
34. Inconvenientes / Limitaciones
35. Beneficios
39. Que podemos controlar?
43. Controlando Stack 44. Controlando Stack
46. Controlando Stack
47. Controlando Stack 48. Como calculamos el espacio?
49. Controlando Stack Local Variables Saved EBP RET src dest destino Saved EBP RET Local Variables Saved EBP RET argv argc Stack Growth Higher Addresses 50. Controlando Stack strcpy() frame 0 function() frame 1 main() frame 2 argc argv[] RET Old EBP Local Variables RET Old EBP =0xffffd618 destino[] dest =0xffffd5eb src =0x08049618 RET Old EBP =0xffffd5f8 Local Variables 0xffffd5c8 Local Variables 0xffffd5f8 0xffffd618 0xffffd5eb %EBP 51. Controlando Stack 52. Limitaciones / Inconvenientes
54. Limitaciones / Inconvenientes strctpy(destino, AAAAA AAAA SI); RET Saved EBP admin = NO Argumento 1 Argumento 2 local_variable[4] destino[5] admin = SI 55. Controlando Heap 56. Controlando Heap 57. Controlando Heap El Heap contendra algo como esto: Variable buffer 4 bytes Variable is_admin 3 bytes Heap start lower addresses Heap end higher addresses 58. Controlando Heap Un bloque de memoria reservada es similar a esto: 59. Como controlamos el Heap?
63. Como controlamos el Heap? 64. Como controlamos el Heap? Nuestro mapa de memoria Aspecto del Heap void *canary_addr void *start_addr char canary_value[4] unsigned int size Struct dyn_mem *next void *canary_addr void *start_addr char canary_value[4] unsigned int size Struct dyn_mem *next buffer 4 bytes Canary 0x00 + 3 bytes is_admin 3 bytes Canary 0x00 + 3 bytes 65. Como controlamos el Heap? 66. Controlando Heap 67. Limitaciones / Inconvenientes
69. Controlando Format String 70. Controlando Format String 71. Controlando Format String
74. Los ganadores juegan sucio
77. Hooking file access # List of files to be hooked files= { # Hooks applied to every service common = ( { filename= "/home/[a-zA-Z0-9_.-]*/key"; newname = "/tmp/fakekey"; }, { filename= "/home/algo/auth.db"; newname = "/tmp/fake.db"; } ); # Hooks applied to the service "servicename" servicename = ( { filename= "/etc/passwd"; newname = "/tmp/fakepasswd"; } ); }; 78. 79. 80.
Top Related