Jia Yu ChanSalim Bitam

RONNINGLOADER: DragonBreaths neuer Weg zum PPL-Missbrauch

Elastic Security Labs entdeckt RONINGLOADER, einen mehrstufigen Loader, der die aktualisierte gh0st-RAT-Variante von DragonBreath einsetzt. Die Kampagne nutzt signierte Treiber, Thread-Pool-Injection und PPL-Missbrauch als Waffe, um Defender zu deaktivieren und chinesische EDR-Tools zu umgehen.

28 Minuten LesezeitMalware-Analyse
RONNINGLOADER: DragonBreaths neuer Weg zum PPL-Missbrauch

Einführung

Elastic Security Labs hat eine aktuelle Kampagne identifiziert, bei der eine modifizierte Variante des gh0st RAT, die dem Dragon Breath APT (APT-Q-27) zugeschrieben wird, über trojanisierte NSIS-Installationsprogramme verbreitet wird, die sich als legitime Software wie Google Chrome und Microsoft Teams ausgeben. Die Infektionskette nutzt einen mehrstufigen Übertragungsmechanismus, der verschiedene Ausweichtechniken einsetzt und über zahlreiche Redundanzen verfügt, um auf dem chinesischen Markt verbreitete Endpoint-Sicherheitsprodukte zu neutralisieren. Dazu gehören das Einbringen eines rechtmäßig signierten Treibers, die Bereitstellung benutzerdefinierter WDAC- Richtlinien und die Manipulation der Microsoft Defender-Binärdatei durch Missbrauch der PPL.

Diese Kampagne zielt primär auf chinesischsprachige Nutzer ab und zeigt eine deutliche Weiterentwicklung der Anpassungsfähigkeit im Vergleich zu früheren DragonBreath-bezogenen Kampagnen aus den Jahren 2022-2023. Mit diesem Bericht möchten wir auf die neuen Techniken aufmerksam machen, die diese Malware nun einsetzt, und einen einzigartigen Loader vorstellen, den wir RoningLoader nennen.

Wichtigste Erkenntnisse

  • Die Schadsoftware nutzt einen Fehler in der Funktion „Geschützte Prozessanzeige“ (PPL), um Windows Defender zu deaktivieren.
  • Bedrohungsakteure nutzen einen gültigen, signierten Kernel-Treiber aus, um Prozesse zu beenden.
  • Benutzerdefinierte, unsignierte WDAC-Richtlinie angewendet, um 360 Total Security- und Huorong-Ausführungsdateien zu blockieren
  • Phantom-DLLs und Payload-Injektion über Thread-Pools zur weiteren Beendigung von Antivirenprozessen
  • Die finale Nutzlast enthält kleinere Aktualisierungen und ist mit DragonBreath verknüpft.

Discovery

Im August 2025 wurde eine Studie veröffentlicht, die eine Methode zur Ausnutzung von Protected Process Light (PPL) zur Deaktivierung von Endpoint-Sicherheitstools detailliert beschreibt. Im Anschluss an diese Enthüllung erstellten wir eine Verhaltensregel mit dem Titel „ Potenzielle Umgehung durch ClipUp-Ausführung“ und identifizierten nach einer Bedrohungsanalyse der Telemetriedaten eine laufende Kampagne, die diese Technik einsetzte.

RONNINGLOADER-Codeanalyse

Der erste Infektionsvektor ist ein mit einem Trojaner infiziertes Installationsprogramm, das mithilfe des Nullsoft Scriptable Install System (NSIS) erstellt wurde. NSIS ist ein legitimes Open-Source-Tool zur Erstellung von Windows-Installationsprogrammen, wird aber häufig von Bedrohungsakteuren missbraucht, um Schadsoftware zu verpacken und zu verbreiten, wie man am Beispiel von GULOADER sehen kann. Im Rahmen dieser Kampagne haben wir beobachtet, dass die schädlichen Installationsprogramme unter verschiedenen Vorwänden verbreitet werden und sich als legitime Software wie Google Chrome, Microsoft Teams oder andere vertrauenswürdige Anwendungen ausgeben, um Benutzer zur Ausführung zu verleiten.

Bei der Ausführung fungiert das primäre NSIS-Installationsprogramm als Dropper und enthält zwei zusätzliche eingebettete NSIS-Installationsprogramme. Einer der verschachtelten Installationsprogramme ist harmlos und installiert die legitime Software, während das zweite bösartig ist und für die Auslösung der Angriffskette verantwortlich ist.

Die Angriffskette nutzt einen signierten Treiber namens ollama.sys zur Beendigung des Antivirenprozesses. Der Fahrer hat den Signaturnamen Kunming Wuqi E-commerce Co., Ltd. und ein Zertifikat, das vom 3 Februar , 2025 bis zum 3 Februar , 2026 gültig ist. Eine Analyse von VirusTotal ergab 71 zusätzliche signierte Binärdateien. Unter diesen identifizierten wir AgentTesla-Dropper, die sich als 慕讯公益加速器 (MuXunAccelerator) ausgaben, eine auf Gaming ausgerichtete VPN-Software, die bei chinesischen Nutzern beliebt ist, mit Samples, die bis April 2025 zurückreichen. Auffällig ist, dass die Signiertechniken in den verschiedenen Beispielen variieren. Einige frühere Beispiele, wie inject.sys, enthalten HookSignTool -Artefakte einschließlich der Zeichenkette JemmyLoveJenny, während das Beispiel vom Oktober 2025 ollama.sys keine solchen Artefakte aufweist und Standardsignaturverfahren verwendet, jedoch haben beide die gleiche Gültigkeitsdauer des Zertifikats.

Beim Vergleich des PDB-String-Artefakts D:\VS_Project\加解密\MyDriver1\x64\Release\MyDriver1.pdb von ollama.sysmit anderen Beispielen entdeckten wir unterschiedliche Artefakte im Vergleich zu den anderen eingereichten Beispielen.

  • D:\cpp\origin\ConsoleApplication2\x64\Release\ConsoleApplication2.pdb
  • D:\a_work\1\s\artifacts\obj\coreclr\windows.x86.Release\Corehost.Static\singlefilehost.pdb
  • C:\Users\0\Desktop\EAMap\x64\Release\ttt.pdb
  • h:\projects\netfilter3\bin\Release\Win32\nfregdrv.pdb

Aufgrund der Vielfalt der Binärdateien und der großen Anzahl an Einsendungen vermuten wir, dass das Zertifikat möglicherweise durchgesickert ist, dies ist zum jetzigen Zeitpunkt jedoch reine Spekulation.

Phase 1

Unsere Analyse begann mit der initialen Binärdatei, die durch ihren SHA256-Hash identifiziert wurde: da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50b. Durch das Extrahieren werden zwei eingebettete ausführbare Dateien sichtbar: ein harmloses Installationsprogramm, letsvpnlatest.exe, und das bösartige Installationsprogramm Snieoatwtregoable.exe.

Der bösartige Installer Snieoatwtregoable.exe erstellt ein neues Verzeichnis unter C:\Program Files\Snieoatwtregoable\. In diesem Ordner werden zwei Dateien abgelegt: eine DLL mit dem Namen Snieoatwtregoable.dll und eine verschlüsselte Datei mit dem tp.png.

Der Kern der bösartigen Aktivität befindet sich in Snieoatwtregoable.dll, das eine einzige Funktion exportiert: DllRegisterServer. Bei Aufruf liest diese Funktion den Inhalt der Datei tp.png von der Festplatte und entschlüsselt diese Daten anschließend mit Hilfe eines einfachen Algorithmus, der sowohl eine Rechtsrotation (ROR) als auch eine XOR-Operation beinhaltet.

Der entschlüsselte Inhalt ist Shellcode, der eine PE-Datei im Speicher reflektiert lädt und ausführt. Die Malware reserviert zunächst mithilfe der NtAllocateVirtualMemory -API einen neuen Speicherbereich innerhalb ihres eigenen Prozesses und erstellt dann durch Aufruf von NtCreateThreadEx einen neuen Thread zur Ausführung des Shellcodes.

Die Malware versucht, alle Benutzerland-Hooks zu entfernen, indem sie ein neues ntdll.dll lädt und dann GetProcAddress mit dem API-Namen verwendet, um die Adressen aufzulösen.

Die Schadsoftware versucht, eine Verbindung zu localhost auf Port 5555 herzustellen, ohne dabei einen erkennbaren Zweck zu verfolgen, da das Ergebnis irrelevant ist; vermutlich handelt es sich um toten Code oder Überbleibsel aus der Vorproduktionsphase.

Stage 2 - tp.png

RONINGLOADER prüft zunächst mithilfe der GetTokenInformation API, ob es über administrative Berechtigungen verfügt. Andernfalls versucht es, seine Berechtigungen zu erhöhen, indem es mit dem Befehl runas eine neue, erhöhte Instanz von sich selbst startet, bevor es den ursprünglichen Prozess beendet.

Interessanterweise versucht die Malware, mit einer fest codierten URL http://www.baidu.com/ und dem User-Agent “Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko” zu kommunizieren. Dabei handelt es sich jedoch anscheinend um toten Code, wahrscheinlich aufgrund einer entfernten Funktion oder eines Platzhaltercodes für zukünftige Versionen. Es dient dazu, die Daten aus dem HTTP-Antwortheader der URL zu extrahieren und zu protokollieren.

Anschließend durchsucht die Schadsoftware eine Liste laufender Prozesse nach spezifischen Antivirenlösungen. Es gleicht eine Liste fest codierter Prozessnamen ab und setzt ein entsprechendes boolesches Flag auf "True", falls ein Prozess gefunden wird.

Nachfolgend eine Tabelle der Prozesse und der zugehörigen, im Binärcode fest codierten Sicherheitsprodukte:

ProzessnameSicherheitsprodukt
MsMpEng.exeMicrosoft Defender Antivirus
kxemain.exeKingsoft Internet Security
kxetray.exeKingsoft Internet Security
kxecenter.exeKingsoft Internet Security
QQPCTray.exeTencent PC Manager
QQPCRTP.exeTencent PC Manager
QMToolWidget.exeTencent PC Manager
HipsTray.exeQihoo 360 Totale Sicherheit
HipsDaemon.exeQihoo 360 Totale Sicherheit
HipsMain.exeQihoo 360 Totale Sicherheit
360tray.exeQihoo 360 Totale Sicherheit

AV-Prozessbeendigung durch injizierten Remote-Prozess

Anschließend beendet die Schadsoftware diese Prozesse. Interessanterweise verfolgt das Qihoo 360 Total Security-Produkt einen anderen Ansatz als die anderen.

Zunächst wird durch Änderung der Firewall die gesamte Netzwerkkommunikation blockiert. Anschließend wird eine Funktion aufgerufen, um Shellcode in den Prozess (vssvc.exe) einzuschleusen, der mit dem Volume Shadow Copy (VSS)-Dienst verknüpft ist.
Es verleiht sich zunächst das Token mit hoher Integrität SeDebugPrivilege .

Anschließend wird der VSS (Volume Shadow Copy Service) gestartet, falls dieser noch nicht läuft, und die PID des zugehörigen Prozesses (vssvc.exe) wird abgerufen.

Anschließend verwendet die Malware NtCreateSection , um zwei separate Speicherbereiche zu erstellen. Anschließend werden Ansichten dieser Abschnitte in den Speicherbereich des vssvc.exe-Prozesses abgebildet. Der erste Abschnitt enthält eine vollständige Portable Executable (PE)-Datei, die ein Treiber mit dem Gerätenamen \\.\Ollama ist. Der zweite Abschnitt enthält Shellcode, der zur Ausführung bestimmt ist.

RONINGLOADER verfolgt bei der Prozessinjektion einen anderen Ansatz als bei anderen Injektionsmethoden, die an anderer Stelle in der Malware verwendet werden. Diese Technik nutzt den Thread-Pool, um Code über einen Dateischreibtrigger im Remote-Prozess remote auszuführen. Diese Technik wurde von SafeBreach in 2023 mit verschiedenen Varianten dokumentiert.

Nach der Ausführung beginnt der Shellcode damit, dynamisch die Adressen der Windows-APIs aufzulösen, die er zum Funktionieren benötigt. Dies ist der einzige Teil von RONNINGLOADER, der eine Verschleierung verwendet, nämlich den Fowler-Noll-Vo-Hash- Algorithmus (FNV), um Funktionen anhand ihres Hashwerts anstatt ihres Namens nachzuschlagen.

Zuerst werden die Adressen von CreateFileW, WriteFile und CloseHandle abgerufen, um den Treiber auf der Festplatte unter einem fest codierten Pfad, C:\windows\system32\drivers\1912763.temp, zu schreiben.

Anschließend werden folgende Operationen durchgeführt:

  • Erstellen Sie einen Dienst namens xererre1 , um den auf die Festplatte gelegten Treiber zu laden.
  • Für jeden der folgenden Prozesse (360Safe.exe, 360Tray.exe und ZhuDongFangYu.exe), die alle mit der Qihoo-Software 360 verknüpft sind, werden 2 Funktionen aufgerufen: eine Funktion zum Ermitteln der Prozess-ID (PID) anhand des Prozessnamens, gefolgt von einer Funktion zum Beenden des Prozesses anhand der PID.
  • Anschließend wird der Dienst beendet und gelöscht. xererre1

Um einen Prozess zu beenden, nutzt die Schadsoftware den Treiber. Eine Analyse des Treibers zeigt, dass er nur die Funktionalität 1 registriert: Er verarbeitet eine IOCTL-ID (0x222000), die eine PID als Parameter nimmt und den Prozess beendet, indem er ihn zuerst mit ZwOpenProcess öffnet und ihn dann mit ZwTerminateProcess Kernel-APIs beendet.

AV-Prozessbeendigung

Nach der Rückkehr zum Hauptausführungsablauf tritt die Malware in eine Schleife ein, um die Beendigung von 360tray.exe zu bestätigen, wie sie vom in den VSS-Dienst eingeschleusten Shellcode behandelt wird. Es wird erst fortgesetzt, nachdem sichergestellt wurde, dass der Prozess nicht mehr läuft. Unmittelbar nach dieser Bestätigung stellt das System seine Firewall-Einstellungen wieder her. Bei dieser Aktion handelt es sich wahrscheinlich um eine Abwehrmaßnahme, die darauf abzielt, den Kommunikationskanal der Software zu unterbrechen und so zu verhindern, dass sie abschließende Aktivitätsprotokolle oder Sicherheitswarnungen an ihre Backend-Dienste hochlädt.

Anschließend werden die übrigen Sicherheitsprozesse direkt vom Hauptprozess aus beendet. Bemerkenswerterweise wird nicht versucht, diese Aktionen zu verbergen; stattdessen wird die frühere API-Hashing-Technik aufgegeben und die notwendigen Funktionen direkt aufgerufen.

RONIC LOADER befolgt ein konsistentes, wiederholbares Verfahren, um seine Zielprozesse zu beenden:

  • Zuerst wird der schädliche Treiber auf die Festplatte geschrieben, diesmal auf den temporären Pfad. C:\Users\analysis\AppData\Local\Temp\ollama.sys.
  • Es wird ein temporärer Dienst (ollama) erstellt, um ollama.sys in den Kernel zu laden.
  • Anschließend ermittelt die Malware die Prozess-ID (PID) des Zielprozesses anhand seines Namens und sendet eine Anfrage mit der PID an dessen Treiber, um die Beendigung durchzuführen.
  • Unmittelbar nach dem Absenden des Kill-Befehls wird der Dienst gelöscht.

Bezüglich Microsoft Defender versucht die Malware, den MsMpEng.exe -Prozess mit der gleichen Methode zu beenden, die oben beschrieben wurde. Uns ist ein Fehler im Code des Autors aufgefallen: Bei Microsoft Defender prüft der Code nicht, ob Defender bereits ausgeführt wird, sondern sucht direkt nach dem Prozess MsMpEng.exe . Das bedeutet, dass die Malware, falls der Prozess nicht ausgeführt wird, 0 als PID an den Treiber sendet.

Die Schadsoftware enthält redundanten Code, um Prozesse von Sicherheitslösungen zu unterbrechen. Außerdem wird ein weiterer Shellcode in svchost.exe injiziert. ähnlich dem, was in vssvc.exe injiziert wurde, aber die Liste der Prozesse ist anders, wie im folgenden Screenshot zu sehen ist.

Die Injektionstechnik verwendet ebenfalls Threadpools, der injizierte Code wird jedoch durch ein Ereignis ausgelöst.

Nach Beendigung des Prozesses erstellt die Malware 4 -Ordner.

  • C:\ProgramData\lnk
  • C:\ProgramData\<current_date>
  • C:\Users\Public\Downloads\<current_date>
  • C:\ProgramData\Roning

Eingebettete Archive

Anschließend schreibt die Malware drei .txt -Dateien nach C:\Users\Public\Downloads\<current_date>. Trotz ihrer Dateiendung handelt es sich nicht um Textdateien, sondern um Container, die in einem bestimmten Format erstellt wurden und wahrscheinlich von einer anderen Codebasis übernommen wurden.
Diese benutzerdefinierte Dateistruktur ist wie folgt aufgebaut:

  • Magic Bytes: Die Datei beginnt zur Identifizierung mit der Signatur 4B 44 01 00 .
  • Dateianzahl: Unmittelbar darauf folgt ein Wert, der die Anzahl der im Container enthaltenen Dateien angibt.
  • Dateimetadaten: Ein Kopfzeilenabschnitt beschreibt anschließend die Informationen für jede gespeicherte Datei.
  • Komprimierte Daten: Schließlich wird jede eingebettete Datei in einem ZLIB-komprimierten Datenblock gespeichert.

Hier ist ein Beispiel für das Dateiformat von hjk.txt archive, das 2 -Dateien enthält: 1.bat und fhq.bat.
Dieses Archivformat gilt für 2 weitere eingebettete Dateien in der aktuellen Phase:

  • agg.txt, das 3 Dateien enthält - Enpug.bin, goldendays.dll, und trustinstaller.bin
  • kill.txt, die die Datei 1 enthält - 1.dll

Batch-Skripte zum Umgehen von UAC und AV-Netzwerken

1.bat ist ein einfaches Batch-Skript, das die Benutzerkontensteuerung (UAC) deaktiviert, indem der Registrierungswert EnableLUA auf 0 gesetzt wird.

fhq.bat ist ein weiteres Batch-Skript, das auf das in C:\ProgramData\lnk\123.txt definierte Programm und die Qihoo 360 Sicherheitssoftware (360Safe.exe) abzielt. durch die Erstellung von Firewall-Regeln, die eingehende und ausgehende Verbindungen zu ihnen blockieren. Außerdem werden Firewall-Benachrichtigungen für alle Profile deaktiviert.

Beendigung des AV-Prozesses über Phantom-DLL

Die bereitgestellte DLL, 1.dll, wird nach C:\Windows\System32\Wow64\Wow64Log.dll kopiert, um von allen WOW64-Prozessen per Sideloading geladen zu werden, da Wow64Log.dll eine Phantom-DLL ist, die auf Windows-Rechnern standardmäßig nicht vorhanden ist. Seine Aufgabe ist redundant, da er im Wesentlichen versucht, eine Liste von Prozessen mithilfe von Standard-Windows-APIs zu beenden (TerminateProcess).

ClipUp MS Defender-Killer

Anschließend versucht die Malware, eine von Zero Salarium im August 2025 dokumentierte PPL-Missbrauchstechnik anzuwenden. Der im Artikel beschriebene Proof of Concept zielt ausschließlich auf Microsoft Defender ab. Beachten Sie, dass alle Systembefehle über cmd.exe mit der ShellExecuteW -API ausgeführt werden.

  • Es sucht unter C:\ProgramData\Microsoft\Windows Defender\Platform\* nach dem Installationsordner von Microsoft Defender und berücksichtigt dabei nur das Verzeichnis mit dem aktuellsten Änderungsdatum, welches die aktuell verwendete Version angibt.
  • Erstellen Sie einen Ordner C:\ProgramData\roming und einen Verzeichnislink mit mklink , der auf das mit dem folgenden Befehl gefundene Verzeichnis verweist: cmd.exe /c mklink /D "C:\ProgramData\roming" “C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.25050.5-0”
  • Anschließend wird C:\Windows\System32\ClipUp.exe mit dem folgenden Parameter ausgeführt: -ppl C:\ProgramData\roming\MsMpEng.exe, wodurch MsMpEng.exe mit fehlerhaften Daten überschrieben wird und die EDR somit auch nach einem Neustart deaktiviert wird.

Der Autor scheint Code von EDR-Freeze kopiert zu haben, um ClipUp.exe zu starten.

CiPolicies

Die Malware zielt direkt auf Windows Defender Application Control (WDAC) ab, indem sie eine Richtliniendatei in den Pfad C:\\Windows\\System32\\CodeIntegrity\\CiPolicies\\Active\\{31351756-3F24-4963-8380-4E7602335AAE}.cip schreibt.

Die schädliche Richtlinie arbeitet im „Sperrlisten“-Modus, wodurch die meisten Anwendungen ausgeführt werden können, während zwei beliebte chinesische Antivirenhersteller explizit blockiert werden:

  • Qihoo 360 Totale Sicherheit durch Blockierung 360rp.exe und 360sd.exe
  • Huorong Security durch Blockierung ARPProte.exe
  • Alle ausführbaren Dateien wurden von Huorong Security (北京火绒网络科技有限公司) über den Zertifikats-TBS-Hash A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4signiert.

Eine entscheidende Komponente ist die Enabled:Unsigned System Integrity Policy -Regel, die es ermöglicht, die Richtlinie auch ohne gültige digitale Signatur zu laden.

Truncated...
    <Rule>
      <Option>Enabled:Inherit Default Policy</Option>
    </Rule>
    <Rule>
      <Option>Enabled:Unsigned System Integrity Policy</Option>
    </Rule>
    <Rule>
      <Option>Enabled:Advanced Boot Options Menu</Option>
    </Rule>
    <Rule>
      <Option>Enabled:Update Policy No Reboot</Option>
    </Rule>
  </Rules>
  <EKUs />
  <FileRules>
    <Allow ID="ID_ALLOW_A_019A298478CE7BF4902DE08CA2D17630" FileName="*" />
    <Allow ID="ID_ALLOW_A_019A298478CE7AB089C369772F34B39B" FileName="*" />
    <Deny ID="ID_DENY_A_019A298478CE7DBA9913BFC227DACD14" FileName="360rp.exe" InternalName="360rp.exe" FileDescription="360杀毒 实时监控" ProductName="360杀毒" />
    <Deny ID="ID_DENY_A_019A298478CE763C85C9F42EC8669750" FileName="360sd.exe" InternalName="360sd.exe" FileDescription="360杀毒 主程序" ProductName="360杀毒" />
    <FileAttrib ID="ID_FILEATTRIB_A_019A298478CE766B9C39FB9CE6805A11" FileName="ARPProte.exe" MinimumFileVersion="6.0.0.0" />
  </FileRules>
  <Signers>
    <Signer ID="ID_SIGNER_A_019A298478CE7608908CAE58FD9C3D8E" Name="">
      <CertRoot Type="TBS" Value="A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4" />
      <CertPublisher Value="北京火绒网络科技有限公司" />
      <FileAttribRef RuleID="ID_FILEATTRIB_A_019A298478CE766B9C39FB9CE6805A11" />
    </Signer>
    <Signer ID="ID_SIGNER_A_019A298478CE77F7B523D1581F518639" Name="">
      <CertRoot Type="TBS" Value="A229D2722BC6091D73B1D979B81088C977CB028A6F7CBF264BB81D5CC8F099F87D7C296E48BF09D7EBE275F5498661A4" />
      <CertPublisher Value="北京火绒网络科技有限公司" />
    </Signer>
  </Signers>
...Truncated

Stufe 3 - goldendays.dll

Im vorherigen Schritt erstellt RONINGLOADER einen neuen Dienst mit dem Namen MicrosoftSoftware2ShadowCop4yProvider , um den nächsten Ausführungsschritt mit dem folgenden Befehl auszuführen: regsvr32.exe /S "C:\ProgramData\Roning\goldendays.dll.

Das Hauptziel dieser Komponente ist es, die nächste Nutzlast in einen legitimen, privilegierten Systemprozess einzuschleusen, um dessen Aktivitäten zu verschleiern.

Um dies zu erreichen, identifiziert RONNINGLOADER zunächst einen geeigneten Zielprozess. Es enthält eine fest codierte Liste mit zwei Dienstnamen, die es nacheinander zu starten versucht:

  1. TrustedInstaller (TrustedInstaller.exe)
  2. MicrosoftEdgeElevationService (elevation_service.exe)

Die Schadsoftware durchläuft diese Liste und versucht, jeden Dienst zu starten. Sobald ein Dienst erfolgreich gestartet wurde oder falls ein bereits laufender Dienst gefunden wird, speichert die Malware seine Prozess-ID (PID) für die Injektionsphase.

Anschließend etabliert die Malware Persistenz, indem sie eine Batch-Datei mit einem zufälligen Namen im Verzeichnis C:\Windows\ erstellt (z. B. C:\Windows\KPeYvogsPm.bat). Das Skript in dieser Datei läuft in einer Endlosschleife mit folgender Logik:

  • Es prüft, ob die erfasste Prozess-ID (PID) des vertrauenswürdigen Dienstes (z. B. PID 4016 für TrustedInstaller.exe) noch ausgeführt wird.
  • Falls der Dienst nicht ausgeführt wird, startet das Skript den zuvor erstellten schädlichen Dienst (MicrosoftSoftware2ShadowCop4yProvider) neu, um sicherzustellen, dass die Komponenten der Schadsoftware aktiv bleiben.
  • Wenn der Dienstprozess läuft, wartet das Skript 10 Sekunden, bevor es erneut prüft.

Schließlich liest die Malware den Inhalt von C:\ProgramData\Roning\trustinstaller.bin. Unter Verwendung der PID des zuvor erworbenen vertrauenswürdigen Dienstes injiziert es diese Nutzlast in den Zielprozess (TrustedInstaller.exe oder elevation_service.exe). Die Injektionsmethode ist unkompliziert: Sie führt eine virtuelle Remote-Allokation mit VirtualAllocEx durch, schreibt mit WriteProcessMemory in diese und erstellt dann mit CreateRemoteThread einen Remote-Thread, um sie auszuführen.

Phase 3 - trustinstaller.bin

Die dritte Stufe, die in trustinstaller.bin enthalten ist, ist dafür verantwortlich, die endgültige Nutzlast in einen legitimen Prozess einzuschleusen. Zunächst werden die laufenden Prozesse aufgelistet und anschließend wird nach einem Ziel gesucht, indem die Prozessnamen mit einer fest codierten Liste potenzieller Prozesse abgeglichen werden.

Wenn es gefunden wird, wird der Shellcode in C:\ProgramData\Roning\Enpug.bin injiziert, was die endgültige Nutzlast darstellt. Es wird einen Abschnitt mit NtCreateSection erstellen, eine Ansicht davon im Remote-Prozess mit NtMapViewOfSection abbilden und die Nutzlast hineinschreiben. Dann wird ein Remote-Thread mit CreateRemoteThread erstellt.

Phase 4 - Endgültige Nutzlast

Die endgültige Nutzlast hat seit der Entdeckung einer DragonBreath-Kampagne durch Sophosin 2023 und dem Bericht von QianXin Mitte 2022 keine wesentlichen Änderungen erfahren. Es handelt sich immer noch um eine modifizierte Version des Open-Source-RAT gh0st .

In den neueren Kampagnen wird ganz zu Beginn der Ausführung ein Mutex mit dem Wert Global\DHGGlobalMutex erstellt. Außerhalb der Hauptkommunikationsschleife C2 wird toter Code beobachtet, der einen Mutex mit der Bezeichnung MyUniqueMutexName erzeugt und ihn anschließend sofort wieder zerstört.

Die C2-Domäne und der Port bleiben fest codiert, sind aber jetzt XOR-verschlüsselt. Der C2-Kanal arbeitet über unverschlüsselte TCP-Sockets, wobei die Nachrichten in beide Richtungen verschlüsselt sind.

Opfer-Beacon-Daten

Das Implantat meldet sich beim C2-Server und sendet in zufälligen Abständen wiederholt ein Beacon an den C2-Server, implementiert durch Sleep(<random_amount> * 1000). Nachfolgend ist die Struktur der Daten dargestellt, die das Implantat während des Beaconing-Intervalls an den C2-Server zurücksendet:

struct BeaconData {
    // +0x000
    uint32_t message_type;           // Example Beacon ID - 0xC8 (200)
    
    // +0x004
    uint32_t local_ip;               // inet_addr() of victim's IP
    
    // +0x008
    char hostname[50];               // Computer name or registry "Remark"
    
    // +0x03A
    char windows_version[?];         // OS version info
    
    // +0x0D8
    char cpu_name[64];               // Processor name
    
    // +0x118
    uint32_t entry_rdx;              
    
    // +0x11C
    char time_value[64];             // Implant installed time or registry "Time" value
    
    // +0x15C
    char victim_tag[39];             // Command 6 buffer (Custom victim tag)
    
    // +0x183
    uint8_t is_wow64;                // 1 if 32-bit on 64-bit Windows
    
    // +0x184
    char av_processes_found[128];    // Antivirus processes found
    
    // +0x204
    char uptime[12];                 // System uptime

    char padding[52];                 
    
    // +0x244
    char crypto_wallet_track[64];    // "狐狸系列" (MetaMask) or registry "ZU" (crypto related tracking)
    
    // +0x284
    uint8_t is_admin;                // 1 if running with admin rights
    
    // +0x285
    char data[?];             
    
    // +0x305
    uint8_t telegram_installed;      // 1 if Telegram installed
    
    // +0x306
    uint8_t telegram_running;        // 1 if Telegram.exe running
    
    // +0x307
    // (padding to 0x308 bytes)
};

C2-Befehle

Die vom C2-Server an das Implantat gesendeten Anforderungsnachrichten folgen folgender Struktur:

struct C2_to_implant_msg {
    uint32_t total_message_len;
    uint32_t RC4_key;
    char encrypted_command_id;
    uint8_t encrypted_command_args;
};

Das Implantat entschlüsselt C2-Nachrichten anhand der folgenden Formel:

RC4_decrypt(ASCII(decimal(RC4_key)), encrypted_command_id || command)

Nachfolgend finden Sie eine Liste der verfügbaren Befehle, die größtenteils seit 2 Jahren unverändert geblieben sind:

Befehls-IDBeschreibung
0ExitWindowsEx über eine bereitgestellte EXIT_WINDOWS_FLAGS
1Implantat ordnungsgemäß beenden
2Setzen Sie den Registrierungsschlüssel Enable auf „False“, um das Implantat dauerhaft zu beenden und zu deaktivieren.
3Registrierungsschlüssel Remark für benutzerdefinierte Opferumbenennung festlegen (Standardwert: Hostname)
4Registrierungsschlüssel ZU für MetaMask-/Krypto-bezogene Tags festlegen
5Windows-Ereignisprotokolle löschen (Anwendung, Sicherheit, System)
6Legen Sie zusätzliche benutzerdefinierte Tags fest, wenn Client-Beacons
7Datei über die angegebene URL herunterladen und ausführen
9ShellExecute (sichtbares Fenster)
10ShellExecute (verstecktes Fenster)
112Daten aus der Zwischenablage abrufen
113Daten in der Zwischenablage festlegen
125ShellExecute cmd.exe mit Befehlsparametern (ausgeblendetes Fenster)
126Nutzdaten durch Speichern auf der Festplatte ausführen oder reflektierend laden und ausführen PluginMe Export
128Erste Option – eine neue Sitzung mit einer angegebenen C2-Domäne, einem Port und einem Beacon-Intervall öffnen. Zweite Option – den Registrierungsschlüssel CopyC setzen, um die C2-Domäne und den Port dauerhaft zu aktualisieren. Verschlüsselt gespeichert über Base64Encode(XOR(C2_domain_and_port, 0x5)).
241Prüfen Sie, ob Telegram installiert ist und/oder ausgeführt wird.
243Zwischenablage-Hijacker konfigurieren
101, 127, 236, [...]Benutzerdefinierte Shellcode-Injektion in svchost.exe unter Verwendung der WTS-Sitzungstoken-Identitätswechsel, wobei auf die Prozessinjektion in CREATE_SUSPENDED über CreateRemoteThreadzurückgegriffen wird.

Anmerkung des Analysten: Es gibt mehrere Befehls-IDs, die auf denselben Befehl verweisen. Wir verwendeten Auslassungspunkte, um zu kennzeichnen, wann dies beobachtet wurde.

Systemprotokollierer

Zusätzlich zu den C2-Befehlen implementiert das Implantat einen Tastatur-, Zwischenablage- und Fensterprotokollierer. Die erfassten Daten werden in %ProgramData%\microsoft.dotnet.common.log geschrieben und können über einen Registrierungsschlüssel bei HKEY_CURRENT_USER\offlinekey\open aktiviert oder deaktiviert werden (1 zum Aktivieren, 0 zum Deaktivieren). Die Protokolldatei verfügt über eine automatische Rotation und löscht sich selbst, sobald sie 50 MB überschreitet, um eine Erkennung durch übermäßige Festplattennutzung zu vermeiden.

Der untenstehende Codeausschnitt demonstriert die Initialisierungsroutine, die die Protokollrotation implementiert und eine DirectInput8-Schnittstelle konfiguriert, um das Tastaturgerät für die Ereigniserfassung zu erfassen, gefolgt von der Logik zum Abrufen von Tastaturereignissen.

Anschließend durchläuft die Malware eine Überwachungsschleife, um drei Kategorien von Informationen zu erfassen.

  • Zunächst überwacht es die Zwischenablage mit OpenClipboard und GetClipboardData und protokolliert alle Änderungen am Textinhalt mit dem Präfix [剪切板:].
  • Zweitens verfolgt es Fensterfokusänderungen über GetForegroundWindow und protokolliert den Titel und den Zeitstempel des aktiven Fensters mit den Präfixen [标题:] bzw. [时间:], sobald der Benutzer die Anwendung wechselt.
  • Drittens ruft es gepufferte Tastaturereignisse vom Gerät DirectInput8 ab (bis zu 60 Ereignisse pro Abfrage) und übersetzt sie mithilfe einer Zeichenzuordnungstabelle in lesbaren Text, wobei den Ergebnissen das Präfix [内容:] vorangestellt wird.

Zwischenablage-Hijacker

Die Malware implementiert außerdem einen Clipboard-Hijacker, der über die C2-Befehls-ID 243 fernkonfiguriert wird. Es überwacht Änderungen in der Zwischenablage und führt Such- und Ersetzungsoperationen an erfasstem Text durch, wobei vom Angreifer definierte Zeichenketten durch Ersetzungswerte ersetzt werden. Die Konfigurationsparameter werden in der Registrierung unter HKEY_CURRENT_USER\offlinekey mit den Schlüsseln clipboard (Funktion aktivieren/deaktivieren), charac (Suchzeichenfolge), characLen (Suchlänge) und newcharac (Ersetzungszeichenfolge) gespeichert.

Es registriert eine Fensterklasse mit dem Namen ClipboardListener_Class_Toggle und erstellt ein verstecktes Fenster mit dem Titel ClipboardMonitor , um Benachrichtigungen über Änderungen in der Zwischenablage zu empfangen. Die Fensterprozedur verarbeitet WM_CLIPBOARDUPDATE (0x31D) Nachrichten, indem sie die Sequenznummern der Zwischenablage mit GetClipboardSequenceNumber überprüft, um echte Änderungen zu erkennen, und dann die Kernmanipulationsroutine aufruft, die den Inhalt der Zwischenablage über EmptyClipboard und SetClipboardData austauscht.

Malware und 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.

Taktiken

Taktiken stellen das Warum einer Technik oder Untertechnik dar. Es ist das taktische Ziel des Gegners: der Grund für die Ausführung einer Aktion.

Techniken

Techniken stellen dar, wie ein Angreifer ein taktisches Ziel erreicht, indem er eine Aktion ausführt.

Gegenmaßnahmen

Erkennung

YARA

Elastic Security hat YARA-Regeln erstellt, um diese Aktivität zu identifizieren. Nachfolgend die YARA-Regeln zur Identifizierung von RONINGLOADER und des endgültigen Implantats:

Beobachtungen

Die folgenden Observablen wurden in dieser Studie diskutiert.

ÜberwachbarTypNameReferenz
da2c58308e860e57df4c46465fd1cfc68d41e8699b4871e9a9be3c434283d50bSHA-256klklznuah.msiErster NSIS-Installer
82794015e2b40cc6e02d3c1d50241465c0cf2c2e4f0a7a2a8f880edaee203724SHA-256Snieoatwtregoable.exeSchädliches Installationsprogramm aus dem ursprünglichen Installationsprogramm entpackt
c65170be2bf4f0bd71b9044592c063eaa82f3d43fcbd8a81e30a959bcaad8ae5SHA-256Snieoatwtregoable.dllStufe 1 - Lader für Stufe 2
2515b546125d20013237aeadec5873e6438ada611347035358059a77a32c54f5SHA-256ollama.sysPhase 2 - Treiber für die Prozessbeendigung
1613a913d0384cbb958e9a8d6b00fffaf77c27d348ebc7886d6c563a6f22f2b7SHA-256tp.pngPhase 2 - verschlüsselte Kernnutzlast
395f835731d25803a791db984062dd5cfdcade6f95cc5d0f68d359af32f6258dSHA-2561.batPhase 2 - UAC-Umgehungsskript
1c1528b546aa29be6614707cbe408cb4b46e8ed05bf3fe6b388b9f22a4ee37e2SHA-256fhq.batPhase 2 - Skript zum Blockieren der Netzwerkverbindung für AV-Prozesse
4d5beb8efd4ade583c8ff730609f142550e8ed14c251bae1097c35a756ed39e6SHA-2561.dllStufe 2 – Beendigung des AV-Prozesses
96f401b80d3319f8285fa2bb7f0d66ca9055d349c044b78c27e339bcfb07cdf0SHA-256{31351756-3F24-4963-8380-4E7602335AAE}.cipStufe 2 - WDAC-Richtlinie
33b494eaaa6d7ed75eec74f8c8c866b6c42f59ca72b8517b3d4752c3313e617cSHA-256goldendays.dllStufe 3 - Einstiegspunkt
fc63f5dfc93f2358f4cba18cbdf99578fff5dac4cdd2de193a21f6041a0e01bcSHA-256trustinstaller.binStufe 3 - Lader für Enpug.bin
fd4dd9904549c6655465331921a28330ad2b9ff1c99eb993edf2252001f1d107SHA-256Enpug.binStufe 3 - Lader für die endgültige Nutzlast
3dd470e85fe77cd847ca59d1d08ec8ccebe9bd73fd2cf074c29d87ca2fd24e33SHA-2566uf9i.exePhase 4 - endgültige Nutzlast
qaqkongtiao[.]comDomain-NamePhase 4 - endgültige Nutzlast C2

Referenzen

In der obigen Studie wurde auf Folgendes Bezug genommen: