Antecedentes
Hace poco descubrimos una nueva familia de puertas traseras multiplataforma para equipos de escritorio. Primero encontramos la variante de Linux y la información de su binario nos ayudó a conseguir la variante para los equipos de escritorio de Windows. Es más, la versión de Windows también estaba equipada con una firma válida para códigos. Analicemos ambas variantes.
DropboxCache, también conocido como Backdoor.Linux.Mokes.a
Esta puerta trasera para los sistemas operativos Linux viene empaquetada con UPX y equipada con muchas características para vigilar a sus víctimas, incluyendo códigos para capturar audios y hacer capturas de pantalla.
Después de su primera ejecución, el código binario revisa su propia ruta y, de ser necesario, se copia a sí mismo en alguna de las siguientes ubicaciones:
- $HOME/$QT-GenericDataLocation/.mozilla/firefox/profiled
- $HOME/$QT-GenericDataLocation/.dropbox/DropboxCache
Por ejemplo, esta ubicación: $HOME/.local/share/.dropbox/DropboxCache. Para mantenerse en el sistema, emplea un método muy poco discreto: crea un archivo .desktop en $HOME/.config/autostart/$filename.desktop. Esta es la plantilla que usa:
Después, se conecta con el servidor C&C que tiene incluido en el código. De aquí en adelante, realiza una solicitud http cada minuto:
Esta solicitud periódica responde con una imagen de un byte. Para subir y recibir los datos y comandos, se conecta al puerto TCP433 usando un protocolo personalizado y cifrado AES. El binario incluye las siguientes llaves públicas integradas en el código:
Después, el programa malicioso recolecta la información de las capturas de teclado, de audio y de pantalla en /tmp/. A continuación, sube los datos recolectados al servidor C&C.
- /tmp/ss0-DDMMyy-HHmmss-nnn.sst (Capturas de pantalla, JPEG, cada 30 seg.)
- /tmp/aa0-DDMMyy-HHmmss-nnn.aat (Capturas de audio, WAV)
- /tmp/kk0-DDMMyy-HHmmss-nnn.kkt (Llaves de registro)
- /tmp/dd0-DDMMyy-HHmmss-nnn.ddt (Datos Arbitrarios)
DDMMyy = fecha: 280116 = 2016-01-28
HHmmss = hora: 154411 = 15:44:11
nnn = milisegundos.
Esta parte del código permite capturar el audio del equipo de la víctima
Pero ni la captura de audio ni la de pantalla están activadas en el temporizador de eventos de este binario. Como los autores vincularon de manera estática libqt, xkbcommon (la biblioteca para administrar las descripciones de las capturas de teclado) y OpenSSL (1.0.2c) en el binario, su peso supera los 13MB. Los criminales tampoco se esforzaron por ofuscar el binario. Es más, contiene casi todos los símbolos, lo que resulta muy útil para analizarlo.
También hay referencias a los archivos fuente del autor:
Nombres de ficheros de los códigos fuente de Backdoor.Linux.Mokes.a
Al parecer, está escrito en C++ y Qt, un marco de aplicaciones multiplataforma. Los metadatos del binario indican que se compiló usando “GCC 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)” en Ubuntu 14.04 LTS “Trusty Tahr”. La marca de tiempo qt_instdate indica que las fuentes Qt se configuraron por última vez el 26-09-2015 (qt/qtbase.git: obsoleto), lo que implica que la hora de compilación del malware no pasa de finales de septiembre de 2015.
Detectamos este tipo de malware como Backdoor.Linux.Mokes.a.
OLMyJuxM.exe, también conocido como Backdoor.Win32.Mokes.imv
Hace algunos días nos cruzamos con una muestra que se nos hacía conocida, aunque estaba compilada para equipos con Microsoft Windows. No tardamos en darnos cuenta de que era una variante de Backdoor.Linux.Mokes.a para Windows de 32 bits.
Después de ejecutarse, el programa malicioso elige una de las nueve ubicaciones diferentes en %AppData% para instalarse a sí mismo con la intención de mantenerse en el equipo el mayor tiempo posible. El binario también crea un fichero “versión” en la misma carpeta. Como su nombre indica, allí se almacena sólo la información de la versión y la ruta completa de instalación del programa malicioso:
Después, se crean las llaves de registro correspondientes en HKCU\Software\Microsoft\Windows\CurrentVersion\Run para asegurar la persistencia en el sistema.
Cuando el malware ejecuta su propia copia en la nueva ubicación, el API SetWindowsHook se utiliza para establecer una funcionalidad de capturador de teclado, registrar las acciones del cursor y los mensajes internos publicados en la lista de espera de mensajes.
La siguiente etapa de la operación consiste en ponerse en contacto con el servidor C&C integrado en el código. Tienen comportamientos idénticos, sus únicas diferencias están en las direcciones IP y llaves de cifrado.
Esta variante se implementa con algunas diferencias e intenta conseguir la cadena predeterminada de agente de usuario de Windows.
Si no lo logra, utiliza su versión integrada en el código:
Se conecta con su servidor C&C de la misma manera que su variante de Linux: cada minuto envía una señal periódica mediante HTTP (GET /v1). Para recibir los comandos o subir o bajar recursos adicionales, utiliza el Puerto TCP 433.
Utiliza plantillas de nombres de archivo que son casi iguales para guardar las capturas de pantalla, de audio, de teclado y otros datos arbitrarios. El capturador de teclado de este ejemplar está activo, a diferencia de su variante de Linux. Abajo puedes ver un fichero de registro de las teclas que se pulsaron, ubicadas en %TEMP% y creadas por esta variante:
Otra vez encontramos códigos inesperados. La siguiente captura de pantalla muestra referencias a códigos que pueden capturar imágenes de una cámara conectada, como una cámara web integrada.
Tal como en la versión de Linux, el autor dejó algunas cadenas de caracteres sospechosas en el binario. La siguiente cadena tiene una honestidad sorprendente:
Desde el punto de vista del criminal, es importante que el programa parezca legítimo y que Windows no pida al usuario una confirmación para ejecutar programas desconocidos. En Windows, esto se logra con certificados para autentificar códigos de confianza. En este caso en particular, el criminal firmó el binario con un certificado de confianza de “COMODO RSA Code Signing CA”.
Detectamos este tipo de malware como Backdoor.Win32.Mokes.imv.
Predicciones
Como este programa se diseñó para ser independiente de las plataformas, no nos sorprendería ver ejemplares para Mac OS X en el futuro.
Actualización
(01-02-2016 10:45 UTC): Acabamos de recibir Backdoor.Win32.Mokes.imw. Es la primera vez que vemos una variante de Mokes que viene con el módulo de captura de audio activado. El programa malicioso crea un nuevo archivo de audio cada 5 minutos.
IOCs
Backdoor.Linux.Mokes.a
c9e0e5e2aeaecb232120e8573e97a6b8
$HOME/$QT-GenericDataLocation/.mozilla/firefox/profiled
$HOME/$QT-GenericDataLocation/.dropbox/DropboxCache
$HOME/.config/autostart/profiled.desktop
$HOME/.config/autostart/DropboxCache.desktop
/tmp/ss0-$date-$time-$ms.sst
Backdoor.Win32.Mokes.imv & .imw
f2407fd12ec0d4f3e82484c027c7d149 (imw)
91099aa413722d22aa50f85794ee386e (imv)
%AppData%\Skype\SkypeHelper.exe
%AppData%\Skype\version
%AppData%\Dropbox\bin\DropboxHelper.exe
%AppData%\Dropbox\bin\version
%AppData%\Google\Chrome\nacl32.exe
%AppData%\Google\Chrome\version
%AppData%\Google\Chrome\nacl64.exe
%AppData%\Google\Chrome\version
%AppData%\Mozilla\Firefox\mozillacache.exe
%AppData%\Mozilla\Firefox\version
%AppData%\Hewlett-Packard\hpqcore.exe
%AppData%\Hewlett-Packard\version
%AppData%\Hewlett-Packard\hpprint.exe
%AppData%\Hewlett-Packard\version
%AppData%\Hewlett-Packard\hpscan.exe
%AppData%\Hewlett-Packard\version
%AppData%\Adobe\Acrobat\AcroBroker.exe
%AppData%\Adobe\Acrobat\version
%TEMP%\aa$n-$date-$time-$ms.aat (imw)
Donde $n es un valor hash decimal calculado a partir del nombre de la tarjeta de sonido
/tmp/ss0-$date-$time-$ms.sst
/tmp/ss0-$date-$time-$ms.sst
%TEMP%\kk$date.kkt
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run “%PERSISTENT-FILENAME%”, “%PERSISTENT-FILEPATH%”
Donde %PERSISTENT-FILENAME% es uno de los nombres de fichero de arriba
y %PERSISTENT-FILEPATH% es la ruta correspondiente
De Linux a Windows: se descubre una nueva familia de puertas traseras multiplataforma para equipos de escritorio