peepdf v0.1: nueva herramienta de análisis y modificación de archivos PDF

Como ya comenté en mi post anterior, hace unos días se publicó la primera versión de peepdf. Se trata de una herramienta escrita en Python y enfocada al análisis de archivos PDF, por lo que su objetivo principal es el discernir si un documento PDF es malicioso o no. Se presenta inicialmente con una interfaz de consola interactiva donde se pueden ejecutar diferentes comandos para recabar información acerca del archivo. La idea es no tener que usar múltiples herramientas para decodificar objetos, analizar código Javascript o la shellcode, sino usar únicamente una herramienta (con sus wrappers) para el análisis de PDFs. También podéis encontrar la herramienta en la última versión de la distribución BackTrack (¡gracias al equipo de BackTrack!).


Las principales funcionalidades de peepdf son las siguientes:

Análisis

  • Decodificación: hexadecimal, octal, objetos name
  • Implementación de los filtros más usados
  • Referencias en objetos
  • Listado de objetos donde se referencia a otro objeto
  • Búsqueda de cadenas de texto y bytes (incluidos streams y objetos cifrados)
  • Estructura física (offsets)
  • Estructura lógica
  • Metadatos
  • Modificaciones entre versiones (changelog)
  • Análisis de objetos comprimidos (object streams)
  • Análisis y modificación de Javascript (Spidermonkey): unescape, replace, join
  • Análisis de shellcodes (wrapper de sctest, Libemu)
  • Uso de variables (comando set)
  • Extracción de versiones antiguas del documento


Creación/Modificación

  • Creación de un PDF básico
  • Creación de un PDF con ejecución de Javascript cuando el archivo se abre
  • Creación de object streams para comprimir objetos
  • Embeber archivos (incuyendo otros documentos PDF)
  • Ofuscación de objetos de tipo name y string
  • Salida mal formada de PDFs: sin endobj, basura en la cabecera, corromper la cabecera...
  • Modificación de filtros
  • Modificación de objetos

Los comandos disponibles en esta primera versión y relacionados con las funciones anteriores se pueden ver en la imagen siguiente:

Además de lanzarse en forma de consola interactiva es posible lanzar la herramienta en modo batch para automatizar los análisis. De esta forma, tras crear un archivo con los comandos que queremos lanzar, la forma de ejecutar peepdf sería la siguiente:

./peepdf.py -s archivo_de_comandos.txt sample.pdf

Por último, si solo queremos conocer información sobre los objetos, streams, si contiene Javascript y vulnerabilidades, sin lanzar más comandos, bastaría con ejecutarla de esta forma:

./peepdf.py sample.pdf

En todas las formas de ejecución se pueden especificar dos parámetros bastante útiles de cara a proseguir con el análisis cuando se encuentran errores y tratar con objetos mal formados:

  • -f: ignora los errores que se puedan producir y continúa con el análisis del documento. Muy útil al analizar documentos maliciosos.
  • -l: no busca los tags de final de objeto al parsear los objetos, por lo que es útil cuando un documento contiene objetos mal formados.

Próximamente intentaré publicar algunos ejemplos de análisis de archivos PDF maliciosos con esta herramienta para clarificar un poco más su uso. Mientras tanto, si os interesa podéis echar un vistazo a la página del la herramienta. Como ya dije, ¡cualquier comentario y posible bug es bienvenido!

UPDATE (23/06/2011): Se ha incluido más documentación en la página del proyecto en Google Code sobre cómo instalar y ejecutar la herramienta, así como una explicación detallada de cada comando de la consola.