断続的に活動するMooBotまたはFlodrix

2019年に現れた Mirai 系 マルウェアである MooBot は、The cow says mooという使われない文字列や、二重起動防止用のファイル名.moopidといった文字列を持つという特徴がありましたが 1、2021年には、その代わりにランダムな文字列を作成するためのシードとしてw5q6he3dbrsgmclkiu4to18npavj702fという文字列を使用するという特徴を持つようになり 2、NICTにおいても、たびたびこの文字列を含むマルウェアの活動を観測しています。

ボットネットの相関

直近では、2025年9月10日からマルウェアの更新が再開され、DoS 攻撃活動を確認しました。過去にも何度か MooBot を感染させるエクスプロイトを検知していますが、2024年の3月と10月には RapperBot と共通のネットワークリソースが利用されたことが分かっています。

/posts/2025-09/botnetwork.png

図1. ボットネット相関図(ハッシュ値はMD5)

また、2025年6月2日のバージョンに関しては、NICT で観測している DVR の脆弱性を狙ったエクスプロイトとは別の経路(CVE-2025-3248)による、別のターゲット機器(Langflowサーバ)への感染が報告されていて、Flodrix ボットネットと呼ばれています。3 4

初期化しないメモリデータによる難読化

2025年5月の検体には、Command & Control (C2)サーバへの接続に、複雑な仕組みが使われていました。その接続フローは以下のようなものです。

/posts/2025-09/moo-handshake.png

図2. C2 接続フロー

特殊な手法が使われているのが最初のチェックサムで、送信データはほとんどが固定データですが、この C2 接続関数内では、送信データを格納するメモリ領域の一部が初期化されずに使用されています(下図赤枠)。通常このようなコードは該当のメモリ領域の値が不定になり、いわゆる初期化もれによるバグとなりますが、この検体の場合、攻撃者が制御可能な値になります。

/posts/2025-09/checksum.png

図3. 初回送信データ

該当するメモリ領域は、上記の C2 接続関数より前に、下図の C2 サーバの IP アドレスを取得する関数で先に使用されます。ここで、3つ目の IP アドレスをこのメモリ領域に格納したときに、第1オクテットおよび第3オクテットの各先頭2文字が、赤枠の初期化されないメモリアドレスにちょうどあてはまるようになっています。

/posts/2025-09/getip.png

図4. 初期化もれ領域が設定されている場所

このメモリ領域は各関数の内部でローカル変数として使用するスタック領域であるため、本来は赤枠の部分も初期化する必要がありますが、初期化しないことで、別の関数で設定されたデータをそのまま利用しています。

4バイトのチェックサムは、このデコンパイラが考慮できない過去のスタック領域のデータを含めて計算しなければいけないため、コードを見ただけではチェックサムを正しく計算できません。

この複雑な仕組みは、その後すぐに無効化され、使われなくなりました。ただし、複雑なコードは残したまま、ハンドシェイクの状態遷移を一部スキップして接続完了させる形で更新されています。

RapperBotから感染機器を奪ったことをレポート

このボットは競合マルウェアを対象とした killer 関数を持ち、例えば、一般的にマルウェアが広く実施する、自身の実行ファイルを削除するという特徴を利用して、/proc/{pid}/exe(deleted)が含まれる場合、そのプロセスを強制停止させるようになっています。

いくつもある killer 処理の中でも最も注目される機能は、5月から6月の検体に含まれていた、特定の IP アドレスと TCP 接続を確立しているプロセスを検出した場合、そのプロセスを強制停止した後に、専用の ID 番号 5 でレポートサーバに機器情報を送信するというものです。

/posts/2025-09/rapperbotc2.png

図5. ID=5でレポートする接続IPアドレス5件

このIPアドレスは、すべて5月当時まだ活動していた RapperBot の C2サーバであり、レポート ID 番号 5 は明らかに RapperBot から感染機器を奪ったことを意味しています。しかし、一部ネットワークリソースを共有しているケースがあったこともあり、この MooBot を運用していたグループが Ethan Foltz と敵対していたのか、あるいは同一グループ内で botnet を切り替えたことを検出するための機能だったのか、動機は不明です。

TeamSpeak3攻撃ベクタ

C2の監視をした結果(2025年9月10日〜10月6日)、このボットネットの主な攻撃先はロシアであり、特に TeamSpeak3 というボイスチャットプロトコル専用の攻撃ベクタが多いのが特徴的です。

/posts/2025-09/target.png

図6. DoS攻撃先の国別割合と攻撃ベクタ(秒)の分布

/posts/2025-09/ts3.png

図7. TeamSpeak3攻撃ベクタのUDPパケット(C2エミュレートによる)

感染規模

ダウンロードサーバのログデータが公開状態になっていた時期があり、ログによると9月時点の MooBot の感染機器は 3160 台で、国別、および、感染機器の DVR などの名称を示すと推定される引数別の割合は以下の通りです。

/posts/2025-09/moovictim.png

図8. 感染デバイスの統計

このログを出力するダウンロードサーバは、機器によって引数とダウンロードポートを使い分けるという手法で稼働していました。それ以前の固定ポート25565、80を使用する方法とは異なるため、この感染規模は全体の一部であると考えられます。6月にTrend Micro社やCensys社から報告されている、Langflowサーバにおいて使用された引数は無く、DVR やルータをターゲットとした活動で使用されたダウンロード方式のようです。

/posts/2025-09/port2arg.png

図9. ダウンロードポートと引数の変換テーブル

また、変換テーブルの手前にロシア語のコメント文がありますが、このように MooBot ではロシア語圏で開発が行われているように見える痕跡が多く見つかります。

活動の終了

このボットネットは、9月に活動を再開してから約1ヶ月の間に10回以上のマルウェア更新を行い、仕様が定まらないまま、最終的に同じ C2 サーバを使いながらも異なるポートを使用する別のマルウェアに切り替わり、10月7日には 活動を終了しました。この別のマルウェアは、MountBot と同様に/proc/self/proc/1にマウントして自身のプロセスを隠蔽する手法を取り入れていますが、DoS 攻撃コマンドの処理を実装していないなど、まだ作り始めたばかりに見える未完成な状態のものでした。

短期間で活動を終了した理由は分かりませんが、9月から10月にかけて観測した DoS 攻撃の時間帯は、明らかに特定の地域の活動時間帯に偏っており、ロシア語圏で開発されている可能性があることも考慮すると、DDoS サービスを運用していたというよりは、開発、もしくは実験的な活動だったのではないかと推測しています。

/posts/2025-09/hours.png

図10. DoS攻撃の時間帯(UTC)

IoC

マルウェア

SHA256

更新月 ハッシュ値
5月 9dd852b9ddff7e1c2fbaa8e75e2b4905c100de1e83ce999157ece4e797484585
6月 a6cf8124e9b4558aacc7ddfa24b440454b904b937929be203ed088b1040d1b36
9月 b7083abcf87e6192904a08629e2f9e038b712a66132578df76ca9175d80e2841
10月 b622a7b848a9846e2af4f8f985777bb8d095b8eb56d57a502f97d446cfe82e9b

MD5

更新月 ハッシュ値
5月 933d24c8b558a03b7285647875b920d5
6月 0473c6b98ad7273ab3e9a9fb6f00ea54
9月 7f78c49eaa67ce53044712c0aaf5c5f8
10月 c974c2bfb758c06d61030b8af0ce270e

ダウンロードサーバ

更新月 IP
5月 80[.]66[.]75[.]121:25565
6月 同上
9月 80[.]66[.]75[.]121:80
10月 78[.]153[.]140[.]92:80

C2サーバ

更新月 IP / ドメイン
5月 188[.]166[.]68[.]21:54707 206[.]71[.]149[.]179:54707 45[.]61[.]137[.]226:54707
6月 同上
9月 193[.]168[.]196[.]38:60177 5[.]144[.]176[.]160:60177 85[.]209[.]134[.]80:60177
10月 blueblackside[.]com:60177