Win64/Expiro: virus multiplataforma altamente versátil e infeccioso

El siguiente post es una traducción y adaptación realizada por el equipo del laboratorio de ESET Latinoamérica de la publicación Versatile and infectious: Win64/Expiro is a cross-platform file infector escrita por Artem Baranov de ESET Rusia en We Live Security.

Recientemente, nuestro laboratorio de investigación descubrió una nueva variante de un virus que infecta archivos de 64 bits y que es conocido como Expiro. Los virus que infectan archivos son bastante conocidos y han sido estudiados a fondo a través de los años. La mayoría del malware de este tipo es diseñado para modificar solamente binarios de 32 bits. En este sentido, la familia Expiro no es la excepción, no obstante, ESET descubrió una nueva variante de este virus completamente multiplataforma. En otras palabras, la variante de 64 bits puede infectar ejecutables de 32 bits y viceversa. Ambas amenazas son detectadas por los productos de ESET como Win64/Expiro.A y Win32/Expiro.NBF respectivamente.

El virus intenta maximizar su rango de propagación infectando archivos ejecutables en medios locales, extraíbles y recursos de red. En cuanto al payload, este malware instala una extensión para Google Chrome y Mozilla Firefox. Asimismo, roba certificados y contraseñas almacenadas en Internet Explorer, Microsoft Outlook y el cliente FTP FileZilla. En cuanto a las extensiones, son utilizadas para redirigir al usuario hacia direcciones web maliciosas y para sustraer información sensible como credenciales bancarias. Expiro también desactiva servicios como Windows Defender o Windows Security Center y también cierra algunos procesos.

El componente infeccioso de Win64/Expiro

Cuando ocurre una infección de un archivo de 64 bits, el código del virus es añadido al final de la nueva sección del archivo ejecutable. Esta se denomina .vmp0 y posee un tamaño en disco de 512 Kbytes. Para transferir el control al cuerpo principal (.vmp0), el virus inserta 1.269 bytes de código malicioso al inicio del entry point del ejecutable. Antes de modificar el entry point, el virus copia los bytes originales al principio de la sección .vmp0. Este código de inicio desempaqueta las instrucciones del virus en la sección .vmp0. La siguiente captura muestra el código de inicio que es escrito en el entry point de un ejecutable de 64 bits durante la infección:

win64-expiro-p1-1

Durante el proceso de infección, el virus prepara el código de inicio para su posterior inserción dentro del archivo especificado. Cabe destacar que algunas de estas instrucciones son sobrescritas para lograr una infección distinta modificando la sección .vmp0 según el caso (polimorfismo). En este contexto, las instrucciones sujetas a cambios son add, mov y lea (Load Effective Address) que están relacionadas con offsets directos. Al final del código el virus añade una instrucción de salto que dirige al código desempaquetado en la sección .vmp0. La siguiente captura muestra el patrón de código de inicio (a la izquierda) y el código de inicio que es escrito en el archivo infectado (a la derecha):

win64-expiro-p1-2

Tal como se muestra en la siguiente imagen, el código de inicio para los archivos de 32 bits también se localiza en la sección .vmp0:

win64-expiro-p1-3

Este código desensamblado contiene instrucciones habituales en un archivo infectado:

win64-expiro-p1-4

El tamaño del código de inicio en los archivos de 64 bits es de 1.269 bytes y en los ejecutables de 32 bits es de 711 bytes. El virus infecta ficheros ejecutables analizando las carpetas de forma recursiva y agregando un archivo especial .vir. Luego, el malware crea nuevo contenido para posteriormente escribirlo dentro del archivo a infectar en bloques de 64K. Si el virus no logra abrir los archivos mediante la operación leer/escribir, intenta modificar el descriptor del fichero y la información de su propietario (owner). El virus también infecta archivos firmados digitalmente.

Después de la infección de estos ficheros, estos pierden la firma debido a que la amenaza escribe su código después de la última sección del archivo (donde se almacena la firma digital). Adicionalmente, el virus ajusta los valores del campo Security Directory y Data Directory modificando los campos RVA y Tamaño a 0. De este modo, ese archivo puede ser ejecutado subsecuentemente sin la referencia hacia la información de las firmas digitales. La siguiente captura muestra las diferencias entre un archivo de 64 bits limpio y uno infectado. También es posible observar el lugar original del overlay y la posición que adopta una vez ocurrida la infección (al comienzo de la sección .vmp0):

win64-expiro-p1-5

Desde el punto de vista del cierre de procesos, Expiro no es innovador. Utiliza un método basado en la obtención de procesos utilizando la API CreateToolhelp32Snapshot y posteriormente finalizando la ejecución de los programas a través de OpenProcess/TerminateProcess. Expiro finaliza los procesos MSASCui.exe, msseces.exe y Tcpview.exe.

win64-expiro-p1-6

Cuando Expiro infecta un nuevo sistema crea dos mutex denominados “gazavat”:

win64-expiro-p1-7

Además, la presencia de este virus puede ser identificada en el sistema debido al largo número de operaciones I/O y al alto volumen de bytes leídos y escritos. Asimismo el virus necesita buscar todos los archivos del sistema para infectarlos, por lo tanto, el proceso de infección puede tardar bastante tiempo. Este aspecto se convierte en otro síntoma de infección producido por este código malicioso. La siguiente imagen muestra estadísticas obtenidas de un sistema infectado con Expiro:

win64-expiro-p1-8

El código del virus utiliza ofuscación durante la transferencia de los offsets y otras variables dentro de la API. Por ejemplo, la siguiente porción de código utiliza ofuscación aritmética mientras pasa los argumentos SERVICE_CONTROL_STOP (0X1) a advapi32!ControlService para desactivar algunos servicios:

win64-expiro-p1-9

Con dicha porción de código, Expiro intenta desactivar los servicios wscsvc (Windows Security Center), windefend (Windows Defender Service), MsMpSvc (Microsoft Antimalware Service, parte de Microsoft Security Essentials) y NisSrv (Network Inspection Service utilizado por MSE).

El payload de Win64/Expiro

Con respecto al payload, Expiro instala extensiones maliciosas para Google Chrome y Mozilla Firefox. El archivo manifest para la extensión de Chrome se presenta de esta forma:

win64-expiro-p1-10

En el directorio de las extensiones de Chrome, la carpeta que almacena la extensión maliciosa se llama dlddmedljhmbgdhapibnagaanenmajcm. Esta extensión utiliza dos script escritos en JavaScript: background.js y content.js. Después de la desofuscación, el patrón de código de background.js se ve de este modo:

win64-expiro-p1-11

La variable HID es utilizada para almacenar la cadena OS version y el Product ID. Por otro lado, el objetivo de la variable SLST es guardar una lista de dominios que redirigen al usuario hacia recursos con contenido malicioso:

win64-expiro-p1-12

El archivo manifest de la extensión para Firefox se ve de esta forma:

win64-expiro-p1-13

En la captura que aparece abajo, se puede apreciar parte del código de content.js que recorre la información de formularios en sitios web. Dicha operación permite que el malware obtenga información introducida por los usuarios en páginas web:

win64-expiro-p1-14

Como bot, Expiro puede realizar las siguientes acciones:

  • Modificar las URL de control del servidor.
  • Ejecutar una consola de comandos – lo pasa como parámetro a cmd.exe y devuelve el resultado al servidor.
  • Descargar y ejecutar complementos desde Internet.
  • Descargar un archivo de Internet y guardarlo como %commonapddata%\%variable%.exe.
  • Realizar ataques de denegación de servicio.
  • Enumerar archivos que coinciden con la máscara \b*.dll en la carpeta %commonappdata%. El virus carga cada uno de dichos archivos como una librería.
  • Llamar a funciones de plugin (B) y (C) desde plugin cargados.
  • Iniciar un servidor proxy (SOCKS, HTTP).
  • Establecer un puerto TCP de reenvío en un router local (SOAP).

Expiro intenta robar credenciales de servidores FTP almacenados en FileZilla en el archivo %appdata%\FileZilla\sitemanager.xml. Internet Explorer también se ve afectado por Expiro a través de un objeto COM utilizado para robar información. Si un sitio incluye un formulario relacionado con tarjetas de crédito, el malware intentará obtener dichos datos. Para lograr ese objetivo, la amenaza comprueba que los datos ingresados en el formulario coincidan con el formato numérico utilizado por VISA y MasterCard. Posteriormente muestra un mensaje de error falso:

“Unable to authorize.\n %s processing center is unable to authorize your card %s.\nMake corrections and try again.”

El malware también puede robar certificados y las llaves privadas asociadas a ellos.

Consecuencias de Win64/Expiro

La infección de archivos ejecutables es un vector de propagación muy eficiente para este código malicioso. La variante de Expiro que ha sido analizada en este post representa un riesgo serio tanto para usuarios domésticos como corporativos. Debido a que el virus infecta archivos guardados en discos locales, dispositivos extraíbles y recursos de redes, los índices de propagación pueden crecer de forma similar a lo sucedido con el gusano Conficker que todavía aparece en el ranking de las amenazas más propagadas. En el caso de Expiro la situación es aun peor debido a que solo se necesita un archivo infectado para que se vuelva a reinfectar un disco completo. Con respecto al payload, la infección de archivos representa una opción bastante atractiva para los cibercriminales. Esto es debido a que la velocidad de propagación es más rápida y la capacidad multiplataforma amplía considerablemente el horizonte de potenciales víctimas.

Josep Albors

Hashes SHA1 de las muestras analizadas:

Win64/Expiro.A - 469fcc15b70cae06f245cec8fcbf50f7c55dcc4b
Win32/Expiro.NBF - 9818d4079b9cb6b8a3208edae0ac7ad61a85d178
Vulnerabilidad en Joomla afecta a sitios con versiones obsoletas