Obfuscation and (non-)detection of malicious PDF files<br />JoseMiguel Esparza<br />
Agenda<br />Introducción al formato PDF<br />Técnicas de ofuscación y evasión<br />Ofuscación VS Antivirus<br />Ofuscación...
Cabecera<br />Cuerpo<br />Tabla de referencias cruzadas<br />Trailer<br />
Introducción al formato PDF<br />Colección de objetos<br />Tipos de objetos<br />Boolean: true false<br />Numbers: 123 -98...
Introducción al formato PDF<br />
Introducción al formato PDF<br />Tipos de objetos<br />Objetos indirectos<br />Referencia: “id_objetonúmero_generación R”<...
Introducción al formato PDF<br />Documentos actualizables<br />Se conservan versiones anteriores<br />Cabecera<br />Cuerpo...
Introducción al formato PDF<br />Estructura lógica<br />Forma de árbol<br />/Catalog nodo raíz<br />Si no cuelga de /Catal...
Introducción al formato PDF<br />Acciones<br />/Launch<br />/Javascript<br />/GoToE (gotoembedded)<br />/URI<br />/SubmitF...
Introducción al formato PDF<br />
Introducción al formato PDF<br />
Ejemplo práctico<br />pdf.pdf (2009)<br />Técnicas de ofuscación y evasión<br />
Ejecución automática<br />Evitar /OpenAction<br />Uso de elementos del /Catalog<br />/Names<br />/AcroForm<br />/AA: aplic...
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...
Objectos sospechosos?<br />Strings (21/43) vs. Streams (27/43)<br />Filtros<br />Evitar filtros conocidos: /FlateDecode /A...
Encoding de strings/nombres<br />Nombres<br />Codificación hexadecimal<br />/Fl#61#74#65De#63#6f#64e  (/FlateDecode)<br />...
Técnicas de ofuscación y evasión<br />Ocultar código Javascript<br />Uso de funciones para obtener partes del documento<br...
Objetos duplicados<br />Objetos actualizados<br />Documentos mal formados<br />Bytes basura en la cabecera<br />Número de ...
Técnicas de ofuscación y evasión<br />Compresión de objetos (objectstreams)<br />Documento bien formado<br />Cifrado<br />...
Técnicas de ofuscación y evasión<br />Mezcla de todos<br />Resumiendo:<br />Eliminar strings identificables<br />Dispersar...
Ofuscación VS Antivirus<br />Mejores resultados<br />JS en string + octal + fuera strings identificables<br />objectstream...
Ofuscación VS Antivirus<br />
Ofuscación VS Antivirus<br />
Ofuscación VS Herramientas análisis<br />
peepdf<br />Características<br />Python<br />Línea de comandos<br />Consola interactiva<br />Opción archivo de comandos<br...
peepdf<br />Análisis<br />Decodings: hexadecimal, octal, nombres<br />Filtros más usados (5)<br />Referencias en objetos y...
peepdf<br />Creación/Modificación<br />Creación PDF básico<br />Creación PDF con Javascript y ejecución al abrir<br />Comp...
peepdf<br />TODO<br />Cifrado<br />Análisis de PDFs anidados<br />Filtros que faltan<br />Mejorar análisis automático Java...
Conclusiones<br />Poca detección cuando:<br />PDF anidados<br />Compresión objetos<br />Nuevos filtros o filtros con parám...
???<br />
Muchas gracias<br />Jose Miguel Esparza<br />jesparzaeternal-todo.com<br />http://eternal-todo.com<br />@eternaltodo<br />
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
José Miguel Esparza - Obfuscation and (non-)detection of malicious PDF files [RootedCON 2011]
Upcoming SlideShare
Loading in …5
×

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

3,712 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
3,712
On SlideShare
0
From Embeds
0
Number of Embeds
1,095
Actions
Shares
0
Downloads
161
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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 />

×