Скрытые майнеры: как ваш сайт крадет электричество посетителей

«Твой сайт — больше не просто публичный документ. Это общий пул процессорного времени, который могут использовать без твоего ведома. И тот факт, что счёт за эту аренду платит не владелец ресурса, а конечный пользователь, делает атаку почти идеальной с экономической точки зрения.

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

Скрытая аренда: как майнинг-скрипты попадают на сайты

Механизм внедрения давно перестал быть примитивным. Прямая загрузка вредоносного файла на хостинг, это уровень мелких спамеров. Сегодня работают встроенные каналы, использующие саму архитектуру современного веба.

1. Компрометация цепочки поставок ПО

Ты управляешь десятками внешних зависимостей через npm, yarn или просто подключаешь библиотеки с CDN. Достаточно взломать аккаунт одного издержателя популярного пакета — от анимаций до виджетов соцсетей — чтобы обновление с обфусцированным майнером разошлось по тысячам проектов автоматически. Разработчик, который обновляет зависимости командой npm update, становится распространителем атаки, даже не подозревая об этом.

2. Рекламные сети как троянский конь

Это основной промышленный вектор. Ты размещаешь код рекламной сети, чтобы монетизировать трафик. Злоумышленник создаёт легальное с виду объявление, которое проходит автоматическую модерацию. Внутри него — скрипт, который при показе начинает майнинг. Загрузка происходит динамически с серверов рекламной сети, поэтому файлы твоего сайта остаются чистыми, но исполняемый код работает на твоих страницах. Ответственность за скрипт, загруженный через твой же рекламный блок, ложится на владельца ресурса.

3. Устаревшие CMS и взлом аккаунтов

Системы управления контентом с публичными уязвимостями — открытые ворота. После получения доступа к файловой системе злоумышленник встраивает код в шаблон (например, в footer.php) или модифицирует легитимные JS-файлы ядра. Иногда скрипт добавляется через уязвимости в популярных плагинах.

4. Подмена источников (CDN/Javascript)

Вместо легитимного источника в коде может оказаться ссылка на похожий домен, контролируемый злоумышленником (например, code.jqueyr.com вместо code.jquery.com). Такой скрипт отдаёт функциональность библиотеки, но с добавленным майнером.

Механика фонового майнинга в браузере

Современные скрипты далеки от примитивных циклов, грузящих процессор на 100%. Они используют несколько технологий для скрытного и эффективного существования:

  • Адаптивное потребление ресурсов. Процессорная нагрузка редко превышает 30–50%. Многие скрипты приостанавливают работу, когда вкладка неактивна, или отслеживают пользовательский ввод, чтобы снизить нагрузку во время активности.
  • Полная обфускация. Исходный код превращается в нечитаемую строку, что затрудняет обнаружение по ключевым словам вроде «CoinHive» или «WebAssembly».
  • Выделенные потоки (Web Workers). Вычисления выносятся в фоновые потоки, что делает их невидимыми в основном стеке вызовов DevTools. Обнаружить их можно только во вкладках, специально предназначенных для мониторинга workers.
  • Использование WebAssembly. Ключевые алгоритмы хеширования пишутся на языках вроде Rust и компилируются в Wasm, что обеспечивает скорость, близкую к нативной, прямо в песочнице браузера.

Для первичной проверки можно использовать диспетчер задач браузера (Chrome: Дополнительные инструменты → Диспетчер задач) или мониторить вкладку Network на предмет подозрительных WebSocket-соединений или запросов к нехарактерным доменам.

Риски для владельца сайта: не только репутация

Повышенная нагрузка на процессор пользователя — лишь видимая часть проблемы. Основные последствия касаются непосредственно тебя как оператора.

Риск Последствия и связь с регуляторикой
Репутационный ущерб Посетители связывают замедление работы и шум кулера с твоим сайтом. Это ведёт к потере доверия, негативным отзывам и, как следствие, к снижению конверсии и трафика.
Нарушение 152-ФЗ «О персональных данных» Если на сайте есть формы обратной связи, подписки, личные кабинеты, то выполнение несанкционированного кода на стороне клиента может трактоваться как несоблюдение мер защиты. Фактически происходит неконтролируемая обработка данных в среде пользователя, за безопасность которой ты отвечаешь. Это основание для инцидента утечки.
Несоответствие требованиям ФСТЭК Для систем КИИ или госсектора наличие любого неучтённого исполняемого кода — критическое нарушение. Это прямое указание на неэффективность СЗИ и может повлечь серьёзные проверки, предписания и штрафы.
Ухудшение метрик и ранжирования Высокая нагрузка на CPU напрямую влияет на Core Web Vitals (например, на FID — First Input Delay). Поисковые системы могут понижать в выдаче сайты, дающие плохой пользовательский опыт.

Обнаружение и защита: практические меры

Проактивный контроль зависимостей

  • Используй npm audit или yarn audit для автоматического сканирования зависимостей на известные уязвимости.
  • Для сайтов на CMS применяй специализированные плагины безопасности (например, для WordPress) и проводи регулярные проверки целостности ядра и расширений.

Content Security Policy (CSP) — основной рубеж

CSP-заголовок, отправляемый сервером, — самый эффективный метод превентивной защиты. Он представляет собой белую политику разрешённых источников для скриптов, стилей и других ресурсов.

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.example.com; connect-src 'self';

При такой политике браузер заблокирует выполнение любого скрипта, загруженного не с твоего домена или указанного доверенного CDN, даже если его код уже присутствует на странице.

Мониторинг и анализ

  • Внедри мониторинг исходящего трафика с веб-серверов. Нехарактерные запросы к доменам, связанным с криптовалютами или пулами, — явный сигнал.
  • Периодически проверяй ключевые файлы (главные шаблоны, скрипты) на наличие вставок вроде длинных строк base64 или вызовов eval(), setInterval() с обфусцированным содержимым.

Рекомендации для пользователей

На своих ресурсах имеет смысл информировать посетителей о базовых мерах защиты:

  • Использование расширений-блокировщиков (uBlock Origin) или специализированных антимайнеров.
  • Контроль загрузки процессора через встроенный диспетчер задач браузера.

Заключение: сайт как уязвимая экосистема

Современный веб-ресурс, это не статичный набор файлов, а динамичная экосистема из сторонних библиотек, рекламных сетей и плагинов. Безопасность теперь включает в себя не только защиту серверной части от инъекций, но и полный контроль над всем JavaScript-кодом, который исполняется в браузере посетителя. Наличие майнингового скрипта, это не просто «вредоносная реклама», а прямое свидетельство о неконтролируемом исполнении кода.

Для российского разработчика или владельца бизнеса это означает, что внедрение политик безопасности контента (CSP) и регулярный аудит сторонних зависимостей переходят из разряда рекомендаций в обязательные условия соответствия требованиям 152-ФЗ и отраслевых стандартов ФСТЭК. Игнорирование этого аспекта ставит под удар не только пользовательский опыт, но и юридический статус всего проекта.

Оставьте комментарий