
Un toolkit CobaltStrike pour écrire les fichiers produits par Beacon en mémoire plutôt que sur le disque.
MemFiles est une boîte à outils pour CobaltStrike qui permet aux opérateurs d'écrire en mémoire les fichiers produits par le processus Beacon, plutôt que de les écrire sur le disque du système cible. Il a été testé avec succès sur Windows 7, 10 et 11 ; les versions serveur correspondantes devraient fonctionner sans problème. MemFiles est limité aux Beacons x64.
Pour ce faire, il hooke plusieurs NtAPI différentes dans NTDLL.dll et redirige les appels vers ces API vers des fonctions injectées dans l'espace mémoire du processus Beacon.
MemFiles suppose une copie propre/non hookée de NTDLL dans le processus Beacon. Aucune garantie n'est fournie quant à la viabilité de MemFiles dans un processus Beacon où des hooks EDR sont toujours en place. Réparez/actualisez NTDLL avant d'utiliser MemFiles !
Un répertoire « spécial », inexistant, est défini dans la boîte à outils MemFiles ; tous les fichiers écrits dans ce répertoire spécial sont capturés par MemFiles et écrits en mémoire, où ils peuvent ensuite être téléchargés vers le Teamserver.
MemFiles est compatible avec la plupart (pas tous) des outils qui s'exécutent dans le processus Beacon et qui peuvent être configurés pour écrire leur sortie dans un répertoire spécifique. Il ne nécessite PAS de privilèges élevés pour fonctionner.
Cela inclut :
-Les BOF
-Les assemblys .NET exécutés en ligne via quelque chose comme inline-executeAssembly
-Les PE exécutés en ligne via quelque chose comme Inline-Execute-PE
Tous ces éléments sont compatibles car ils s'exécutent dans le processus Beacon, où les NtAPI concernées ont été hookées.
MemFiles ne fonctionne PAS avec des éléments comme :
-execute-assembly
-shell
-run
Aucun de ces éléments n'est compatible car ils lancent tous d'autres processus dont les NtAPI n'ont PAS été hookées.
MemFiles a été testé avec succès avec des outils comme Rubeus, SharpHound, Procdump et PowerShell lorsqu'ils sont exécutés dans le processus Beacon.

Clonez le dépôt et modifiez éventuellement la variable hookdir définie à la ligne 56 dans /PIC/Source/NtCreateFile.c et /PIC/Source/NtOpenFile.c. Cette variable est le répertoire « spécial » qui indique à MemFiles qu'il doit intercepter le fichier en cours de création. La variable hookdir est définie sur « redteam » par défaut. Assurez-vous que cette variable ne correspond pas à un répertoire réel sur le système cible et qu'elle est identique dans les deux fichiers !

Exécutez 'make all' pour compiler à la fois les BOF nécessaires et les fonctions PIC.
Chargez MemFiles.cna dans le client CobaltStrike. Assurez-vous que le répertoire à partir duquel CobaltStrike est exécuté est accessible en écriture par votre utilisateur ; MemFiles y crée un fichier texte (memfiles.txt) afin de garantir la disponibilité des données nécessaires au fonctionnement de MemFiles.
MemFiles peut être configuré pour s'installer dans chaque nouveau Beacon qui se connecte au Teamserver ; cela s'effectue via l'élément de menu MemFiles->Config. Par défaut, MemFiles ne s'installe PAS automatiquement dans les nouveaux Beacons. Notez qu'il s'agit d'un paramètre global ; si deux Clients sont connectés au Teamserver et que les deux ont chargé MemFiles.cna, si le Client A active le paramètre « Install on beacon initial », la modification s'appliquera également au Client B !

MemFiles comprend 4 commandes orientées cible qui exécutent des BOF et 1 commande interne qui manipule la structure de données du projet.
Côté cible :
Structure de données interne :
meminit est responsable de l'installation de MemFiles dans le processus Beacon.
La liste des NtAPI hookées par MemFiles est la suivante :
meminit effectue les actions principales suivantes :
memlist est utilisé pour afficher tous les fichiers actuellement stockés en mémoire par MemFiles pour un Beacon donné.

Plusieurs champs sont affichés, les plus pertinents et intéressants pour l'utilisateur étant le nom du fichier et la longueur des données stockées.
memfetch est utilisé pour récupérer effectivement les fichiers stockés en mémoire par MemFiles pour un Beacon donné.
Par défaut, memfetch récupère tous les fichiers stockés par MemFiles dont le « handle » a été fermé. Ce choix de conception a été fait pour éviter tout problème lié au téléchargement d'un fichier qu'un programme ou une application n'a pas fini d'écrire.
Cela signifie que si un programme ou une application ne ferme pas le handle qu'il ouvre sur le fichier, le fichier ne sera pas téléchargé par memfetch.
Cela peut être atténué en utilisant l'argument « force » avec memfetch, c.-à-d. 'memfetch force', afin de récupérer tous les fichiers depuis la mémoire, quel que soit l'état de leur handle.
Les fichiers que memfetch récupère depuis la mémoire sont renvoyés au Teamserver sous forme de téléchargement et peuvent être synchronisés du Teamserver vers le Client via l'onglet Downloads dans CobaltStrike.
Une fois qu'un fichier a été téléchargé par le Teamserver, il est effacé de la mémoire du processus Beacon et son entrée, telle qu'affichée via memlist, est supprimée.
memclean est responsable du nettoyage et de la suppression de MemFiles d'un processus Beacon.
Le cas d'usage standard de MemFiles consiste à l'installer et à le laisser installé pendant toute la durée de vie du Beacon ; cependant, si l'on souhaite utiliser MemFiles en conjonction avec un outil pour capturer et récupérer la sortie de fichiers, puis désinstaller MemFiles afin que ses artefacts ne soient pas en mémoire, memclean peut être utilisé pour ramener le processus Beacon à son état d'origine avant l'exécution de meminit.
Cela implique :