Zurück zur Startseite

PhaaS collector.js: Fingerprinting von Sandboxes

Der Artikel analysiert die PhaaS-Plattform mit collector.js unter Verwendung von Browser-Fingerprinting, um Sandboxes zu filtern. Beschreibt WebGL-GPU-Erkennung, WebRTC IP-Leck, Anti-Bot-Patching und Zwei-Stufen-Architektur. Bietet IOC und Empfehlungen für SOC.

Wie PhaaS Sandboxes über Browser-Fingerprinting filtert
Advertisement 728x90

Zerlegung der PhaaS-Plattform: collector.js-Fingerprinting zur Umgehung von Sandboxes

Eine E-Mail aus Gmail Workspace über verzögerte Nachrichten wurde über SendGrid mit gültigem SPF, DKIM und ARC versendet. Absender: sandeep@oesplindia[.]com, Reply-To: td@sevensounds[.]ae. Der Link führt zu maxillae890[.]bitnest[.]za[.]com/testatrix449/*email@victim. Die Domain bitnest[.]za[.]com nutzt Wildcard-DNS über Cloudflare und löst jeden Subdomain auf die CDN-IPs 188[.]114[.]96[.]11 oder 188[.]114[.]97[.]11 auf.

Die Infrastruktur ist zweistufig: Eine Landingpage sammelt Fingerprints, dann entscheidet das Backend, ob das Formular angezeigt wird. Der SPF-Eintrag der Domain lautet v=spf1 -all, was legitime E-Mails ausschließt.

Analyse von collector.js: Fingerprint-Sammlung

Das Skript collector.js?v=21e981d0 lädt zuerst und sammelt Daten über die collect()-Funktion. Es iteriert über Browser-Eigenschaften mit Object.getOwnPropertyNames(), um ein Datenobjekt aufzubauen.

Google AdInline article slot

Standardparameter:

  • Bildschirm: Auflösung, Farbtiefe.
  • Navigator: User-Agent, Sprache, Plattform, hardwareConcurrency, Plugins.

WebGL für GPU-Fingerprinting

Der Code extrahiert GPU-Details:

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)
};

In Sandboxes meldet der Renderer SwiftShader oder llvmpipe, was Virtualisierung verrät.

Google AdInline article slot

WebRTC für IP-Leaks

Umgehung von VPNs über 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); });

Abweichungen zwischen HTTP- und WebRTC-IPs deuten auf Proxys hin.

Anti-Erkennungstechniken

Das Skript prüft auf Automatisierung und DevTools:

Google AdInline article slot
  • Patch von Array.prototype.includes für 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;

Das löst in Puppeteer aus.

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

Offene DevTools rufen toString beim Loggen auf.

Zusätzlich: Touch-Events, Iframe-Erkennung, visibilityState, pagehide.

Datenübermittlung und Backend

Nach 120 ms werden die Daten per POST-Form an demo[.]bitnest[.]za[.]com/testatrix449/ gesendet:

  • analytics: JSON-Fingerprint.
  • _h: URL-Hash.
  • _p: E-Mail des Opfers.

Das Backend liefert ein Phishing-Formular oder blockiert den Zugriff. Abgelaufene Lizenzen zeigen „Your license has expired“.

Infrastruktur-Verbindungen und IOCs

IP 91[.]193[.]42[.]16 hostet sevensounds[.]ae und exquisite[.]za[.]com. Domain oesplindia[.]com exponiert FTP/MySQL/SNMP-Ports auf 170[.]10[.]163[.]134.

Wichtige IOCs:

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

Wichtige Erkenntnisse

  • Zweistufige Struktur: Landingpage überspringt das Formular und umgeht Scanner.
  • Lizenzmodell: PhaaS funktioniert wie SaaS mit ablaufenden Zugriffsrechten.
  • Sandbox-Umgehung: WebGL-Renderer, WebRTC-IP-Leaks, DevTools-toString-Checks.
  • Wildcard-DNS: Schnelle Kampagnenstarts unter Cloudflare.
  • MITRE-Taktiken: T1566.002 (Spearphishing), T1217 (Browser Discovery).

— Editorial Team

Advertisement 728x90

Weiterlesen