
Casi todos utilizamos los servicios de tiendas en línea, lo que significa que tarde o temprano se arriesga a ser víctima de rastreadores de JavaScript, un código especial que los ciberdelincuentes inyectan en el sitio para robar información de tarjetas bancarias, direcciones, inicios de sesión y contraseñas de usuario.
Casi 400,000 usuarios del sitio web y la aplicación móvil de la aerolínea British Airways, así como los visitantes del sitio web británico del gigante deportivo FILA y el distribuidor estadounidense de boletos Ticketmaster, ya han sido afectados por los rastreadores.
El analista de Threat Intelligence Group-IB, Viktor Okorokov, habla sobre cómo los rastreadores están integrados en el código del sitio y roban información de facturación, así como a qué CRM atacan.
La amenaza fantasma
Resultó que durante mucho tiempo los detectores de JS permanecieron fuera de la vista de los analistas de antivirus, y los bancos y los sistemas de pago no vieron una amenaza grave en ellos. Y completamente en vano. Los expertos del Grupo IB
analizaron 2.440 tiendas en línea infectadas cuyos visitantes, alrededor de 1,5 millones de personas al día, corrían el riesgo de comprometerse. Entre las víctimas se encuentran no solo usuarios, sino también tiendas en línea, sistemas de pago y bancos que emitieron tarjetas comprometidas.
El informe del Grupo IB fue el primer estudio del mercado de redes oscuras para los rastreadores, su infraestructura y las formas de monetizar, lo que les valió a sus creadores millones de dólares. Identificamos 38 familias de rastreadores, de los cuales solo 12 eran previamente conocidos por los investigadores.
Detengámonos en detalle en las cuatro familias de rastreadores estudiados durante el estudio.
ReactGet Family
Los rastreadores familiares ReactGet se utilizan para robar datos de tarjetas bancarias en sitios de tiendas en línea. Un sniffer puede funcionar con una gran cantidad de sistemas de pago diferentes utilizados en el sitio: un valor de parámetro corresponde a un sistema de pago, y las versiones individuales de sniffer detectadas pueden usarse para robar credenciales, así como para robar datos de tarjetas bancarias de formas de pago de varios sistemas de pago a la vez, como el llamado sniffer universal. Se descubrió que, en algunos casos, los atacantes realizan ataques de phishing a los administradores de tiendas en línea para obtener acceso al panel administrativo del sitio.
La campaña con esta familia de rastreadores comenzó en mayo de 2017, los sitios bajo el control de CMS y las plataformas Magento, Bigcommerce y Shopify fueron atacados.
Cómo se integra ReactGet en el código de la tienda en línea
Además de la implementación “clásica” de un script por referencia, la familia de sniffers ReactGet utiliza una técnica especial: mediante el código JavaScript, verifica si la dirección actual donde se encuentra el usuario cumple con ciertos criterios. El código malicioso solo se iniciará si la URL actual contiene el
pago y
envío de subcadenas o
oneestepcheckout ,
onepage / ,
out / onepag ,
checkout / one ,
ckout / one . Por lo tanto, el código sniffer se ejecutará exactamente en el momento en que el usuario proceda a pagar las compras e ingrese la información de pago en el formulario del sitio.
Este sniffer utiliza una técnica no estándar. El pago y los datos personales de la víctima se recopilan juntos, se codifican con
base64 , y luego la cadena resultante se usa como parámetro para enviar una solicitud al sitio de los atacantes. Muy a menudo, la ruta a la puerta simula un archivo JavaScript, por ejemplo,
resp.js ,
data.js , etc., pero también
se utilizan enlaces a archivos de imagen,
GIF y
JPG . La peculiaridad es que el sniffer crea un objeto de imagen con un tamaño de 1 por 1 píxel y utiliza el enlace obtenido previamente como parámetro
src de la imagen. Es decir, para el usuario, dicha solicitud en el tráfico se verá como una solicitud de una imagen normal. Una técnica similar se utilizó en los rastreadores de la familia ImageID. Además, la técnica de usar una imagen de 1 por 1 píxel se usa en muchos scripts de análisis en línea legítimos, que también pueden confundir al usuario.
Análisis de versiones
Un análisis de los dominios activos utilizados por los operadores sniffer ReactGet reveló muchas versiones diferentes de la familia sniffer. Las versiones difieren en la presencia o ausencia de ofuscación, y además, cada sniffer está diseñado para un sistema de pago específico que procesa los pagos con tarjeta bancaria para las tiendas en línea. Después de ordenar el valor del parámetro correspondiente al número de versión, los especialistas del Grupo IB obtuvieron una lista completa de variaciones de sniffer disponibles, y por los nombres de los campos de formulario que cada sniffer busca en el código de página, determinaron los sistemas de pago a los que aspira el sniffer.
Lista de rastreadores y sus correspondientes sistemas de pago. Sniffer de contraseña
Una de las ventajas de los rastreadores de JavaScript que funcionan en el lado del cliente del sitio es su versatilidad: el código malicioso incrustado en el sitio puede robar cualquier tipo de datos, ya sean datos de pago o el nombre de usuario y la contraseña de una cuenta de usuario. Los especialistas del Grupo IB descubrieron una muestra de un sniffer perteneciente a la familia ReactGet, diseñado para robar direcciones de correo electrónico y contraseñas de los usuarios del sitio.
Intersección con ImageID Sniffer
Un análisis de una de las tiendas infectadas reveló que su sitio estaba infectado dos veces: además del código malicioso de la familia sniffer ReactGet, se detectó un código sniffer de la familia ImageID. Esta intersección puede indicar que los operadores detrás del uso de ambos rastreadores utilizan técnicas similares para inyectar código malicioso.
Sniffer universal
Un análisis de uno de los nombres de dominio relacionados con la infraestructura sniffer ReactGet reveló que el mismo usuario había registrado otros tres nombres de dominio. Estos tres dominios simulaban dominios de sitios de la vida real y anteriormente se usaban para alojar rastreadores. Al analizar el código de tres sitios legítimos, se descubrió un sniffer desconocido, y un análisis posterior mostró que esta es una versión mejorada del sniffer ReactGet. Todas las versiones de rastreadores de esta familia con seguimiento previo tenían como objetivo un único sistema de pago, es decir, para cada sistema de pago se requería una versión especial del rastreador. Sin embargo, en este caso, se descubrió una versión universal del sniffer, capaz de robar información de formularios relacionados con 15 sistemas de pago diferentes y módulos de sitios de comercio electrónico para pagos en línea.
Entonces, al comienzo del trabajo, el rastreador buscó los campos base del formulario que contenía la información personal de la víctima: nombre completo, dirección física, número de teléfono.
Luego, el sniffer buscó más de 15 prefijos diferentes correspondientes a diferentes sistemas de pago y módulos para pagos en línea.
Además, los datos personales y la información de pago de la víctima se recopilaron y se enviaron al sitio controlado por el atacante: en este caso particular, se descubrieron dos versiones del succionador universal ReactGet ubicado en dos sitios pirateados diferentes. Sin embargo, ambas versiones enviaron los datos robados al mismo sitio pirateado
zoobashop.com .
Un análisis de los prefijos utilizados por el rastreador para buscar los campos que contienen la información de pago de la víctima nos permitió determinar que este patrón rastreador estaba dirigido a los siguientes sistemas de pago:
- Authorize.Net
- Verisign
- Primeros datos
- USAePay
- Raya
- Paypal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Pagos Realex
- Psigate
- Sistemas de pago Heartland
¿Qué herramientas se utilizan para robar información de facturación?
La primera herramienta descubierta durante el análisis de la infraestructura del atacante se utiliza para ofuscar scripts maliciosos responsables de robar tarjetas bancarias. Se descubrió un script bash en uno de los hosts atacantes utilizando la CLI
javascript-ofuscador para automatizar la ofuscación del código sniffer.
La segunda herramienta detectada está diseñada para generar código responsable de cargar el sniffer principal. Esta herramienta genera un código JavaScript que verifica si el usuario está en la página de pago buscando en la dirección actual del usuario las líneas de
pago ,
carrito, etc., y si el resultado es positivo, el código carga el sniffer principal del servidor del atacante. Para ocultar la actividad maliciosa, todas las líneas, incluidas las líneas de prueba para determinar la página de pago, así como un enlace al sniffer, se codifican con
base64 .
Ataques de phishing
Al analizar la infraestructura de red de los atacantes, se descubrió que a menudo un grupo criminal usa el phishing para obtener acceso al panel administrativo de la tienda en línea de destino. Los atacantes registran un dominio que se ve visualmente similar al dominio de una tienda y luego implementan un formulario de inicio de sesión falso del panel de administración de Magento en él. Si tiene éxito, los atacantes obtendrán acceso al panel de administración de CMS Magento, que les permite editar los componentes del sitio e implementar un sniffer para robar información de la tarjeta de crédito.
Familia G-analytics
Esta familia de rastreadores se utiliza para robar tarjetas de clientes de tiendas en línea. El primer nombre de dominio utilizado por el grupo se registró en abril de 2016, lo que puede indicar el comienzo de la actividad del grupo a mediados de 2016.
En la campaña actual, el grupo usa nombres de dominio que imitan servicios de la vida real como Google Analytics y jQuery, enmascarando la actividad sniffer con scripts legítimos y similares a nombres de dominio legítimos. El ataque se ejecutó en sitios que ejecutan CMS Magento.
Cómo se integra G-Analytics en el código de la tienda en línea
Una característica distintiva de esta familia es el uso de varios métodos de robo de información de pago del usuario. Además de la implementación clásica del código JavaScript en la parte del cliente del sitio, el grupo criminal también utilizó la técnica de incrustar código en la parte del servidor del sitio, es decir, scripts PHP que procesan los datos ingresados por el usuario. Esta técnica es peligrosa porque dificulta a los investigadores externos detectar códigos maliciosos. Los especialistas de Group-IB descubrieron una versión de un sniffer incrustado en el código PHP del sitio, utilizando el dominio
dittm.org como puerta de entrada.
También se descubrió una versión anterior del sniffer, que utiliza el mismo dominio
dittm.org para recopilar datos robados, pero esta versión ya está destinada a la instalación en el lado del cliente de la tienda en línea.
Más tarde, el grupo cambió sus tácticas y comenzó a prestar más atención al ocultamiento de la actividad maliciosa y al disfraz.
A principios de 2017, el grupo comenzó a usar el dominio
jquery-js.com , disfrazado como CDN para jQuery: cuando redirige a un sitio de usuarios maliciosos, redirige al sitio legítimo
jquery.com .
Y a mediados de 2018, el grupo adoptó el nombre de dominio
g-analytics.com y comenzó a enmascarar las actividades del sniffer bajo el servicio legítimo de Google Analytics.
Análisis de versiones
Durante el análisis de los dominios utilizados para almacenar el código sniffer, se encontró que el sitio tiene una gran cantidad de versiones que difieren según la presencia de ofuscación, así como la presencia o ausencia de código inalcanzable agregado al archivo para distraer la atención y ocultar el código malicioso.
En total, se identificaron seis versiones de sniffers en
jquery-js.com . Estos rastreadores envían los datos robados a la dirección ubicada en el mismo sitio que el rastreador:
hxxps: // jquery-js [.] Com / latest / jquery.min.js :
- hxxps: // jquery-js [.] com / jquery.min.js
- hxxps: // jquery-js [.] com / jquery.2.2.4.min.js
- hxxps: // jquery-js [.] com / jquery.1.8.3.min.js
- hxxps: // jquery-js [.] com / jquery.1.6.4.min.js
- hxxps: // jquery-js [.] com / jquery.1.4.4.min.js
- hxxps: // jquery-js [.] com / jquery.1.12.4.min.js
El dominio posterior
g-analytics.com , utilizado por el grupo en ataques desde mediados de 2018, sirve como depósito para un mayor número de rastreadores. Se descubrieron un total de 16 versiones de sniffer diferentes. En este caso, la puerta para enviar los datos robados se disfrazó como un enlace a una imagen
GIF :
hxxp: // g-analytics [.] Com / __ utm.gif? V = 1 & _v = j68 & a = 98811130 & t = pageview & _s = 1 & sd = 24-bit & sr = 2560x1440 & vp = 2145x371 & je = 0 & _u = AACAAEAB ~ & jid = 1841704724 & gjid = 877686936 & cid
= 1283183910.1527732071 :
- hxxps: // g-analytics [.] com / libs / 1.0.1 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.10 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.11 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.12 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.13 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.14 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.15 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.16 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.3 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.4 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.5 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.6 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.7 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.8 / analytics.js
- hxxps: // g-analytics [.] com / libs / 1.0.9 / analytics.js
- hxxps: // g-analytics [.] com / libs / analytics.js
, , . , , ,
google-analytics.cm ,
cardz.vc .
cardz.vc Cardsurfs (Flysurfs), AlphaBay , .
analytic.is , , , , Group-IB , Cookie-, , , .
iozoz.com , , 2016 . , . email-
kts241@gmail.com ,
cardz.su cardz.vc , Cardsurfs.
, , G-Analytics Cardsurfs , , .
Illum
Illum — , -, CMS Magento. , , .
, , , , , . , , , 2016 .
Illum -
.
cdn.illum[.]pw/records.php ,
base64 .
, —
records.nstatistics[.]com/records.php .
Willem de Groot, ,
, CSU.
Group-IB , .
, , Linux: , Linux Privilege Escalation Check Script, (Mike Czumak), CVE-2009-1185.
- :
core_config_data CVE-2016-4010,
RCE CMS Magento, -.
, . , , CMS . ,
segapay_standart.js segapay_onpage.js , Sage Pay.
paymentnow[.]tk ,
payment_forminsite.js ,
subjectAltName , CloudFlare. ,
evil.js . , CVE-2016-4010, footer CMS Magento.
request.requestnet[.]tk , ,
paymentnow[.]tk .
. - .
— PayPal, .
CoffeMokko
CoffeMokko, -, 2017 . , Group 1, RiskIQ 2016 . CMS, Magento, OpenCart, WordPress, osCommerce, Shopify.
CoffeMokko -
:
src js . .
, . , , .
, : , , .
/savePayment/index.php /tr/index.php . , , .
base64 , :
- «e» «:»
- «w» «+»
- «o» «%»
- «d» «#»
- «a» «-»
- «7» «^»
- «h» «_»
- «T» «@»
- «0» «/»
- «Y» «*»
base64 , .
, :
, -. TLD. , .
, jQuery (
slickjs[.]org ,
slick.js ), (
sagecdn[.]org , Sage Pay).
, , .
Cada dominio correspondía al sitio en el que se creó el directorio / js o / src . Los scripts de sniffer se almacenaron en este directorio: un sniffer por cada nueva infección. El sniffer se inyectó en el código del sitio a través de un enlace directo, pero en casos raros, los atacantes modificaron uno de los archivos del sitio y le agregaron código malicioso.Análisis de código
El primer algoritmo de ofuscación
En algunas muestras de sniffer detectadas de esta familia, el código se ofuscó y contenía los datos cifrados necesarios para que el sniffer funcione: en particular, la dirección de la puerta del sniffer, una lista de campos de formulario de pago y, en algunos casos, un código de formulario de pago falso. En el código dentro de la función, los recursos se cifraron usando
XOR usando la clave, que fue pasada por el argumento de la misma función.
Después de descifrar la cadena con la clave correspondiente, única para cada muestra, puede obtener una cadena que contenga todas las líneas desde el código sniffer a través del carácter delimitador.
Segundo algoritmo de ofuscación
En muestras posteriores de rastreadores de esta familia, se utilizó un mecanismo de ofuscación diferente: en este caso, los datos se cifraron mediante un algoritmo autoescrito. Una cadena que contiene los datos cifrados necesarios para que el sniffer funcione se pasó como argumento a la función de descifrado.
Con la consola del navegador, puede descifrar los datos cifrados y obtener una matriz que contiene recursos sniffer.
Enlace a los primeros ataques de MageCart
Un análisis de uno de los dominios utilizados por el grupo como puerta para recopilar datos robados reveló que el dominio tiene una infraestructura de robo de tarjeta de crédito idéntica a la utilizada por el Grupo 1, uno de los primeros grupos
descubiertos por especialistas de RiskIQ.
Se encontraron dos archivos en el host de la familia sniffer CoffeMokko:
- mage.js : archivo que contiene el código sniffer del Grupo 1 con la dirección de puerta js-cdn.link
- mag.php : secuencia de comandos PHP responsable de recopilar datos robados por sniffer
Contenido del archivo Mage.js También se descubrió que los primeros dominios utilizados por el grupo detrás de la familia sniffer CoffeMokko se registraron el 17 de mayo de 2017:
- enlace-js [.] enlace
- enlace info-js [.]
- enlace track-js [.]
- enlace map-js [.]
- enlace smart-js [.]
El formato de estos nombres de dominio es el mismo que el de los nombres de dominio del Grupo 1 utilizados en los ataques de 2016.
En base a los hechos descubiertos, se puede suponer que existe una conexión entre los operadores de sniffer CoffeMokko y el grupo criminal del Grupo 1. Presumiblemente, los operadores de CoffeMokko podrían tomar prestado herramientas y software de robo de tarjetas de sus predecesores. Sin embargo, es más probable que el grupo criminal detrás del uso de la familia de sniffers CoffeMokko sean las mismas personas que llevaron a cabo los ataques como parte de las actividades del Grupo 1. Después de la publicación del primer informe sobre las actividades del grupo criminal, todos sus nombres de dominio fueron bloqueados, y las herramientas se estudiaron en detalle y son descritos El grupo se vio obligado a tomar un descanso, refinar sus herramientas internas y reescribir el código sniffer para continuar con sus ataques y pasar desapercibido.