Como se puede aprovechar la última vulnerabilidad crítica de Adobe para conseguir las credenciales de Windows de cualquier usuario con un Bad PDF
Contexto
Contexto
En la fecha en la que se escribe este artículo, existe una vulnerabilidad descubierta y publicada recientemente por la empresa de seguridad CheckPoint, que permitiría crear un fichero PDF malicioso, de forma que al ser abierto en una máquina Windows enviaría las credenciales NTLM del usuario de vuelta al atacante.
Históricamente se han visto vulnerabilidades graves que afectan a los ficheros PDF, pero muchas de ellas eran de impacto limitado ya que afectaban a algunas versiones concretas de Adobe Acrobat Reader, otras a algunas versiones concretas de sistemas operativos, y en muchos casos se necesitaba la ejecución de código Javascript. Sin embargo, según los investigadores de la vulnerabilidad, esta afectaría a todas las versiones de todos los visores de ficheros PDF, funcionaría en todas las versiones de Windows y no sería necesario Javascript para su funcionamiento. La vulnerabilidad no tiene aún un código CVE, y es que ante el aviso de los investigadores de que la vulnerabilidad existe, les han contestado que no van a trabajar en ella porque Windows ya proporciona un parche de seguridad opcional que proporciona al usuario la posibilidad de deshabilitar la autenticación por NTLM.
Más información: https://research.checkpoint.com/ntlm-credentials-theft-via-pdf-files/
Detalle de la vulnerabilidad
Un fichero PDF puede contener la entrada opcional (/AA) que indica acciones a ejecutar cuando se abre (/O) o se cierra (/C) una de las páginas del fichero. Estas acciones se parametrizan con un diccionario con 3 entradas:
- Entrada /S: Acción a realizar:
- GoToR: Go to Remote
- GoToE: Go to Embebbed (acción vulnerable)
- Entrada /F: Ruta del documento destino.
- Entrada /D: Ruta dentro del documento destino.
Estas entradas dan la posibilidad de enlazar unos documentos PDF con otros, sin embargo, la vulnerabilidad permite realizar una conexión a una máquina remota en lugar de conectar con otro fichero PDF. A través de una composición concreta de las 3 entradas (/S, /F y /D), se puede realizar una conexión SMB a un host remoto. Esta petición lleva en su contenido las credenciales NTLM del usuario y si el host remoto tiene un servidor escuchando, puede capturar estas credenciales.
Esquema del ataque
Esquema del ataque
Se puede explicar de forma esquemática el ataque en 3 fases:
- Creación del PDF: El atacante crea un fichero PDF especialmente compuesto para aprovechar la vulnerabilidad y conectar de nuevo hacia el atacante al ser abierto. El atacante tiene un servidor preparado para recibir estas conexiones.
- Envío del PDF: El atacante hace llegar el PDF a otro usuario con Windows.
- Acción del usuario sobre el fichero: El usuario que abre el PDF.
- En ese momento se produce la explotación de la vulnerabilidad: Se aprovecha la vulnerabilidad para que al abrir el fichero automáticamente se realice una conexión desde la máquina del usuario hacia la máquina del atacante, enviando las credenciales del usuario. El atacante está esperando esta conexión y recoge las credenciales.
El proyecto Bad PDF
El proyecto Bad PDF
Se trata de un proyecto realizado en lenguaje Python, publicado por un investigador de seguridad de Arabia Saudí llamado Deepu TV, que desempeña labores de arquitecto de soluciones de ciberseguridad en la empresa Spectrami: https://www.linkedin.com/in/deeputv/
El proyecto Bad PDF permite realizar una prueba de concepto para validar la existencia de la vulnerabilidad descubierta por la empresa CheckPoint. Tanto el investigador como CheckPoint han enviado esta prueba de concepto a la empresa Adobe, y no han obtenido respuesta por su parte. Adobe sin embargo ha solicitado al investigador del proyecto que lo mantenga cerrado temporalmente mientras ellos buscan una solución para mitigar la vulnerabilidad.
La respuesta a esta petición la publica el investigador en su perfil de Linkedin: el proyecto Bad PDF no se cierra.
¿Como funciona Bad PDF?
¿Como funciona Bad PDF?
Bad PDF realiza básicamente 2 tareas:
- Crea el fichero PDF malicioso con una entrada especial que produce una acción al abrirse el fichero, que consiste en una conexión a la máquina del atacante.
- Arranca un servidor con Responder y lo deja a la escucha. Cuando se reciba una conexión desde uno de nuestros ficheros PDF, se revelarán las credenciales del usuario.
¿Que es Responder?
https://tools.kali.org/sniffingspoofing/responder
https://github.com/SpiderLabs/Responder
https://tools.kali.org/sniffingspoofing/responder
https://github.com/SpiderLabs/Responder
Responder es una herramienta de sniffing y envenenamiento que viene instalada por defecto en Kali Linux. Actúa como un servidor de autenticación para los protocolos: HTTP, SMB, MSSQL, FTP o LDAP y también realiza envenenamiento sobre LLMNR, NetBios y MDNS.
En este caso de Bad PDF, responder servirá como un servidor falso de autenticación ante peticiones SMB, de forma que al recibir una conexión desde uno de los PDF se puedan visualizar las credenciales NTLM del usuario.
Unboxing del proyecto Bad PDF
Unboxing del proyecto Bad PDF
Se procederá a descargar y revisar el proyecto Bad PDF para mostrar su contenido e identificar los puntos clave.
Se comienza descargando el proyecto desde GitHub.
El proyecto tiene los ficheros README y LICENSE, algunas capturas de pantalla mostrando su funcionamiento, y un único script en Python llamado “badpdf.py”.
Se procede a revisar el contenido del script “badpdf.py” con un editor de textos para comprender mejor su funcionamiento. Se puede ver como se realiza la creación del fichero PDF con versión 1.7 a través de su única función llamada “create_malpdf”.
Se aprecia como la función compone el contenido del PDF con la entrada opcional /AA para definir acciones cuando se abre el documento (/O):
- /F: Ruta del documento a enlazar (se introduce el host del atacante)
- /D: Ruta dentro del documento a enlazar
- /S: Acción GoToE (Go to Embebbed)
Para finalizar el documento PDF, se añade contenido en texto: PDF Document
A continuación se encuentra la función principal del script (main). Al arrancar el script se muestra un logo en ascii art.
En su contenido, la función principal ejecuta las siguientes tareas en orden secuencial:
1) Verificar Responder: Comprueba si está instalado Responder en el sistema. Si no se encuentra el ejecutable de Responder, solicita su ruta al usuario.
2) Solicitar parámetros: Solicita al usuario que introduzca los parámetros necesarios para la ejecución del script:
- IP del atacante
- Nombre del Pdf resultante
- Interfaz de red donde escuchar las credenciales que nos envían.
3) Crear el PDF: Usando la función create_malpdf, crea el fichero PDF inyectando en su interior una conexión al host indicado (usando la vulnerabilidad) y lo guarda con el nombre indicado.
4) Arrancar Responder: Crea un proceso con el comando responder y la interfaz indicada, y lo deja a la escucha.
Bad PDF in action
Bad PDF in action
Finalmente se realizará una prueba de concepto creando un fichero PDF con el script para posteriormente validar la existencia de la vulnerabilidad en varias máquinas Windows.
Se inicia el script con python badpdf.py y se visualiza el logo de bienvenida.
Se introducen los 3 parámetros solicitados:
- IP del atacante: Se introduce la IP done estará escuchando Responder.
- Nombre del PDF resultante: Se introduce un nombre adecuado al objetivo. Por ejemplo en una empresa habría un gran número de directivos y gestores interesados en un fichero PDF que ofrece una oferta económica.
- Interfaz de escucha: La interfaz de red donde se esperan las peticiones SMB. Por defecto es eth0.
Una vez introducidos estos parámetros, se ejecutará automáticamente el comando responder.
[Opcional] Si por alguna razón Responder no arranca correctamente o si se desea parar y ejecutar más tarde, se puede ejecutar el comando a mano:
Una vez arrancado Responder, se queda la ventana abierta con el ejecutable escuchando posibles conexiones, con el mensaje “Listening for events…”
Se deja la ventana abierta con responder escuchando y se usa el fichero en un PC con Windows. En este caso se decide copiar el fichero en un Pen Drive y realizar una prueba en 2 versiones de Windows con distintas configuraciones.
Primera prueba:
Primera prueba:
Windows 7 + Adobe Acrobat
Windows 7 + Adobe Acrobat
Para comenzar se introduce el pen drive en una máquina local con Windows 7, con Service Pack 1, con todas las actualizaciones instaladas y un antivirus gratuito.
El sistema tiene instalada una versión más o menos actualizada de Adobe Acrobat Reader: 2018.011.20038
En principio se espera que el antivirus que se utiliza en la máquina, que en otros casos salta a la mínima, ahora muestre alertas de color sangre… un festival de alertas de seguridad, bloqueos o algo similar. Sin embargo al abrir el documento no existe evidencia visual alguna de que se ha realizado una conexión no solicitada desde el fichero PDF a una máquina remota.
Se muestra de forma normal el documento que contiene el texto “PDF Document”. (Se puede poner otro contenido distinto cambiando la parte adecuada del script badpdf.py)
En la máquina donde Responder está escuchando, se muestra la IP, el usuario y el Hash NTLM del usuario que ha abierto el PDF. En esta ocasión la conexión hacia el responder del atacante se produce usando el protocolo SMBv1.
Segunda prueba:
Segunda prueba:
Windows 10 + Internet Explorer Edge
Windows 10 + Internet Explorer Edge
Se introduce el Pen Drive con el PDF en una máquina de la misma red local, esta vez con el sistema operativo Windows 10, con todas las actualizaciones instaladas y sin antivirus (es decir, con Windows Defender). Se abre el documento PDF con el navegador Internet Explorer Edge.
Como resultado de la apertura del fichero, el atacante recibe las credenciales NTLM del usuario. En esta ocasión la conexión hacia el Responder del atacante se produce usando el protocolo SMBv2.
Extraer las contraseñas
Extraer las contraseñas
Se han obtenido los usuarios y los hashes de las contraseñas, y con esto sería suficiente para usar técnicas como “Pass the Hash”, empleada para pivotar entre máquinas Windows. Las contraseñas originales de los usuarios se pueden extraer usando ataques de fuerza bruta sobre los hashes obtenidos, utilizando un software específico como John the Ripper. En este sentido, Responder escribe las credenciales recibidas del usuario en un fichero preparado para la versión Jumbo de John de Ripper, alojado en la carpeta:
/usr/share/responder/logs/
Los nombres de los ficheros con los hashes tienen el formato:
(MODULO)-(TIPO_DE_HASH)-(IP_DEL_CLIENTE).txt
Por último quedaría utilizar estos ficheros junto a John the Riper y un buen diccionario… y a esperar a que caigan las contraseñas.