
Ein optimierter FTP-gesteuerter Befehls- und Kontrollkanal zur Verbindung entfernter Systeme.
SharpFtpC2 ist ein kleines, experimentelles Projekt, das die Möglichkeit erkundet, FTP(S) zur Weiterleitung von Befehlen und Antworten zwischen zwei entfernten Computern zu nutzen. Es verwendet das FTP-Protokoll als provisorischen Tunnel, durch den die beiden Computer, die beide als Clients mit einem FTP-Server verbunden sind, kommunizieren können. Ein einfaches Sitzungsverwaltungsschema wird verwendet, um den Austausch von Anfragen und Antworten nachzuverfolgen.
SharpFtpC2 verwendet ein grundlegendes Sitzungsverwaltungssystem. Obwohl es recht elementar ist, dient es dem Zweck, die Kommunikation synchronisiert und zusammenhängend zu halten, was für den Hin- und Her-Austausch zwischen den entfernten Systemen unerlässlich ist.
Es ist erwähnenswert, dass dieses Projekt mühelos portiert werden kann, indem Versionskontrollsysteme wie git, svn oder ähnliche Protokolle verwendet werden.
Wenn Sie sich für die Details der Netzwerkkommunikation interessieren oder einfach nur mit C# und .NET Core herumspielen möchten, könnte SharpFtpC2 ein interessanter Ausgangspunkt sein. Erwarten Sie kein ausgefeiltes Juwel, aber vielleicht, nur vielleicht, lernen Sie etwas Interessantes beim Herumexperimentieren.
SharpFtpC2 ist ein experimentelles Projekt, das zu Bildungszwecken entwickelt wurde, um die Nutzung von FTP(S) als Kommunikationskanal zwischen zwei entfernten Computern zu untersuchen. Es ist wichtig zu verstehen, dass das Projekt als Lernressource für Personen konzipiert ist, die sich für Netzwerkkommunikation, C#, Adversary Simulation, Red Team, Malware interessieren. Als Ersteller bitte ich die Benutzer, keine zusätzlichen Funktionen anzufordern oder dieses Projekt für irgendeine Form von Waffen oder böswilligen Zwecken zu verwenden. Die Kernabsicht ist lehrreich, und die Benutzer werden gebeten, sich verantwortungsbewusst und ethisch mit dem Inhalt auseinanderzusetzen.
SharpFtpC2 entstand aus dem Wunsch heraus, zum Unprotect Project beizutragen, insbesondere zu dessen Network Evasion-Kategorie.
Diese Idee, FTP als "Tunnel" zu verwenden, hat tiefe Wurzeln. Tatsächlich weckt sie schöne Erinnerungen an etwa 2005, als ich noch in der Programmierwelt Fuß fasste. Damals traf ich auf einen bemerkenswert kreativen Franzosen mit dem Pseudonym BlasterWar. Er hatte ein Projekt namens BlasterX konzipiert, das – obwohl es der Zeit verloren gegangen ist – für seine Zeit recht avantgardistisch war.
BlasterWars Einfallsreichtum bestand darin, eine Alternative zur herkömmlichen Reverse-Connection zu bieten, bei der der Agent eine Verbindung zurück zum kontrollierenden oder hackenden Gerät herstellen musste.
Stattdessen entschied sich BlasterWar für FTP (File Transfer Protocol) als alternatives Medium und baute darum ein umfassendes Remote-Access-Tool. Das Tool enthielt Funktionen wie Bildschirmaufnahme, Keylogging und Systemverwaltung, die alle durch den FTP-Tunnel übertragen wurden. Zu dieser Zeit war FTP weit verbreitet und zahlreiche Websites boten der Öffentlichkeit kostenlose FTP-Server an. Dies machte es zu einer idealen Alternative zu Reverse- oder Direktverbindungen, die Portweiterleitung erforderten. Darüber hinaus bot es eine zusätzliche Verschleierungsebene für die Kommando- und Steuerung (C2), da die IP-Adresse des Hackers nicht direkt sichtbar war.
Heutzutage ist die Verwendung von FTP als Tunnel kein neues Konzept mehr, da einige Command-and-Control (C2)-Frameworks dieses Protokoll übernommen haben. Allerdings ist die Verwendung von FTP auf diese Weise mit Risiken behaftet. Insbesondere die Übertragung von Anmeldeinformationen im Klartext über das Netzwerk durch FTP, kombiniert mit der Notwendigkeit, dass beide Parteien diese Anmeldeinformationen besitzen müssen, macht es anfällig für eine Vielzahl von Angriffen. Obwohl FTP-Server Fortschritte bei der Bewältigung dieser Sicherheitsprobleme gemacht haben, indem sie zunehmend FTPS übernehmen, das SSL/TLS-Verschlüsselung integriert, war diese Anpassung kein Allheilmittel für alle inhärenten Risiken.
Mit etwas Einfallsreichtum und durch Inspiration aus bestehenden Protokollen ist es möglich, eine erhebliche Anzahl der bestehenden Risiken anzugehen.
Um dieses Projekt zu kompilieren, benötigen Sie zwei Komponenten: Visual Studio und eine Abhängigkeit für den Controller namens CommandLineUtils.
Da dieses Projekt .NET Core verwendet, kann es problemlos für verschiedene Plattformen kompiliert werden, ohne dass Codeänderungen erforderlich sind. Möglicherweise müssen Sie jedoch bestimmte Funktionen implementieren, die auf die Zielplattform zugeschnitten sind.
Um dieses Projekt schnell zu testen, empfehle ich die Verwendung von Docker mit dem Image stilliard/pure-ftpd. Dieses Image unterstützt eine Reihe von Optionen, mit denen Sie schnell Ihren eigenen FTP-Server einrichten können.
docker pull stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x --tls=2" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark -e "TLS_CN=localhost" -e "TLS_ORG=maislaf" -e "TLS_C=FR" stilliard/pure-ftpd
Passen Sie die Einstellungen gerne an Ihre Anforderungen an. Ich rate jedoch dringend davon ab, diesen Test-FTP-Server lokalen oder öffentlichen Netzwerken auszusetzen. Es wäre ratsamer, die Exposition dieses Containers nur auf Ihren Host-Rechner zu beschränken.
Die Option ADDED_FLAGS ermöglicht es Ihnen, den pure-ftpd-Server fein abzustimmen. Erklärungen zu allen Flags finden Sie hier.
Bestimmte Flags können Änderungen an der Funktionsweise des C2-Protokolls erforderlich machen. Wenn Sie beispielsweise die Option -K verwenden, um alle Dateien zu behalten, wird das Löschen von Dateien über FTP deaktiviert. Da das aktuelle C2-Protokoll diese Funktion nutzt, müssen Sie möglicherweise alternative Ansätze in Betracht ziehen, wie z.B. das Umbenennen oder Verschieben von Dateien.
Um die Integrität und Vertraulichkeit aller Kommunikation zwischen den Agenten und dem C2 zu gewährleisten, wurde nahtlos eine Verschlüsselung in das Kommunikationsprotokoll integriert, die sowohl RSA- als auch AES-GCM-256-Bit-Algorithmen verwendet. Das Hauptziel dieser Funktion ist es, die Möglichkeit zu verhindern, dass ein kompromittierter FTP-Server bösartige Befehle übermittelt. Durch die Verwendung von Verschlüsselung wird eine Befehlsinjektion unmöglich, ohne Zugriff auf den öffentlichen Schlüssel des Agenten zu haben. Ebenso ist es nicht möglich, gefälschte Agentenantworten zu injizieren, ohne den öffentlichen Schlüssel des C2 zu besitzen.
Um die Generierung eigener Schlüsselpaare zu vereinfachen (ein Schlüsselpaar für den Agenten und eines für das C2), habe ich ein Drittanbieter-Tool namens RSAKeyHelper beigefügt. Jedes Mal, wenn Sie die Anwendung ausführen, wird Ihnen ein frisch generiertes Paar aus öffentlichem und privatem Schlüssel präsentiert, die im Programm verwendet werden können, wenn Sie sich für die Verschlüsselung entscheiden.

Um zu überprüfen, ob alles wie beabsichtigt funktioniert, habe ich innerhalb des gleichen Tools auch eine Funktion integriert, mit der Sie die Zeichenfolgenverschlüsselung testen können.

Die Veröffentlichung der Version "3.0 Final" markiert den Abschluss dieses Projekts. Ich werde keine weiteren Funktionen hinzufügen; das Ziel dieser PoC war es, die Erstellung eines zuverlässigen und sicheren C2 unter Verwendung von FTP(S) zu demonstrieren. Sie sind ermutigt, Ihre eigene Version mit maßgeschneiderten Funktionen zu entwickeln. Als Übung könnten Sie die Implementierung von Multithreading-Tasking in Betracht ziehen, um zu verhindern, dass die Anwendung bei länger dauernden Aufgaben hängt.
Ich werde jedoch weiterhin Unterstützung für das Projekt bieten, was die Behebung potenzieller Fehler oder Optimierungsmöglichkeiten betrifft.
(Liste der Agenten)

(Befehl an aktiven (Kontext-)Agenten ausführen)

(Agent-Konsole Debug-Fenster mit Benutzerbestätigung bei gefährlicher Aktion)
