Статья Обход ML-детекторов фишинга через отложенный рендеринг: от 100% к 0% детекции

Монитор с зелёным текстом терминала показывает снижение детекции фишинга с 0% до 100%. Сканирующие линии ЭЛТ и свечение фосфора создают атмосферу ночного взлома.


Визуальный ML-детектор PhishIntention показывает 100% accuracy на бенчмарках - пока на фишинговую страницу не добавляют пятисекундную задержку рендеринга логотипа. После этого detection rate падает до нуля. Не до 80%, не до 30% - до абсолютного нуля. Пять строк CSS и JavaScript ломают state-of-the-art pipeline, на который потрачены годы исследований. Работа Apruzzese et al., принятая на IEEE European Symposium on Security and Privacy, впервые показала: целый класс антифишинговых ML-систем архитектурно уязвим к тривиальной timing-атаке. Русскоязычных разборов техники delayed rendering phishing не существует - материалы по обходу ML-детекторов фишинга в рунете описывают атаки на уровне URL-признаков, HTML-содержимого или adversarial perturbations пикселей, но ни один не рассматривает атаки на временно́е окно визуального pipeline детектирования. Разберёмся, как это работает и почему фикс не так очевиден, как кажется.

Как визуальные ML-детекторы фишинга принимают решение​

Современные системы обнаружения фишинговых страниц - PhishPedia, PhishIntention, VisualPhishNet - работают по одному архитектурному принципу. Pipeline сводится к трём шагам, и каждый критичен для понимания уязвимости.

Шаг 1: захват скриншота. Детектор открывает целевую страницу в headless-браузере (Chromium через Puppeteer/Playwright или системный API рендеринга) и делает снимок экрана через фиксированный интервал после начала загрузки. В PhishIntention этот интервал - 2 секунды, захардкожено в коде. Headless-браузер выполняет JavaScript, но не ждёт завершения всех асинхронных операций, таймеров и отложенных анимаций. Просто щёлкает снимок и идёт дальше.

Шаг 2: визуальное сравнение. Скриншот передаётся ML-модели, которая извлекает ключевые визуальные элементы. В PhishIntention pipeline состоит из нескольких компонентов: layout detector определяет позицию логотипа и формы ввода учётных данных, затем Siamese network вычисляет visual similarity score между извлечённым логотипом и эталонным набором (reference list) из 277 известных брендов. Под капотом - свёрточные нейронные сети (CNN) для feature extraction и cosine similarity для финального сравнения.

Шаг 3: верификация домена. Если визуальное сходство с одним из брендов в reference list превышает порог, детектор проверяет: совпадает ли домен страницы с легитимным доменом этого бренда. Несовпадение → фишинг. Если визуального совпадения ни с одним брендом не найдено - страница считается легитимной (benign), чтобы минимизировать false positive rate.

Подход работает против стандартного фишинга: атакующий клонирует страницу PayPal на домене paypa1[.]com, детектор распознаёт логотип PayPal, видит несовпадение домена → фишинг. Против визуальных детекторов не помогают даже adversarial ML-пертурбации (imperceptible pixel-level modifications): они либо не переносятся из feature-space в problem-space (реальный HTML/CSS), либо заметны человеческому глазу.

Вся конструкция держится на одном допущении: снимок экрана корректно отражает содержимое страницы. Допущение оказалось ложным.

Архитектурная уязвимость: timing gap между снимком и полной отрисовкой​

По данным Apruzzese et al., PhishIntention захватывает скриншот через 2 секунды после начала загрузки. Параллельное исследование (Csontos, 2021) установило, что среднее время полной загрузки веб-страницы - 7.2 секунды. Разница в 5.2 секунды - timing gap, в который атакующий может целенаправленно отложить отрисовку критических визуальных элементов.

[Применимо: целевой фишинг (spearphishing-кампании); среда - headless-browser crawlers визуальных ML-детекторов; внешняя атака]

Сценарий эксплуатации по шагам:
  1. Детектор открывает фишинговую страницу в headless-браузере
  2. Через 2 секунды делает скриншот
  3. На скриншоте отсутствуют ключевые элементы - логотип, формы ввода, брендинг
  4. ML-модель не находит совпадений с reference list → нет brand match
  5. Страница маркируется как benign (легитимная)
  6. Через 5–7 секунд все элементы полностью отрисовываются для реального пользователя в обычном браузере
  7. Пользователь видит полноценный клон целевого бренда и вводит учётные данные
Атакующему не нужно модифицировать ML-модель, генерировать adversarial examples или менять пиксели скриншота. Достаточно задержать отрисовку визуальных элементов настолько, чтобы в момент снимка они ещё не появились. Это problem-space атака, не feature-space - манипуляция происходит с реальным HTML/CSS/JS, а не с внутренним представлением модели.

Систематический обзор литературы (SLR), проведённый авторами как мотивационное исследование (RQ0), установил: ни одна из предшествующих публикаций по adversarial robustness визуальных фишинг-детекторов не учитывала timing-атаки. Все работы предполагали, что скриншот захватывается корректно, и фокусировались на двух направлениях: (a) видимые манипуляции - изменение цвета, шрифтов, позиции логотипа; (b) imperceptible adversarial perturbations через стандартные adversarial ML-методы (FGSM, PGD). Timing-вектор оставался за пределами threat model всех предыдущих работ. Никто просто не подумал, что атакующий может сыграть на секундомере.

Две стратегии отложенного рендеринга​

Исследование предложило две практические стратегии delayed rendering. Обе реализуются в problem-space (HTML/CSS/JavaScript), работают в black-box режиме (атакующий не знает параметров детектора) и не требуют серверной логики.

Curtain effect: постепенное раскрытие сверху вниз​

Curtain effect - техника, при которой визуальный элемент (логотип, фоновое изображение) загружается сразу в DOM, но отображается пользователю постепенно, «разворачиваясь» сверху вниз. Название - по аналогии с театральным занавесом.
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Обе техники работают в black-box режиме, не создают подозрительных артефактов в DOM/HTML для сторонних анализаторов и реализуются минимальным количеством клиентского кода. По сути, это «чистая» evasion - ничего подозрительного ни в разметке, ни в сетевом трафике.

Оценка воздействия: от полной детекции к полному обходу​

Центральный экспериментальный результат: state-of-the-art визуальные детекторы полностью побеждены техниками delayed rendering.

PhishIntention - один из наиболее продвинутых визуальных детекторов, комбинирующий layout detection, logo identification, credential page classification и domain verification - показал detection rate 100% на стандартном бенчмарке без evasion. После применения curtain effect detection rate упал до 0%. Авторы характеризуют это как «completely defeated». Не «снизилась эффективность» - полное поражение.

Это не adversarial perturbation и не feature engineering attack. Это problem-space атака, которая эксплуатирует архитектурное ограничение - фиксированный таймаут захвата скриншота. Атака не модифицирует ML-модель, не требует знания весов или архитектуры нейронной сети, не создаёт артефактов в HTML/DOM для альтернативных feature extractors. Авторы опубликовали все ресурсы (код, данные, воспроизводимые эксперименты) в открытом доступе.

Контекст угрозы: по данным Verizon DBIR 2025, фишинг - вектор initial access в 36% подтверждённых инцидентов. IBM X-Force Threat Intelligence Index 2025 фиксирует, что генерация фишинговых писем с помощью GenAI происходит в 11.4 раза быстрее при сопоставимом качестве. CrowdStrike Global Threat Report 2025 отмечает удвоение вредоносного использования GenAI для социальной инженерии и фишинга в 2024 году. Техника, которая за 5 строк CSS полностью обнуляет визуальный pipeline детекции - не академическое упражнение, а операционная проблема.

Реакция пользователей: замечают ли люди задержку​

Исследование включало user study - участникам демонстрировали фишинговые страницы с delayed rendering и без него.

Результат: конечные пользователи не смогли надёжно идентифицировать «пертурбации». Curtain effect и pixelation воспринимались как стандартная загрузка страницы. Люди привыкли к прогрессивной загрузке контента - lazy loading изображений, skeleton screens, progressive JPEG, поэтапная отрисовка SPA-приложений. Delayed rendering органично вписывается в эти паттерны.

Получается двойной удар по обоим уровням защиты:
  • Machine: ML-детектор не видит ключевых визуальных элементов в момент анализа
  • Human: пользователь воспринимает задержку как норму, не как индикатор угрозы
Машинный детектор не ждёт полной загрузки; человек принимает задержку за стандартное поведение сайта. Оба «детектора» - и кремниевый, и биологический - обмануты одним и тем же трюком.

Место в цепочке атаки и маппинг MITRE ATT&CK​

Delayed rendering занимает специфическую позицию в kill chain - это evasion-слой на этапе initial access. Техника не самостоятельна: она встраивается в существующую фишинговую инфраструктуру и усиливает её, снимая один из слоёв защиты.

Полная цепочка:
  1. Подготовка инфраструктуры: атакующий разворачивает фишинговую страницу - клон целевого бренда (PhishKit, ручная вёрстка) или MitM-прокси (EvilGinx2 для reverse proxy phishing)
  2. Добавление evasion-слоя: в HTML/CSS/JS внедряется delayed rendering с задержкой, превышающей таймаут скриншота целевого детектора (5+ секунд для обхода PhishIntention)
  3. Доставка ссылки: Phishing (T1566, Initial Access) → Spearphishing Link (T1566.002)
  4. Evasion: визуальный ML-детектор захватывает скриншот → не обнаруживает фишинг → страница не блокируется
  5. Взаимодействие пользователя: Malicious Link (T1204.001, Execution) - пользователь переходит по ссылке, видит полностью отрисованную фишинговую страницу
  6. Credential harvesting: пользователь вводит учётные данные
  7. Post-exploitation: использование похищенных credentials → lateral movement, persistence
Маппинг на MITRE ATT&CK:

Техника ATT&CKIDТактикаРоль в атаке
PhishingT1566Initial AccessОбщий вектор доставки
Spearphishing LinkT1566.002Initial AccessМетод доставки ссылки
Time Based ChecksT1497.003Defense Evasion, DiscoveryЯдро evasion - задержка рендеринга
Obfuscated Files or InformationT1027Defense EvasionВизуальная обфускация содержимого
Impair DefensesT1562Defense EvasionРезультат: ML-детектор не срабатывает

Наиболее точный маппинг для ядра техники - T1497.003 (Time Based Checks): атака эксплуатирует временну́ю разницу между моментом анализа (2 секунды) и моментом полной отрисовки (7+ секунд). По сути, это sandbox evasion: детектор «видит» страницу в момент, когда она ещё не готова. Тот же принцип, по которому малварь спит 10 минут перед выполнением payload - только здесь спит не код, а визуал.

Контрмеры и слепые зоны визуальных ML-детекторов​

Delayed rendering атакует исключительно screenshot-based визуальные ML-детекторы. Другие классы антифишинговых систем не подвержены:

Класс детектораПодвержен delayed renderingПричина
URL-based ML (анализ URL-признаков)НетНе использует скриншоты
HTML feature extractorsНетАнализирует DOM, не визуал
Blocklist/reputation (Safe Browsing)НетПроверяет домен/URL по спискам
Email sandbox (Proofpoint TAP)ЧастичноЗависит от таймаута sandbox
Визуальные ML-детекторыДаЗависят от скриншота
Комбинированные системыЧастичноВизуальный слой обходится, остальные - нет

По конкретным продуктам:
  • PhishIntention (таймаут 2с) - экспериментально подтверждено: 100% → 0% detection rate. Полный разгром.
  • PhishPedia - архитектурно аналогичен PhishIntention (screenshot → logo detection → domain check), уязвим по дизайну
  • VisualPhishNet - аналогичный pipeline, уязвим
  • Google Safe Browsing - комбинированный подход (URL reputation, safe browsing lists, ML-классификация), визуальный анализ не единственный слой - delayed rendering не обнуляет всю систему, но ослабляет один из компонентов
  • Microsoft Defender SmartScreen - аналогично: комбинированный подход снижает критичность обхода визуального компонента
Исследование Apruzzese et al. предложило несколько контрмер:

Multiple screenshots. Захват нескольких скриншотов с разными интервалами (2с, 5с, 10с) и сравнение. Существенное изменение содержимого страницы между снимками - индикатор delayed rendering. Ограничение: кратно увеличивает время анализа и вычислительную нагрузку. Когда краулер обрабатывает тысячи URL в час, утроение числа скриншотов может оказаться неприемлемым.

DOM mutation monitoring. Отслеживание изменений в DOM после DOMContentLoaded. Появление новых визуальных элементов через несколько секунд - подозрительный паттерн. Ограничение: легитимные сайты активно используют lazy loading и dynamic content injection - высокий false positive rate. Попробуйте отличить delayed rendering от обычного React-приложения, которое подтягивает данные через API.

Browser extension. Авторы предложили расширение для браузера, которое без обращения к внешним сервисам предупреждает пользователя о потенциальном фишинге, мониторя визуальные изменения страницы после загрузки. Провели оценку производительности предложенного решения.

Фундаментальная проблема: любой фиксированный таймаут может быть превышен атакующим. Детектор увеличивает таймаут до 10 секунд - атакующий устанавливает задержку 15 секунд. Гонка вооружений, в которой атакующий всегда на шаг впереди, потому что ему достаточно изменить одну цифру в setTimeout. Единственный теоретически надёжный подход - event-driven pipeline, который ожидает стабилизации rendering tree (отсутствие визуальных изменений в течение N миллисекунд). Но и он уязвим к баннерам, анимациям и динамическому контенту, которые не дают зафиксировать «стабильное» состояние.

Комбинация визуального анализа с URL-based, HTML-based и reputation-based методами снижает критичность обхода одного слоя - это согласуется с OWASP A09:2021 (Security Logging and Monitoring Failures) и с принципом defense in depth. Ни один single-layer подход к детекции фишинга не может быть надёжным; delayed rendering демонстрирует это на конкретном примере.

Весь класс визуальных ML-детекторов фишинга построен на допущении, которое до этого исследования никто не проверял: «скриншот отражает реальное содержимое страницы». Это не баг конкретной реализации PhishIntention - это архитектурный дефект, заложенный в фундамент подхода. За последние годы ни одна из значимых работ по adversarial robustness визуальных детекторов не рассматривала timing-вектор, потому что исследователи фокусировались на модификации визуального контента (adversarial examples, logo perturbations, font changes), принимая как данность, что контент присутствует в момент анализа.

Здесь просматривается закономерность, которая выходит за рамки антифишинга: любая ML-система, принимающая решение на основе моментального снимка динамического объекта, уязвима к манипуляции с временны́м окном этого снимка. Аналогичные timing-атаки потенциально применимы к детекторам вредоносных мобильных приложений (screenshot-based app store scanners), сканерам defacement-ов, мониторам brand impersonation.

Индустрии visual phishing detection придётся ответить на два вопроса в ближайший год-два. Первый: переходить к event-driven pipeline с кратным увеличением latency или принять, что визуальный слой обходится тривиально. Второй: как строить multi-layer detection так, чтобы обход одного слоя не обнулял всю систему - и при этом не раздувать false positive rate до неприемлемых значений.

По данным Verizon DBIR 2025, 68% утечек связаны с человеческим фактором, а delayed rendering атакует одновременно и машину, и человека. Research community этот вызов пока только сформулировала - ответа на него нет. Если вы строите или эксплуатируете антифишинговую систему с визуальным компонентом - проверьте, что происходит с вашим detection rate при задержке рендеринга в 5 секунд. Результат может неприятно удивить.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab