Эта страница является переводом. Авторитетным считается текст английской версии. Читать на английском
malware · cryptojacking · crypto-stealer · rust · docker · worm · honeypot · monero
godhive: новый Rust-фреймворк для кражи криптовалюты и майнинга
Kinryū Labs проанализировала godhive, новый и ранее не описанный наступательный фреймворк на Rust, зафиксированный при злоупотреблении открытым Docker API в нашей сети ханипотов. Он майнит Monero, опустошает криптовалютные кошельки на крупных биржах и более чем в восьми блокчейнах, распространяется как червь и скрывается за управляющим каналом, построенным с расчётом на устойчивость к блокировке. Мы с высокой уверенностью оцениваем, что это специально созданное криминальное ПО, развёрнутое одним разработчиком, который испытывал собственный инструмент в полевых условиях с потребительского мобильного подключения.
Автор Davis Zheng·
TLP:CLEAR. Разрешено к публичному распространению. Материал получен сетью сенсоров-ханипотов Kinryū Labs. Индикаторы ниже приведены в обезвреженном виде.
Краткая сводка
- 6,946запросов к Docker API в одной автоматизированной серии
- 946исходных модулей Rust в двоичном файле
- 8+блокчейнов в прицеле его дрейнера кошельков
- 9типов управляющих каналов
godhive представляет собой скомпилированный на Rust фреймворк, сочетающий червя, похититель криптовалюты и майнер; в нашу сеть ханипотов он попал через открытый Docker Remote API. Один оператор провёл интенсивную автоматизированную кампанию против открытого Docker API, повторив полную цепочку атаки 21 раз. Kinryū Labs с высокой уверенностью оценивает, что godhive является специально созданным криминальным ПО, а не типовым майнером: у него есть собственный бренд, его имя отсутствует в публичной threat intelligence, а восстановленный двоичный файл содержит 946 различных исходных модулей Rust и результат месяцев разработки.
Оператор ни разу не загружал фреймворк по URL. ELF-файл переносился в контейнер прямо в командной строке, кусок за куском, через printf с base64. Двоичный файл был полностью восстановлен из этих же встроенных фрагментов оператора: 215 фрагментов собраны в ELF x86-64 размером 6.2 MB (SHA-256 4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36), которого нет на VirusTotal.
Ключевое отличие состоит в том, что godhive не является в первую очередь майнером. Майнинг для него запасной вариант. Основной бизнес состоит в краже: автоматические выводы средств на шести крупных биржах и вычистка средств более чем в восьми блокчейнах, причём майнинг Monero включается только тогда, когда кошельки не найдены.
- godhive представляет собой новое, специально созданное криминальное ПО на Rust. У него собственный бренд, он отсутствует в публичных отчётах и собран из 946 модулей Rust с более чем 18 зависимостями-крейтами. Восстановленный двоичный файл является обширным наступательным инструментарием, а не простым дроппером.
- Его цель состоит в монетизации, и кража стоит на первом месте. Двоичный файл автоматизирует вывод средств с бирж (Binance, Coinbase, Kraken, Bybit, OKX, KuCoin) и опустошение DeFi-активов в сетях Ethereum, BSC, Polygon, Arbitrum, Optimism, Base, Avalanche, Cronos и Solana, отдавая приоритет стейблкоинам. Майнинг Monero через XMRig служит запасным вариантом для хостов без кошельков.
- Что мы наблюдали от начала до конца. Зафиксированная цепочка: открытый Docker API, привилегированный контейнер с файловой системой хоста, смонтированной на чтение и запись, выход на хост, кража
/etc/shadowи SSH-ключей, развёртывание XMRig, туннель ngrok для внеполосного доступа и выгрузка данных в Telegram-бот, а затем SSRF к сервису облачных метаданных и сканирование в поисках Kubernetes и Elasticsearch. - Управляющий канал построен с расчётом на устойчивость к блокировке. godhive совмещает одноранговую сеть Kademlia, размещённый в блокчейне C2 (EtherHiding), действующий ретранслятор на Cloudflare Workers, алгоритмически генерируемые резервные домены и Telegram, с автоматической миграцией, когда канал перестаёт отвечать.
- Операционная культура оператора противоположна качеству инструмента. Криминальное ПО промышленного уровня развёрнуто с потребительского мобильного подключения, с жёстко зашитым в открытом виде токеном Telegram и публичным файлообменником, одной шумной серией с одного источника, и это при наличии модуля обнаружения ханипотов. Мы оцениваем, что вероятнее всего речь идёт об одном разработчике, испытывающем собственный фреймворк в полевых условиях.
Доставка: открытый Docker API
Точка входа самая старая в контейнерном мире: Docker Remote API без аутентификации на TCP/2375. Дальше идёт хрестоматийный захват хоста, восстановленный по запросам оператора к Docker API.
Оператор создаёт контейнер из alpine:latest с privileged: true и network_mode: host, монтируя всю файловую систему хоста на чтение и запись (/:/host:rw). Уже одна эта конфигурация контейнера и есть побег: монтирование корня хоста в привилегированный контейнер равнозначно root-контролю над машиной. Затем он вычищает конкурирующие майнеры (pkill -9 xmrig; pkill -9 lolMiner; pkill -9 minerd; pkill -9 godhive_c2), создаёт на хосте каталог закрепления /etc/godhive и читает секреты хоста прямо через точку монтирования, выгружая /etc/shadow и /root/.ssh/authorized_keys.
Только после этого появляется узнаваемый криптоджекинг. godhive скачивает сборку XMRig с анонимного файлообменника, разворачивает её, открывает туннель ngrok для внеполосного доступа и отправляет результаты в Telegram-бот. Завершается всё запросом учётных данных у сервиса облачных метаданных (169.254.169.254) и прощупыванием Kubernetes, Elasticsearch и Kibana для расширения охвата. В ходе серии оператор повторил цепочку 21 раз.
Майнинг здесь наименьшая из проблем
Восстановленный двоичный файл заметно шире той цепочки, которую мы наблюдали в работе. Его 946 модулей Rust и строки сборки складываются в обширный наступательный инструментарий. Часть из них подкреплена скомпилированным кодом (продублированные литералы от мономорфизации Rust, ветви обработки ошибок, каталоги сборки крейтов), другая часть содержит только имена модулей и заготовки конфигурации, поэтому список ниже следует читать в той же мере как намерение, что и как подтверждённую функциональность.
Ядром служит конвейер монетизации. harvester обходит файловую систему в поисках wallet.dat, .env, SSH-ключей и wp-config.php; scorer оценивает BTC, XMR, ETH и Ravencoin по котировкам CoinGecko и ранжирует жертв по стоимости; модуль работы с учётными данными перебирает украденные логины с интеграцией 2CAPTCHA, чтобы обходить проверки при входе; дрейнер выводит средства через биржевую библиотеку CCXT и ончейн-сборы в DeFi, восстанавливая ключи из украденных seed-фраз и выбирая самую дешёвую сеть для каждого вывода. Оставленный разработчиком комментарий в двоичном файле описывает оптимизацию вывода стейблкоинов ради экономии на комиссиях Ethereum, и именно такая проработка отличает работающий дрейнер от proof of concept.
Вокруг этого ядра расположено остальное наполнение: червь, который сканирует с помощью Masscan и Nuclei и эксплуатирует Docker, Redis, Kubernetes, Elasticsearch, WordPress, а также набор уязвимостей Windows и Java, включая Log4Shell; модуль подавления EDR, нацеленный по именам процессов на девять поставщиков защиты конечных точек; пять уровней закрепления вплоть до UEFI-буткита с манипуляцией TPM; система плагинов на WASM для доставки новых возможностей на весь парк заражённых машин без изменения C2; шифровальщик, срабатывающий только при стоимости активов выше порога в 1,000 долларов США; перехватчик буфера обмена; DDoS-модуль; и антифорензика, которая удаляет wtmp, btmp и журналы journald и подбрасывает поддельный шум в syslog, чтобы отнять время у аналитика. Каждый модуль маскируется под поддельным именем процесса sysd, а собственный трафик выдаётся за стриминг YouTube за счёт использования настоящих SNI-имён googlevideo.com.
Две детали смягчают картину. Фреймворк умеет распознавать пятнадцать платформ-ханипотов и целый ряд песочниц и гипервизоров. При этом несколько его конфигураций не доведены до конца: используемый по умолчанию майнинг-пул закрылся в 2022 году, ENS-имя для подмены в буфере обмена так и не было зарегистрировано, а ключ шифрования остаётся заглушкой CHANGE_ME. Функциональность скомпилирована и реальна, но часть её пока не подключена.
ngrok и почему это хактул
Образец, по которому кампания была замечена первой, представляет собой легитимный подписанный двоичный файл ngrok, скачанный с собственной CDN ngrok. Это не вредоносное ПО. Это коммерческий инструмент обратного туннелирования, и антивирусные движки помечают его как хактул именно потому, что он крайне удобен после компрометации. Получив выполнение кода внутри привилегированного контейнера, godhive поднимает исходящее соединение к облаку ngrok и публикует выбранную локальную службу по публичному URL, не открывая входящих портов и не оставляя периметровому межсетевому экрану или NAT, разрешающему только исходящий трафик, ничего, что можно было бы заблокировать. Оператор подтверждал туннель опросом локального API агента ngrok (127.0.0.1:4040/api/tunnels) и отправлял полученный публичный URL в свой Telegram-бот, превращая каждый свежезахваченный хост в готовую ссылку для подключения.
Управляющий канал, рассчитанный на устойчивость к блокировке
godhive не полагается на один C2. Каналы выстроены слоями по тому, насколько трудно устранить каждый из них. В основании лежит одноранговая сеть Kademlia с proof-of-work при подключении и обходом NAT: у неё нет центральной точки, которую можно изъять. Выше находится EtherHiding, где текущий адрес бэкенда хранится в смарт-контракте блокчейна, который нельзя отозвать, и разрешается во время работы через действующий ретранслятор на Cloudflare Workers (c2-proxy.operator.workers[.]dev), скрывающий бэкенд от защитников. Ещё выше расположены алгоритмически генерируемые резервные домены, получаемые по DNS-over-HTTPS с подменённым SNI, скрытый сервис Tor, тайники в GitHub gists, восемь каналов через SaaS-сервисы и Telegram как основной канал оператора. Механизм обнаружения провала отслеживает серию пустых опросов за командами и автоматически переводит оператора на свежую инфраструктуру с зашифрованной резервной копией конфигурации, а функция федерации обеспечивает координацию между несколькими ботами.
Мы внешне сняли отпечаток ретранслятора на Cloudflare Workers и подтвердили, что он работает и обрабатывает запросы: конечные точки регистрации, выдачи задач и панели управления перенаправляются на бэкенд, а неаутентифицированный ввод отклоняется, что согласуется с зашифрованными AEAD токенами, которые двоичный файл использует для аутентификации на C2. За ним оператор держит защищённую административную панель с хешированием паролей Argon2, многофакторной аутентификацией, ролевым доступом и даже постквантовыми вариантами в настройках TLS. Так выглядит отношение к ботнету как к промышленной инфраструктуре, вплоть до экспорта метрик в Prometheus.
Другая половина: любительские операции
При всей инженерной проработке развёртывание небрежно в существенных местах. Кампания велась с одного потребительского мобильного подключения Verizon Wireless в США (174.230.35[.]232, обратный DNS 232.sub-174-230-35.myvzw.com, Гейнсвилл, Флорида), а не с пуленепробиваемого хостинга или VPS, плотной автоматизированной серией без повторного использования инфраструктуры. Токен Telegram-бота жёстко зашит в открытом виде, что даёт единственную точку для блокировки. Полезная нагрузка XMRig раздавалась с публичного анонимного файлообменника. И при всём коде обнаружения ханипотов всё это было развёрнуто одной шумной серией с отслеживаемого адреса.
Двоичный файл собран на macOS, под пользователем dev, в каталоге research/godhive. Вместе с намеренной анонимизацией Telegram-личности оператора, недоделанными конфигурациями и развёртыванием, указывающим на самого себя, наиболее экономное объяснение состоит в том, что это квалифицированный разработчик-одиночка, который тестирует и запускает собственный фреймворк, а не клиент платформы malware-as-a-service. Бренд отполирован: собственный логотип в виде золотого улья и слоган «one mind, one purpose, one hive». Операции такой отделки не получили.
Атрибуция
Кампания связывается с одним оператором через его инфраструктуру в Telegram. godhive отправляет украденные учётные данные, URL туннелей и подтверждения заражения жёстко прописанному боту @godhive_bot (id бота 8836117161). Перехваченный chat_id соответствует личному аккаунту @godhive77 (id пользователя 7659611777), у которого вместо отображаемого имени стоят подчёркивания и нет фотографии профиля, то есть попытка анонимности, которую сводит на нет сам никнейм godhive77. Тот же оператор держит соответствующий зарезервированный канал @godhive (один подписчик, публичных сообщений нет, пересылка отключена), а последовательный id пользователя Telegram датирует аккаунт концом 2024 года. Никнейм godhive77 остаётся наиболее сильной зацепкой для дальнейшей атрибуции.
Индикаторы компрометации
Инфраструктура атакующего приведена в обезвреженном виде. Легитимные сторонние сервисы, которыми злоупотребляет вредонос, оставлены как есть для целей обнаружения.
Сеть и хост
| Индикатор | Контекст |
|---|---|
c2-proxy.operator.workers[.]dev | Действующий C2-ретранслятор на Cloudflare Workers (сообщить в Cloudflare) |
hxxps://files.catbox.moe/p46h39.gz | Полезная нагрузка XMRig на анонимном файлообменнике (SHA-256 cb49ae0793b2…) |
bin.equinox.io/c/.../ngrok-v3-stable-linux-amd64.tgz | Загрузка ngrok (легитимная CDN); признаком служит исходящее соединение к bin.equinox.io с сервера |
127.0.0.1:4040/api/tunnels | Опрос локального агента ngrok (считывает назначенный публичный URL туннеля) |
169.254.169.254/latest/meta-data/ | SSRF к сервису облачных метаданных ради кражи учётных данных |
api.telegram.org | C2 и выгрузка данных через Telegram-бот; поисковым признаком служит исходящий трафик от серверных нагрузок |
gitlab.com/nzyme/ | Размещение статически собранных инструментов (sshpass, redis-cli, wget, tor, proxychains) |
2captcha.com, hashes.org, nitrxgen.net | Сервисы решения CAPTCHA и взлома хешей, используемые в конвейере работы с учётными данными |
r[1-20]---sn-*.googlevideo.com, manifest.googlevideo.com | Настоящие имена хостов CDN YouTube, применяемые для подмены SNI в TLS; сигнализировать, когда они разрешаются в IP, не принадлежащие Google |
Актор, идентификаторы C2 и выплаты
| Индикатор | Контекст |
|---|---|
174.230.35[.]232 | Источник кампании (мобильная сеть Verizon Wireless, 232.sub-174-230-35.myvzw.com, Гейнсвилл, Флорида); динамический адрес оператора связи, малопригодный для блокировки |
@godhive_bot (id бота Telegram 8836117161) | Бот для C2 и выгрузки данных; токен жёстко зашит в двоичном файле (здесь скрыт; передан в Telegram для блокировки) |
@godhive77 (id пользователя Telegram 7659611777) | Аккаунт оператора для приёма выгружаемых данных и наиболее сильная зацепка для атрибуции |
@godhive (id канала Telegram -1002105830453) | Зарезервированный канал оператора |
49aXwwgXBKRKTUVgYuLy3fZkTeLP3PWgMhwiyK55Ur7WhgYXJ33N8JZG87vzUV1UyVdZzPGLvx1w9YQHk7faWPn1UzJte2R | Подтверждённый кошелёк Monero для выплат (связан с рабочей конфигурацией XMRig) |
pool.minexmr.com:4444 | Пул из конфигурации XMRig; minexmr закрылся в 2022 году, поэтому это значение по умолчанию не сработает |
Файлы и артефакты
- Двоичный файл godhive (восстановленный): SHA-256
4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36(ELF x86-64 размером 6.2 MB, отсутствует на VirusTotal). Его заголовки ELF намеренно повреждены: они заявляют размер ~106 MB и указывают на код за концом файла, что ломает стандартные инструменты. - Закрепление на хосте:
/etc/godhive,/host/usr/local/bin/sysd(двоичный файл, выдающий себя за systemd),/host/tmp/godhive_deployed.txt, процессgodhive_c2, собственный образgodhive:latest, создаваемый в контейнере. - Сигнатура побега из контейнера: контейнер, созданный с
Privileged:true,network_mode:hostи монтированием/:/host:rw. - Артефакт сборки: пути cargo в
/Users/dev/.cargo/registry/src/и каталог сборкиresearch/godhive(разработчик на macOS). - Признак укрепления хоста вредоносом: пароль Redis установлен в
CHANGED_BY_GODHIVE; веб-шеллb374k.phpв связке с перебором паролей WordPress.
Поведенческие
pkill -9 xmrig|lolMiner|minerd|godhive_c2с последующимmkdir /host/etc/godhive.- Чтение
/host/etc/shadowи/host/root/.ssh/authorized_keysчерез точку монтирования контейнера. - Процесс
sysd, не являющийся настоящим systemd; записи черезefibootmgr, создающие загрузочную запись EFI с меткой «System Core». - Рабочий каталог Nuclei
/tmp/.nuclei_assault-t*.
Обнаружение
- Сигнализировать об исходящих обращениях серверов к
bin.equinox.ioи любым хостам*.ngrok*, а также об опросе API агента ngrok127.0.0.1:4040/api/tunnels. - Сигнализировать о любом контейнере, созданном с
Privileged:trueи монтированием/:/host: такое сочетание почти наверняка означает попытку побега. - Сигнализировать об исходящем трафике серверных нагрузок к
api.telegram.org,c2-proxy.operator.workers[.]dev,gitlab.com/nzyme/,2captcha.comи сервисам взлома хешей. - Сигнализировать о процессе
sysd, о завершении или остановке агентов EDR (falcon-sensor,SentinelOne,cbdefense,sophos-edr,cylancesvc) и оCONFIG SET requirepass CHANGED_BY_GODHIVE. - Рассматривать TLS-соединения с SNI
googlevideo.com, разрешающимся в IP, не принадлежащие Google, а также обращения кmanifest.googlevideo.comот небраузерных процессов как маскировку трафика.
Меры защиты
- Никогда не выставляйте Docker API на 2375 без аутентификации. Привяжите его к localhost и включите клиентскую аутентификацию TLS. Это первопричина.
- Принудительно применяйте
no-new-privileges, откажитесь от--privilegedи ограничьте монтирование каталогов хоста либо используйте rootless Docker или gVisor. - Блокируйте доступ контейнеров к сервису облачных метаданных (
169.254.169.254) и требуйте IMDSv2. - Фильтруйте исходящий трафик: серверные нагрузки не должны обращаться к анонимным файлообменникам, ngrok, Telegram, сервисам решения CAPTCHA и перечисленным выше площадкам размещения статических инструментов.
- Включите Secure Boot, чтобы ослабить закрепление через UEFI, и включите защиту от изменения у агентов на конечных точках, которые godhive пытается завершить.
- Если какой-либо хост мог быть скомпрометирован, немедленно смените API-ключи бирж: godhive автоматизирует вывод средств.
Сопоставление с MITRE ATT&CK
| Тактика | Техника |
|---|---|
| Первоначальный доступ | T1190 Exploit Public-Facing Application (Docker API; в арсенале также Redis, Kubernetes, WordPress, Log4Shell) |
| Выполнение | T1610 Deploy Container; T1059.004 Unix Shell |
| Повышение привилегий | T1611 Escape to Host (привилегированный контейнер, монтирование хоста) |
| Закрепление | T1543 Create or Modify System Process (sysd); T1542.003 Bootkit (UEFI); T1014 Rootkit |
| Обход защиты | T1562.001 Impair Defenses (подавление EDR); T1070 Indicator Removal (удаление журналов); T1497 Virtualization/Sandbox Evasion (обнаружение ханипотов и виртуальных машин); T1036 Masquerading (sysd, SNI YouTube); T1027 Obfuscated Files (повреждённый ELF) |
| Доступ к учётным данным | T1003.008 /etc/passwd and /etc/shadow; T1552.004 Private Keys; T1552.005 Cloud Instance Metadata API |
| Разведка | T1046 Network Service Scanning (Masscan, Nuclei) |
| Управление и контроль | T1572 Protocol Tunneling (ngrok); T1090 Proxy; T1071.001 Web Protocols (Telegram, Cloudflare Workers); T1102 Web Service (GitHub gists, каналы SaaS) |
| Воздействие | T1496 Resource Hijacking (XMRig); T1486 Data Encrypted for Impact (шифровальщик); T1657 Financial Theft (опустошение биржевых счетов и DeFi); T1498 Network Denial of Service |
Методология и примечания
- Анализ представляет собой статический анализ ELF-файла, полностью восстановленного из встроенных base64-фрагментов самого оператора, перехваченных ханипотом, вместе с разбором захваченного трафика Docker API и санкционированной внешней разведкой действующего ретранслятора оператора на Cloudflare Workers. Вредоносное ПО не запускалось, попыток аутентификации на C2 не предпринималось.
- Индикаторы приведены в обезвреженном виде, а легитимные сторонние сервисы, которыми злоупотребляет вредонос, оставлены как есть для целей обнаружения.
- Образцы доступны другим исследователям и специалистам по защите по запросу. Напишите на contact@kinryu.sh, коротко указав, кто вы и для чего они вам нужны.