18 octubre 2012

Infecciones automáticas mediante PDFs

La gente consciente de la seguridad/inseguridad informática sabe que un PDF puede contener malware y al abrirlo con una versión vulnerable del lector, la máquina del usuario puede ser infectada. De hecho es una de las formas más extendidas de distribuir software malicioso. Pero aunque hace años que se habló de otras formas de conseguir el mismo objetivo sin necesidad de abrir el fichero, mucha gente sigue no siendo consciente. Ya en el 2009 Didier Stevens mostró en su blog varias maneras, concretamente tres, de infectar una máquina sin necesidad de abrir un PDF. Incluso también existe una cuarta forma en la que no es necesario ni interacción por parte del usuario.


En los ejemplos mostrados se hace uso de las Shell Extensions para infectar la máquina del usuario, así que lo primero es comprender en qué consisten. Es un software añadido al explorador de Windows, de forma que éste incorpora una nueva funcionalidad gracias a la integración de software de terceros.  Un ejemplo sería la posibilidad de analizar un fichero/directorio con un AV mediante el menú contextual, o realizar una compresión con Winzip/Winrar/etc. Pero no sólo se trata de añadidos en el menú contextual, sino que también puede consistir en pestañas extras que se muestran al ver las propiedades de un fichero, previsualización de thumbnails, etc.

Como he comentado anteriormente, Didier Stevens en el 2009 utilizando como plataforma un Windows XP SP2 totalmente parcheado y corriendo un Adobe Reader 9 demostró éstas vías de infección. La versión 9 de Reader implementaba DEP, ASLR y MIC de nivel medio. Pero en la versión X, como medidas de seguridad se hace uso de una sandbox para mitigar futuras vulnerabilidades, y se ha rediseñado Adobe Reader para poder ejecutarse con un MIC de nivel bajo. Actualmente con Adobe Reader X las Shell Extensions (thumbnails, properties, preview) corren dentro de la sandbox y no se instala iFilter. Aquí lo explican.

NOTA: en Windows 7 de 64 bits he tenido problemas para utilizar las Shell Extensions. La cuestión es que la Shell Extension pdfshell.dll situada en C:\Program Files (x86)\Common Files\Adobe\Acrobat\ActiveX es de 32 bits y por lo tanto no es cargada por Windows Explorer de 64 bits. Como en Windows 7 de 64 bits ya no se puede lanzar un explorador de 32 bits de C:\Windows\SysWOW64, una forma de poder utilizar las extensions de 32 bits en Windows de 64 bits es mediante Half Shell. Pero todo apunta a que tampoco funciona correctamente debido a las modificaciones hechas por Microsoft en Windows 7.


Ahora que ya sabemos en qué consisten las Shells Extensions, es hora de ver las formas de explotar vulnerabilidades en un lector de PDF sin necesidad de abrir el fichero. Adobe Reader instala software extra que permite leer ficheros PDF a los componentes de Windows. Hay que tener en cuenta que éstas formas de infección son relativamente antiguas, hace tres años ya, pero sirven como base para conocer que no siempre abrir un fichero es la única forma de infectarnos. Por lo tanto una infección mediante alguno de éstos métodos o similares sería posible en software actual si no existen mitigaciones a otros niveles:


1) Column Handler Shell Extension: es un objeto COM que le proporciona a Windows Explorer datos adicionales sobre un determinado tipo de fichero. Windows Explorer muestra estos datos en columnas extra. En el caso de un PDF éstos serían el título, autor, etc.

Cuando Windows Explorer tiene que mostrar un PDF, invoca al Column Handler para que lea los datos del PDF y se los pase a él. Por lo tanto, haciendo click sobre un fichero malicioso se ejecutaría el shellcode incluido en el mismo quedando infectada la máquina.

Si quisiéramos desinstalar las Shell Extensions relacionadas con PDFs, lo podemos hacer mediante el Shell Extension Manager de Nirsoft o la utilidad Autoruns de Sysinternals


2) Cuando en Windows Explorer se utiliza la vista Thumbnail se muestra la primera página del PDF en formato mini-imagen. Esto implica la lectura del PDF, por lo tanto también podemos aprovecharnos de un Adobe Reader vulnerable para realizar la infección.


3) Al situar el cursor sobre un fichero PDF se muestran las propiedades y los metadatos del mismo. Si se incrusta un stream object malformado en los metadatos que se aproveche de una vulnerabilidad, se puede ejecutar código con sólo situar el cursor sobre el fichero. Esto se debe a que Windows para mostrar el tooltip lee los metadatos mediante una aplicación (como Adobe Reader).


Debido a que, como hemos visto, no es necesario hace doble click para ejecutar el malware, Didier Stevens recomienda cambiar la extensión del mismo: malware.pdf.mal. Con esto evitaremos infecciones automáticas indeseadas como las previamente comentadas.


Antes había hablado de iFilter, y es hora de que sepamos en qué consiste. El indexador de contenido Windows Indexing Service (llamado Windows Desktop Search en Windows XP y Windows Server 2003), fue reemplazado por Windows Search en Windows Vista y 7. El IFilter AcroRdIF.dll extiende la funcionalidad de Windows Indexing Service para indexar el contenido de los PDFs. Windows puede leer y por lo tanto indexar el contenido de ciertos ficheros, como sería cualquier txt, pero para formatos más específicos hace uso de aplicaciones de terceros. Es ahí donde entre en juego iFilter, ya que sin él el contenido de un fichero PDF no puede ser parseado ni indexado por Windows Search.

Dicho de otra manera, cuando Windows Search indexa contenido, al no entender el formato de ciertos ficheros busca en el registro el IFilter correspondiente. El demonio de indexado de contenido (cidaemon.exe) llama a Acrobat IFilter (AcroRdIF.dll), el cual carga el parser (AcroRD32.dll). Es éste el que se encarga de parsear el contenido y pasarle a Windows Search el texto extraído del documento para que lo indexe.

Como reseña histórica indicar que en Windows XP SP3, Windows Indexing Service se ejecutaba como System, y por lo tanto la DLL AcroRdIF también. El servicio no se iniciaba automáticamente, sólo si lo activábamos expresamente después de realizar una búsqueda como administrador.

En Windows Desktop Search 4.0 se ejecutaba también como system, pero AcroDrIF.dll corría en un proceso a parte bajo la cuenta local service. Por tanto hubo una mejora en el diseño de seguridad del mismo.

Para evitar la explotación de una vulnerabilidad en Adobe Reader mediante IFilters, procedemos a eliminar la correspondiente entrada del registro:

regsvr32 /u AcroRdIf.dll

aunque, como se ha dicho antes, en la versión X actual ya no se incluye.

Aunque existen estas dos posibilidades para ejecutar el payload de un fichero de forma automática (sin abrir el PDF y sin interacción), los autores de malware sigue prefiriendo el uso de ingeniería social para que los usuarios de forma manual abran el PDF.

El shellcode incrustado en el fichero PDF podría ejecutar cualquier instrucción, pero la shellcode clásica descarga un troyano. Primero busca el system directory (system32), descarga un troyano de Internet y lo guarda en el system directory ejecutándolo finalmente. Aunque también existen ficheros que contienen de forma embebida el troyano. En este caso la shellcode extrae el ejecutable, lo guarda en disco y lo ejecuta.


Artículo cortesía de David Montero

1 comments :

Juan Carlos dijo...

Buen post Yago, ya conocia las herramientas de Didier pero este post está genial y me a aclarado algun que otro concepto (y en español!). Gracias Yago.