GammaSteel: Einblick in die sich entfaltende Malware-Kette von Gamaredon
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Der Bericht beschreibt GammaSteel, eine neue Gamaredon (UAC-0010) Eindringungskette, basierend auf einem dateilosen PowerShell Stealer. Die Malware speichert 71 verschlüsselte Funktionen im HKCUPrinters Registry-Schlüssel und schützt sie mit Windows DPAPI. Sie sammelt Dokumente von lokalen Laufwerken, USB-Medien und aktiv bearbeiteten Dateien, dann dedupliziert sie die Daten mit MD5, bevor sie sie an den legitimen S3-kompatiblen Dienst Tebi.ioexfiltriert, mit Fallback zu festcodierten russischen Domains. Die breitere Infrastruktur stützt sich auch auf Dead-Drop-Resolver, die auf öffentlichen Plattformen wie Telegram, Telegra.ph, Write.as, Rentry.co und Mastodon sowie auf dynamischen DNS-Diensten gehostet sind. Die Kampagne zielt weiterhin auf ukrainische Regierungs- und kritische Infrastruktureinrichtungen.
Untersuchung
Sekoia.io analysierte mehr als 70 Artefakte, rekonstruierte den vollständigen PowerShell-Dropper und identifizierte persistence in der Registry, ein Mutex, versteckte geplante PowerShell-Ausführungen und ein mehrschichtiges Exfiltrationsschema. Die Forscher kartierten die Dead-Drop Resolver-Infrastruktur, katalogisierten 115 IP-Adressen, vier Domains und mehrere S3-Berechtigungssätze und beobachteten automatisierte Updates, die über Mastodon-Posts durchgeführt wurden. Sie stellten auch Ähnlichkeiten mit der InvisiMole-Aktivität 2020 fest, insbesondere die Verwendung von DPAPI-verschlüsselten Lasten, die in der Registry gespeichert sind.
Abschwächung
Organisationen sollten auf ungewöhnliche Schreibvorgänge in HKCUPrintersachten, die Erstellung versteckter PowerShell-Prozesse und die Verwendung des Globalassembly307 Mutex. Ausgehender Datenverkehr zu dem identifizierten S3-Endpunkt s3.tebi.io und der Fallback-Infrastruktur wie justsstop.ru and 165.22.170.129 sollte blockiert werden. Verteidiger sollten auch Detektion für den spezifischen iPhone-Stil User-Agent-String und für Registry Run-Einträge, die PowerShell-Skripte aufrufen, einsetzen.
Reaktion
Wenn GammaSteel-Aktivität erkannt wird, isolieren Sie den betroffenen Host, sammeln Sie den HKCUPrinters Registry-Hive, extrahieren Sie die DPAPI-geschützten Nutzlasten und entschlüsseln Sie sie mit dem Master-Schlüssel des Opfers, sofern möglich. Durchsuchen Sie die Umgebung nach verwandten Artefakten, blockieren Sie die identifizierten Command-and-Control-URLs und Domains, setzen Sie kompromittierte Anmeldeinformationen zurück und führen Sie eine vollständige forensische Überprüfung durch, um weitere bösartige Module zu identifizieren.
"graph TB %% Class definitions classDef technique fill:#e6f7ff classDef process fill:#ffebcc classDef action fill:#c2f0c2 classDef tool fill:#dddddd classDef storage fill:#ffe6e6 classDef network fill:#d9d9ff classDef data fill:#f0e68c %% Nodes u2013 techniques tech_T1027_009["<b>Technik</b> – <b>T1027.009 Eingebettete Nutzlasten</b><br/>Verschleiert die Nutzlast innerhalb einer anderen Datei"] class tech_T1027_009 technique tech_T1027_007["<b>Technik</b> – <b>T1027.007 Dynamische API-Resolution</b><br/>Löst APIs zur Laufzeit auf, um statische Analyse zu vermeiden"] class tech_T1027_007 technique tech_T1027_002["<b>Technik</b> – <b>T1027.002 Softwareverpackung</b><br/>Verpackt bösartigen Code, um seine wahre Natur zu verbergen"] class tech_T1027_002 technique tech_T1027_013["<b>Technik</b> – <b>T1027.013 Verschlüsseltes/Kodiertes File</b><br/>Verschlüsselt Daten mit DPAPI vor der Speicherung"] class tech_T1027_013 technique tech_T1547_001["<b>Technik</b> – <b>T1547.001 Registry Run Keys / Startup Folder</b><br/>Fügt einen Run-Key hinzu, um Persistenz zu erreichen"] class tech_T1547_001 technique tech_T1037_005["<b>Technik</b> – <b>T1037.005 Startup-Elemente</b><br/>Verwendet Startup-Elemente für Persistenz"] class tech_T1037_005 technique tech_T1680["<b>Technik</b> – <b>T1680 Lokale Speicherentdeckung</b><br/>Entdeckt lokale Laufwerke und Benutzerprofile"] class tech_T1680 technique tech_T1135["<b>Technik</b> – <b>T1135 Netzwerkfreigabeentdeckung</b><br/>Findet freigegebene Netzwerkstandorte"] class tech_T1135 technique tech_T1006["<b>Technik</b> – <b>T1006 Direkter Volumenzugriff</b><br/>Greift direkt auf Wechseldatenträger zu"] class tech_T1006 technique tech_T1025["<b>Technik</b> – <b>T1025 Daten von Wechseldatenträgern</b><br/>Sammelt Daten von USB-Geräten"] class tech_T1025 technique tech_T1564_005["<b>Technik</b> – <b>T1564.005 Verstecktes Dateisystem</b><br/>Speichert Dateien an versteckten Orten"] class tech_T1564_005 technique tech_T1005["<b>Technik</b> – <b>T1005 Daten aus dem lokalen System</b><br/>Sammelt Dateien von der lokalen Maschine"] class tech_T1005 technique tech_T1537["<b>Technik</b> – <b>T1537 Datenübertragung zum Cloud-Konto</b><br/>Lädt gestohlene Daten in Cloud-Speicher hoch"] class tech_T1537 technique tech_T1538["<b>Technik</b> – <b>T1538 Cloud-Service-Dashboard</b><br/>Verwendet Cloud-Service-Schnittstellen zur Datenexfiltration"] class tech_T1538 technique tech_T1102_001["<b>Technik</b> – <b>T1102.001 Web Dienst: Dead Drop Resolver</b><br/>Ruft Befehle und Konfigurationen von öffentlichen Webdiensten ab"] class tech_T1102_001 technique tech_T1620["<b>Technik</b> – <b>T1620 Reflektives Code-Laden</b><br/>Lädt und führt zur Laufzeit empfangenen Code aus"] class tech_T1620 technique %% Nodes u2013 actions and components malware_dropper["<b>Malware</b> – <b>Name</b>: Initialer Dropper<br/><b>Beschreibung</b>: Führt verschleierten PowerShell-Skript aus"] class malware_dropper process process_powershell["<b>Prozess</b> – <b>Name</b>: PowerShell<br/><b>Rolle</b>: Führt kodiertes Skript aus"] class process_powershell process storage_dpapi["<b>Speicher</b> – <b>Ort</b>: HKCUPrinters<br/><b>Inhalt</b>: 71 Funktionen verschlüsselt mit DPAPI"] class storage_dpapi storage persistence_runkey["<b>Aktion</b> – <b>Persistenz</b>: Registry Run Schlüssel<br/><b>Schlüssel</b>: HKCUSoftwareMicrosoftWindowsCurrentVersionRun"] class persistence_runkey action process_hidden_ps["<b>Prozess</b> – <b>Name</b>: Versteckte PowerShell<br/><b>Zweck</b>: Liest Orchestierer aus der Registry"] class process_hidden_ps process orchestrator["<b>Aktion</b> – <b>Orchestrierer</b>: Zählt Ressourcen auf und koordiniert Sammlung"] class orchestrator action enumeration["<b>Aktion</b> – <b>Aufzählung</b>: Laufwerke, Profile, Netzwerkfreigaben"] class enumeration action collection["<b>Aktion</b> – <b>Sammlung</b>: Sammelt Dateien von lokalen und Netzwerkorten"] class collection action monitor_usb["<b>Aktion</b> – <b>USB-Überwachung</b>: WMI-Ereignis abonnieren für Wechseldatenträger"] class monitor_usb action staging_folder["<b>Speicher</b> – <b>Versteckter Ordner</b>: Ablagebereich für kopierte Dateien"] class staging_folder storage fs_watcher["<b>Prozess</b> – <b>Name</b>: FileSystemWatcher<br/><b>Funktion</b>: Überwacht nicht-USB-Laufwerke auf Änderungen"] class fs_watcher process deduplication["<b>Aktion</b> – <b>Deduplizierung</b>: Entfernt doppelte Dateien vor der Exfiltration"] class deduplication action upload_s3["<b>Aktion</b> – <b>Hochladen</b>: Sendet Daten an S3-kompatiblen Bucket (tebi.io)"] class upload_s3 network fallback_post["<b>Aktion</b> – <b>Fallback Exfiltration</b>: POST an C2-Domains, die iPhone UA nachahmen"] class fallback_post network dead_drop["<b>Aktion</b> – <b>Dead Drop Resolver</b>: Ruft Konfiguration von Telegram, Telegra.ph, Write.as, Rentry.co, Mastodon ab"] class dead_drop action vbscript_backdoor["<b>Aktion</b> – <b>Sekundäre Hintertür</b>: Führt beliebige VBScript aus HTTP-Antwort aus"] class vbscript_backdoor action %% Connections u2013 flow malware_dropper –>|verwendet| tech_T1027_009 malware_dropper –>|verwendet| tech_T1027_007 malware_dropper –>|verwendet| tech_T1027_002 malware_dropper –>|speichert verschlüsselte Daten| tech_T1027_013 malware_dropper –>|startet| process_powershell process_powershell –>|schreibt verschlüsselte Funktionen in| storage_dpapi storage_dpapi –>|ermöglicht| persistence_runkey persistence_runkey –>|erstellt| tech_T1547_001 persistence_runkey –>|erstellt| tech_T1037_005 persistence_runkey –>|startet| process_hidden_ps process_hidden_ps –>|lädt Orchestrierer aus der Registry| orchestrator orchestrator –>|führt aus| enumeration enumeration –>|umfasst| tech_T1680 enumeration –>|umfasst| tech_T1135 orchestrator –>|sammelt Daten mit| collection collection –>|verwendet| tech_T1005 collection –>|beinhaltet Wechseldatenträger via| tech_T1025 collection –>|beinhaltet direkten Volumenzugriff via| tech_T1006 collection –>|löst aus| monitor_usb monitor_usb –>|kopiert Dateien nach| staging_folder staging_folder –>|ist versteckt durch| tech_T1564_005 staging_folder –>|überwacht durch| fs_watcher fs_watcher –>|erkennt Änderungen und löst aus| deduplication deduplication –>|lädt in die Cloud hoch via| upload_s3 upload_s3 –>|stützt sich auf| tech_T1537 upload_s3 –>|fallback nach| fallback_post fallback_post –>|stützt sich auf| tech_T1538 orchestrator –>|bezieht Updates von| dead_drop dead_drop –>|verwendet| tech_T1102_001 dead_drop –>|liefert| vbscript_backdoor vbscript_backdoor –>|nutzt aus| tech_T1620 %% Styling zuweisungen Klasse Reifen class malware_dropper,process_powershell,process_hidden_ps,fs_watcher,orchestrator,monitor_usb,vbscript_backdoor eingebaute class storage_dpapi,staging_folder eingebaute class persistence_runkey,enumeration,collection,deduplication,upload_s3,fallback_post,dead_drop aktionen class tech_T1027_009,tech_T1027_007,tech_T1027_002,tech_T1027_013,tech_T1547_001,tech_T1037_005,tech_T1680,tech_T1135,tech_T1006,tech_T1025,tech_T1564_005,tech_T1005,tech_T1537,tech_T1538,tech_T1102_001,tech_T1620 technik "
Angriffsablauf
Erkennungen
Mögliche Persistenzpunkte [ASEPs – Software/NTUSER Hive] (via registry_event)
Anzeigen
Die Möglichkeit der Ausführung durch versteckte PowerShell-Befehlszeilen (via cmdline)
Anzeigen
LOLBAS WScript / CScript (via process_creation)
Anzeigen
Mögliche Systeminformationsentdeckung mit WMI PowerShell-Modul (via powershell)
Anzeigen
Verdächtige Prozess-DNS-Abfrage Bekannte Missbrauchs-Webdienste (via network_connection)
Anzeigen
Möglicher Missbrauch von Cloudflare-Entwicklungsdomain (via dns)
Anzeigen
IOCs (SourceIP) zur Erkennung: FSBs Matryoshka #3/3 – Gamaredons Geschenke, die sich weiter entpacken – GammaSteel
Anzeigen
IOCs (DestinationIP) zur Erkennung: FSBs Matryoshka #3/3 – Gamaredons Geschenke, die sich weiter entpacken – GammaSteel
Anzeigen
Erkennung der versteckten PowerShell-Ausführung für Gamaredon-Operationen [Windows PowerShell]
Anzeigen
Erkennung der Gamaredon PowerShell-Registry-Stage-Technik [Windows-Registry-Ereignis]
Anzeigen
Simulationsausführung
Voraussetzung: Der Telemetrie- & Basislinien-Vorbereitungscheck muss bestanden sein.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und Erzählungen MÜSSEN direkt die identifizierten TTPs widerspiegeln und zielen darauf ab, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffsbericht & Befehle:
Der Angreifer, der ein niedrig-privilegiertes Benutzerkonto kompromittiert hat, möchte eine verschlüsselte PowerShell-Nutzlast stagen, ohne das Dateisystem zu berühren. Sie schreiben die Base64-kodierte Nutzlast in denRunSchlüssel, damit sie beim nächsten Anmelden ausgeführt wird. Um die einfache Ausschlussregel zu umgehen, verwenden sie absichtlich einen Unter-schlüssel unterHKCUPrinters, das der ausgeschlossene Wert ist, nachahmend das „Drucker-Stage“-Muster, das in Gamaredon-Proben beobachtet wurde. not the excluded value, mimicking the “printer‑staging” pattern observed in Gamaredon samples. -
Regressionstest-Skript:
# -------------------------------------------------------------- # Simuliere Gamaredon PowerShell-Registry-Staging (TC-20260608-A1B2C) # -------------------------------------------------------------- # 1. Definiere einen Base64-kodierten, harmlosen PowerShell-Befehl (z.B. schreibe eine Datei) $payload = 'Write-Host "Gamaredon-Simulation ausgeführt"' $b64 = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($payload)) # 2. Persistiere die Nutzlast via dem Run-Schlüssel (Persistenz) $runKey = 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun' New-ItemProperty -Path $runKey -Name 'GamaredonStager' -Value "powershell -enc $b64" -PropertyType String -Force # 3. Stage die gleiche Nutzlast in einem „Drucker“-Schlüssel (dateiloses Staging) $printerKey = 'HKCU:PrintersYxwHku2chu0bznt3kkyAD' # Hinweis: anderes Suffix zur Umgehung des Ausschlusses New-Item -Path $printerKey -Force | Out-Null Set-ItemProperty -Path $printerKey -Name 'EncryptedPS' -Value $b64 -Force Write-Host "Simulation abgeschlossen – Registry-Einträge erstellt." -
Befehle zur Bereinigung:
# Entferne den Run-Schlüssell-Eintrag Remove-ItemProperty -Path 'HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun' -Name 'GamaredonStager' -ErrorAction SilentlyContinue # Entferne Drucker-Staging-Schlüssel Remove-Item -Path 'HKCU:PrintersYxwHku2chu0bznt3kkyAD' -Recurse -Force -ErrorAction SilentlyContinue Write-Host "Bereinigung abgeschlossen – Registry-Artefakte entfernt."