Unter der SADBRIDGE mit GOSAR: QUASAR bekommt ein Golang-Rewrite

Die Elastic Security Labs veröffentlichen Details über den SADBRIDGE-Loader und die GOSAR-Backdoor, Malware, die in Kampagnen gegen chinesischsprachige Opfer verwendet wird.

30 Minuten LesezeitMalware-Analyse
Unter der SADBRIDGE mit GOSAR: QUASAR erhält eine Golang-Überarbeitung

Einführung

Elastic Security Labs hat kürzlich einen neuen Eindringling beobachtet, der auf chinesischsprachige Regionen abzielt und als REF3864 verfolgt wird. Diese organisierten Kampagnen zielen auf die Opfer ab, indem sie sich als legitime Software wie Webbrowser oder Social-Media-Messaging-Dienste ausgeben. Die Bedrohungsgruppe hinter diesen Kampagnen zeigt ein moderates Maß an Vielseitigkeit bei der Verbreitung von Malware über mehrere Plattformen wie Linux, Windows und Android. Bei dieser Untersuchung entdeckte unser Team eine einzigartige Windows-Infektionskette mit einem benutzerdefinierten Loader, den wir SADBRIDGE nennen. Dieser Loader stellt eine Golang-basierte Neuimplementierung von QUASAR bereit, die wir als GOSAR bezeichnen. Dies ist das erste Mal, dass unser Team eine Neufassung von QUASAR in der Programmiersprache Golang beobachtet.

Wichtigste Erkenntnisse

  • Laufende Kampagnen, die sich an chinesischsprachige Personen richten, mit bösartigen Installationsprogrammen, die sich als legitime Software ausgeben, wie Telegram und der Webbrowser Opera.
  • Infektionsketten verwenden Injektion und DLL-Sideloading mit einem benutzerdefinierten Loader (SADBRIDGE)
  • SADBRIDGE setzt eine neu entdeckte Variante der QUASAR-Backdoor ein, die in Golang (GOSAR) geschrieben ist
  • GOSAR ist eine multifunktionale Backdoor, die sich in aktiver Entwicklung befindet, mit unvollständigen Funktionen und Iterationen verbesserter Funktionen, die im Laufe der Zeit beobachtet wurden
  • Elastic Security bietet umfassende Präventions- und Erkennungsfunktionen gegen diese Angriffskette

REF3864 Kampagnenübersicht

Im November beobachtete das Team von Elastic Security Labs eine einzigartige Infektionskette bei der Detonation mehrerer verschiedener Proben, die auf VirusTotal hochgeladen wurden. Diese verschiedenen Beispiele wurden über Landing Pages gehostet, die sich als legitime Software tarnten, wie z. B. Telegram oder der Opera GX-Browser.

Während dieser Untersuchung haben wir mehrere Infektionsketten mit ähnlichen Techniken aufgedeckt:

  • Trojanisierte MSI-Installationsprogramme mit geringen Erkennungen
  • Maskierung mit legitimer Software, die mit bösartigen DLLs gebündelt ist
  • Kundenspezifischer SADBRIDGE-Loader im Einsatz
  • Endstufe GOSAR geladen

Wir glauben, dass diese Kampagnen aufgrund mehrerer Abstraktionsebenen unter dem Radar geflogen sind. In der Regel umfasst die erste Phase das Öffnen einer Archivdatei (ZIP), die ein MSI-Installationsprogramm enthält. Legitime Software wie die Windows x64dbg.exe Debugging-Anwendung wird im Hintergrund verwendet, um eine bösartige, gepatchte DLL (x64bridge.dll) zu laden. Diese DLL startet ein neues legitimes Programm (MonitoringHost.exe), bei dem sie eine andere bösartige DLL (HealthServiceRuntime.dll) von der Seite lädt, um schließlich eine Injektion durchzuführen und das GOSAR-Implantat per Injektion in den Speicher zu laden.

Malware-Forscher extrahierten SADBRIDGE-Konfigurationen, die vom Angreifer festgelegte Kampagnendaten offenbaren und darauf hinweisen, dass Operationen mit ähnlichen TTPs seit mindestens Dezember 2023 im Gange sind. Die Command-and-Control-Infrastruktur (C2) für GOSAR tarnt sich oft unter vertrauenswürdigen Diensten oder Software, um harmlos zu erscheinen und den Erwartungen der Opfer an Softwareinstallateure zu entsprechen. Während der gesamten Ausführungskette liegt der Schwerpunkt auf der Aufzählung chinesischer AV-Produkte wie 360tray.exesowie der Namen und Beschreibungen von Firewallregeln in chinesischer Sprache. Aufgrund dieser Anpassungen glauben wir, dass diese Bedrohung auf chinesischsprachige Personen ausgerichtet ist. Darüber hinaus deutet die umfangreiche Verwendung der Protokollierung in chinesischer Sprache darauf hin, dass die Angreifer auch Chinesisch sprechen.

QUASAR wurde bereits seit 2017 bei staatlich geförderter Spionage, nichtstaatlichem Hacktivismus und kriminellen finanziell motivierten Angriffen eingesetzt (Qualys, Evolution of Quasar RAT), unter anderem von der mit China verbundenen APT10. Eine Neufassung in Golang könnte von institutionellem Wissen profitieren, das in diesem Zeitraum erworben wurde, und zusätzliche Fähigkeiten ohne umfangreiche Umschulung von zuvor effektiven TTPs ermöglichen.

GOSAR erweitert QUASAR um zusätzliche Funktionen zum Sammeln von Informationen, Unterstützung für mehrere Betriebssysteme und eine verbesserte Umgehung von Antivirenprodukten und Malware-Klassifikatoren. Die generischen Köder-Websites und der Mangel an zusätzlichen Targeting-Informationen oder Aktionen zum Ziel lassen uns jedoch keine ausreichenden Beweise zurück, um die Motivation(en) des Angreifers zu identifizieren.

SADBRIDGE Einführung

Der SADBRIDGE-Malware-Loader ist als ausführbare MSI-Datei für die Auslieferung verpackt und verwendet DLL-Sideloading mit verschiedenen Injektionstechniken, um bösartige Nutzlasten auszuführen. SADBRIDGE missbraucht legitime Anwendungen wie x64dbg.exe und MonitoringHost.exe , um bösartige DLLs wie x64bridge.dll und HealthServiceRuntime.dllzu laden, was zu nachfolgenden Phasen und Shellcodes führt.

Die Persistenz wird durch die Erstellung von Diensten und Registrierungsänderungen erreicht. Die Rechteausweitung an den Administrator erfolgt im Hintergrund mithilfe einer UAC-Umgehungstechnik , die die ICMLuaUtil COM-Schnittstelle missbraucht. Darüber hinaus enthält SADBRIDGE eine Umgehung der Rechteausweitung über den Windows-Taskplaner, um seine Hauptnutzlast mit Privilegien auf SYSTEM-Ebene auszuführen.

Die SADBRIDGE-Konfiguration wird durch eine einfache Subtraktion von 0x1 auf jedes Byte der Konfigurationszeichenfolge verschlüsselt. Die verschlüsselten Stufen werden alle mit einer .log -Erweiterung angehängt und während der Laufzeit mithilfe von XOR und dem LZNT1-Dekomprimierungsalgorithmus entschlüsselt.

SADBRIDGE verwendet PoolParty, APC-Warteschlangen und Token-Manipulationstechniken für die Prozessinjektion. Um eine Sandbox-Analyse zu vermeiden, werden API-Aufrufe mit langer Sleep verwendet. Eine weitere Technik zur Umgehung der Verteidigung umfasst API-Patches, um Windows-Sicherheitsmechanismen wie das Antimalware Scan Interface (AMSI) und die Ereignisablaufverfolgung für Windows (ETW) zu deaktivieren.

Der folgende Deep Dive ist so strukturiert, dass er die Ausführungskette untersucht, und bietet eine Schritt-für-Schritt-Anleitung für die Fähigkeiten und Funktionen wichtiger Dateien und Phasen, basierend auf der Konfiguration des analysierten Beispiels. Die Analyse zielt darauf ab, die Interaktion zwischen den einzelnen Komponenten und ihre Rollen beim Erreichen der endgültigen Nutzlast hervorzuheben.

SADBRIDGE-Code-Analyse

MSI-Analyse

Die anfänglichen Dateien werden mit dem erweiterten Installationsprogramm in einer MSI-Datei verpackt, die wichtigsten Dateien sind x64dbg.exe und x64bridge.dll.

Durch die Verwendung von MSI-Tools (lessmsi) können wir sehen, dass der LaunchApp Einstiegspunkt in aicustact.dll so konfiguriert ist, dass der in der AI_APP_FILE -Eigenschaft angegebene Dateipfad ausgeführt wird.

Wenn wir zu dieser AI_APP_FILE Eigenschaft navigieren, können wir sehen, dass die mit dieser Konfiguration verknüpfte Datei x64dbg.exeist. Dies stellt die Datei dar, die nach Abschluss der Installation ausgeführt wird, die legitime NetFxRepairTool.exe wird nie ausgeführt.

x64bridge.dll Seitliches Laden

Wenn x64dbg.exe ausgeführt wird, ruft es den BridgeInit Export aus x64bridge.dllauf. BridgeInit ist ein Wrapper für die Funktion BridgeStart .

Ähnlich wie bei BLISTER wird bei SADBRIDGE der Export einer legitimen DLL gepatcht.

Während der Malware-Initialisierungsroutine beginnt SADBRIDGE mit der Generierung eines Hashs unter Verwendung des Hostnamens und eines Magic Seed 0x4E67C6A7. Dieser Hash wird als Verzeichnisname zum Speichern der verschlüsselten Konfigurationsdatei verwendet. Die verschlüsselte Konfiguration wird in C:\Users\Public\Documents\<hostname_hash>\edbtmp.loggeschrieben. Diese Datei enthält die Attribute FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_READONLY FILE_ATTRIBUTE_HIDDEN, um sich aus einer gewöhnlichen Verzeichnisliste zu verstecken.

Das Entschlüsseln der Konfiguration ist einfach, die verschlüsselten Chunks werden durch Null-Bytes getrennt. Für jedes Byte innerhalb der verschlüsselten Chunks können wir sie um 0x1inkrementieren.

Die Konfiguration besteht aus:

  • Möglicher Kampagnentermin
  • Zeichenfolgen, die zum Erstellen von Diensten verwendet werden sollen
  • Neuer Name für MonitoringHost.exe (DevQueryBroker.exe)
  • DLL-Name für die DLL, die von MonitoringHost.exe quergeladen werden soll (HealthServiceRuntime.dll)
  • Absolute Pfade für weitere Stufen (.log Dateien)
  • Das primäre Injektionsziel für das Hosting von GOSAR (svchost.exe)

Das DevQueryBroker Verzeichnis (C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\) enthält alle verschlüsselten Stagingbereiche (.log Dateien), die zur Laufzeit entschlüsselt werden. Die Datei (DevQueryBroker.exe) ist eine umbenannte Kopie der legitimen Microsoft-Anwendung (MonitoringHost.exe).

Schließlich wird ein Prozess erstellt, der DevQueryBroker.exe ausgeführt wird und die bösartige HealthServiceRuntime.dll im selben Ordner von der Seite lädt.

HealthServiceRuntime.dll

Dieses Modul legt sowohl einen verschlüsselten als auch einen teilweise entschlüsselten Shellcode im %TEMP% Verzeichnis des Benutzers ab. Der Dateiname für den Shellcode hat das Format: log<random_string>.tmp. Jedes Byte des teilweise entschlüsselten Shellcodes wird dann von 0x10 dekrementiert, um es vollständig zu entschlüsseln. Der Shellcode wird in einem neuen Thread desselben Prozesses ausgeführt.

Die Malware nutzt API-Hashing unter Verwendung desselben Algorithmus, der in einer von SonicWall veröffentlichten Studie verwendet wird, der Hashing-Algorithmus ist im Anhang aufgeführt. Der Shellcode entschlüsselt DevQueryBroker.log in eine PE-Datei und führt dann eine einfache XOR-Operation mit einem einzelnen Byte (0x42) im ersten Drittel der Datei aus, wo er dann das Ergebnis mit dem LZNT1-Algorithmus dekomprimiert.

Der Shellcode hebt dann mithilfe von NtUnmapViewOfSectionalle vorhandenen Zuordnungen an der bevorzugten Basisadresse der PE-Datei auf, um sicherzustellen, dass ein Aufruf von VirtualAlloc Speicher ab der bevorzugten Basisadresse zuweist. Schließlich ordnet es die entschlüsselte PE-Datei diesem zugewiesenen Speicher zu und überträgt die Ausführung an seinen Einstiegspunkt. Alle Shellcodes, die von SADBRIDGE identifiziert und ausgeführt werden, haben eine identische Codestruktur und unterscheiden sich nur in den spezifischen .log Dateien, auf die sie zur Entschlüsselung und Ausführung verweisen.

DevQueryBroker.log

Die Malware lädt dynamisch amsi.dll , um kritische Sicherheitsmechanismen in Windows zu deaktivieren. Es patcht AmsiScanBuffer in amsi.dll , indem es Anweisungen einfügt, um den Rückgabewert in 0x80070057zu ändern, den standardisierten Microsoft-Fehlercode, der ungültige Argumente anzeigt, und E_INVALIDARG vorzeitig zurückkehrt, um die Scanlogik effektiv zu umgehen. Auf ähnliche Weise wird AmsiOpenSession gepatcht, um immer den gleichen Fehlercode E_INVALIDARGzurückzugeben. Darüber hinaus werden EtwEventWrite in ntdll.dllgepatcht, wobei die erste Anweisung durch eine ret Anweisung zum Deaktivieren der Ereignisablaufverfolgung für Windows (ETW) ersetzt wird, wodurch jegliche Protokollierung bösartiger Aktivitäten unterdrückt wird.

Nach dem Patchen wird ein verschlüsselter Shellcode auf temp.ini unter Pfad (C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\temp.inigeschrieben.
Die Malware überprüft die Gruppenmitgliedschaft des aktuellen Prozesstokens, um seine Berechtigungsstufe zu bestimmen. Es überprüft, ob der Prozess zum LocalSystem-Konto gehört, indem es eine SID mit dem SECURITY_LOCAL_SYSTEM_RID initialisiert und CheckTokenMembershipaufruft. Ist dies nicht der Fall, wird versucht, die Mitgliedschaft in der Gruppe Administratoren zu überprüfen, indem mithilfe von SECURITY_BUILTIN_DOMAIN_RID und DOMAIN_ALIAS_RID_ADMINS eine SID erstellt und eine ähnliche Überprüfung der Tokenmitgliedschaft durchgeführt wird.

Wenn der aktuelle Prozess nicht über LocalSystem- oder Administratorrechte verfügt, werden die Berechtigungen zunächst über einen UAC-Umgehungsmechanismus auf Administrator erhöht, indem die ICMLuaUtil COM-Schnittstelle genutzt wird. Es erstellt eine Monikerzeichenfolge, die "Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}" , um eine Instanz des CMSTPLUA Objekts mit Administratorrechten zu erstellen. Sobald das Objekt erstellt und die ICMLuaUtil Schnittstelle abgerufen wurde, verwendet die Malware die offengelegte ShellExec Methode der Schnittstelle, um DevQueryBroker.exeauszuführen.

Wenn eine Aufgabe oder ein Dienst nicht für die routinemäßige Ausführung DevQueryBroker.exe erstellt wird, prüft die Malware, ob der 360tray.exe des Antivirenprozesses ausgeführt wird. Wenn er nicht ausgeführt wird, wird ein Dienst für die Rechteausweitung an SYSTEM mit den folgenden Eigenschaften erstellt:

  • Name des Diensts: DevQueryBrokerService
    Name des binären Pfads: "C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\DevQueryBroker.exe -svc".
  • Anzeigename: DevQuery Background Discovery Broker-Dienst
  • Beschreibung: Ermöglicht Apps das Ermitteln von Geräten mit einer Hintergrundaufgabe.
  • Starttyp: Automatisch beim Systemstart
  • Berechtigungen: LocalSystem

Wenn 360tray.exe bei der Ausführung erkannt wird, schreibt die Malware eine verschlüsselte PE-Datei in DevQueryBrokerService.logund ordnet dann eine PE-Datei der nächsten Stufe (Stufe 1) dem aktuellen Prozessspeicher zu und überträgt die Ausführung an diesen.

Sobald DevQueryBroker.exe mit Rechten auf SYSTEM-Ebene erneut ausgelöst wird und diesen Teil der Kette erreicht, überprüft die Malware die Windows-Version. Bei Systemen, auf denen Vista oder höher ausgeführt wird (außer Windows 7), ordnet es eine weitere nächste Stufe (Stufe 2) in den Speicher ab und überträgt die Ausführung dorthin.

Unter Windows 7 führt es jedoch einen Shellcode aus, der die DevQueryBrokerPre.log Datei entschlüsselt und ausführt.

Injektion im Stadium 1 (explorer.exe)

SADBRIDGE verwendet PoolParty Variante 7 , um Shellcode in explorer.exe zu injizieren, indem es auf die I/O-Abschlusswarteschlange des Thread-Pools abzielt. Zuerst wird ein Handle in die E/A-Abschlusswarteschlange des Zielprozesses dupliziert. Anschließend wird innerhalb explorer.exe Speicher zugewiesen, um den Shellcode zu speichern. Zusätzlicher Arbeitsspeicher wird zum Speichern einer gestalteten TP_DIRECT -Struktur zugeordnet, die die Basisadresse des Shellcodes als Rückrufadresse enthält. Schließlich ruft es ZwSetIoCompletionauf und übergibt einen Zeiger an die TP_DIRECT Struktur, um ein Paket in die I/O-Abschlusswarteschlange der Workerfactory des Zielprozesses (Worker-Thread-Manager) einzureihen und so die Ausführung des injizierten Shellcodes effektiv auszulösen.

Dieser Shellcode entschlüsselt die DevQueryBrokerService.log Datei, hebt die Zuordnung aller Speicherbereiche auf, die die bevorzugte Basisadresse belegen, ordnet die PE-Datei dieser Adresse zu und führt dann ihren Einstiegspunkt aus. Dieses Verhalten spiegelt den zuvor beobachteten Shellcode wider.

Injektion im Stadium 2 (spoolsv.exe/lsass.exe)

In Phase 2 injiziert SADBRIDGE Shellcode in spoolsv.exeoder lsass.exe , wenn spoolsv.exe nicht verfügbar ist, wobei die gleiche Injektionstechnik wie in Phase 1 verwendet wird. Der Shellcode zeigt ein ähnliches Verhalten wie die früheren Phasen: Er entschlüsselt DevQueryBrokerPre.log in eine PE-Datei, hebt die Zuordnung aller Regionen auf, die seine bevorzugte Basisadresse belegen, ordnet die PE-Datei zu und überträgt dann die Ausführung an ihren Einstiegspunkt.

DevQueryBrokerService.log

Der Shellcode, der von DevQueryBrokerService.log entschlüsselt wurde, wie im vorherigen Abschnitt erwähnt, nutzt eine Rechteausweitungstechnik mithilfe des Windows-Taskplaners. SADBRIDGE integriert eine öffentliche UAC-Bypass-Technik , die das COM-Objekt IElevatedFactorySever verwendet, um die geplante Aufgabe indirekt zu erstellen. Dieser Task ist so konfiguriert, dass DevQueryBroker.exe täglich mit Berechtigungen auf SYSTEM-Ebene unter Verwendung des Task-Namens DevQueryBrokerServiceausgeführt wird.

Um ihre Spuren zu verwischen, fälscht die Malware den Image-Pfad und die Befehlszeile, indem sie den Process Environment Block (PEB) direkt modifiziert, wahrscheinlich in dem Versuch, den COM-Dienst so zu tarnen, dass er von explorer.exestammt.

DevQueryBrokerPre.log

SADBRIDGE erstellt einen Dienst mit dem Namen DevQueryBrokerServiceSvc unter dem Registrierungsunterschlüssel SYSTEM\CurrentControlSet\Services\DevQueryBrokerServiceSvc mit den folgenden Attributen:

  • Beschreibung: Ermöglicht Apps das Ermitteln von Geräten mit einer Hintergrundaufgabe.
  • DisplayName: DevQuery-Brokerdienst für die Hintergrundermittlung
  • Fehlerkontrolle: 1
  • Bildpfad: %systemRoot%\system32\svchost.exe -k netsvcs
  • Objektname: LocalSystem
  • Start: 2 (Autostart)
  • Typ: 16.
  • Fehler-Aktionen:
    • Setzt die Fehleranzahl alle 24 Stunden zurück.
    • Führt drei Neustartversuche aus: eine Verzögerung von 20 ms für den ersten und eine Verzögerung von 1 Minute für den zweiten und dritten.

Die Service-Parameter geben die ServiceDll an, die sich bei C:\Program Files (x86)\Common Files\Microsoft Shared\Stationery\<hostname_hash>\DevQueryBrokerService.dllbefindet. Wenn die DLL-Datei nicht vorhanden ist, wird sie direkt danach auf der Festplatte abgelegt.

DevQueryBrokerService.dll hat eine ähnliche Codestruktur wie HealthServiceRuntime.dll, die in den früheren Phasen der Ausführungskette zu sehen ist. Es ist dafür verantwortlich, DevQueryBroker.log zu entschlüsseln und auszuführen. Die ServiceDll wird von svchost.exe geladen und ausgeführt, wenn der Dienst gestartet wird.

Darüber hinaus wird der Schlüssel SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs so geändert, dass er einen Eintrag für DevQueryBrokerServiceSvc enthält, um den neu erstellten Dienst in die Gruppe von Diensten zu integrieren, die von der netsvcs Diensthostgruppe verwaltet werden.

SADBRIDGE löscht dann die zuvor erstellte geplante Aufgabe und den Dienst, indem die Registrierungsunterschlüssel SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\Tree\\DevQueryBrokerService und SYSTEM\\CurrentControlSet\\Services\\DevQueryBrokerServiceentfernt werden.

Schließlich werden die Dateien DevQueryBroker.exe und HealthServiceRuntime.dll im Ordner C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker entfernt, da der neue Persistenzmechanismus vorhanden ist.

GOSAR-Injektion

In der zweiten Hälfte des Codes listet SADBRIDGE alle aktiven Sitzungen auf dem lokalen Computer mithilfe der WTSEnumerateSessionsA -API auf.

Wenn Sitzungen gefunden werden, durchlaufen sie jede Sitzung:

  • Für jede Sitzung wird versucht, den Benutzernamen (WTSUserName) mit WTSQuerySessionInformationAabzurufen. Wenn die Abfrage fehlschlägt, wird sie in die nächste Sitzung verschoben.
  • Wenn WTSUserName nicht leer ist, zielt der Code auf svchost.exeab und übergibt den Pfad, die Sitzungs-ID und den Inhalt der Ladeprogrammkonfiguration an eine Unterroutine, die die letzte Phase einfügt.
  • Wenn WTSUserName leer ist, aber der WinStationName der Sitzung "Services" ist (was auf eine Dienstsitzung hinweist), zielt sie stattdessen auf dllhost.exe ab und übergibt dieselben Parameter an das Injektionsunterprogramm der letzten Stufe.

Wenn keine Sitzungen gefunden werden, tritt es in eine Endlosschleife ein, um wiederholt Sitzungen aufzulisten und das Unterprogramm für die Injektion der letzten Stufe aufzurufen, während Überprüfungen durchgeführt werden, um redundante Injektionen zu vermeiden.

Angemeldete Sitzungen zielen auf svchost.exeab, während Dienstsitzungen oder Sitzungen ohne angemeldeten Benutzer auf dllhost.exeabzielen.

Wenn eine Sitzungs-ID verfügbar ist, versucht der Code, das Benutzertoken für diese Sitzung zu duplizieren und die Integritätsebene des duplizierten Tokens auf S-1-16-12288 (Systemintegrität) heraufzustufen. Anschließend wird das Token mit erhöhten Rechten verwendet, um über CreateProcessAsUserAeinen untergeordneten Prozess (svchost.exe oder dllhost.exe) zu erstellen.

Wenn die Token-Manipulation fehlschlägt oder keine Sitzungs-ID verfügbar ist (Systemprozesse können eine Sitzungs-ID von 0 haben), wird auf die Erstellung eines Prozesses ohne Token mit CreateProcessAzurückgegriffen.

Der verschlüsselte Shellcode- C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\temp.ini wird mit der gleichen XOR- und LZNT1-Dekomprimierungstechnik entschlüsselt, die zuvor zum Entschlüsseln .log Dateien verwendet wurde, und die APC-Injektion wird verwendet, um den Shellcode für die Ausführung im Thread des neu erstellten Prozesses in die Warteschlange zu stellen.

Schließlich entschlüsselt der injizierte Shellcode DevQueryBrokerCore.log zu GOSAR und führt ihn im Speicher des neu erstellten Prozesses aus.

GOSAR Einführung

GOSAR ist ein multifunktionaler Remote-Access-Trojaner, der auf Windows- und Linux-Systeme abzielt. Diese Hintertür umfasst Funktionen wie das Abrufen von Systeminformationen, das Erstellen von Screenshots, das Ausführen von Befehlen, Keylogging und vieles mehr. Die GOSAR-Backdoor behält einen Großteil der Kernfunktionalität und des Verhaltens von QUASAR bei, enthält jedoch mehrere Modifikationen, die sie von der Originalversion unterscheiden.

Durch das Umschreiben von Malware in moderne Sprachen wie Go kann dies zu geringeren Erkennungsraten führen, da viele Antivirenlösungen und Malware-Klassifikatoren Schwierigkeiten haben, bösartige Zeichenfolgen/Merkmale unter diesen neuen Programmierkonstrukten zu identifizieren. Unten sehen Sie ein gutes Beispiel dafür, wie ein entpacktes GOSAR beim Hochladen nur 5 Erkennungen erhält.

Bemerkenswert ist, dass diese Variante mehrere Plattformen unterstützt, einschließlich ELF-Binärdateien für Linux-Systeme und traditionelle PE-Dateien für Windows. Diese plattformübergreifende Fähigkeit steht im Einklang mit der Anpassungsfähigkeit von Go und macht es vielseitiger als das Original. NET-basierten QUASAR. Im folgenden Abschnitt konzentrieren wir uns auf die Hervorhebung der Code-Struktur, der neuen Funktionen und Ergänzungen von GOSAR im Vergleich zur Open-Source-Version (QUASAR).

Überblick über die GOSAR-Code-Analyse

Code-Struktur von GOSAR

Da die Binärdatei alle ihre Symbole beibehielt, konnten wir die Quellcodestruktur rekonstruieren, die aus einer Stichprobe der Version extrahiert wurde 0.12.01

  • vibrant/config: Enthält die Konfigurationsdateien für die Malware.
  • vibrant/proto: Enthält alle Deklarationen der Google Protocol Buffers (proto).
  • vibrant/network: Enthält Funktionen im Zusammenhang mit dem Netzwerk, wie z. B. die Hauptverbindungsschleife, das Proxy-Handling und auch den Thread zur Konfiguration der Firewall und zum Einrichten eines Listeners
  • vibrant/msgs/resolvers: Definiert die Befehle, die von der Malware verarbeitet werden. Diese Befehle werden innerhalb der vibrant_msgs_init* Funktionen einem Objekt zugeordnet.
  • vibrant/msgs/services: Führt neue Funktionen ein, wie z.B. das Ausführen von Diensten wie Keyloggern, Zwischenablage-Logger, diese Dienste werden in der Funktion vibrant_network._ptr_Connection.Start gestartet.
  • vibrant/logs: Verantwortlich für die Protokollierung der Ausführung der Malware. Die Protokolle werden mit einem AES-Schlüssel verschlüsselt, der in der Konfiguration hinterlegt ist. Die Malware entschlüsselt die Protokolle in Blöcken mit AES.
  • vibrant/pkg/helpers: Enthält Hilfsfunktionen, die für verschiedene Malware-Befehle und -Dienste verwendet werden.
  • vibrant/pkg/screenshot: Kümmert sich um die Screenshot-Aufnahmefunktion auf dem infizierten System.
  • vibrant/pkg/utils: Enthält Hilfsfunktionen, wie z. B. das Generieren von Zufallswerten.
  • vibrant/pkg/native: Stellt Funktionen zum Aufrufen von Windows-API-Funktionen (WINAPI) bereit.

Neue Ergänzungen zu GOSAR

Kommunikation und Informationsbeschaffung

Diese neue Variante verwendet weiterhin die gleiche Kommunikationsmethode wie das Original, die auf TCP TLS basiert. Bei der Verbindung sendet es zunächst Systeminformationen an den C2, wobei 4 neue Felder hinzugefügt werden:

  • IP-Adresse
  • Antivirus
  • Zwischenablage-Einstellungen
  • Brieftaschen

Die Liste der Antivirenprogramme und digitalen Geldbörsen wird in der Funktion vibrant_pkg_helpers_init initialisiert und befindet sich am Ende dieses Dokuments.

Dienste

Die Malware verarbeitet 3 Dienste, die bei der ersten Verbindung des Clients mit dem C2 gestartet werden:

  • vibrant_services_KeyLogger
  • vibrant_services_ClipboardLogger
  • vibrant_services_TickWriteFile

KeyLogger

Die Keylogging-Funktionalität in GOSAR ist in der Funktion vibrant_services_KeyLogger implementiert. Dieses Feature basiert auf Windows-APIs, um Tastenanschläge auf dem infizierten System abzufangen und aufzuzeichnen, indem ein globaler Windows-Hook mit SetWindowsHookEx mit dem Parameter WH_KEYBOARD_LL festgelegt wird, um Tastaturereignisse auf niedriger Ebene zu überwachen. Die Hook-Funktion heißt vibrant_services_KeyLogger_func1.

ClipboardLogger

Die Protokollierungsfunktion der Zwischenablage ist unkompliziert und basiert auf Windows-APIs. Es prüft zunächst die Verfügbarkeit von Zwischenablagedaten mithilfe von IsClipboardFormatAvailable ruft sie dann mit GetClipboardData API ab.

TickWriteDatei

Sowohl ClipboardLogger als auch KeyLogger Dienste sammeln Daten, die vom TickWriteFile regelmäßig in das Verzeichnis (C:\ProgramData\Microsoft\Windows\Start Menu\Programs\diagnostics) unter einer Datei mit dem aktuellen Datum geschrieben werden, z. B. 2024-11-27.
Es kann entschlüsselt werden, indem man zuerst den Wert subtrahiert 0x1f dann mit dem Wert 0x18 verbindet, wie im CyberChef-Rezept gezeigt.

Einrichtung des Netzwerks

Nach der Initialisierung ihrer Dienste erzeugt die Malware drei Threads , die der Netzwerkeinrichtung gewidmet sind.

  • vibrant_network_ConfigFirewallRule
  • vibrant_network_ConfigHosts
  • vibrant_network_ConfigAutoListener

Threads, die das Netzwerksetup behandeln

ConfigFirewallRule

Die Malware erstellt eine eingehende Firewall-Regel für den Portbereich 51756-51776 unter einem chinesischen Namen, der in übersetzt wird, Distributed Transaction Coordinator (LAN) sie alle eingehenden Programme und IP-Adressen zulässt, die Beschreibung wird auf Folgendes festgelegt:Inbound rules for the core transaction manager of the Distributed Transaction Coordinator service are managed remotely through RPC/TCP.

ConfigHosts (Konfigurationen)

Diese Funktion fügt c:\Windows\System32\Drivers\etc\hosts folgenden 127.0.0.1 micrornetworks.comeinen Eintrag hinzu. Der Grund für das Hinzufügen dieses Eintrags ist unklar, aber es liegt wahrscheinlich an fehlenden Funktionen oder unvollständigen Funktionen in der aktuellen Entwicklungsphase der Malware.

ConfigAutoListener

Diese Funktionalität der Malware führt einen HTTP-Server-Listener auf dem ersten verfügbaren Port innerhalb des Bereichs 51756-51776aus, der zuvor durch eine Firewall-Regel zugelassen wurde. Interessanterweise verarbeitet der Server keine Befehle, was beweist, dass sich die Malware noch in der Entwicklung befindet. Die aktuelle Version, die wir haben, verarbeitet nur eine GET Anfrage an den URI /security.jsund antwortet mit der Zeichenfolge callback();, jede andere Anfrage gibt einen 404 Fehlercode zurück. Diese minimale Antwort könnte darauf hindeuten, dass es sich bei dem Server um einen Platzhalter handelt oder sich in einer frühen Entwicklungsphase befindet, mit dem Potenzial, dass später komplexere Funktionen hinzugefügt werden

Logs

Die Malware speichert ihre Laufzeitprotokolle im Verzeichnis: %APPDATA%\Roaming\Microsoft\Logs unter dem Dateinamen im Format windows-update-log-<YearMonthDay>.log.
Jeder Protokolleintrag wird mit dem HMAC-AES-Algorithmus verschlüsselt. Der Schlüssel ist in der Funktion vibrant_config hartcodiert, im Folgenden finden Sie ein Beispiel:

Der Angreifer kann die Laufzeitprotokolle der Malware aus der Ferne abrufen, indem er den Befehl ResolveGetRunLogsausgibt.

Plugins

Die Malware ist in der Lage, Plugins auszuführen, bei denen es sich um PE-Dateien handelt, die vom C2 heruntergeladen und auf der Festplatte gespeichert werden, die mit einem XOR-Algorithmus verschlüsselt sind. Diese Plugins werden unter dem Pfad C:\ProgramData\policy-err.loggespeichert. Um ein Plugin auszuführen, wird der Befehl aufgerufen, ResolveDoExecutePlugin aufgerufen wird, er prüft zunächst, ob ein Plugin verfügbar ist.

Anschließend wird eine native DLL reflektiert geladen, die im Base64-Format in der Binärdatei mit dem Namen plugins.dll gespeichert ist, und führt die Exportfunktion ExecPluginaus.

ExecPlugin Erstellt einen angehaltenen Prozess von C:\Windows\System32\msiexec.exe mit den Argumenten /package /quiet. Anschließend werden Asynchronous Procedure Calls (APC) an den Hauptthread des Prozesses in die Warteschlange gestellt. Wenn der Thread fortgesetzt wird, wird der Shellcode in der Warteschlange ausgeführt.

Der Shellcode liest das verschlüsselte Plugin, das bei C:\ProgramData\policy-err.loggespeichert ist, entschlüsselt es mit einem hartcodierten 1-Byte-XOR-Schlüssel, lädt es reflektiert und führt es aus.

HVNC

Die Malware unterstützt verstecktes VNC(HVNC) über den vorhandenen Socket und legt 5 Befehle offen

  • ResolveHVNCCommand
  • ResolveGetHVNCScreen
  • ResolveStopHVNC
  • ResolveDoHVNCKeyboardEvent
  • ResolveDoHVNCMouseEvent

Der erste Befehl, der ausgeführt wird, ist ResolveGetHVNCScreen , der ihn zuerst initialisiert und eine Ansicht einrichtet, er verwendet eine eingebettete native DLL- HiddenDesktop.dll im Base64-Format, die DLL wird reflektiert in den Speicher geladen und ausgeführt.

Die DLL ist für die Ausführung von Low-Level-APIs zum Einrichten des HVNC verantwortlich, mit insgesamt 7 exportierten Funktionen:

  • ExcuteCommand (Englisch)
  • DoMouseScroll
  • DoMausRechtsklick
  • DoMouseMove (Mit der Maus)
  • DoMouseLeftClick
  • DoKeyPress
  • CaptureScreen (Erfassen)

Die erste aufgerufene Exportfunktion ist Initialise, um einen Desktop mit CreateDesktopA API zu initialisieren. Diese HVNC-Implementierung verarbeitet insgesamt 17 Befehle, die in ExcuteCommand Export zu finden sind, wie bereits erwähnt, hat sie einen Tippfehler im Namen, die Befehls-ID wird von der Befehls- ResolveHVNCCommand der Malware weitergeleitet, die ExcuteCommandaufruft.

Befehls-IDBeschreibung
0x401Die Funktion deaktiviert zunächst die Gruppierung von Taskleistenschaltflächen, indem der Registrierungsschlüssel TaskbarGlomLevel unter Software\Microsoft\Windows\CurrentVersion\Explorer\Advancedauf 2 festgelegt wird. Als Nächstes wird sichergestellt, dass die Taskleiste immer sichtbar und im Vordergrund ist, indem SHAppBarMessage mit dem Befehl ABM_SETSTATE verwendet und der Status auf ABS_ALWAYSONTOPfestgelegt wird.
0x402Ruft ein RUN-Dialogfeld auf, indem die 61. Exportfunktion von shell32.dllausgeführt wird.C:\Windows\system32\rundll32.exe shell32.dll,#61
0x403Führt eine Instanz von powershell.exe
0x404Führt eine PE-Datei aus, die in C:\\ProgramData\\shell.log
0x405Führt eine Instanz von chrome.exe
0x406Führt eine Instanz von msedge.exe
0x407Führt eine Instanz von firefox.exe
0x408Führt eine Instanz von iexplore.exe
0x409Führt eine Instanz von 360se.exe
0x40AFührt eine Instanz von 360ChromeX.exeaus.
0x40BFührt eine Instanz von SogouExplorer.exe
0x40CAktuelles Fenster schließen
0x40DMinimiert das angegebene Fenster
0x40EAktiviert das Fenster und zeigt es als maximiertes Fenster an.
0x40FBeendet den Prozess eines Fensters
0x410Legt die Zwischenablage fest
0x411Löscht die Zwischenablage

Screenshot

Die Malware lädt reflektiert die dritte und letzte im Base64-Format eingebettete PE-DLL mit dem Namen Capture.dllund verfügt über 5 Exportfunktionen:

  • CaptureFirstScreen
  • ErfassenNächsterBildschirm
  • GetBitmapInfo
  • GetBitmapInfoSize
  • SetQualität

Die Bibliothek wird zunächst initialisiert, indem resolvers_ResolveGetBitmapInfo aufgerufen wird, der seine DllEntryPoint reflektiert lädt und ausführt, wodurch die Bildschirmaufnahmestrukturen mithilfe gängiger Windows-APIs wie CreateCompatibleDC, CreateCompatibleBitmap undCreateDIBSectioneingerichtet werden . Die 2 Exportfunktionen CaptureFirstScreen und CaptureNextScreen werden verwendet, um einen Screenshot des Desktops des Opfers als JPEG-Bild aufzunehmen.

Beobachtung

Interessanterweise kann der ursprüngliche .NET QUASAR-Server weiterhin zum Empfangen von Beaconing von GOSAR-Beispielen verwendet werden, da sie das gleiche Kommunikationsprotokoll beibehalten haben. Der operative Einsatz würde jedoch erhebliche Änderungen erfordern, um die GOSAR-Funktionalitäten zu unterstützen.

Es ist unklar, ob die Autoren den Open-Source-Server .NET QUASAR aktualisiert oder erweitert haben oder einen komplett neuen Server entwickelt haben. Es ist erwähnenswert, dass sie den standardmäßigen Überwachungsport 1080 beibehalten haben, der mit der ursprünglichen Implementierung übereinstimmt.

Neue Funktionalität

In der folgenden Tabelle finden Sie eine Beschreibung aller neu hinzugefügten Befehle:

Neue Befehle
ResolveDoRoboCopyFührt RoboCopy Befehl zum Kopieren von Dateien aus
ResolveDoCompressFilesKomprimieren von Dateien im ZIP-Format
ResolveDoExtractFile (ResolveDoExtract-Datei)Extrahieren einer ZIP-Datei
ResolveDoCopyFilesKopiert ein Verzeichnis oder eine Datei auf dem infizierten Rechner
ResolveGetRunLogsAbrufen verfügbarer Protokolle
ResolveHVNCCommandAusführen eines HVNC-Befehls
ResolveGetHVNCScreenHVNC initiieren
ResolveStopHVNCBeenden Sie die HVNC-Sitzung
ResolveDoHVNCKeyboardEventTastaturereignis an HVNC senden
ResolveDoHVNCMouseEventMausereignis an HVNC senden
ResolveDoExecutePluginAusführen eines Plugins
ResolveGetProcessesAbrufen einer Liste der ausgeführten Prozesse
ResolveDoProcessStartStarten eines Prozesses
ResolveDoProcessEndBeenden eines Prozesses
ResolveGetBitmapInfoAbrufen der BITMAPINFO-Struktur für die Anzeigeeinstellungen des aktuellen Bildschirms
ResolveGetMonitoreAuflisten der Anzeigemonitore des Opfers mit EnumDisplayMonitors API
ResolveGetDesktopStarten der Bildschirmaufnahmefunktion
ResolveStopGetDesktopBeenden Sie die Bildschirmaufnahmefunktion
ResolveNewShellExecuteÖffnet Pipes zu einem erzeugten cmd.exe Prozess und sendet Befehle an ihn
ResolveGetSchTasksRufen Sie geplante Aufgaben ab, indem Sie den Befehl schtasks /query /fo list /v
ResolveGetScreenshotMachen Sie einen Screenshot des Desktops des Opfers
ResolveGetServicesRufen Sie die Liste der Dienste mit einer WMI-Abfrage ab: select * from Win32_Service
ResolveDoServiceOperationStarten oder Beenden eines Diensts
ResolveDoDisableMultiLogonDeaktivieren Sie mehrere Sitzungen pro Benutzer, indem Sie den Wert fSingleSessionPerUser unter dem Schlüssel auf 1 festlegen HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer
ResolveDoRestoreNLAStellt die Sicherheitseinstellungen für das Remotedesktopprotokoll (RDP) wieder her, aktiviert die Authentifizierung auf Netzwerkebene (Network Level Authentication , NLA) und erzwingt die SSL/TLS-Verschlüsselung für eine sichere Kommunikation.
ResolveGetRemoteClientInformationRufen Sie eine Liste aller lokalen Benutzer ab, die aktiviert sind, das RDP-Profilsowie LAN-IP- und Betriebssystem-spezifische Informationen: DisplayVersion, SystemRoot und CurrentBuildNumber, die aus dem Registrierungsschlüssel extrahiert wurden, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
ResolveDoInstallWrapperEinrichten eines versteckten Remotedesktopprotokolls (HRDP)
ResolveDoUninstallWrapperHRDPdeinstallieren
ResolveDoRecoverPrivilegesStellt die ursprünglicheHKEY_LOCAL_MACHINE\\SAM\\SAMRegistrierung wieder her , bevor während der Installation des HRDPÄnderungen vorgenommen wurden
ResolveGetRemoteSessionsRufen Sie Informationen zu den RDP-Sitzungen auf dem Computer ab.
ResolveDoLogoffSessionAbmelden der RDP-Sitzung mit der **WTSLogoffSession** API
ResolveGetSystemInfoAbrufen von Systeminformationen
ResolveGetConnectionsHolen Sie sich alle Verbindungen in der Maschine
ResolveDoCloseConnectionNicht implementiert

Malware und MITRE ATT&CK

Elastic verwendet das MITRE ATT&CK-Framework , um gängige Taktiken, Techniken und Verfahren zu dokumentieren, die Bedrohungen gegen Unternehmensnetzwerke einsetzen.

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.

Milderung REF3864

Erkennung

Verhütung

YARA

Elastic Security hat YARA-Regeln erstellt, um diese Aktivität zu identifizieren.

Beobachtungen

Die folgenden Observablen wurden in dieser Studie diskutiert:

ÜberwachbarTypNameReferenz
opera-x[.]nettoDomain-NameLandingpage
teledown-cn[.]COMDomain-NameLandingpage
15af8c34e25268b79022d3434aa4b823ad9d34f3efc6a8124ecf0276700ecc39SHA-256NetFxRepairTools.msiMSI
accd651f58dd3f7eaaa06df051e4c09d2edac67bb046a2dcb262aa6db4291de7SHA-256x64bridge.dllSADBRIDGE
7964a9f1732911e9e9b9e05cd7e997b0e4e2e14709490a1b657673011bc54210SHA-256GOSAR
ferp.googledns[.]ioDomain-NameGOSAR C2 Server
hk-dns.secssl[.]comDomain-NameGOSAR C2 Server
hk-dns.winsiked[.]comDomain-NameGOSAR C2 Server
hk-dns.wkossclsaleklddeff[.]isDomain-NameGOSAR C2 Server
hk-dns.wkossclsaleklddeff[.]ioDomain-NameGOSAR C2 Server

Referenzen

In der obigen Studie wurde auf Folgendes Bezug genommen:

Anhang

Hashing-Algorithmus (SADBRIDGE)

def ror(x, n, max_bits=32) -> int:
    """Rotate right within a max bit limit, default 32-bit."""
    n %= max_bits
    return ((x >> n) | (x << (max_bits - n))) & (2**max_bits - 1)

def ror_13(data) -> int:
    data = data.encode('ascii')
    hash_value = 0

    for byte in data:
        hash_value = ror(hash_value, 13)
        
        if byte >= 0x61:
            byte -= 32  # Convert to uppercase
        hash_value = (hash_value + byte) & 0xFFFFFFFF

    return hash_value


def generate_hash(data, dll) -> int:
    dll_hash = ror_13(dll)
    result = (dll_hash + ror_13(data)) & 0xFFFFFFFF
    
    return hex(result)

AV-Produkte, die in GOSAR geprüft wurden

360sd.exekswebshield.exe
360tray.exekvmonxp.exe
a2guard.exekxetray.exe
ad-watch.exemcshield.exe
arcatasksservice.exemcshield.exe
ashdisp.exeminer.exe
avcenter.exemongoosagui.exe
avg.exempmon.exe
avgaurd.exemsmpeng.exe
avgwdsvc.exemssecess.exe
avk.exenspupsvc.exe
avp.exentrtscan.exe
avp.exepatray.exe
avwatchservice.exepccntmon.exe
ayagent.ayepsafesystray.exe
baidusdsvc.exeqqpcrtp.exe
bkavservice.exequhlpsvc.EXE
ccapp.exeravmond.exe
ccSetMgr.exeremupd.exe
ccsvchst.exerfwmain.exe
cksoftshiedantivirus4.exertvscan.exe
cleaner8.exesafedog.exe
cmctrayicon.exesavprogress.exe
coranticontrolcenter32.exesbamsvc.exe
cpf.exespidernt.exe
egui.exespywareterminatorshield.exe
f-prot.EXEtmbmsrv.exe
f-prot.exeunthreat.exe
f-secure.exeusysdiag.exe
fortitray.exev3svc.exe
hipstray.exevba32lder.exe
iptray.exevsmon.exe
k7tsecurity.exevsserv.exe
knsdtray.exewsctrl.exe
kpfwtray.exeyunsuo_agent_daemon.exe
ksafe.exeyunsuo_agent_service.exe