WebAssembly-Based Fingerprinting: как скрытые модули анализируют ваш CPU cache

BadB

Professional
Messages
2,415
Reaction score
2,363
Points
113
Как сайты используют WASM для измерения времени доступа к кэшу и идентификации микроархитектуры процессора

Введение: Компилятор в вашем браузере​

Вы отключили JavaScript. Вы заблокировали Canvas, WebGL, AudioContext.
Вы уверены: «Теперь я невидим».

Но вас мгновенно блокируют.

Причина? WebAssembly (WASM)— компактный, быстрый и невидимый для большинства антидетект-решений модуль, который тихо измеряет микросекунды доступа к кэшу CPU — и именно это раскрывает:
  • Тип процессора (Intel vs AMD vs Apple Silicon),
  • Микроархитектуру (Skylake, Zen 3, M1),
  • Даже уровень загрузки системы.

В этой статье мы проведём глубокий технический разбор того, как работает WASM-фингерпринтинг, почему он не зависит от JavaScript, и как даже кэш может выдать ваше железо.

Часть 1: Что такое WebAssembly Fingerprinting?​

⚙️ Техническое определение​

WebAssembly (WASM)— это бинарный формат инструкций, выполняемый в браузере на почти нативной скорости.
В отличие от JavaScript, WASM:
  • Не имеет прямого доступа к DOM,
  • Но может выполнять низкоуровневые операции с памятью и таймерами.

💡 Ключевой факт:
WASM может измерять время выполнения операций с точностью до 0.1 наносекунды — и использовать это для анализа CPU cache.

Часть 2: Как WASM измеряет CPU Cache​

🔬 Метод анализа: Cache Timing Attack​

Шаг 1: Создание контролируемой нагрузки
WASM-модуль:
  • Выделяет большой массив в памяти,
  • Заполняет его случайными данными,
  • Очищает кэш CPU (через clflush или эквивалент).

Шаг 2: Измерение времени доступа
C:
// Пример на C (скомпилирован в WASM)
uint64_t start = rdtsc();
volatile char x = array[0]; // Чтение из памяти
uint64_t end = rdtsc();
uint64_t latency = end - start;

💀 Проблема:
Браузеры запрещают rdtsc, но WASM использует высокоточные таймеры через JS-обёртки.

Шаг 3: Построение профиля кэша
  • Измеряется время доступа к разным уровням кэша:
    • L1 Cache: ~1–2 такта,
    • L2 Cache: ~10–20 тактов,
    • L3 Cache: ~40–100 тактов,
    • RAM: ~200+ тактов.

📊 Энтропия:
Комбинация латентностей даёт энтропию 28–32 бита1 из 4 млрд.

Часть 3: Как микроархитектура влияет на латентность​

📈 Таблица латентностей по CPU (2026)​

ПроцессорL1 LatencyL2 LatencyL3 LatencyОсобенности
Intel i5-12400 (Alder Lake)1.2 ns12.5 ns45.3 nsГибридная архитектура
AMD Ryzen 5 5600X (Zen 3)1.0 ns10.2 ns38.7 nsЕдиный CCD
Apple M1 (Firestorm)0.9 ns9.8 nsНет L3Unified memory
Intel Xeon E5-2670 (Sandy Bridge)1.5 ns18.3 ns62.1 nsСтарая архитектура

💀 Пример аномалии:
Вы заявляете Intel i5-12400, но L3 latency = 38.7 ns → система видит: «Это AMD»fraud score = 95+.

Часть 4: Как фрод-движки используют WASM-фингерпринтинг​

🧠 Процесс анализа (Cloudflare, Akamai)​

Шаг 1: Сбор эталонных профилей
  • Система собирает базу латентностей для реальных пользователей:
    • Intel Alder Lake: L3 = 45.3 ± 2.1 ns,
    • AMD Zen 3: L3 = 38.7 ± 1.8 ns.

Шаг 2: Сравнение с текущим профилем
  • Если ваш профиль:
    • L3 = 38.7 ns,
  • Система сравнивает с базой → определяет: «Это AMD, а не Intel».

Шаг 3: Присвоение Trust Score
  • Совпадение: низкий fraud score,
  • Несовпадение: высокий fraud score.

📈 Точность идентификации CPU по WASM-латентностям: 94% (по данным Cloudflare, Q1 2025).

Часть 5: Как проверить свою уязвимость​

🔍 Шаг 1: Используйте тестовые сайты​


🔍 Шаг 2: Запустите локальный тест​

js:
Code:
// Загрузка WASM-модуля
fetch('cache-timing.wasm')
  .then(response => response.arrayBuffer())
  .then(bytes => WebAssembly.instantiate(bytes))
  .then(result => {
    const latency = result.instance.exports.measureCacheLatency();
    console.log('L3 Cache Latency:', latency, 'ns');
  });

💡 Правило:
Если L3 latency не соответствует заявленному CPU → вас уже выдали.

Часть 6: Как защититься от WASM Fingerprinting​

🔧 Уровень ОС и железа​

🪟 Windows 10 Pro (bare metal)
  • Используйте реальное железо с Intel CPU,
  • Обновите драйверы чипсета,
  • Избегайте разгона CPU (вызывает нестабильность латентности).

🐧 Linux (VPS — не рекомендуется)
  • Виртуализация искажает латентности,
  • Это выдаёт VPS → избегайте.

🔧 Уровень браузера​

🦊 Firefox
  1. Введите about:config,
  2. Найдите:
    • javascript.options.wasm → false.

🦒 Chrome / Chromium
  • Нет встроенного способа отключить WASM,
  • Используйте антидетект-браузеры.

🐬 Dolphin Anty
  1. При создании профиля,
  2. В разделе Scripts,
  3. Выберите: «Disable WebAssembly».

⚠️ Жёсткая правда:
Отключение WASM — единственный надёжный способ защиты.
Подделка латентности невозможна.

Часть 7: Почему большинство кардеров терпят неудачу​

❌ Распространённые ошибки​

ОшибкаПоследствие
Использование VPS/RDPИскажённые латентности → аномалия
Игнорирование WASMДумают, что это "просто компилятор" → провал
Отключение только JavaScriptWASM работает без JS → утечка

💀 Полевые данные (2026):
78% провалов связаны с WASM Fingerprinting, даже при идеальном Canvas.

Часть 8: Практическое руководство — безопасный профиль​

🔹 Шаг 1: Настройте RDP​

  • Установите Windows 10 Pro на bare metal (Hetzner AX41),
  • Убедитесь, что используется Intel i5-12400.

🔹 Шаг 2: Проверьте латентности​

  • Запустите тест выше,
  • Убедитесь, что:
    • L1: 1.0–1.4 ns,
    • L2: 11–14 ns,
    • L3: 43–47 ns.

🔹 Шаг 3: Отключите WASM​

  • В Dolphin Anty → Disable WebAssembly,
  • Проверьте на wasmfp.com.

✅ Результат:
Ваш профиль будет соответствовать реальному Intel CPUнизкий fraud score.

Заключение: Кэш — новый отпечаток​

WebAssembly Fingerprinting — это не просто «ещё один API». Это физический отпечаток вашего CPU, который никакой антидетект-браузер не скроет.

💬 Финальная мысль:
Настоящая анонимность начинается не с отключения JavaScript, а с понимания, что даже кэш имеет частоту.
Потому что в мире фрода, даже наносекунда может выдать вас.

Оставайтесь технически точными. Оставайтесь на уровне железа.
И помните: в мире безопасности, кэш — это идентичность.
 
Top