
Ein CobaltStrike-Toolkit, um von Beacon erzeugte Dateien in den Speicher statt auf die Festplatte zu schreiben.
MemFiles ist ein Toolkit für CobaltStrike, das Operatoren ermöglicht, Dateien, die vom Beacon-Prozess erzeugt werden, in den Speicher zu schreiben, anstatt sie auf der Festplatte des Zielsystems abzulegen. Es wurde erfolgreich auf Windows 7, 10 und 11 getestet; die entsprechenden Serverversionen sollten ohne Probleme funktionieren. MemFiles ist auf x64-Beacons beschränkt.
Dies wird erreicht, indem mehrere verschiedene NtAPIs innerhalb von NTDLL.dll gehookt und Aufrufe an diese APIs auf Funktionen umgeleitet werden, die in den Speicherraum des Beacon-Prozesses injiziert wurden.
MemFiles setzt eine saubere/ungehookte Kopie von NTDLL im Beacon-Prozess voraus. Es wird keine Garantie dafür übernommen, dass MemFiles in einem Beacon-Prozess funktioniert, in dem noch EDR-Hooks vorhanden sind. Repariere/aktualisiere NTDLL, bevor du MemFiles verwendest!
Innerhalb des MemFiles-Toolkits wird ein „spezielles“, nicht vorhandenes Verzeichnis definiert; alle Dateien, die in dieses spezielle Verzeichnis geschrieben werden, werden von MemFiles erfasst und in den Speicher geschrieben, von wo sie anschließend auf den Teamserver heruntergeladen werden können.
MemFiles ist mit den meisten (nicht allen) Tools kompatibel, die innerhalb des Beacon-Prozesses ausgeführt werden und die angewiesen werden können, ihre Ausgabe in ein bestimmtes Verzeichnis zu schreiben. Es sind keine erhöhten Rechte erforderlich.
Dazu gehören:
-BOFs
-.NET-Assemblys, die inline mit etwas wie inline-executeAssembly ausgeführt werden
-PEs, die inline mit etwas wie Inline-Execute-PE ausgeführt werden
Alle diese sind kompatibel, weil sie innerhalb des Beacon-Prozesses ausgeführt werden, in dem die relevanten NtAPIs gehookt wurden.
MemFiles funktioniert NICHT mit Dingen wie:
-execute-assembly
-shell
-run
Keines davon ist kompatibel, weil sie alle andere Prozesse starten, deren NtAPIs NICHT gehookt wurden.
MemFiles wurde erfolgreich mit Tools wie Rubeus, SharpHound, Procdump und Powershell getestet, wenn sie innerhalb des Beacon-Prozesses ausgeführt werden.

Klon das Repository und ändere optional die Variable hookdir, die in Zeile 56 in /PIC/Source/NtCreateFile.c und /PIC/Source/NtOpenFile.c definiert ist. Diese Variable ist das „spezielle“ Verzeichnis, das MemFiles signalisiert, dass es die erstellte Datei abfangen soll. Die Variable hookdir ist standardmäßig auf „redteam“ gesetzt. Stelle sicher, dass diese Variable kein reales Verzeichnis auf dem Zielsystem ist und dass sie in beiden Dateien identisch ist!

Führe 'make all' aus, um sowohl die erforderlichen BOFs als auch die PIC-Funktionen zu kompilieren.
Lade MemFiles.cna in den CobaltStrike-Client. Stelle sicher, dass das Verzeichnis, aus dem CobaltStrike ausgeführt wird, für deinen Benutzer beschreibbar ist; MemFiles erstellt dort eine Textdatei (memfiles.txt), um die Verfügbarkeit der für MemFiles erforderlichen Daten sicherzustellen.
MemFiles kann so konfiguriert werden, dass es in jedem neuen Beacon installiert wird, der sich beim Teamserver meldet; dies wird über den Menüpunkt MemFiles->Config erreicht. Standardmäßig installiert sich MemFiles NICHT automatisch in neuen Beacons. Beachte, dass dies eine globale Einstellung ist; wenn zwei Clients mit dem Teamserver verbunden sind und beide MemFiles.cna geladen haben, wirkt sich das Umschalten der Einstellung „Install on beacon initial“ durch Client A auch auf Client B aus!

MemFiles besteht aus 4 targetorientierten Befehlen, die BOFs ausführen, und 1 internem Befehl, der die Projektdatenstruktur manipuliert.
Targetorientiert:
Interne Datenstruktur:
meminit ist dafür verantwortlich, MemFiles im Beacon-Prozess zu installieren.
Die Liste der von MemFiles gehookten NtAPIs lautet wie folgt:
meminit führt die folgenden wichtigsten Aktionen aus:
memlist wird verwendet, um alle Dateien anzuzeigen, die von MemFiles für einen bestimmten Beacon derzeit im Speicher abgelegt sind.

Es werden mehrere Felder angezeigt; für den Benutzer am relevantesten und interessantesten sind der Name der Datei und die Länge der gespeicherten Daten.
memfetch wird verwendet, um tatsächlich Dateien abzurufen, die von MemFiles für einen bestimmten Beacon im Speicher abgelegt wurden.
Standardmäßig ruft memfetch alle Dateien ab, die von MemFiles gespeichert wurden und deren „Handle“ geschlossen wurde. Diese Designentscheidung wurde getroffen, um Probleme zu vermeiden, die beim Herunterladen einer Datei auftreten können, die ein Programm/eine Anwendung noch nicht fertig geschrieben hat.
Das bedeutet: Wenn ein Programm/eine Anwendung das Handle, das es zur Datei geöffnet hat, nicht schließt, wird die Datei von memfetch nicht heruntergeladen.
Dies kann durch Verwendung des Arguments „force“ mit memfetch umgangen werden, also 'memfetch force', um alle Dateien unabhängig vom Status ihres Handles aus dem Speicher abzurufen.
Dateien, die memfetch aus dem Speicher abruft, werden als Download an den Teamserver gesendet und können über die Registerkarte „Downloads“ in CobaltStrike vom Teamserver auf den Client synchronisiert werden.
Sobald eine Datei vom Teamserver heruntergeladen wurde, wird sie aus dem Speicher des Beacon-Prozesses gelöscht und ihr Eintrag, der über memlist angezeigt wird, entfernt.
memclean ist dafür verantwortlich, MemFiles aus einem Beacon-Prozess zu entfernen und aufzuräumen.
Der Standard-Anwendungsfall für MemFiles besteht darin, es zu installieren und für die Lebensdauer des Beacons installiert zu lassen; sollte man MemFiles jedoch zusammen mit einem Tool verwenden wollen, um Dateiausgaben zu erfassen und abzurufen, und MemFiles anschließend deinstallieren wollen, damit seine Artefakte nicht im Speicher verbleiben, kann memclean verwendet werden, um den Beacon-Prozess in seinen ursprünglichen Zustand vor der Ausführung von meminit zurückzuversetzen.
Das beinhaltet: