今年の4月に、「ASUS製WiFiルーターのAiCloud機能の脆弱性を悪用する攻撃に関する注意喚起」1 を報告していますが、その攻撃の中には、これまでに見たことのない、新しいマルウェアへの感染が含まれていました。このマルウェアは、その後も更新されながら活動を続けており、RapperBot と同一のネットワーク基盤を利用しています。最大の特徴は、プロセスディレクトリの mount を行うことにより自らのプロセスを隠蔽する点で、この特徴から、CSRI 解析チームでは MountBot と呼んでいます。この MountBot について、これまでの分析で明らかになった特徴を紹介します。
RapperBotとのつながり
最近になっても RapperBot はその機能を更新し続けていますが、直近に使われた RapperBot を感染させる通信元である Loader サーバと、MountBot の Loader サーバは、同じドイツのホスティングサービスのネットワーク204[.]76[.]203[.]192/27を利用していました。この事から、MountBot は RapperBot と同一のグループ、あるいは間接的につながりのあるグループが構築している可能性が高いと考えられます。
(2025年8月27日追記)
米国司法省の報道2によれば、2025年8月6日に RapperBot 管理者の捜索令状が執行され、RapperBot の攻撃機能は法執行機関の管理下に置かれました。8月7日以降、RapperBot のDoS攻撃コマンドは観測していません。MountBot については現在もDoS攻撃コマンドを観測しています。
プロセスの隠蔽
このマルウェアが行う最も特徴的な処理は、以下のコードです。
mount('/proc/1', '/proc/self', 0, MS_BIND, 0);
この mount 関数は、init プロセスである/proc/1ディレクトリを、自身のプロセスのディレクトリ/proc/{pid}にマウントすることを意味します。({pid}はマルウェアのプロセスID)
実際にLinux環境で試してみると、このコードの効果が分かります。testsample という上記の mount 関数をテストするプログラムを root 権限で実行し、マウントする直前でプログラムを止めると、以下のように ps コマンドで testsample のプロセスが見えています。
しかし、マウントを実行した後には、以下のように testsample のプロセスIDである3619が消えてしまいました。
これは、/proc/3619ディレクトリが、/proc/1ディレクトリでマウントされてしまったことによるもので、/proc/3619ディレクトリを読み出しても、本来のプロセスID3619のファイルは見えず、マウントされている/proc/1ディレクトリの内容しか見ることができません。
この処理は、MountBot が起動するデーモンプロセスやスキャナープロセス、DoS攻撃プロセスなど、あらゆるプロセスにおいて逐次実行されるため、何れのプロセスも ps コマンドでは見えないということになります。このテクニックは、 MITRE ATT&CK で Hide Artifacts: Bind Mounts 3 として定義されている既知のものですが、実例はあまり多く見つかりません。
対策としては、プロセスディレクトリをマウントしているプロセスが無いか、下図のように/proc/mountsを確認するということになります。ちなみに、 MountBot 自身も、自分以外の競合マルウェアが同じ手法を使っていないか、この方法で確認し、見つけた場合はその競合マルウェアを kill するという killer プロセスを備えています。
killer関数
MountBot には複数の killer 関数があります。1つ目は主に Sandbox や解析者に対する killer 関数で、WireShark や QEMU などに関連するプロセスを kill します。
2つ目は、MountBot と同じ手法でプロセスを隠蔽しているプロセスや、実行環境のライブラリファイルを必要としないスタティックリンクでビルドされたプロセスを kill するなど、競合マルウェアを想定した killer 関数で、子プロセスとして常駐します。
3つ目は、コマンドラインを監視し、wget ftp curl echo mount socat nc loginといった文字列を検出するとそのプロセスを kill するという、競合マルウェアと解析者の両方を想定したような killer 関数で、これも常駐します。
3つ目の killer 関数は100mSという短い間隔でコマンドラインを監視するなど、熱心な killer の構成になっており、killer を一切持たない RapperBot とは方針の違いが見られます。
偵察タイプのスキャナー
MountBot も、RapperBot と同様に、スキャナーのタイプによってマルウェアを分けて拡散します。これまでに確認されているタイプは、1) スキャン無し、2) ポート23のみを標的として自動的に感染を広げる Telnet スキャナー付き、3) 標的をHikvisionに特化した偵察タイプのスキャナー付き、の3種類です。
その中でも、偵察タイプのスキャナーの動作は特徴的で、ポート80 81 82 83 85から重みづけなしでランダムに選んだポートを標的とし、接続すると以下のHTTPリクエストを送信します。(2025年9月29日 標的ポート訂正:84削除)
GET / HTTP/1.1
User-Agent: Hello-World/1.0
Connection: keep-alive
Host:<宛先IPアドレス>
このGETリクエストに対して、5種類の特定の文字列の何れかを含む応答を受信した場合のみ、次のステップへ進むようになっています。これは、Hikvision ではない機器との通信を回避するもので、次に送信するエクスプロイトを不用意に検知・分析されないようにする効果を持っています。
次のステップでは、スキャン先のIPアドレスとポート番号をレポートサーバへ送信した上で、CVE-2021-36260 4 の Hikvision の脆弱性を利用したエクスプロイトを使って、シェルコマンドを実行します。このとき、シェルコマンドはマルウェアのダウンロードや実行は一切行わず、iptables コマンドによって、攻撃者が使うネットワーク基盤204[.]76[.]203[.]192/27の一部のIPアドレスのみ(図1参照)をアクセス許可するよう設定し、それが終わったら切断します。感染させることよりも、まずは競合のボットネットに脆弱な機器を奪われないことを優先した処置といえます。
また、この偵察タイプの HTTP スキャンの内容は、GreyNoise の7月の記事「GreyNoise Identifies New Scraper Botnet Concentrated in Taiwan」5 で示されている、3,600件以上のユニークIPアドレスから検出した特徴
Traffic pattern: Repeated GET requests over ports 80-85, evenly distributed.
User-agent: Hello-World/1.0
と一致しており、このマルウェアファミリの感染が広がっている可能性を示しています。
DDoS攻撃の標的
どのスキャナータイプの MountBot も、DoS 攻撃の機能を持っています。Command and Control (C2)サーバとの通信は暗号化された独自プロトコルで行われますが、解読して攻撃コマンドを監視した結果、直近約1か月間(2025年7月16日〜8月8日)の MountBot の攻撃先は RapperBot と同様に中国が多く、50%以上を占めています。4%弱を占める日本の攻撃先の多くはマインクラフト関連で、全体でも、マインクラフトサーバのデフォルトポート番号である25565が、HTTPのポート番号80に次いで2番目に多い攻撃先ポート番号になっており、オンラインゲーム関連サーバを狙ったDDoS攻撃がよく見られます。
下の図は、最も多く攻撃されている中国のAS (Autonomous System)である Shandong eshinton Network Technology の特定のIPアドレスを標的とする攻撃コマンドの回数を、MountBot(緑)と RapperBot(青)で中国標準時の日付で積み上げたプロットです。何れも同じポートへの攻撃で、該当のポートにはオンラインゲーム FiveM に関連すると推定される証明書が設定されていることから、これもゲーミング用途での攻撃のようですが、このように両方のボットネットが同じIPアドレスに同じタイミングで攻撃するケースが確認できており、ネットワーク基盤だけでなく、DDoS攻撃を指示するボットネットユーザーにも共通性が見られます。
まとめ
新しいマルウェアである MountBot について、特に RapperBot との共通点、相違点に主眼を置いて紹介しました。スキャナーのタイプごとにマルウェアを分けたり、偵察タイプのスキャナーを使うという共通点を持ちつつも、プロセスの隠蔽、killer 関数の適用、iptables コマンドの利用など、MountBot だけに見られる機能がいくつかありました。今後も進化を続けているIoTボットネットの監視を継続していきます。
IoC
(2025年8月27日追記)
3行目のタイプを訂正:誤)スキャンなし 正)Telnet
| タイプ | SHA256 |
|---|---|
| スキャンなし | 73bd3005bf6ca29177c64b5825d1132d9e478e32610750cd2ece99581f6580a9 |
| スキャンなし | 3f22bd58469bf1a861a77563b0b534455142adb4706100e42403f08785510bf3 |
| Telnet | 0375cfe0d5d4ae6a433b68e6446ee89c8abb024182d52a1c89eb24f7ea46f136 |
| Telnet | 278433a2ad191eeba235b3f7c6747a9f777a0a275fcc1a5f93b2cb5732f16d1c |
| 偵察 | fc4b814d40c1602ae693c8ddf483b659bbf0b63e301c11a9b4928fea74e01c56 |