FrostyNeighbor: Frische Unruhe und digitale Bedrohungen
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
ESET berichtet, dass die FrostyNeighbor APT-Gruppe, auch bekannt als Ghostwriter, Angriffe gegen ukrainische Regierungsorganisationen wieder aufgenommen hat. Dazu nutzt sie Spear-Phishing-PDFs, die einen JavaScript-basierten Downloader namens PicassoLoader übermitteln, der letztendlich ein Cobalt-Strike-Beacon bereitstellt. Die Kampagne stützt sich auf geobasierte Validierung, geplante Task-Persistenz und verschiedene Techniken zur Dateiablage, um Sichtbarkeit zu reduzieren und Erkennung zu umgehen. Die Infrastruktur ist hinter Cloudflare positioniert und nutzt mehrere needbinding.icu Domains.
Untersuchung
Forscher rekonstruierten die vollständige Angriffskette, beginnend mit dem bösartigen PDF-Köder, fortgesetzt über den JavaScript-Dropper und den PicassoLoader-Downloader bis hin zur Bereitstellung der Cobalt-Strike-Nutzlast. Sie extrahierten Indikatoren, einschließlich Dateinamen, Registry-Änderungen und Command-and-Control-URLs, und verbanden diese mit bekannten FrostyNeighbor-Praktiken. Der Bericht hebt auch die Ausnutzung von CVE-2023-38831 in WinRAR und CVE-2024-42009 in Roundcube.
Abmilderung
Organisationen sollten verdächtige Anhangstypen blockieren, strikte Kontrollen über Makro- und Skriptausführung durchsetzen, geplante Tasks von unbekannten Binärdateien überwachen und ausgehenden HTTPS-Verkehr zu bekannten bösartigen Domains einschränken. Die referenzierten Schwachstellen sollten umgehend gepatcht werden, und Einschränkungen des geringsten Privilegs sollten auf den Gebrauch von rundll32.exe angewendet werden.
Reaktion
Wenn verwandte Indikatoren erkannt werden, isolieren Sie das betroffene System sofort, sammeln Sie forensische Artefakte und suchen Sie sowohl nach dem Cobalt-Strike-Beacon als auch nach PicassoLoader-Komponenten. Setzen Sie alle exponierten Anmeldeinformationen zurück und überprüfen Sie geplante Tasks sowie Run-Key-Einträge auf Anzeichen von Persistenz.
"graph TB %% Class definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef file fill:#c2f0c2 classDef tool fill:#cccccc classDef malware fill:#ff9999 %% Nodes – Actions attack_initial_access["<b>Aktion</b> – <b>T1566.001 Phishing: Spearphishing-Anhang</b><br/>Bösartige PDF-E-Mail mit Link zu einem RAR-Archiv."] class attack_initial_access action action_user_execution["<b>Aktion</b> – <b>T1204.002 Benutzer-Ausführung</b><br/>Opfer öffnet das PDF, das einen JavaScript-Dropper ausführt."] class action_user_execution action %% Nodes – Files file_malicious_pdf["<b>Datei</b> – <b>Name</b>: bösartig.pdf<br/>Enthält JavaScript-Dropper."] class file_malicious_pdf file file_rar["<b>Datei</b> – <b>Name</b>: payload.rar<br/>Über Link im PDF geliefert."] class file_rar file file_scheduled_xml["<b>Datei</b> – <b>Name</b>: scheduled_task.xml<br/>XML zum Registrieren einer geplanten Aufgabe."] class file_scheduled_xml file file_reg["<b>Datei</b> – <b>Name</b>: persistence.reg<br/>Registry-Datei, die einen Run-Key erstellt.""" class file_reg file file_lnk["<b>Datei</b> – <b>Name</b>: launcher.lnk<br/>Verknüpfung im Autostart-Ordner platziert.""" class file_lnk file %% Nodes – Malware / Tools malware_javascript_dropper["<b>Malware</b> – <b>Name</b>: JavaScript-Dropper<br/>Führt base64-kodierte Skripte aus und bettet Nutzlasten der zweiten Stufe ein."] class malware_javascript_dropper malware tool_picasso_loader["<b>Tool</b> – <b>Name</b>: PicassoLoader<br/>Sammelt Systeminformationen, Prozessliste und Daten zur Opferidentität."] class tool_picasso_loader tool malware_cobalt_strike["<b>Malware</b> – <b>Name</b>: Cobalt Strike Beacon<br/>Bietet Fernsteuerungsmöglichkeiten.""" class malware_cobalt_strike malware %% Nodes – Techniques technique_obfuscation["<b>Technik</b> – <b>T1027 Verschleierte Dateien oder Informationen</b><br/>Nutzlasten sind base64-kodiert, um der Erkennung zu entgehen."] class technique_obfuscation technique technique_embedded_payload["<b>Technik</b> – <b>T1027.009 Eingebettete Nutzlasten</b><br/>Downloader und Beacon sind innerhalb des JavaScript versteckt."] class technique_embedded_payload technique technique_gather_identity["<b>Technik</b> – <b>T1589 Opferidentitätsinformationen sammeln</b><br/>Sammelt Benutzername, Computername, Betriebssystemversion und Bootzeit."] class technique_gather_identity technique technique_system_info["<b>Technik</b> – <b>T1082 Systeminformationsaufklärung</b><br/>Erfasst detaillierte Systemspezifikationen."] class technique_system_info technique technique_process_discovery["<b>Technik</b> – <b>T1057 Prozessentdeckung</b><br/>Erfasst laufende Prozesse auf dem Host."] class technique_process_discovery technique technique_c2_https["<b>Technik</b> – <b>T1071.001 Anwendungsschichtprotokoll: Webprotokolle</b><br/>Kommuniziert mit C2 über HTTPS POST.""" class technique_c2_https technique technique_scheduled_task["<b>Technik</b> – <b>T1053.005 Geplante Aufgabe/Auftrag</b><br/>Erstellt eine geplante-Aufgabe-XML für Persistenz.""" class technique_scheduled_task technique technique_run_key["<b>Technik</b> – <b>T1060 Registry Run Keys / Autostart-Ordner</b><br/>Fügt einen Run-Key hinzu, der auf eine bösartige LNK verweist.""" class technique_run_key technique technique_exfiltration["<b>Technik</b> – <b>T1041 Exfiltration über C2-Kanal</b><br/>Sendet gesammelte Daten über denselben HTTPS-Kanal.""" class technique_exfiltration technique %% Connections – Attack Flow attack_initial_access –>|liefert| file_malicious_pdf file_malicious_pdf –>|wird von geöffnet| action_user_execution action_user_execution –>|führt aus| malware_javascript_dropper malware_javascript_dropper –>|verwendet| technique_obfuscation malware_javascript_dropper –>|enthält| technique_embedded_payload technique_embedded_payload –>|lässt fallen| tool_picasso_loader tool_picasso_loader –>|sammelt| technique_system_info tool_picasso_loader –>|sammelt| technique_process_discovery tool_picasso_loader –>|sammelt| technique_gather_identity tool_picasso_loader –>|kontaktiert| technique_c2_https technique_c2_https –>|liefert| malware_cobalt_strike malware_cobalt_strike –>|etabliert| technique_scheduled_task technique_scheduled_task –>|erstellt| file_scheduled_xml malware_cobalt_strike –>|etabliert| technique_run_key technique_run_key –>|erstellt| file_reg file_reg –>|fügt hinzu| file_lnk technique_c2_https –>|exfiltriert via| technique_exfiltration "
Angriffsfluss
Erkennungen
Mögliche Persistenzpunkte [ASEPs – Software/NTUSER Hive] (via registry_event)
Ansehen
Systemprozesse Ausführung aus untypischen Pfaden (via process_creation)
Ansehen
Rundll32 Dll Verdächtige Pfadausführung (via process_creation)
Ansehen
LOLBAS WScript / CScript (via process_creation)
Ansehen
IOCs (HashSha1) zur Erkennung: FrostyNeighbor: Neue Missetaten und digitale Scherze
Ansehen
FrostyNeighbor C&C Kommunikationserkennung [Windows Netzwerkverbindung]
Ansehen
FrostyNeighbor Cobalt Strike Bereitstellung über Rundll32 und JavaScript [Windows Prozesscreation]
Ansehen
Simulation Ausführung
Voraussetzung: Der Telemetrie- & Basis-Prüf-Vorflug muss bestanden worden sein.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die die Erkennungsregel auslösen soll. Die Befehle und der Verlauf MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, die genau erwartete Telemetrie zu erzeugen, die durch die Erkennungslogik erkannt wird.
-
Angriffserzählung & Befehle:
Der Angreifer hat einen Fuß in die Tür auf dem Opferhost bekommen und möchte unbemerkt ein Cobalt Strike-Beacon bereitstellen. Sie:
- Kopieren
rundll32.exean einen nicht standardmäßigen Ort (C:ProgramDataTemprundll32.exe), um einfache Whitelist-Alarme zu umgehen. - Die bösartige DLL ablegen (
ViberPC.dll) in%ProgramData%. Diese DLL enthält die gebootstrappte Cobalt Strike-Nutzlast. - Die kopierte durchführen
rundll32.exemit einer Befehlszeile, die die bösartige DLL lädt (%ProgramData%ViberPC.dll). - Zwei JavaScript-Dateien ablegen (
53_7.03.2026_R.jsandUpdate.js), die JScript enthalten, das den C2-Server kontaktiert und die Beacon-Installation abschließt. - Die JavaScript-Dateien ausführen unter Verwendung von
cscript.exe, was zur Erstellung von Prozessen führt, derenBildendet mit.jsund derenBefehlsliniedie genauen Dateinamen enthält.
Diese Schritte erzeugen die genauen Sysmon-Prozess-Erstellungsereignisse, die durch
Auswahl1,Auswahl2undAuswahl3in der Sigma-Regel erfasst werden. - Kopieren
-
Regressionstest-Skript:
# FrostyNeighbor Cobalt Strike Bereitstellungssimulation # ------------------------------------------------- # 1. Pfade vorbereiten $tempDir = "$env:ProgramDataTemp" $rundllCopy = Join-Path $tempDir "rundll32.exe" $malDll = "$env:ProgramDataViberPC.dll" $js1 = "$env:ProgramData53_7.03.2026_R.js" $js2 = "$env:ProgramDataUpdate.js" # 2. Sicherstellen, dass das Tempverzeichnis existiert New-Item -Path $tempDir -ItemType Directory -Force | Out-Null # 3. Kopieren Sie rundll32.exe an einen nicht-standardmäßigen Ort Copy-Item -Path "$env:SystemRootSystem32rundll32.exe" -Destination $rundllCopy -Force # 4. Erstellen Sie eine Dummy-bösartige DLL (in einem echten Angriff wäre dies die Nutzlast) $dummyDll = [IO.File]::ReadAllBytes("$env:SystemRootSystem32driversetchosts") # Platzhalter-Binärdatei [IO.File]::WriteAllBytes($malDll, $dummyDll) # 5. Führen Sie die kopierte rundll32 mit der bösartigen DLL aus Start-Process -FilePath $rundllCopy -ArgumentList "`"$malDll`"" -WindowStyle Hidden # 6. JavaScript-Nutzlasten ablegen $jsContent = @" // Einfaches JScript, das zu einem C2-Endpunkt gelangt (simuliert) var xhr = new ActiveXObject("MSXML2.XMLHTTP"); xhr.open("GET", "http://127.0.0.1:8080/beacon", false); xhr.send(); "@ Set-Content -Path $js1 -Value $jsContent -Encoding ASCII Set-Content -Path $js2 -Value $jsContent -Encoding ASCII # 7. Die JavaScript-Dateien über cscript ausführen (dies erzeugt Prozesse mit .js-Bild) Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js1`"" -WindowStyle Hidden Start-Process -FilePath "cscript.exe" -ArgumentList "//NoLogo `"$js2`"" -WindowStyle Hidden # 8. Pause für die SIEM-Aufnahme Start-Sleep -Seconds 15 -
Bereinigungskommandos:
# Bereinigung nach der Simulation $paths = @( "$env:ProgramDataViberPC.dll", "$env:ProgramData53_7.03.2026_R.js", "$env:ProgramDataUpdate.js", "$env:ProgramDataTemprundll32.exe" ) foreach ($p in $paths) { if (Test-Path $p) { Remove-Item -Path $p -Force } } # Gegebenenfalls laufende cscript-Prozesse beenden, die durch den Test gestartet wurden Get-Process -Name cscript -ErrorAction SilentlyContinue | Stop-Process -Force