
Um toolkit CobaltStrike para gravar arquivos produzidos pelo Beacon na memória em vez do disco.
MemFiles é um kit de ferramentas para CobaltStrike que permite que Operadores gravem arquivos produzidos pelo processo Beacon na memória, em vez de gravá-los em disco no sistema alvo. Ele foi testado com sucesso no Windows 7, 10 e 11; as versões de servidor correspondentes devem funcionar sem problemas. O MemFiles é restrito a Beacons x64.
Ele faz isso interceptando várias NtAPIs diferentes dentro de NTDLL.dll e redirecionando chamadas para essas APIs para funções que foram injetadas no espaço de memória do processo Beacon.
O MemFiles assume uma cópia limpa/sem hooks de NTDLL no processo Beacon. Não são dadas garantias sobre a viabilidade do MemFiles em um processo Beacon onde ainda existam hooks de EDR. Repare/atualize a NTDLL antes de usar o MemFiles!
Um diretório "especial", inexistente, é definido dentro do kit de ferramentas MemFiles; quaisquer arquivos gravados nesse diretório especial serão capturados pelo MemFiles e gravados na memória, de onde poderão ser baixados para o Teamserver.
O MemFiles é compatível com a maioria (não todos) das ferramentas que rodam dentro do processo Beacon e que podem ser instruídas a gravar sua saída em um diretório específico. Ele NÃO requer privilégios elevados para funcionar.
Isso inclui:
-BOFs
-.NET assemblies executados inline usando algo como inline-executeAssembly
-PEs executados inline usando algo como Inline-Execute-PE
Todos esses são compatíveis porque são executados dentro do processo Beacon, onde as NtAPIs relevantes foram interceptadas.
O MemFiles NÃO funciona com coisas como:
-execute-assembly
-shell
-run
Nenhum desses é compatível porque todos criam outros processos cujas NtAPIs NÃO foram interceptadas.
O MemFiles foi testado com sucesso com ferramentas como Rubeus, SharpHound, Procdump e Powershell quando executadas dentro do processo Beacon.

Clone o repositório e, opcionalmente, altere a variável hookdir definida na linha 56 em /PIC/Source/NtCreateFile.c e /PIC/Source/NtOpenFile.c. Essa variável é o diretório "especial" que sinaliza ao MemFiles que ele deve interceptar o arquivo que está sendo criado. A variável hookdir está definida como "redteam" por padrão. Certifique-se de que essa variável não seja um diretório real no sistema alvo e que seja a mesma nos dois arquivos!

Execute 'make all' para compilar os BOFs necessários e as funções PIC.
Carregue o MemFiles.cna no Cliente CobaltStrike. Garanta que o diretório a partir do qual o CobaltStrike está sendo executado seja gravável pelo seu usuário; o MemFiles cria um arquivo de texto lá (memfiles.txt) para garantir a disponibilidade dos dados necessários para o funcionamento do MemFiles.
O MemFiles pode ser configurado para ser instalado em cada novo Beacon que entrar em contato com o Teamserver; isso é feito usando o item de menu MemFiles->Config. Por padrão, o MemFiles NÃO é instalado automaticamente em novos Beacons. Observe que essa é uma configuração global; se dois Clientes estiverem conectados ao Teamserver e ambos tiverem o MemFiles.cna carregado, se o Cliente A ativar a opção "Install on beacon initial", a alteração também valerá para o Cliente B!

O MemFiles consiste em 4 comandos voltados ao alvo que executam BOFs e 1 comando interno que manipula a estrutura de dados do projeto.
Voltados ao alvo:
Estrutura de dados interna:
O meminit é responsável por instalar o MemFiles no processo Beacon.
A lista de NtAPIs interceptadas pelo MemFiles é a seguinte:
O meminit realiza as seguintes ações principais:
O memlist é usado para exibir todos os arquivos atualmente armazenados na memória pelo MemFiles para um determinado Beacon.

Vários campos são exibidos; os mais relevantes e de interesse para o usuário são o nome do arquivo e o tamanho dos dados armazenados.
O memfetch é usado para recuperar efetivamente os arquivos armazenados na memória pelo MemFiles para um determinado Beacon.
Por padrão, o memfetch recupera todos os arquivos armazenados pelo MemFiles cujo "handle" foi fechado. Essa escolha de design foi feita para evitar problemas relacionados à tentativa de baixar um arquivo que um programa/aplicação ainda não terminou de gravar.
Isso significa que, se um programa/aplicação não fechar o handle que abriu para o arquivo, o arquivo não será baixado pelo memfetch.
Isso pode ser contornado usando o argumento "force" com o memfetch, ou seja, 'memfetch force', para recuperar todos os arquivos da memória independentemente do status do handle.
Os arquivos que o memfetch recupera da memória são enviados de volta ao Teamserver como um download e podem ser sincronizados do Teamserver para o Cliente pela aba Downloads no CobaltStrike.
Assim que um arquivo é baixado pelo Teamserver, ele é apagado da memória no processo Beacon e sua entrada exibida pelo memlist é removida.
O memclean é responsável por limpar e remover o MemFiles de um processo Beacon.
O caso de uso padrão do MemFiles envolve instalá-lo e deixá-lo instalado durante toda a vida do Beacon; no entanto, se alguém quiser usar o MemFiles em conjunto com uma ferramenta para capturar e recuperar a saída de arquivos e depois desinstalar o MemFiles para que seus artefatos não fiquem na memória, o memclean pode ser usado para reverter o processo Beacon ao seu estado original antes da execução do meminit.
Isso envolve:
Observe que, antes de executar essas ações, o memclean fará o download forçado de qualquer arquivo armazenado na memória pelo MemFiles. Se alguém pretende usar o MemFiles com uma única ferramenta e depois removê-lo, pode pular o uso do memfetch e usar apenas o memclean para recuperar os arquivos E remover o MemFiles do processo Beacon de uma só vez.
O memtable é usado para exibir e rastrear informações sobre os Beacons nos quais o MemFiles está instalado no momento. Ele também exibe informações de configuração globais.