En la actualidad, una de las técnicas de ataque desde el lado del cliente (client side attacks) más utilizadas, es a través del envío de algún archivo PDF con un exploit para luego poder tomar control sobre el sistema. En esta instancia, a veces es necesario conocer algunas técnicas para poder analizarlos e identificarlos.
Anteriormente, explicamos cómo realizar una cirugía a un PDF malicioso. Esta es una de las tantas formas de realizar un análisis. Sin embargo existen otras formas. En esta ocasión veremos cómo analizar un PDF que contiene el exploit (CVE 2009-0927) específico para Adobe Reader 9, entre otras versiones. En primera instancia probamos el exploit para comprobar que sea funcional. El payload utilizado en este caso no es malicioso, ejecutando únicamente la calculadora de Microsoft Windows:
Para poder extraer el exploit, es necesario considerar las diferentes secciones del archivo PDF. Específicamente, el exploit posee encoders aplicados, siendo en este caso, ASCII85Decode, FlatDecode y RunLengthDecode.
Tal como puede observarse, el código correspondiente al exploit y al payload se encuentra ofuscado. Una de las herramientas de Didier Stevens permite directamente obtener este código sin ofuscar, teniendo acceso al shellcode del exploit directamente. Utilizando pdf-parser.py, se obtiene el resultado de la sección Stream donde se encuentra el exploit luego de aplicar los filtros correspondientes, como se puede observar a continuación:
Una vez que el exploit se ha extraído del archivo PDF, es posible construir un ejecutable que contenga el mencionado exploit. De esa manera, podrá analizarse de forma tradicional a través de, por ejemplo, ingeniería inversa utilizando un debugger. Para llevar a cabo este proceso existen diferentes formas. Una de ellas es a través de un sitio online llamada shellcode2exe, el cual construye un binario funcional a partir del código del exploit, en este caso en código JavaScript.
Cabe destacar que existen otras alternativas, como por ejemplo, analizar directamente el shellcode en JavaScript. De esta manera, y para verificar que el ejecutable no está corrupto, se precede a ejecutar el archivo para verificar que realmente esté funcionando pero ahora sin ejecutar Adobe Reader. Ahora que se tiene el archivo, se procede a analizarlo con un debugger en búsqueda de donde llama al payload. La sección correspondiente de código a la llamada del payload puede visualizarse en la siguiente captura:
El punto interesante de este método es la sencillez con que puede analizarse el exploit, ya que al extraerlo del PDF, no es necesario ejecutarlo en el entorno de Adobe Reader. Obviamente, este método sirve para analizar el alcance del payload y no para estudiar el comportamiento del exploit debido a que ha sido transportado a un ejecutable. Anteriormente planteamos el análisis de otros exploits que involucraban archivos PDF tal como el Análisis del exploit PDF/CVE-2010-0188. En este caso recurrimos a otro método utilizando herramientas y combinándolo con un portal en línea.
Finalmente, cabe destacar la importancia de realizar los análisis de este tipo de archivos con la seriedad que merece, debido a que actualmente hemos estado observando que este tipo de archivos es uno de los vectores de propagación de exploits y malware en la actualidad. Desde ESET Latinoamérica recomendamos fuertemente analizar archivos PDF previo a su ejecución, sobre todo si estos son recibidos por correo de fuentes no conocidas.
Fernando Catoira
Analista de Seguridad