Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]

3,995 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]

  1. 1. Obfuscation and (non-)detection of malicious PDF files<br />JoseMiguel Esparza<br />
  2. 2. Agenda<br />Introducción al formato PDF<br />Técnicas de ofuscación y evasión<br />Ofuscación VS Antivirus<br />Ofuscación VS Herramientas de análisis<br />peepdf<br />Conclusiones<br />
  3. 3. Cabecera<br />Cuerpo<br />Tabla de referencias cruzadas<br />Trailer<br />
  4. 4. Introducción al formato PDF<br />Colección de objetos<br />Tipos de objetos<br />Boolean: true false<br />Numbers: 123 -98 4. -.002 123.6<br />Strings: (hola) <686f6c61><br />Names: /Type/Filters<br />Dictionaries: <</Type /Catalog /Root 1 0 R>><br />Arrays:[1.0 (test) <</Length 273>>]<br />Streams<br />
  5. 5. Introducción al formato PDF<br />
  6. 6. Introducción al formato PDF<br />Tipos de objetos<br />Objetos indirectos<br />Referencia: “id_objetonúmero_generación R”<br />
  7. 7. Introducción al formato PDF<br />Documentos actualizables<br />Se conservan versiones anteriores<br />Cabecera<br />Cuerpo<br />Original<br />Tabla de referencias<br />Trailer<br />Cuerpo<br />Actualización<br />Tabla de referencias<br />Trailer<br />
  8. 8. Introducción al formato PDF<br />Estructura lógica<br />Forma de árbol<br />/Catalog nodo raíz<br />Si no cuelga de /CatalogNO EXISTE<br />
  9. 9. Introducción al formato PDF<br />Acciones<br />/Launch<br />/Javascript<br />/GoToE (gotoembedded)<br />/URI<br />/SubmitForm<br />…<br />Triggers<br />/OpenAction: afecta globalmente<br />/AA: páginas, anotaciones<br />
  10. 10. Introducción al formato PDF<br />
  11. 11. Introducción al formato PDF<br />
  12. 12. Ejemplo práctico<br />pdf.pdf (2009)<br />Técnicas de ofuscación y evasión<br />
  13. 13. Ejecución automática<br />Evitar /OpenAction<br />Uso de elementos del /Catalog<br />/Names<br />/AcroForm<br />/AA: aplicado a páginas, anotaciones…<br />Técnicas de ofuscación y evasión<br />
  14. 14. Técnicas de ofuscación y evasión<br />Cadenas de texto a evitar/ocultar<br />/Javascript /JS<br />Más de dos “unescape” en Javascript<br />Metadatos identificables<br />/pdftk_PageNum<br />
  15. 15. Objectos sospechosos?<br />Strings (21/43) vs. Streams (27/43)<br />Filtros<br />Evitar filtros conocidos: /FlateDecode /ASCIIHexDecode<br />Parámetros (incluso por defecto)<br />Varios filtros en cascada<br />[ /FlateDecode /LZWDecode /RunLengthDecode]<br />Técnicas de ofuscación y evasión<br />
  16. 16. Encoding de strings/nombres<br />Nombres<br />Codificación hexadecimal<br />/Fl#61#74#65De#63#6f#64e (/FlateDecode)<br />Strings<br />Hexadecimales<br /><7368656c6c636f6465><br />Uso valores octales<br />163150145154154<br />Técnicas de ofuscación y evasión<br />¡NO!<br />
  17. 17. Técnicas de ofuscación y evasión<br />Ocultar código Javascript<br />Uso de funciones para obtener partes del documento<br />getAnnots()<br />getPageNumWords()/getPageNthWord()<br />…<br />Dividir código Javascript<br />Varios objetos en /Names<br />/Names [(parte1) 3 0 R (parte2) 7 0 R (parte3) 10 0 R]<br />
  18. 18. Objetos duplicados<br />Objetos actualizados<br />Documentos mal formados<br />Bytes basura en la cabecera<br />Número de versión no especificado (%PDF-1.0)<br />Sin tabla de referencias cruzadas<br />Sin endobj o endstream<br />Técnicas de ofuscación y evasión<br />
  19. 19. Técnicas de ofuscación y evasión<br />Compresión de objetos (objectstreams)<br />Documento bien formado<br />Cifrado<br />/Encrypt(streamsystrings)<br />RC4 o AES (40-128bits)<br />Contraseña por defecto<br />padding = “x28xBFx4Ex5Ex4Ex75x8Ax41x64x00x4Ex56xFFxFA”+<br /> “x01x08x2Ex2Ex00xB6xD0x68x3Ex80x2Fx0CxA9xFEx64x53x69x7A” <br />password = password + padding[:32-(len(password))]<br />password = ‘’ password = padding<br />PDFs anidados<br />/EmbeddedFiles<br />
  20. 20. Técnicas de ofuscación y evasión<br />Mezcla de todos<br />Resumiendo:<br />Eliminar strings identificables<br />Dispersar código Javascript (/Names)<br />Si el código está en:<br />Stringencoding en octal (143172)<br />Stream filtros (no usuales, parámetros)<br />Compresión (objectstreams)<br />Cifrado (password por defecto)<br />Mal formados (endobj, cabecera)<br />Anidar PDFs<br />
  21. 21. Ofuscación VS Antivirus<br />Mejores resultados<br />JS en string + octal + fuera strings identificables<br />objectstream<br />mal formado + anidado + filtro con parámetros (0/43)<br />http://www.virustotal.com/file-scan/report.html?id=fbfd6df6a14f3cab3742d84af2b7d3d881ad11ef7d1344ba166092c890f47f77-1298457739<br />filtro con parámetros + mal formado (0/43)<br />http://www.virustotal.com/file-scan/report.html?id=5a963ca0d20e12851fae7b98bc0e9bcf28cc0e43a12ef33450cf3877b170fa67-1298154940<br />mal formado: endobj,cabecera (2/43)<br />http://www.virustotal.com/file-scan/report.html?id=9759c500df94e2ccc243f00479967ddb77484203403b79e1523ea1148077b565-1298157405<br />cifrado (5/43)<br />http://www.virustotal.com/file-scan/report.html?id=9e2195450ee4f2c15f27b3730fb09bf004cc4bd6ef848f039291d9eea0f6b69d-1298054113<br />Exploit funcionando<br />
  22. 22. Ofuscación VS Antivirus<br />
  23. 23. Ofuscación VS Antivirus<br />
  24. 24. Ofuscación VS Herramientas análisis<br />
  25. 25. peepdf<br />Características<br />Python<br />Línea de comandos<br />Consola interactiva<br />Opción archivo de comandos<br />Última fase desarrollo<br />http://peepdf.eternal-todo.com<br />
  26. 26. peepdf<br />Análisis<br />Decodings: hexadecimal, octal, nombres<br />Filtros más usados (5)<br />Referencias en objetos y a objetos<br />Búsqueda de strings incluidos streams<br />Estructura física (offsets)<br />Árbol de estructura lógica<br />Metadatos<br />Cambios entre versiones<br />Objetos comprimidos<br />Análisis y modificación Javascript (Spidermonkey)<br />unescape, replace, join<br />Análisis shellcodes (sctest, Libemu)<br />Uso de variables (comando set)<br />Extracción de diferentes versiones<br />
  27. 27. peepdf<br />Creación/Modificación<br />Creación PDF básico<br />Creación PDF con Javascript y ejecución al abrir<br />Compresión de objetos en objectstreams<br />Creación de PDFs anidados<br />Codificación de strings y nombres<br />Modificación de filtros<br />Modificación de objetos<br />
  28. 28. peepdf<br />TODO<br />Cifrado<br />Análisis de PDFs anidados<br />Filtros que faltan<br />Mejorar análisis automático Javascript<br />GUI<br />
  29. 29. Conclusiones<br />Poca detección cuando:<br />PDF anidados<br />Compresión objetos<br />Nuevos filtros o filtros con parámetros<br />Cifrado<br />Evitar detección por strings<br />Mejorar parsers<br />
  30. 30. ???<br />
  31. 31. Muchas gracias<br />Jose Miguel Esparza<br />jesparzaeternal-todo.com<br />http://eternal-todo.com<br />@eternaltodo<br />

×