
Un toolkit per CobaltStrike che scrive in memoria, invece che su disco, i file prodotti da Beacon.
MemFiles è un toolkit per CobaltStrike che consente agli Operatori di scrivere i file prodotti dal processo Beacon in memoria, invece di scriverli su disco nel sistema target. È stato testato con successo su Windows 7, 10 e 11; le corrispondenti versioni server dovrebbero funzionare senza problemi. MemFiles è limitato ai Beacon x64.
Funziona hookando diverse NtAPI all'interno di NTDLL.dll e reindirizzando le chiamate a quelle API verso funzioni che sono state iniettate nello spazio di memoria del processo Beacon.
MemFiles presuppone una copia pulita/senza hook di NTDLL nel processo Beacon. Non vengono fornite garanzie sulla funzionalità di MemFiles in un processo Beacon in cui siano ancora presenti hook EDR. Riparare/aggiornare NTDLL prima di usare MemFiles!
All'interno del toolkit MemFiles viene definita una directory "speciale", inesistente; qualsiasi file scritto in questa directory speciale verrà catturato da MemFiles e scritto in memoria, dove potrà poi essere scaricato sul Teamserver.
MemFiles è compatibile con la maggior parte (non tutti) degli strumenti che girano all'interno del processo Beacon e che possono essere istruiti per scrivere il proprio output in una directory specifica. NON richiede privilegi elevati per funzionare.
Questo include: -BOF -Assembly .NET eseguiti inline usando qualcosa come inline-executeAssembly -PE eseguiti inline usando qualcosa come Inline-Execute-PE
Tutti questi sono compatibili perché girano all'interno del processo Beacon, dove le NtAPI rilevanti sono state hookate.
MemFiles NON funziona con cose come: -execute-assembly -shell -run
Nessuno di questi è compatibile perché tutti generano altri processi le cui NtAPI NON sono state hookate.
MemFiles è stato testato con successo con strumenti come Rubeus, SharpHound, Procdump e Powershell quando vengono eseguiti all'interno del processo Beacon.

Clonare il repository e, opzionalmente, modificare la variabile hookdir definita alla riga 56 sia in /PIC/Source/NtCreateFile.c che in /PIC/Source/NtOpenFile.c. Questa variabile è la directory "speciale" che segnala a MemFiles di intercettare il file in creazione. La variabile hookdir è impostata su "redteam" per impostazione predefinita. Assicurarsi che questa variabile non sia una directory reale sul sistema target e che sia la stessa in entrambi i file!

Eseguire 'make all' per compilare sia i BOF necessari che le funzioni PIC.
Caricare MemFiles.cna nel CobaltStrike Client. Assicurarsi che la directory da cui viene eseguito CobaltStrike sia scrivibile dal proprio utente; MemFiles crea lì un file di testo (memfiles.txt) per garantire la disponibilità dei dati necessari al funzionamento di MemFiles.
MemFiles può essere configurato per installarsi in ogni nuovo Beacon che effettua una chiamata al Teamserver; questo si ottiene usando la voce di menu MemFiles->Config. Per impostazione predefinita, MemFiles NON si installa automaticamente nei nuovi Beacon. Nota che questa è un'impostazione globale; se due Client sono connessi al Teamserver ed entrambi hanno caricato MemFiles.cna, se il Client A attiva l'impostazione "Install on beacon initial", la modifica avrà effetto anche per il Client B!

MemFiles comprende 4 comandi rivolti al target che eseguono BOF e 1 comando interno che manipola la struttura dati del progetto.
Rivolti al target:
Struttura dati interna:
meminit è responsabile dell'installazione di MemFiles nel processo Beacon.
L'elenco delle NtAPI hookate da MemFiles è il seguente:
meminit esegue le seguenti azioni principali:
memlist viene utilizzato per visualizzare tutti i file attualmente memorizzati in memoria da MemFiles per un dato Beacon.
Vengono visualizzati diversi campi; il più rilevante e di interesse per l'utente è il nome del file e la lunghezza dei dati memorizzati.
memfetch viene utilizzato per recuperare effettivamente i file memorizzati in memoria da MemFiles per un dato Beacon.
Per impostazione predefinita, memfetch recupera tutti i file memorizzati da MemFiles il cui "handle" è stato chiuso. Questa scelta progettuale è stata fatta per evitare problemi legati al tentativo di scaricare un file che un programma/applicazione non ha ancora finito di scrivere.
Questo significa che se un programma/applicazione non riesce a chiudere l'handle che apre al file, il file non verrà scaricato da memfetch. Questo può essere mitigato usando l'argomento "force" con memfetch, ad esempio 'memfetch force', per recuperare tutti i file dalla memoria indipendentemente dallo stato del suo handle.
I file che memfetch recupera dalla memoria vengono inviati al Teamserver come download e possono essere sincronizzati dal Teamserver al Client tramite la scheda Downloads in CobaltStrike.
Una volta che un file è stato scaricato dal Teamserver, viene cancellato dalla memoria del processo Beacon e la sua voce mostrata tramite memlist viene rimossa.
memclean è responsabile della pulizia e della rimozione di MemFiles da un processo Beacon.
Il caso d'uso standard di MemFiles prevede l'installazione e il mantenimento per l'intera durata di vita del Beacon; tuttavia, se si desidera usare MemFiles insieme a uno strumento per catturare e recuperare l'output dei file, e poi disinstallare MemFiles così che i suoi artefatti non rimangano in memoria, memclean può essere usato per riportare il processo Beacon al suo stato originale prima dell'esecuzione di meminit.
Questo comporta:
Nota che prima di eseguire queste azioni, memclean scaricherà forzatamente qualsiasi file memorizzato in memoria da MemFiles. Se si intende usare MemFiles con un singolo strumento e poi rimuoverlo, si può saltare l'uso di memfetch e usare direttamente memclean sia per recuperare i file che per rimuovere MemFiles dal processo Beacon in un colpo solo.