Подделка фингерпринта: знакомимся с термином «спуфинг»
Вчера я рассказала про то, из чего может состоять фингерпринт, используемый для антифрод-систем. Это достаточно эффективный механизм, однако и с ним злоумышленники научились бороться. Спуфинг (spoofing) - это общий термин, означающий способ обмана, при котором злоумышленник подделывает данные, чтобы выдать себя за другого человека, устройство или организацию.
В нашем контексте подделывается фингерпринт, и для того чтобы «отразить» такую атаку, обнаружить противоречия между сигналами. Например, мы на фронте собрали такой базовый коллектор с характеристиками браузера:
async function collectFingerprint() { const ua = navigator.userAgentData; return { userAgent: navigator.userAgent, language: navigator.language, platform: navigator.platform, timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, screen: ${screen.width}x${screen.height}, cores: navigator.hardwareConcurrency, memory: navigator.deviceMemory ?? null, webdriver: navigator.webdriver, clientHints: ua ? await ua.getHighEntropyValues([ “architecture”, “platformVersion”, “fullVersionList”, “model” ]) : null }; } collectFingerprint().then(console.log); Эти данные отправляются на бекенд и анализируются:: - может оказаться, что HTTP User-Agent заявляет одну платформу, а Client Hints - другую - у одной сессии резко изменилось несколько характеристик окружения - множество регистраций имеют одинаковые признаки автоматизации и необычно высокую частоту запросов - браузерные сигналы противоречат другим наблюдениям сервера
На основе анализа рассчитывается Risk Score - оценка риска для конкретной ситуации. И, уже в зависимости от нее, возможны разные сценарии: Низкий риск - пропускаем пользователя, но можем продолжать мониторинг Средний риск - запрашиваем дополнительную проверку, например капчу или подтверждение по email Высокий риск - временно ограничиваем действие (регистрацию, авторизацию, платёж и тд) Критический риск - блокируем опасное действие и передаём событие на дополнительную проверку