
Cobalt Strike kit per Lateral Movement
MoveKit è un'estensione del movimento laterale integrato di Cobalt Strike che sfrutta la funzione execute_assembly con gli assembly .NET SharpMove e SharpRDP. Lo script aggressor gestisce la creazione del payload leggendo i file template per uno specifico tipo di esecuzione.
IMPORTANTE: Per utilizzare lo script, un utente deve solo caricare lo script aggressor MoveKit.cna che caricherà automaticamente tutti gli altri script necessari. Inoltre, a seconda delle azioni intraprese, gli assembly SharpMove e SharpRDP dovranno essere compilati e inseriti nella directory Assemblies. Infine, alcune operazioni di spostamento file richiedono una compilazione dinamica che necessita di Mono.
Quando si carica lo script aggressor, verrà caricato un selettore nella menubar chiamato Move. Sono disponibili varie selezioni. In primo luogo, gli utenti possono eseguire un comando su un sistema remoto tramite WMI, DCOM, Task Scheduler, RDP o SCM. In secondo luogo, c'è il meccanismo di esecuzione Command che utilizza download cradles per recuperare ed eseguire i file. In terzo luogo, il metodo File rilascia un file sul sistema e lo esegue. C'è anche Write File Only che non esegue nulla, ma solo trasferisce dati. Infine, c'è un'impostazione Default per rendere più veloce l'uso dell'interfaccia grafica e utilizzabile con i comandi beacon. Le impostazioni predefinite vengono utilizzate per tutto ciò che può accettare un valore predefinito.
Per utilizzare i comandi beacon, lo script legge le impostazioni predefinite e utilizza alcuni argomenti da riga di comando. Un esempio di comando beacon:
<exec-type> <target> <listener> <filename>
move-msbuild 192.168.1.1 http move.csproj
Inoltre, il comando beacon personalizzato predefinito è leggermente diverso. Esempio di comando:
move-pre-custom-file <target> <local-file> <remote-filename>
move-pre-custom-file computer001.local /root/payload.exe legit.exe
Il campo location è la parte più complessa del progetto. Quando si seleziona lo spostamento file tramite WMI, verrà utilizzato location; se viene selezionato SMB, non verrà utilizzato (quindi può essere lasciato vuoto). Location accetta tre diversi valori. In primo luogo, se location è un URL, al momento della creazione del payload questo verrà hosted dal server web di Cobalt Strike. L'host beacon da cui verrà eseguito l'assembly effettuerà una richiesta web all'URL per recuperare il file, che verrà utilizzato in un event sub sull'host di destinazione per scrivere il file. In secondo luogo, se location è una directory di Windows, caricherà il file creato sull'host beacon e l'assembly lo leggerà dal filesystem e lo memorizzerà nell'event sub per scriverlo sull'host remoto. Infine, se il campo location è un percorso Linux o la parola local, compilerà dinamicamente il payload nell'assembly in esecuzione. Tuttavia, se il file supera il limite di dimensione di 1MB, verrà mostrato un errore.
Per tutti i metodi file, il payload verrà creato tramite lo script aggressor. Tuttavia, se un payload è già stato creato, gli utenti possono selezionare l'opzione Custom (Prebuilt) per spostarlo ed eseguirlo.
Il kit contiene diverse tecniche di spostamento file, trigger di esecuzione e tipi di payload.
Lo spostamento file è il metodo utilizzato per inviare un file a un host remoto. Tipi di spostamento file:
Il trigger di comando è il metodo utilizzato per eseguire un comando specifico su un host remoto. Tipi di trigger di comando:
Esecuzione solo shellcode:
Hijack:
Per sostituire un template, è necessario soddisfare due requisiti. In primo luogo, il template deve essere denominato in base alla tecnica (esempio: msbuild.csproj). In secondo luogo, il codice sorgente deve contenere la stringa $$PAYLOAD$$ dove verrà inserito lo shellcode codificato in base64 e deve essere in grado di convertire una stringa base64 in un array di byte. Esempio per C#:
string strSC = "$$PAYLOAD$$";
byte[] sc = Convert.FromBase64String(strSC);
È stata aggiunta una modifica che consente ai valori predefiniti di aggiornare la 'stringa di ricerca e sostituzione' e i formati dello shellcode nella finestra 'Aggiorna impostazioni predefinite'. Per impostazione predefinita sono $$PAYLOAD$$ e base64.
execute-assembly di Cobalt Strike, quindi si inietterà in un processo sacrificale come altri post-ex jobsFile o CommandParte del codice, dei template o dell'ispirazione proviene da altre persone e progetti
Probabilmente ci sono bug da qualche parte, tendono a saltare fuori di tanto in tanto. Segnalateli e li risolverò.