Powrót do strony głównej

PhaaS collector.js: fingerprinting piaskownic

Artykuł analizuje platformę PhaaS z collector.js, wykorzystującą browser fingerprinting do filtrowania piaskownic. Opisano detekcję WebGL GPU, wyciek IP WebRTC, anti-bot patching i dwustopniową architekturę. Podano IOC i rekomendacje dla SOC.

Jak PhaaS filtruje piaskownice za pomocą browser fingerprinting
Advertisement 728x90

Analiza platformy PhaaS: fingerprinting w collector.js do obejścia piaskownic

Wiadomość email od Gmail Workspace z tematem dotyczącym zatrzymanych wiadomości dostarczona przez SendGrid z ważnymi SPF, DKIM i ARC. Nadawca — sandeep@oesplindia[.]com, Reply-To — td@sevensounds[.]ae. Link prowadzi do maxillae890[.]bitnest[.]za[.]com/testatrix449/*email@ofiara. Domena bitnest[.]za[.]com używa wildcard DNS przez Cloudflare, rozpoznając każdy subdomen na CDN IP 188[.]114[.]96[.]11 lub 188[.]114[.]97[.]11.

Infrastruktura jest dwuetapowa: strona lądowania zbiera fingerprint, a backend decyduje o wyświetleniu formularza. SPF domeny — v=spf1 -all, co wyklucza legalną pocztę.

Analiza collector.js: zbieranie fingerprint

Skrypt collector.js?v=21e981d0 ładuje się jako pierwszy i wykonuje zbieranie danych przez funkcję collect(). Przeszukuje właściwości przeglądarki z Object.getOwnPropertyNames() i tworzy obiekt data.

Google AdInline article slot

Standardowe parametry:

  • Screen: rozdzielczość, głębia kolorów.
  • Navigator: User-Agent, język, platforma, hardwareConcurrency, wtyczki.

WebGL do fingerprint GPU

Kod wyodrębnia dane 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)
};

W piaskownicach renderer zwraca SwiftShader lub llvmpipe, co wykrywa wirtualizację.

Google AdInline article slot

WebRTC do wycieku IP

Obejście VPN przez STUN:

var RTC = w.RTCPeerConnection || w.webkitRTCPeerConnection;
var pc = new RTC({
  iceServers: [{ urls: "stun:stun.l.google.com:19302" }]
});
pc.createDataChannel("");
pconicecandidate = 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); });

Rozbieżność IP z HTTP i WebRTC wskazuje na proxy.

Techniki antydetekcji

Skrypt sprawdza automatyzację i DevTools:

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

W Puppeteer to działa.

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

Otwarte DevTools wywołują toString przy logowaniu.

Dodatkowo: zdarzenia dotykowe, wykrywanie iframe, visibilityState, pagehide.

Wysyłanie danych i backend

Po 120 ms dane wysyłane są formą POST na demo[.]bitnest[.]za[.]com/testatrix449/:

  • analytics: JSON fingerprint.
  • _h: hash URL.
  • _p: email ofiary.

Backend zwraca formularz phishingowy lub blokadę. Przy wygaśniętej licencji — komunikat „Your license has expired”.

Powiązania infrastruktury i IOC

IP 91[.]193[.]42[.]16 hostuje sevensounds[.]ae i exquisite[.]za[.]com. Domena oesplindia[.]com ma otwarte porty FTP/MySQL/SNMP na 170[.]10[.]163[.]134.

Kluczowe IOC:

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

Co jest ważne

  • Dwuetapowość: strona lądowania nie zawiera formularza, utrudnia skanowanie.
  • Licencjonowanie: PhaaS jako SaaS z wygasaniem dostępu.
  • Anty-piaskownica: WebGL renderer, wyciek IP przez WebRTC, DevTools toString.
  • Wildcard DNS: szybkie nowe kampanie pod Cloudflare.
  • MITRE: T1566.002 (Spearphishing), T1217 (Browser Discovery).

— Editorial Team

Advertisement 728x90

Czytaj dalej