
Un kit de herramientas para CobaltStrike que escribe los archivos generados por Beacon en memoria en lugar de en disco.
MemFiles es un conjunto de herramientas para CobaltStrike que permite a los operadores escribir en memoria los archivos producidos por el proceso Beacon, en lugar de escribirlos en el disco del sistema objetivo. Se ha probado con éxito en Windows 7, 10 y 11; las versiones de servidor correspondientes deberían funcionar sin problemas. MemFiles está restringido a Beacons x64.
Lo consigue enganchando (hookeando) varias NtAPI diferentes dentro de NTDLL.dll y redirigiendo las llamadas a esas API a funciones que se han inyectado en el espacio de memoria del proceso Beacon.
MemFiles asume que hay una copia limpia/sin enganchar de NTDLL en el proceso Beacon. No se ofrecen garantías sobre la viabilidad de MemFiles en un proceso Beacon donde los hooks de EDR sigan presentes. ¡Repara/actualiza NTDLL antes de usar MemFiles!
Dentro del conjunto de herramientas MemFiles se define un directorio "especial" e inexistente; cualquier archivo que se escriba en este directorio especial será capturado por MemFiles y escrito en memoria, desde donde podrá descargarse posteriormente al Teamserver.
MemFiles es compatible con la mayoría (no todos) de las herramientas que se ejecutan dentro del proceso Beacon y a las que se les puede indicar que escriban su salida en un directorio específico. NO requiere privilegios elevados para funcionar.
Esto incluye:
-BOFs
-Ensamblados .NET ejecutados en línea con algo como inline-executeAssembly
-PEs ejecutados en línea con algo como Inline-Execute-PE
Todos ellos son compatibles porque se ejecutan dentro del proceso Beacon, donde las NtAPI relevantes han sido enganchadas.
MemFiles NO funciona con cosas como:
-execute-assembly
-shell
-run
Ninguno de ellos es compatible porque todos generan otros procesos cuyas NtAPI no han sido enganchadas.
MemFiles se ha probado con éxito con herramientas como Rubeus, SharpHound, Procdump y Powershell cuando se ejecutan dentro del proceso Beacon.

Clona el repositorio y, opcionalmente, modifica la variable hookdir definida en la línea 56 tanto en /PIC/Source/NtCreateFile.c como en /PIC/Source/NtOpenFile.c. Esta variable es el directorio "especial" que le indica a MemFiles que debe interceptar el archivo que se está creando. La variable hookdir está configurada como "redteam" por defecto. ¡Asegúrate de que esta variable no sea un directorio real en el sistema objetivo y de que sea la misma en ambos archivos!

Ejecuta 'make all' para compilar tanto los BOF necesarios como las funciones PIC.
Carga MemFiles.cna en el Cliente de CobaltStrike. Asegúrate de que el directorio desde el que se ejecuta CobaltStrike sea escribible por tu usuario; MemFiles crea allí un archivo de texto (memfiles.txt) para garantizar la disponibilidad de los datos necesarios para que MemFiles funcione.
MemFiles puede configurarse para instalarse en cada nuevo Beacon que se comunique con el Teamserver; esto se consigue mediante el elemento de menú MemFiles->Config. Por defecto, MemFiles NO se autoinstala en Beacons nuevos. Ten en cuenta que esta es una configuración global; si dos Clientes están conectados al Teamserver y ambos tienen MemFiles.cna cargado, si el Cliente A activa la opción "Install on beacon initial", el cambio también tendrá efecto para el Cliente B.

MemFiles se compone de 4 comandos orientados al objetivo que ejecutan BOF y 1 comando interno que manipula la estructura de datos del proyecto.
Orientados al objetivo:
Estructura de datos interna:
meminit se encarga de instalar MemFiles en el proceso Beacon.
La lista de NtAPI enganchadas por MemFiles es la siguiente:
meminit realiza las siguientes acciones principales:
memlist se utiliza para mostrar todos los archivos almacenados actualmente en memoria por MemFiles para un Beacon determinado.

Se muestran varios campos; los más relevantes y de interés para el usuario son el nombre del archivo y la longitud de los datos almacenados.
memfetch se utiliza para recuperar realmente los archivos almacenados en memoria por MemFiles para un Beacon determinado.
Por defecto, memfetch recupera todos y cada uno de los archivos almacenados por MemFiles cuyo "handle" haya sido cerrado. Esta decisión de diseño se tomó para evitar problemas relacionados con intentar descargar un archivo que un programa/aplicación no ha terminado de escribir.
Esto significa que si un programa/aplicación no cierra el handle que abrió para el archivo, memfetch no descargará dicho archivo.
Esto se puede mitigar usando el argumento "force" con memfetch, es decir, 'memfetch force' para recuperar todos los archivos de la memoria independientemente del estado de su handle.
Los archivos que memfetch recupera de la memoria se envían de vuelta al Teamserver como una descarga y pueden sincronizarse desde el Teamserver al Cliente a través de la pestaña Downloads en CobaltStrike.
Una vez que el Teamserver ha descargado un archivo, este se borra de la memoria del proceso Beacon y su entrada, mostrada mediante memlist, se elimina.
memclean se encarga de limpiar y eliminar MemFiles de un proceso Beacon.
El caso de uso estándar de MemFiles implica instalarlo y dejarlo instalado durante toda la vida del Beacon; sin embargo, si se quiere usar MemFiles junto con una herramienta para capturar y recuperar la salida de archivos, y luego desinstalar MemFiles para que sus artefactos no queden en memoria, se puede usar memclean para revertir el proceso Beacon a su estado original antes de ejecutar meminit.
Esto implica:
Ten en cuenta que antes de realizar estas acciones, memclean descargará forzosamente cualquier archivo almacenado en memoria por MemFiles. Si se pretende usar MemFiles con una sola herramienta y luego eliminarlo, se puede omitir memfetch y usar memclean para recuperar los archivos Y eliminar MemFiles del proceso Beacon de una sola vez.