ESET Forschung GopherWhisper: Ein Bau voller Malware
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
ESET identifizierte eine zuvor unbekannte, China-ausgerichtete APT-Gruppe, die als GopherWhisper verfolgt wird und eine Regierungsbehörde in der Mongolei ins Visier nimmt. Der Bedrohungsakteur betreibt ein individuelles Malware-Ökosystem, das um Go- und C++-Backdoors, Loader und Injektoren herum aufgebaut ist und dabei legitime Cloud-Plattformen stark missbraucht, um Command-and-Control-Aktivitäten durchzuführen. Sein Werkzeugset, einschließlich LaxGopher, RatGopher und BoxOfFriends, kommuniziert über Dienste wie Discord, Slack, Microsoft Outlook und file.io. Forscher beobachteten die Kampagne erstmals im Januar 2025.
Untersuchung
Die Analyse von ESET deckte das breitere Toolkit der Gruppe auf, dokumentierte ihre Injektionsmethoden und identifizierte Slack- und Discord-API-Tokens, die in der Operation verwendet wurden. Die Forscher extrahierten auch Tausende von Command-and-Control-Nachrichten und Entwurfs-Outlook-E-Mails, die mit der Kampagne verknüpft sind. Ihre Untersuchung kartierte die unterstützende Infrastruktur und zeigte, wie die Angreifer auf vertrauenswürdige Online-Dienste zurückgriffen, um Kommunikation zu verschleiern und Daten zu exfiltrieren.
Minderung
Verteidiger sollten auf nicht autorisierte Slack-, Discord- und Outlook-API-Aktivitäten achten, verdächtige Uploads zu blockieren bei file.io, und strikte Kontrollen über das Ladeverhalten von DLLs durchsetzen. Sicherheitsteams sollten auch anomale svchost.exe -Injektionsaktivitäten erkennen und unbekannte Go-basierte Binärdateien, die in der Umgebung laufen, untersuchen.
Reaktion
Wenn GopherWhisper-Aktivitäten erkannt werden, das betroffene System sofort isolieren, bösartige Prozesse beenden, injizierte DLLs entfernen, kompromittierte Dienstkonten zurücksetzen und alle offengelegten API-Tokens widerrufen. Eine vollständige forensische Untersuchung sollte folgen, zusammen mit Threat Hunting über das Netzwerk, um verwandte Artefakte oder weitere kompromittierte Hosts zu identifizieren.
"graph TB %% Class definitions classDef malware fill:#ffcccc classDef process fill:#c2f0c2 classDef file fill:#ffd9b3 classDef technique fill:#e6e6ff classDef service fill:#ffffcc classDef network fill:#d9d9d9 %% Nodes node_initial_loader["<b>Malware</b> – <b>JabGopher Loader</b><br/><b>Action</b>: Create svchost.exe and inject LaxGopher backdoor"] class node_initial_loader malware node_svc_host["<b>Process</b> – svchost.exe"] class node_svc_host process node_laxgopher["<b>Malware</b> – <b>LaxGopher</b> backdoor (DLL)"] class node_laxgopher malware node_whisper_dll["<b>File</b> – whisper.dll (masquerading)"] class node_whisper_dll file node_process_injection["<b>Technique</b> – T1055 Process Injection<br/><b>Description</b>: Inject malicious code into a running process"] class node_process_injection technique node_reflective_loading["<b>Technique</b> – T1620 Reflective Code Loading<br/><b>Description</b>: Load code in memory without using the standard OS loader"] class node_reflective_loading technique node_masquerading["<b>Technique</b> – T1036 Masquerading<br/><b>Description</b>: Rename files to appear legitimate"] class node_masquerading technique node_frienddelivery["<b>Malware</b> – <b>FriendDelivery DLL</b>"] class node_frienddelivery malware node_boxoffriends["<b>Malware</b> – <b>BoxOfFriends</b> backdoor"] class node_boxoffriends malware node_go_backdoor["<b>Malware</b> – Go based backdoors (RatGopher, LaxGopher)"] class node_go_backdoor malware node_c2_slack["<b>Service</b> – Slack (Web Service)"] class node_c2_slack service node_c2_discord["<b>Service</b> – Discord (Web Service)"] class node_c2_discord service node_c2_outlook["<b>Service</b> – Microsoft 365 Outlook Mail REST API"] class node_c2_outlook service node_tech_c2_web["<b>Technique</b> – T1102.002 Web Service Bidirectional Communication<br/><b>Description</b>: Use legitimate web services for C2"] class node_tech_c2_web technique node_tech_mail["<b>Technique</b> – T1071.003 Mail Protocols<br/><b>Description</b>: Use mail protocols for C2"] class node_tech_mail technique node_remote_access["<b>Technique</b> – T1219 Remote Access Tools<br/><b>Description</b>: Provide remote command execution"] class node_remote_access technique node_compactgopher["<b>Malware</b> – CompactGopher"] class node_compactgopher malware node_archive["<b>Technique</b> – T1560.001 Archive Collected Data via Utility<br/><b>Description</b>: Compress data before exfiltration"] class node_archive technique node_data_limit["<b>Technique</b> – T1030 Data Transfer Size Limits<br/><b>Description</b>: Handle size limits by compressing or splitting data"] class node_data_limit technique node_exfil_fileio["<b>Service</b> – file.io cloud storage"] class node_exfil_fileio service node_exfil_tech["<b>Technique</b> – T1567.002 Exfiltration Over Web Service to Cloud Storage<br/><b>Description</b>: Use cloud storage as exfiltration channel"] class node_exfil_tech technique node_transfer_to_cloud["<b>Technique</b> – T1537 Transfer Data to Cloud Account<br/><b>Description</b>: Move data to attackeru2011controlled cloud account"] class node_transfer_to_cloud technique node_sslordoor["<b>Malware</b> – SSLORDoor"] class node_sslordoor malware node_raw_socket["<b>Technique</b> – Raw Socket Communication"] class node_raw_socket technique node_port_443["<b>Network</b> – Port 443"] class node_port_443 network %% Connections node_initial_loader –>|creates| node_svc_host node_initial_loader –>|injects| node_laxgopher node_laxgopher –>|uses| node_process_injection node_laxgopher –>|uses| node_reflective_loading node_laxgopher –>|file name| node_whisper_dll node_whisper_dll –>|masquerades as| node_masquerading node_frienddelivery –>|loads| node_boxoffriends node_boxoffriends –>|uses| node_process_injection node_boxoffriends –>|uses| node_reflective_loading node_laxgopher –>|C2 via| node_c2_slack node_go_backdoor –>|C2 via| node_c2_discord node_go_backdoor –>|C2 via| node_c2_slack node_c2_slack –>|uses technique| node_tech_c2_web node_c2_discord –>|uses technique| node_tech_c2_web node_boxoffriends –>|creates drafts via| node_c2_outlook node_c2_outlook –>|uses technique| node_tech_mail node_go_backdoor –>|provides| node_remote_access node_sslordoor –>|provides| node_remote_access node_compactgopher –>|compresses data with| node_archive node_compactgopher –>|handles size limits via| node_data_limit node_archive –>|uploaded to| node_exfil_fileio node_exfil_fileio –>|uses technique| node_exfil_tech node_exfil_fileio –>|uses technique| node_transfer_to_cloud node_sslordoor –>|uses raw sockets on| node_port_443 node_sslordoor –>|uses| node_raw_socket "
Angriffsfluss
Erkennungen
Kurzer Dateiname (über cmdline)
Anzeigen
Deaktivieren des Echtzeitschutzes von Windows Defender und Änderungen anderer Einstellungen (über cmdline)
Anzeigen
Mögliche Nutzung von WebBrowserPassView (über cmdline)
Anzeigen
Mögliche Dateninfiltration / -exfiltration / C2 über Drittanbieter-Dienste / -Tools (über Proxy)
Anzeigen
Erkennung von GopherWhisper C&C über Slack, Discord und Microsoft Graph API [Windows-Netzwerkverbindung]
Anzeigen
Verdächtige Prozessinjektion von GopherWhisper [Windows-Prozesserstellung]
Anzeigen
Simulationsausführung
Voraussetzung: Der Telemetrie- und Baseline-Vorflugcheck muss bestanden haben.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der adversarialen Technik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, genau die Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffs-Narrativ & Befehle:
Der Angreifer startet zunächst einen neuensvchost.exeProzess (den gewählten Host für die Injektion). Mit einem reflektierenden DLL-Injektor wird die bösartigeLaxGopher.dllNutzlast in den Speicher dieses Prozesses geladen, um Dynamic-Link Library Injection (T1055.001)zu erreichen. Sobald der Backdoor residiert, öffnet er eine verstecktecmd.exeInstanz, um Befehle vom C2-Server auszuführen, erfüllt Windows-Befehlszeilenshell (T1059.003). Diese Kette spiegelt das in der GopherWhisper-Forschung beschriebene Verhalten wider und erzeugt die beiden Prozesserstellungsereignisse, nach denen die Sigma-Regel sucht. -
Regressions-Testskript:
# ------------------------------------------------------------- # Simulation der GopherWhisper-ähnlichen Prozessinjektion # ------------------------------------------------------------- $svcHost = "$env:SystemRootSystem32svchost.exe" $dllPath = "C:TempLaxGopher.dll" # Gehe davon aus, dass hier eine harmlose Test-DLL existiert $cmdPath = "$env:SystemRootSystem32cmd.exe" # 1. Starte eine neue svchost.exe-Instanz (ausgesetzt) als Injektionstarget $svchost = Start-Process -FilePath $svcHost -ArgumentList "-k", "netsvcs" ` -PassThru -WindowStyle Hidden # 2. Führe eine vereinfachte reflektierende Injektion durch (Platzhalter) # In einem echten Test würden Sie einen ordnungsgemäßen Injektor aufrufen; hier protokollieren wir nur die Absicht. Write-Host "[*] Injecting $dllPath into PID $($svchost.Id) (simuliert)" # Simulierter Injektionsbefehl: # .Invoke-ReflectiveDLLInjection.ps1 -Pid $svchost.Id -Path $dllPath # 3. Starte cmd.exe aus dem kontextuell injizierten Prozess (simuliert) Write-Host "[*] Launching cmd.exe from injected svchost (simuliert)" Start-Process -FilePath $cmdPath -ArgumentList "/c echo Compromised > C:Temppwned.txt" ` -WindowStyle Hidden # 4. Kurzes Schlafen, um Sysmon Zeit zu geben, Events zu erfassen Start-Sleep -Seconds 5 -
Bereinigungsbefehle:
# Beende die simulierten svchost.exe- und cmd.exe-Prozesse Get-Process -Name svchost -ErrorAction SilentlyContinue | Stop-Process -Force Get-Process -Name cmd -ErrorAction SilentlyContinue | Stop-Process -Force # Entferne die Test-DLL (optional) Remove-Item -Path "C:TempLaxGopher.dll" -Force -ErrorAction SilentlyContinue