
Набор инструментов для CobaltStrike для записи файлов, создаваемых Beacon, в память вместо диска.
MemFiles — это набор инструментов для CobaltStrike, который позволяет операторам записывать файлы, создаваемые процессом Beacon, в память, а не на диск целевой системы. Он успешно протестирован на Windows 7, 10 и 11; соответствующие серверные версии должны работать без проблем. MemFiles ограничен x64 Beacon.
Это достигается за счёт перехвата нескольких различных NtAPI в NTDLL.dll и перенаправления вызовов этих API на функции, внедрённые в адресное пространство процесса Beacon.
MemFiles предполагает наличие чистой/неперехваченной копии NTDLL в процессе Beacon. Никаких гарантий работоспособности MemFiles в процессе Beacon, где всё ещё присутствуют перехваты EDR, не даётся. Восстановите/обновите NTDLL перед использованием MemFiles!
В составе MemFiles определена «особая», несуществующая директория; любые файлы, записываемые в эту особую директорию, перехватываются MemFiles и помещаются в память, откуда их затем можно скачать на Teamserver.
MemFiles совместим с большинством (но не со всеми) инструментов, которые работают внутри процесса Beacon и которые можно настроить на запись вывода в конкретную директорию. Для работы не требуются повышенные привилегии.
Сюда входят:
-BOF'ы
-.NET-сборки, запускаемые инлайн с помощью чего-то вроде inline-executeAssembly
-PE'шки, запускаемые инлайн с помощью чего-то вроде Inline-Execute-PE
Все они совместимы, потому что работают внутри процесса Beacon, где соответствующие NtAPI перехвачены.
MemFiles НЕ работает с такими вещами, как:
-execute-assembly
-shell
-run
Ни один из этих вариантов не совместим, поскольку все они порождают другие процессы, NtAPI которых НЕ перехвачены.
MemFiles успешно протестирован с такими инструментами, как Rubeus, SharpHound, Procdump и Powershell, при их запуске внутри процесса Beacon.

Клонируйте репозиторий и при желании измените переменную hookdir, которая определена в строке 56 в обоих файлах /PIC/Source/NtCreateFile.c и /PIC/Source/NtOpenFile.c. Эта переменная является «особой» директорией, которая сообщает MemFiles, что создаваемый файл следует перехватить. По умолчанию переменная hookdir установлена в "redteam". Убедитесь, что эта переменная не является реальной директорией на целевой системе и что она одинакова в обоих файлах!

Выполните 'make all', чтобы скомпилировать необходимые BOF'ы и PIC-функции.
Загрузите MemFiles.cna в клиент CobaltStrike. Убедитесь, что директория, из которой запущен CobaltStrike, доступна для записи вашим пользователем; MemFiles создаёт там текстовый файл (memfiles.txt), чтобы гарантировать доступность данных, необходимых для работы MemFiles.
MemFiles можно настроить на установку в каждый новый Beacon, который связывается с Teamserver; это делается с помощью пункта меню MemFiles->Config. По умолчанию MemFiles НЕ устанавливается автоматически в новые Beacon'ы. Обратите внимание, что это глобальная настройка; если к Teamserver подключены два клиента и в обоих загружен MemFiles.cna, то когда клиент A переключает настройку «Install on beacon initial», изменение также затронет клиента B!

MemFiles состоит из 4 команд, исполняемых на цели, которые запускают BOF'ы, и 1 внутренней команды, которая управляет структурой данных проекта.
Команды, исполняемые на цели:
Внутренняя структура данных:
meminit отвечает за установку MemFiles в процесс Beacon.
Список NtAPI, перехватываемых MemFiles, выглядит следующим образом:
meminit выполняет следующие основные действия:
memlist используется для отображения всех файлов, которые в данный момент хранятся в памяти MemFiles для конкретного Beacon.

Отображается несколько полей; наиболее значимые и интересные для пользователя — имя файла и длина хранящихся данных.
memfetch используется для непосредственного получения файлов, хранящихся в памяти MemFiles для конкретного Beacon.
По умолчанию memfetch загружает все файлы, хранящиеся в MemFiles, чей «handle» был закрыт. Такое проектное решение было принято, чтобы избежать проблем, связанных с попыткой скачать файл, который программа/приложение ещё не закончила записывать.
Это означает, что если программа/приложение не закроет открытый ею handle файла, файл не будет скачан memfetch.
Эту проблему можно обойти с помощью аргумента "force" у memfetch, т.е. 'memfetch force', чтобы получить все файлы из памяти независимо от состояния их handle.
Файлы, которые memfetch извлекает из памяти, отправляются обратно на Teamserver как загрузка (download) и могут быть синхронизированы с Teamserver на клиент через вкладку Downloads в CobaltStrike.
После того как файл был загружен Teamserver'ом, он стирается из памяти процесса Beacon, а его запись, отображаемая через memlist, удаляется.
memclean отвечает за очистку и удаление MemFiles из процесса Beacon.
Стандартный сценарий использования MemFiles подразумевает его установку и оставление установленным на всё время жизни Beacon; однако если требуется использовать MemFiles совместно с инструментом для перехвата и получения файлового вывода, а затем удалить MemFiles, чтобы его артефакты не оставались в памяти, memclean можно использовать для возврата процесса Beacon в исходное состояние, в котором он был до запуска meminit.
Это включает:
Обратите внимание, что перед выполнением этих действий memclean принудительно скачает все файлы, хранящиеся в памяти MemFiles. Если вы планируете использовать MemFiles с одним инструментом, а затем удалить его, можно пропустить memfetch и использовать только memclean, чтобы одновременно и получить файлы, и удалить MemFiles из процесса Beacon за один раз.
memtable используется для отображения и отслеживания информации о Beacon'ах, в которых в данный момент установлен MemFiles. Он также отображает глобальную конфигурационную информацию.