Verschlüsseltes JavaScript im Kern des Angriffs
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Eine Phishing-E-Mail lieferte eine bösartige JavaScript-Datei innerhalb eines RAR-Archivs, die eine Infektionskette auslöste, die mit der Ausführung der Formbook-Malware endet. Nach dem Start schreibt das Skript mehrere Dateien in den öffentlichen Ordner, stellt durch eine geplante Aufgabe die Persistenz her und startet eine PowerShell-Nutzlast, die AES-verschlüsselte Inhalte entschlüsselt, um eine bösartige .NET-DLL zu laden. Diese DLL wird dann in ein MSBuild.exe Prozess injiziert, wo sie die Ausführung fortsetzt und die letzte Malware-Phase deployt. Die Kampagne umfasst auch mehrere Abwehrmethoden, einschließlich der Modifikation von ETW und AMSI, um die Erkennung zu reduzieren.
Untersuchung
Während der Analyse identifizierten Forscher den JavaScript-Dropper cbmjlzan.JS, zusammen mit einer geplanten Aufgabe, die so konfiguriert ist, dass das kopierte Skript alle fünfzehn Minuten zur Persistenz ausgeführt wird. Sie verfolgten auch den PowerShell-Befehl, der für die Dekodierung von Base64-codierten Daten verantwortlich ist, die in Bilddateien versteckt sind. Der entschlüsselte Inhalt offenbarte eine .NET-DLL, die in MSBuild.exe injiziert wurde und zur Bereitstellung von Formbook verwendet wurde. Weitere Indikatoren, einschließlich Dateipfade, Aufgabennamen und kryptografisches Material, wurden extrahiert, um tiefere Untersuchungen und die Entwicklung von Erkennungsmöglichkeiten zu unterstützen.
Abmilderung
Organisationen sollten die Ausführung von nicht vertrauenswürdigen JavaScript-Dateien und PowerShell-Skripten, die aus benutzerzugänglichen Verzeichnissen gestartet werden, blockieren und gleichzeitig genau auf geplante Aufgaben achten, die mit ungewöhnlichen oder zufällig aussehenden Namen erstellt wurden. Ausführungskontrollen sollten angewendet werden auf MSBuild.exe , um Missbrauch in Malware-Ketten zu verhindern. Sicherheitstools sollten auch DLL-Injections, ETW- und AMSI-Manipulationen und bekannte Formbook-bezogene Signaturen erkennen. Schulungen zur Sensibilisierung der Benutzer bleiben wichtig, um das Risiko von Phishing-Anhängen zu minimieren.
Reaktion
Verteidiger sollten Warnungen generieren, wenn die identifizierte JavaScript-Datei oder die zugehörige geplante Aufgabe erscheint, dann den betroffenen Endpunkt isolieren und flüchtige Beweise zur Analyse sammeln. Die bösartigen Dateien sollten entfernt, die geplante Aufgabe gelöscht und die injizierte DLL vollständig untersucht werden, um den vollständigen Ablauf der Ausführung zu verstehen. Alle kompromittierten Systemkomponenten sollten neu aufgebaut oder wiederhergestellt werden, um die Integrität zu gewährleisten. Relevante IOCs sollten auch mit der breiteren Sicherheitsgemeinschaft geteilt werden, um anderen bei der Erkennung ähnlichen Verhaltens zu helfen.
"graph TB %% Klassendefinitionen classDef action fill:#ffcccc classDef tool fill:#99ccff classDef process fill:#ffff99 classDef file fill:#ccffcc classDef malware fill:#ffcc99 %% Knoten e-mail_phishing["<b>Aktion</b> – <b>T1566.001 Spearphishing-Anhang</b><br/>Bösartige RAR-Anlage, geliefert über eu2011mail"] class email_phishing action werkzeug_wsh["<b>Werkzeug</b> – <b>Name</b>: Windows Script Host (JavaScript)<br/><b>Technik</b>: T1559.001 Component Object Model"] class tool_wsh tool action_copy["<b>Aktion</b> – <b>T1559.001 Component Object Model</b><br/>Skript kopiert sich selbst nach C:UsersPublicLibraries"] class action_copy action action_sched["<b>Aktion</b> – <b>T1053 Geplante Aufgabe/Job</b><br/>Erstellt eine geplante Aufgabe zur Persistenz"] class action_sched action werkzeug_ps["<b>Werkzeug</b> – <b>Name</b>: PowerShell<br/><b>Technik</b>: T1059.001 Befehl und Scripting-Interpreter"] class tool_ps tool action_decode["<b>Aktion</b> – <b>T1027.004 Kompilierung nach Lieferung</b> & <b>T1140 Deobfuskation/Decodieren von Dateien</b><br/>Base64-Dekodierung und AES-Entschlüsselung von verschlüsselten Blobs"] class action_decode action action_patch["<b>Aktion</b> – <b>T1027.005 Indikator-Entfernung aus Werkzeugen</b><br/>Liveu2011-Patches ETW und AMSI zur Umgehung der Erkennung"] class action_patch action file_dll["<b>Datei</b> – <b>Name</b>: Orio.png (enthält eine verschlüsselte .NET-DLL)<br/><b>Technik</b>: Versteckte Nutzlast"] class file_dll file prozess_msbuild["<b>Prozess</b> – <b>Name</b>: msbuild.exe<br/><b>Technik</b>: T1127.001 Vertrauenswürdige Entwickler-Utilities Proxy-Ausführung"] class process_msbuild process action_inject["<b>Aktion</b> – <b>T1055.001 Prozess-Injektion</b><br/>Injiziert entschlüsselte DLL in msbuild.exe"] class action_inject action malware_formbook["<b>Malware</b> – <b>Name</b>: Formbook<br/><b>Quelle</b>: Brio.png eingebettete Nutzlast"] class malware_formbook malware %% Kanten / Ablauf email_phishing –>|liefert| tool_wsh tool_wsh –>|verwendet COM für| action_copy action_copy –>|führt zu| action_sched tool_wsh –>|startet| tool_ps tool_ps –>|führt aus| action_decode tool_ps –>|wendet an| action_patch action_decode –>|erzeugt| file_dll action_patch –>|bereitet Umgebung für| file_dll file_dll –>|geladen von| process_msbuild process_msbuild –>|erhält| action_inject action_inject –>|extrahiert finalen Payload aus| malware_formbook "
Angriffsfluss
Erkennungen
Verdächtige PowerShell-Strings (via cmdline)
Ansehen
Verdächtige PowerShell-Strings (via PowerShell)
Ansehen
LOLBAS WScript / CScript (via Prozess-Erstellung)
Ansehen
Verdächtige Ausführung aus dem öffentlichen Benutzerprofil (via Prozess-Erstellung)
Ansehen
Aufruf verdächtiger .NET-Methoden aus PowerShell (via PowerShell)
Ansehen
Verdächtige Dateien im öffentlichen Benutzerprofil (via Datei-Ereignis)
Ansehen
Obfuskierte JavaScript-Persistenz und bösartige Payload-Injektion [Windows Prozess-Erstellung]
Ansehen
Ausführung von obfuskiertem PowerShell zur Entschlüsselung [Windows PowerShell]
Ansehen
Simulation-Ausführung
Voraussetzung: Der Telemetrie- & Basislinientest muss bestanden haben.
Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die die Erkennungsregel auslösen soll. Die Befehle und Erzählungen MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffs-Narrativ & Befehle:
Ein Angreifer, der ein Konto mit niedrigen Privilegien verletzt hat, möchte eine bösartige Nutzlast herunterladen, die als Base64-String in einem kompromittierten Skript-Repository gespeichert ist. Um eine Erkennung zu vermeiden, erstellt der Angreifer eine einzelne PowerShell-Einkliner, die (1) den Base64-String dekodiert, (2) ihn überiexaufruft und (3) ein AES-Objekt erstellt, um weitere eingebettete Daten zu entschlüsseln. Die genaue Befehlszeile soll den Literalen der Regel entsprechen.powershell C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('REPLACED_STRING'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create()- Der Angreifer ersetzt
REPLACED_STRINGmit einer legitimen Base64-Nutzlast nach dem Entfernen einer bekannten Markierung (VFHDVXDJCF). - The
-Noexit -nop -cSchalter unterdrücken Eingabeaufforderungen und Umgehung der Ausführungsrichtlinie, die die Erkennungsbedingung erfüllt. - The
$aes_varVariablenname wird wörtlich beibehalten, um die zweite Auswahlklausel zu erfüllen.
- Der Angreifer ersetzt
-
Regressionstest-Skript: Das folgende PowerShell-Skript reproduziert die genaue Befehlszeile auf kontrollierte Weise, um sicherzustellen, dass das SIEM identische Telemetrie erhält.
# Regressionstest-Skript – löst Erkennung aus $payload = "U2FtcGxlIEJhc2U2NCBTdHJpbmc=" # "Beispiel Base64-String" $marker = "VFHDVXDJCF" $obfuscated = $payload.Replace($marker, "") # simuliert die im Nachweis verwendete .Replace $command = @" C:WindowsSystem32WindowsPowerShellv1.0powershell.exe -Noexit -nop -c iex([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String(('${obfuscated}'.Replace('VFHDVXDJCF',''))))) ; $aes_var = [System.Security.Cryptography.Aes]::Create() "@ # Führen Sie die erstellte Befehlszeile aus Invoke-Expression $command -
Bereinigungskommandos: Entfernen Sie alle verbleibenden AES-Objekte und stoppen Sie die gestartete PowerShell-Sitzung.
# Bereinigung – den untergeordneten PowerShell-Prozess beenden, falls noch aktiv Get-Process -Name powershell -ErrorAction SilentlyContinue | Where-Object { $_.Path -like "*WindowsPowerShellv1.0powershell.exe" } | Stop-Process -Force # Optional, um alle temporären Variablen zu löschen Remove-Variable -Name payload, marker, obfuscated, command -ErrorAction SilentlyContinue