
PowerShell-Verschleierer

Invoke-Obfuscation ist ein PowerShell v2.0+ kompatibler PowerShell-Befehls- und Skript-Obfuskator.
Im Herbst 2015 begann ich damit, die Flexibilität der PowerShell-Sprache zu erforschen, und katalogisierte die verschiedenen Möglichkeiten, eine Handvoll gängiger Techniken umzusetzen, die die meisten Angreifer regelmäßig anwenden.
Anfangs konzentrierte ich mich auf codierte Befehle und Syntaxen für Remote-Download-Cradles. Dabei entdeckte ich, dass verschiedene Escape-Zeichen, die die Ausführung des Befehls nicht behinderten, in den Befehlszeilenargumenten erhalten blieben – sowohl im laufenden Prozess als auch in den Protokollen der Security EID 4688 und Sysmon EID 1. Dies veranlasste mich, systematisch nach Möglichkeiten zu suchen, jede Art von „Token“ in einem PowerShell-Befehl oder -Skript zu verschleiern.
Anschließend untersuchte ich ausgefallenere Methoden zur Zeichenfolgen-Verschleierung, verschiedene Kodierungs-/Verschlüsselungstechniken (wie ASCII/Hex/Oktal/Binär und sogar SecureString) und schließlich PowerShell-Starttechniken, um die Befehlszeilenargumente von powershell.exe zu abstrahieren und an den übergeordneten und sogar den Großelternprozess zurückzugeben.
Angreifer und Schadsoftware setzen zunehmend extrem einfache Verschleierungstechniken ein, um den Großteil des Befehls vor den Befehlszeilenargumenten von powershell.exe zu verbergen. Ich habe dieses Tool entwickelt, um dem Blue Team bei der Simulation verschleierter Befehle zu helfen – basierend auf dem, was ich derzeit als syntaktisch in PowerShell 2.0–5.0 möglich kenne –, damit sie ihre Erkennungsfähigkeiten für diese Techniken testen können.
Der alleinige Zweck des Tools ist es, jegliche Annahmen zu widerlegen, die wir als Verteidiger darüber haben, wie PowerShell-Befehle in der Befehlszeile erscheinen können. Ich hoffe, dass es das Blue Team dazu ermutigt, zusätzlich zur Aktualisierung der PowerShell-Protokollierung (Modul-, ScriptBlock- und Transkriptionsprotokollierung) auf Indikatoren für Verschleierung in der Befehlszeile zu achten, da diese Quellen die meisten Aspekte der von diesem Tool generierten Verschleierungstechniken vereinfachen.
Obwohl alle Verschleierungsebenen in separate Skripte ausgearbeitet wurden, werden die meisten Benutzer die Funktion Invoke-Obfuscation als den einfachsten Weg empfinden, die von diesem Framework derzeit unterstützten Verschleierungstechniken zu erkunden und zu visualisieren.
Der Quellcode für Invoke-Obfuscation wird auf Github gehostet. Sie können ihn von diesem Repository herunterladen, forken und überprüfen (https://github.com/danielbohannon/Invoke-Obfuscation). Bitte melden Sie Probleme oder feature requests über den mit diesem Projekt verbundenen Github-Bugtracker.
So installieren Sie:
Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation
Invoke-Obfuscation wird unter der Apache 2.0-Lizenz veröffentlicht.
v1.0 – 2016-09-25 DerbyCon 6.0 (Louisville, Kentucky USA): ÖFFENTLICHE Veröffentlichung von Invoke-Obfuscation.
v1.1 – 2016-10-09 SANS DFIR Summit (Prag, Tschechische Republik): Hinzugefügt: -f-Formatoperator-Neuordnungsfunktionalität für alle zutreffenden TOKEN-Verschleierungsfunktionen. Außerdem zusätzliche Syntaxoptionen zum Festlegen von Variablenwerten hinzugefügt.
v1.2 – 2016-10-20 CODE BLUE (Tokio, Japan): Typ-TOKEN-Verschleierung hinzugefügt (direkter Typecast mit Zeichenfolgen-Verschleierungsoptionen für den Typnamen).
v1.3 – 2016-10-22 Hacktivity (Budapest, Ungarn): Zwei neue LAUNCHER hinzugefügt: CLIP+ und CLIP++. Außerdem eine zusätzliche (und einfachere) Array-Zeichenkonvertierungssyntax für alle ENCODING-Funktionen, die kein For-EachObject/% benötigt.
v1.4 – 2016-10-28 BruCON (Gent, Belgien): Neue BXOR-ENCODING-Funktion hinzugefügt. Außerdem verbesserte zufällige Groß-/Kleinschreibung für alle Komponenten aller ENCODING-Funktionen sowie für PowerShell-Ausführungsflags aller LAUNCHER. Schließlich die Kurzform -EP für -ExecutionPolicy zu allen LAUNCHERs hinzugefügt sowie die optionale Integer-Darstellung des PowerShell-Ausführungsflags -WindowStyle: Normal (0), Hidden (1), Minimized (2), Maximized (3).
v1.5 – 2016-11-04 Blue Hat (Redmond, Washington USA): WMIC-LAUNCHER mit etwas Zufallsauswahl der WMIC-Befehlszeilenargumente hinzugefügt.
v1.6 – 2017-01-24 Blue Hat IL (Tel Aviv, Israel):
v1.7 – 2017-03-03 nullcon (Goa, Indien):
v1.8 – 2017-07-27 Black Hat (Las Vegas, Nevada USA):
v1.8.1 – 2017-12-19:
v1.8.2 – 2018-01-04: