
Ein PowerShell-Arsenal für Sicherheitsleute
[!WICHTIG]
Dieses Repository ist nun archiviert. Auch wenn es eine unterhaltsame Reise war, glaube ich, dass PSArmoury seinen Nutzen überlebt hat.
Die PowerShell Armoury richtet sich an Pentester, "insert-color-here"-Teammitglieder und alle anderen, die während ihrer Einsätze eine Vielzahl von PowerShell-Tools verwenden. Sie ermöglicht es Ihnen, alle Ihre Lieblings-PowerShell-Skripte in einer einzigen, obfuskierten Datei herunterzuladen und zu speichern.
Sie müssen sich nicht mehr darum kümmern, Rubeus, PowerView, ... manuell zu aktualisieren. Erstellen Sie einfach einmal eine Konfigurationsdatei oder verwenden Sie die mitgelieferte Standarddatei. Von nun an brauchen Sie nur noch "New-PSArmoury" auszuführen, bevor Sie zum nächsten Einsatz aufbrechen. Zusätzlich obfuskiert PSArmoury Ihren Code und verfügt über einen integrierten AMSI-Bypass. Das modulare Design sollte es Ihnen leicht machen, den Evasion- oder Obfuskationscode zu ändern, falls es eine Erkennung gibt.
Der Code ist aufgeteilt in ein Hauptskript namens New-PSArmoury.ps1, das Sie ausführen. Der Code für Evasion, Obfuskation und Deobfuskation ist in separaten .ps1-Dateien im Verzeichnis modules gespeichert. Diese separaten Dateien werden vom Hauptskript aufgerufen und sollten es Ihnen erleichtern, bestimmte Funktionen (z. B. einen AMSI-Bypass) zu ändern.
Zusätzlich zum modules-Verzeichnis gibt es auch das Verzeichnis utilities. Hier finden Sie eigenständige Skripte, die in bestimmten Szenarien nützlich sein können.
Der Standardpfad des modules-Verzeichnisses ist .\modules, wobei der Punkt das aktuelle Arbeitsverzeichnis Ihrer Shell bezeichnet. Sie können den Pfad des modules-Verzeichnisses mit dem Argument -ModulesDirectory von New-PSArmoury ändern.
Die Namen der Skriptdateien selbst sind jedoch im Hauptskript fest codiert und werden immer erwartet als:
Werfen wir einen genaueren Blick auf diese beiden.
Dieses Skript sollte den Code enthalten, der dazu dient, das zu umgehen, was Sie umgehen möchten. Standardmäßig enthält es einen bekannten AMSI-Bypass (Dank an amsi.fail). Bitte beachten Sie:
Dieses Skript sollte den Code enthalten, der für Obfuskation und Deobfuskation verwendet wird. Die Standard-obfuscation.ps1 verwendet RC2-Verschlüsselung. Fertige Beispiele:
Beachten Sie, dass die TEMPLATE_obfuscation_empty.ps1 wirklich gar nichts tut und als Vorlage für Ihre eigene Funktion dient.
Wenn Sie eine davon verwenden möchten, benennen Sie sie einfach in "obfuscation.ps1" um und löschen Sie die Standarddatei.
Wenn Sie eine angepasste Version erstellen möchten, beachten Sie Folgendes in Bezug auf die Obfuskation:
Und stellen Sie sicher, dass Sie diese Dinge in Bezug auf die Deobfuskation beachten:
Das utilities-Verzeichnis enthält nützliche eigenständige Skripte.
Die Konfigurationsdatei muss ein gültiges JSON sein, das aus einem einzelnen Array mit einem oder mehreren Objekten besteht, wobei jedes Objekt als eine einzelne Skriptquelle interpretiert wird. Jedes Objekt hat die folgenden Attribute
Name (Pflichtfeld)
Ein Name Ihrer Wahl zur Identifizierung des in diesem Objekt enthaltenen Skripts. Dies dient nur als Referenz für Sie selbst.
URL (Pflichtfeld)
Der Ort, von dem der Skriptinhalt bezogen wird. Dies kann eine URL zu einer Webressource (https://) oder ein lokaler Pfad (C:) oder eine Netzwerkressource (\...) sein. Die URL wird an Net.Webclient bzw. Powershells Get-Item übergeben. Grundsätzlich sollte jedes Format funktionieren, das eines der beiden standardmäßig verarbeiten kann.
Typ (Pflichtfeld)
Dies gibt dem Armoury-Ersteller einen Hinweis auf den Skript-Speicherort. Es gibt drei gültige Typen:
FileInclusionFilter (Optional)
Wird nur bei einem Objekt vom Typ "GitHub" interpretiert. Wird mit dem Powershell-Vergleichsoperator "like" gegen den gesamten Dateinamen gematcht. Denken Sie daran, dass Sie die Platzhalter selbst einfügen müssen. Vergessen Sie nicht, einen Stern (*) einzufügen, wenn Sie einen Teil eines Dateinamens abgleichen möchten. "*.ps1" bedeutet alle Dateien, die mit ".ps1" enden, aber ".ps1" bedeutet nur ".ps1".
Sie müssen keinen Filter angeben, aber wenn Sie einen angeben, müssen Sie ihn auch verwenden. Ein leerer InclusionFilter bedeutet keine Dateien.
FileExclusionFilter (Optional)
Wie der InclusionFilter, aber offensichtlich umgekehrt. Ausschluss hat Vorrang.
Siehe die Inline-PowerShell-Hilfe (man -full New-PSArmoury) für weitere Details.
-Path
Der Pfad zu Ihrer neuen Armoury-Datei. Der Standard ist ".\MyArmoury.ps1"
-FromFile
Laden Sie Ihre PowerShell-Skripte direkt von einem lokalen Ordner oder einer Datei und Sie müssen keine Konfigurationsdatei bereitstellen.
-Config
Der Pfad zu Ihrer JSON-Konfigurationsdatei. Schauen Sie sich das mitgelieferte Beispiel für Ideen an.
-ModulesDirectory