Ir al contenido principal

Análisis Forense - Detectando PDF malicioso con pdfid.

En esta ocasión usare pdfid.py, esta tool actuara como un scanner sobre el archivo pdf para encontrar aquellas palabras claves que nos permitirán sospechar o detectar si un documento es malicioso.

En La mayoría de los PDF se encuentran estas primeras Keywords normalmente:
  • PDF Header
  • obj
  • endobj
  • stream
  • endstream
  • xref
  • trailer
  • startxref
Al momento de obtener los resultados de los contadores de cada Keywords, debemos fijarnos en los siguientes Keywords para determinar si un documento cumple con las características de un PDF malicioso.
PDF Header

Nos indica que tipo de archivo y formato es y cual es su version, esto permite indicar con que programa se abrirá el documento.
/Page

Nos indica el número de páginas que contiene el documento, hay que destacar que en algunos pdf maliciosos solamente contienen 1 sola página, porque solo se espera que la víctima abra el documento para que se logre la ejecución de código malicioso.

/Encrypt
Indica que el documento tiene DRM(digital rights management) o necesita alguna contraseña para ser leído.
/ObjStm

Cuenta el número de flujos de objetos, un objeto puede contener otros objetos ocultos y esto se puede lograr mediante el uso de diferentes filtros.

/JS /JavaScript
Nos va indicar si el documento contiene JavaScript, ya que este tipo de formato PDF permite la ejecución de código Javascript y este es muy usado debido a su versatilidad y porque cuenta con la posibilidad de ofuscación, la mayoría de los documentos maliciosos lo contienen.

/AA /OpenAction
Nos indica si hay existencia de una acción automática, esta acción se va realizar cuando se visualice el documento, los documentos PDF maliciosos llevan esta acción para ejecutar código Javascript sin interacción de la víctima.

/JBIG2Decode
Nos indica si el documento PDF utiliza la compresión JBIG2, , no necesariamente nos indica que es un PDF malicioso ya que para eso requiere un mayor análisis con otras herramientas.(Si hay un número entre paréntesis al lado del contador, este nos indica el numero de ocurrencias de ofuscado.)
/RichMedia

Nos indica si el documento contiene Flash incrustrado.

/Launch
Cuenta las acciones de lanzamiento.

El modo y las opciones a utilizar para realizar el scanner del documento son:
./pdfid.py [opciones] [Documento]


-s    Explorar el directorio dado.
-a    Mostrar todos los nombres.
-e    Visualización de datos adicionales, como las fechas.
-f    Fuerza la exploración del archivo, incluso sin la cabecera apropiada PDF%
-d    Inhabilita JavaScript y el auto lanzamiento.


Entonces como ya sabemos lo que nos indica cada keywords y el modo de uso de pdfid, realizamos el análisis a un pdf malicioso que tengo y el resultado es el siguiente :

PDF infected.
Como podemos destacar a simple vista 3 aspectos antes mencionado que lo hacen ser sospechoso, su /Page solo contiene una página, esto nos da a deducir que la creación de este documento no es de carácter informativo, mas bien es maliciosa porque solamente se espera a que lo visualicemos ya que /OpenAction su contador se encuentra en 1 y esto nos permite deducir que al momento de ser visualizado una acción automática habrá que ejecutara código malicioso JavaScript.

Hay que destacar que los contadores de las palabras claves pueden estar sesgados si el documento se guarda con actualizaciones incrementales.

Actualizaciones incrementales se refiere a que todas los cambios en el documento se añadirán al final del documento dejando intacto el contenido original del archivo, entonces al momento de visualizar el documento se mostrara la ultima versión y no el contenido original.

Bueno amigos con el uso de esta herramienta y los métodos usados ya podemos determinar o intuir a través de los resultados que nos arrojaron los keywords si el documento es malicioso, para pasar a la siguiente fase de análisis profundo realizando ingeniería inversa, shellcode, etc.

Saludos.

Comentarios

Te sugiero las siguientes publicaciones 🙂🤙

Obteniendo strings de procesos en memoria con ReadProcessMemory().

Análisis Forense - Extracción de datos desde un dispositivo móvil Android para análisis lógico.

Análisis Forense - Extrayendo y reconstruyendo imágenes y sesión de usuario desde un volcado de memoria.