Nuevo peepdf v0.2 (versión Black Hat Vegas)

Hace unos días tuve la oportunidad de presentar en las Vegas una nueva versión de peepdf, la 0.2. Ya habían pasado unos cuantos meses desde mi última release en Black Hat Amsterdam, así que ya tocaba volver a empaquetar. Podéis bajar la nueva versión desde aquí o ejecutar "peepdf -u" para actualizarla directamente desde el repositorio.

Además de los diferentes bugs corregidos, éstas son las principales novedades:

  • Soporte para AES en el proceso de descifrado: Hasta ahora peepdf soportaba RC4 como algoritmo de descifrado, pero AES estaba en el TODO debido a las diferentes muestras que usaban este algoritmo para ocultar contenido malicioso. Según me comentaron en Las Vegas parece que habrá próximas modificaciones en la especificación PDF en este aspecto, por lo que es posible que haya más cambios en un futuro cercano.
  • Nuevo comando decrypt: Normalmente cuando se envía un archivo PDF malicioso mediante correo electrónico y éste se encuentra cifrado no hace falta una contraseña para abrirlo. Adobe Reader hace uso del password en blanco por defecto como primer recurso y con esto suele valer, sin necesidad de interacción por parte de la víctima. Sin embargo, se han visto algunos casos donde se incluye la contraseña en el cuerpo del e-mail, por lo que se hacía necesario un comando para añadir esta información al análisis. De esta forma, cuando peepdf analiza un documento protegido con contraseña muestra un error si ésta debe ser introducida manualmente. Cuando se introduce la contraseña con el comando decrypt se realiza de nuevo el análisis, pudiendo ver esta vez todo el contenido descifrado de los objetos. 

  • Emulación de shellcodes con pylibemu: La emulación de shellcodes se hacía hasta ahora usando el binario sctest (libemu) directamente. Esto no era muy elegante, por lo que estaba en el TODO valorar las distintas alternativas. Gracias a la ayuda de Angelo Dell'Aera, el autor de pylibemu, he incluido en esta versión soporte para su librería. El resultado final es similar, pero ya no se necesitará el binario sino la instalación de pylibemu. Una de las nuevas cosas es que si se encuentra una llamada a la función URLDownloadToFile, pylibemu intentará descargar el binario desde la URL pasada como parámetro directamente al disco. Además, con este cambio también se gana en rapidez en la solución de posibles errores, ya que se trata de un proyecto activo y Angelo responde muy rápido a cualquier duda y/o problema. Para tener los mejores resultados recomiendo la instalación de libemu desde su repositorio git (el paquete en Sourceforge no está actualizado) y posteriormente instalar la última versión de pylibemu.

     

  • Soporte para decodificación de códigos HTML: Un método de ofuscación de código Javascript es codificar los caracteres con códigos HTML. Sascha Weiss (Vodafone) compartió conmigo algunas muestras que empleaban este tipo de técnica (gracias!), y ahora esta decodificación está incluida y es transparente para el analista.

  • Extracción de Javascript de paquetes XDP: Cuando se encuentra código Javascript en un paquete XDP (en una plantilla XFA) normalmente está en formato XML, dentro de un elemento script. Hasta ahora al usar el comando js_code con un objeto de este tipo se obtenía todo el contenido, incluyendo elementos XML, pero ahora se extrae únicamente el código Javascript, sin añadir elementos innecesarios.

     

  • Soporte para CCITTFaxDecode: Se ha añadido un nuevo filtro a la colección de filtros soportados. Gracias a la ayuda de Binjo se ha incluido la decodificación de este nuevo filtro, ya que se habían visto varios documentos maliciosos usando este filtro para evadir el análisis.

     

  • Más colores en la consola interactiva: Se han incluido más colores en la salida de la consola interactiva, sobre todo para resaltar elementos importantes para el analista, como pueden ser objetos con código Javascript o triggers, por poner dos ejemplos. También ahora se muestran los errores en rojo y los avisos en amarillo. Si no se quiere incluir colores se puede usar la opción -g (grinch mode) para tener una salida limpia.

     

Podéis encontrar el contenido completo del changelog aquí. Si encontráis fallos, tenéis alguna sugerencia o queréis contribuir al proyecto mandarme un mail/tweet, no seáis tímidos! ;) Se pueden seguir las últimas novedades de peepdf en su cuenta de Twitter.
Por último, quiero agradecer a la organización de Black Hat, a S21sec y, por supuesto, a los encargados del Arsenal (Rachid y Nabil) por dejarme mostrar las últimas novedades de peepdf en Las Vegas. También, muchas gracias a todos los que han contribuido con el proyecto y los que me han dado su feedback :)
 

Nota: Publicado originalmente en el blog de S21sec