Zpět na domů

PhaaS collector.js: fingerprinting pískovišť

Článek rozebírá PhaaS platformu s collector.js, která používá browser fingerprinting k filtrování pískovišť. Jsou popsány WebGL GPU detekce, WebRTC IP leak, anti-bot patching a dvoustupňová architektura. Uvedeny IOC a doporučení pro SOC.

Jak PhaaS filtruje pískoviště prostřednictvím browser fingerprinting
Advertisement 728x90

Analýza PhaaS platformy: fingerprinting v collector.js pro obcházení sandboxů

E-mail jménem Gmail Workspace s předmětem o zpožděných zprávách byl doručen přes SendGrid s platnými SPF, DKIM a ARC. Odesílatel je sandeep@oesplindia[.]com, Reply-To je td@sevensounds[.]ae. Odkaz vede na maxillae890[.]bitnest[.]za[.]com/testatrix449/*email@oběť. Doména bitnest[.]za[.]com používá wildcard DNS přes Cloudflare, který překládá jakýkoli subdomén na CDN IP 188[.]114[.]96[.]11 nebo 188[.]114[.]97[.]11.

Infrastruktura je dvoustupňová: landing stránka sbírá fingerprint, backend rozhoduje o zobrazení formy. SPF domény je v=spf1 -all, což vylučuje legitimní e-mail.

Analýza collector.js: sběr fingerprint

Skript collector.js?v=21e981d0 se načte jako první a provádí sběr dat přes funkci collect(). Ta prochází vlastnosti prohlížeče s Object.getOwnPropertyNames() a tvoří objekt data.

Google AdInline article slot

Standardní parametry:

  • Screen: rozlišení, hloubka barev.
  • Navigator: User-Agent, jazyk, platforma, hardwareConcurrency, pluginy.

WebGL pro GPU fingerprint

Kód extrahuje data o 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)
};

V sandboxech renderer ukazuje SwiftShader nebo llvmpipe, což detekuje virtualizaci.

Google AdInline article slot

WebRTC pro únik IP

Obcházení VPN přes 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); });

Neshoda IP z HTTP a WebRTC ukazuje na proxy.

Anti-detekční techniky

Skript kontroluje automatizaci a DevTools:

Google AdInline article slot
  • Patching Array.prototype.includes pro 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;

V Puppeteer toto funguje.

  • Detekce DevTools přes toString:
var fn = function() {}, cnt = 0;
fn.toString = function() { ++cnt; return ""; };
console.log(fn);
data.tostring = cnt;

Otevřené DevTools spouští toString při logování.

Dále: touch events, iframe detection, visibilityState, pagehide.

Odeslání dat a backend

Po 120 ms jsou data odeslána POST formou na demo[.]bitnest[.]za[.]com/testatrix449/:

  • analytics: JSON fingerprint.
  • _h: URL hash.
  • _p: e-mail oběti.

Backend vrátí phishingovou formu nebo blokaci. Při vypršené licenci – zpráva "Your license has expired".

Souvislosti infrastruktury a IOC

IP 91[.]193[.]42[.]16 hostuje sevensounds[.]ae a exquisite[.]za[.]com. Doména oesplindia[.]com má otevřené porty FTP/MySQL/SNMP na 170[.]10[.]163[.]134.

Klíčové IOC:

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

Co je důležité

  • Dvoustupňovost: landing neobsahuje formu, což komplikuje skenování.
  • Licencování: PhaaS jako SaaS s vypršením přístupu.
  • Anti-sandbox: WebGL renderer, WebRTC IP únik, DevTools toString.
  • Wildcard DNS: okamžité nové kampaně pod Cloudflare.
  • MITRE: T1566.002 (Spearphishing), T1217 (Browser Discovery).

— Editorial Team

Advertisement 728x90

Číst dál