Обнаружение и блокировка cryptojacking-скриптов в рекламных сетях браузера

Если после открытия страницы с рекламой ноутбук начинает шуметь, вкладка «съедает» процессор, а без рекламного блока всё работает нормально — есть повод проверить страницу на cryptojacking. В рекламных сетях браузера такие скрипты часто приходят не напрямую с сайта, а через баннер, redirect, видеоплеер, hidden iframe или сторонний ad tag.

Задача не в том, чтобы «найти майнер по названию». На практике вредоносный код маскируют, переименовывают и прогоняют через несколько рекламных партнёров. Надёжнее искать цепочку загрузки: какой домен подгрузил скрипт, кто был инициатором запроса, что происходит с CPU и куда уходят сетевые соединения.

Как cryptojacking попадает в браузерную рекламу

Рекламная цепочка редко бывает простой. Ваш сайт ставит один ad tag, он обращается к SSP или рекламному обменнику, обменник выбирает DSP, DSP отдаёт креатив, креатив может подгрузить ещё несколько wrapper’ов. На каком-то уровне в эту цепочку может попасть вредоносный JavaScript.

Для браузера это часто выглядит как обычная реклама: JS-файл, iframe, WebSocket или WebAssembly-модуль. Пока скрипт не делает ничего очевидно опасного, браузер не обязан блокировать его сам. Поэтому обнаружение строится на связке признаков: высокая нагрузка, подозрительный источник, нестандартные соединения и подтверждение через временную блокировку.

Признаки, которые стоит проверить первыми

  • Вкладка браузера держит CPU долго после загрузки страницы, особенно если на странице нет видео, анимаций или тяжёлого контента.
  • Ноутбук греется, вентилятор шумит, заряд батареи быстро уходит именно на странице с рекламой.
  • В диспетчере задач браузера вкладка или расширение показывает необычно высокую нагрузку.
  • В Network видны WebSocket-соединения, .wasm-файлы, Web Workers или запросы к странным доменам после загрузки рекламы.
  • Нагрузка резко падает, если отключить рекламный блок, включить контент-блокировщик или временно заблокировать домен партнёра.

Один признак ещё не доказательство. Видеообъявление, WebGL-анимация или тяжёлая аналитика тоже могут грузить браузер. Но если высокая нагрузка идёт из рекламного iframe, а после блокировки конкретного домена всё успокаивается — это уже хороший сигнал для расследования.

Пошагово: как найти источник cryptojacking-скрипта

  1. Повторите сценарий в чистом окружении. Откройте страницу в отдельном профиле браузера или тестовой среде. Закройте лишние вкладки, чтобы не перепутать нагрузку от других сайтов.
  2. Сравните страницу с рекламой и без неё. Если есть возможность временно отключить ad tag, сделайте это. Разница в CPU обычно сразу показывает, стоит ли копать рекламную цепочку.
  3. Запишите Performance. В DevTools откройте Performance и снимите 30–60 секунд работы страницы. Смотрите не только на общий CPU, но и на Scripting: если браузер постоянно исполняет JavaScript, это уже не обычная отрисовка баннера.
  4. Разберите Network. Отфильтруйте запросы по js, ws, wasm, worker. Смотрите поле Initiator: оно показывает, какой скрипт или iframe запустил подозрительный запрос.
  5. Проверьте iframe. В Elements найдите рекламные iframe, посмотрите их src, размеры, вложенность и домены. Cryptojacking часто прячут в iframe 1×1, hidden iframe или в цепочке редиректов.
  6. Временно заблокируйте подозрительный домен. Через DevTools Request Blocking или блокировщик контента запретите загрузку конкретного ресурса. Если CPU падает, вы нашли вероятного виновника.
  7. Сохраните доказательства. Зафиксируйте URL, домены, creative ID, demand partner, время, скриншоты Network и Performance. Без этого сложно доказать проблему рекламному партнёру и быстро откатить креатив.

Не проверяйте подозрительные страницы в рабочем профиле. Используйте отдельный браузер, гостевой профиль или тестовую виртуальную машину. Иногда проблема не только в рекламе, но и в заражённом расширении или скомпрометированном сайте.

На что смотреть в коде и трафике

Вредоносный рекламный скрипт не обязан содержать слово miner. Но есть паттерны, которые стоит проверять вручную или через автоматический анализ:

  • WebAssembly. Загрузка .wasm сама по себе не означает майнинг, но в связке с высокой CPU-нагрузкой это серьёзный сигнал.
  • Web Workers. Рабочие потоки удобны для долгой фоновой нагрузки. Проверяйте new Worker, service worker и скрытые worker-скрипты.
  • WebSocket-соединения. Многие майнеры общаются с пулами через WebSocket. Смотрите, куда браузер держит постоянное соединение после загрузки рекламы.
  • Обфускация. Длинные имена переменных, eval, atob, fromCharCode, динамическая сборка URL — не доказательство, но повод открыть файл.
  • Скрытые iframe. Если рекламный iframe имеет нулевой размер, opacity: 0 или странный redirect, его стоит проверить отдельно.
  • Долгие JavaScript-петли. Если Performance показывает постоянный Scripting без видимой причины, скрипт может специально нагружать процессор.

Правильное доказательство выглядит так: сторонний рекламный источник запустил скрипт, браузер начал долго держать высокую нагрузку, а после блокировки этого источника нагрузка исчезла.

Какие способы обнаружения реально помогают

Сравнение способов поиска cryptojacking-скриптов в браузерной рекламе
Способ Что показывает Где полезен Ограничения
Оцените статью
PEFile — Безопасность и технологии простым языком