Volver al inicio

PhaaS collector.js: fingerprinting de sandboxes

El artículo analiza la plataforma PhaaS con collector.js utilizando fingerprinting del navegador para filtrar sandboxes. Describe detección de GPU WebGL, fuga de IP WebRTC, parches anti-bot y arquitectura de dos etapas. Proporciona IOC y recomendaciones para SOC

¿Cómo filtra PhaaS las sandboxes mediante fingerprinting del navegador?
Advertisement 728x90

# Desglosando la Plataforma PhaaS: Fingerprinting con collector.js para Evadir Sandboxes

Un correo de Gmail Workspace sobre mensajes retrasados fue enviado vía SendGrid con SPF, DKIM y ARC válidos. Remitente: sandeep@oesplindia[.]com, Responder a: td@sevensounds[.]ae. El enlace apunta a maxillae890[.]bitnest[.]za[.]com/testatrix449/*email@victim. El dominio bitnest[.]za[.]com usa DNS wildcard vía Cloudflare, resolviendo cualquier subdominio a IPs de CDN 188[.]114[.]96[.]11 o 188[.]114[.]97[.]11.

La infraestructura es de dos etapas: una página de aterrizaje recolecta huellas dactilares, luego el backend decide si mostrar el formulario. El registro SPF del dominio es v=spf1 -all, descartando correos legítimos.

Análisis de collector.js: Recolección de Huellas

El script collector.js?v=21e981d0 se carga primero y recopila datos mediante la función collect(). Itera sobre propiedades del navegador usando Object.getOwnPropertyNames() para construir un objeto de datos.

Google AdInline article slot

Parámetros estándar:

  • Pantalla: resolución, profundidad de color.
  • Navegador: User-Agent, idioma, plataforma, hardwareConcurrency, plugins.

WebGL para Huellas de GPU

El código extrae detalles de la GPU:

var gl = d.createElement("canvas").getContext("webgl"),
    ext = gl.getExtension("WEBGL_debug_renderer_info");
data.webgl = {
  vendor: gl.getParameter(ext.UNMASKED_VENDOR_WEBGL),
  renderer: gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)
};

En sandboxes, el renderizador reporta SwiftShader o llvmpipe, detectando virtualización.

Google AdInline article slot

WebRTC para Fugas de IP

Evadiendo VPNs vía STUN:

var RTC = w.RTCPeerConnection || w.webkitRTCPeerConnection;
var pc = new RTC({
  iceServers: [{ urls: "stun:stun.l.google.com:19302" }]
});
pc.createDataChannel("");
pc.onicecandidate = function(e) {
  if (e.candidate) {
    var p = e.candidate.candidate.split(" ");
    data._rtc.push({ i: p[4], t: p[7], p: p[2] });
  }
};
pc.createOffer().then(function(o) { return pc.setLocalDescription(o); });

Desajustes entre IPs HTTP y WebRTC indican proxies.

Técnicas Antidetección

El script verifica automatización y DevTools:

Google AdInline article slot
  • Parcheo de Array.prototype.includes para canPlayType:
var orig = Array.prototype.includes;
Array.prototype.includes = function() { data.proto = true; };
try { d.createElement("video").canPlayType("video/mp4"); } catch (e) {}
Array.prototype.includes = orig;

Esto se activa en Puppeteer.

  • Detección de DevTools vía toString:
var fn = function() {}, cnt = 0;
fn.toString = function() { ++cnt; return ""; };
console.log(fn);
data.tostring = cnt;

DevTools abiertos llaman a toString durante el registro.

Extras: eventos táctiles, detección de iframe, visibilityState, pagehide.

Envío de Datos y Backend

Tras 120 ms, los datos se envían vía formulario POST a demo[.]bitnest[.]za[.]com/testatrix449/:

  • analytics: huella JSON.
  • _h: hash de URL.
  • _p: email de la víctima.

El backend devuelve un formulario de phishing o bloquea el acceso. Licencias vencidas muestran "Your license has expired".

Vínculos de Infraestructura e IOCs

La IP 91[.]193[.]42[.]16 aloja sevensounds[.]ae y exquisite[.]za[.]com. El dominio oesplindia[.]com expone puertos FTP/MySQL/SNMP en 170[.]10[.]163[.]134.

IOCs clave:

  • Dominios: bitnest[.]za[.]com, oesplindia[.]com, sevensounds[.]ae.
  • IPs: 188[.]114[.]96[.]11, 149[.]72[.]123[.]24 (SendGrid).
  • Script: collector.js?v=21e981d0.
  • STUN: stun.l.google.com:19302.
  • SendGrid: user_id=60417945.

Lecciones Clave

  • Configuración de Dos Etapas: La página de aterrizaje omite el formulario, evadiendo escáneres.
  • Modelo de Licencias: PhaaS funciona como SaaS con accesos caducados.
  • Evasión de Sandboxes: Renderizador WebGL, fugas de IP WebRTC, verificaciones toString de DevTools.
  • DNS Wildcard: Campañas rápidas bajo Cloudflare.
  • Tácticas MITRE: T1566.002 (Spearphishing), T1217 (Descubrimiento de Navegador).

— Editorial Team

Advertisement 728x90

Leer después