Análisis de archivos PDF maliciosos

By
In Sin categoría

Hacía mucho tiempo que no comentaba nada sobre mis queridos PDFs, así que ya tocaba…;)

Como ya mencioné, una de las posibilidades de esconder información en un archivo PDF es mediante la codificación/compresión de streams, gracias al uso de filtros (parámetro /Filter), siendo el más utilizado el /FlateDecode. Los chicos malos llevan ya un tiempo usándolo para esconder código Javascript, tanto ofuscado como sin ofuscar, intentando explotar ciertas vulnerabilidades que se han visto a lo largo de este año y del pasado (Collab.collectEmailInfo, util.printf, getAnnots, getIcon, spell.customDictionaryOpen), o simplemente para llevar a cabo un heap-spraying utilizando alguna otra vulnerabilidad no relacionada directamente con Javascript, como la del filtro /JBIG2Decode.

Para ayudar con el análisis de estos archivos maliciosos he implementado una mini-herramienta en Python que hace uso del módulo de Spidermonkey para intentar ejecutar el código Javascript encontrado y llegar hasta la shellcode que se quiere lanzar. Automatizar la ejecución de código Javascript ofuscado no es algo sencillo, ya que hay mil maneras de esconderlo y cada día nace una diferente, así que lo que he intentado es realizar una aproximación al problema, gracias a las diferentes muestras que pasaban por mis manos. Para el caso en que el script no sea capaz de llegar hasta el final se puede especificar mediante el parámetro -w que escriba en disco el código Javascript encontrado, con el objetivo de permitir un análisis manual posterior.

Para la ejecución del script se necesita instalar previamente la librería Spidermonkey, y para ello, a su vez, Pyrex.

El archivo de descarga es un archivo comprimido que contiene, además del script, un PDF malicioso con una shellcode que intenta descargar código malicioso desde una URL. El dominio no se encuentra activo en este momento por lo que no hay ningún problema. La salida que deberíais ver es la siguiente:


Tiene cinco apartados posibles donde se puede ver si se han encontrado disparadores de eventos (/OpenAction y /AA), acciones sospechosas (/JS, /Launch, /SubmitForm e /ImportData), elementos vulnerables, bytes escapados y posibles URLs, que sirven para hacerse una idea de la peligrosidad del archivo.

Como seguro que tiene unos cuantos bugs os animo a que me los mandéis por correo, así como cualquier consejo/comentario, a alguna de las direcciones que aparecen en el código. ¡Muchas gracias!

pdf-analyzer.zip

Jose Miguel Esparza
S21sec e-crime

Recommended Posts
Showing 3 comments
  • Boken
    Responder

    Hola.

    Muy buen trabajo!! Me ha gustado mucho tu analizador, lo que no se pueda hacer con Python es que no se puede hacer, jejeje

    Muchas gracias por publicarlo.

    Saludos.

  • S21sec e-crime
    Responder

    Gracias a ti por el comentario, Boken, ¡así da gusto publicar cosas! 😉

    Un saludo,
    Josemi

  • Gorku
    Responder

    Muy bueno. Un saludo Josemi! 😉

Leave a Comment