Dies ist der zweite Teil unserer Serie über Command and Control (C2) Evasion Technique, in der ich über anpassungsfähige C2-Profile spreche. Sehen Sie sich meinen ersten Blog in dem ich eine als JA3-Signatur-Randomisierung bekannte Methode untersucht habe.
Verformbare C2-Profile sind weit verbreitet und werden von Cobalt Strikeeinem beliebten Framework, das von Pen-Testern und Advanced Persistent Threat (APT)-Gruppen verwendet wird. Es ist erwähnenswert, dass Malleable-Profile zwar den Nutzern von Cobalt Strike vertraut sind, ihre Verwendung aber auch in anderen C2-Frameworks Einzug gehalten hat. Zum Zeitpunkt der Erstellung dieses Artikels werden verformbare Profile auch in Empire C2 in der Version 3.4 verwendet. Was diese Entwicklung noch interessanter macht, ist die Tatsache, dass das Empire-Team vor kurzem eine Partnerschaft mit Kali Linux, einer beliebten Pen-Testing-Distribution, angekündigt hat, was die Verbreitung der Verwendung von anpassbaren Profilen noch verstärken wird.
Verformbare Profile zum Ausweichen
Anpassbare Profile für C2 ermöglichen es dem Akteur, nicht nur die Erkennung durch netzwerkbasierte Erkennungstools zu umgehen, sondern auch endpoint Sicherheitsprodukte. Der Grad der "Formbarkeit" ermöglicht es den Betreibern von Cobalt Strike nicht nur, die Form und das Timing von C2-Signalen vollständig anzupassen, sondern gibt ihnen darüber hinaus die Möglichkeit, Funktionen im Zielgebiet wie Prozessinjektion und speicherinterne Verschleierungsmethoden anzupassen. Die betriebliche Sicherheit ist immer ein Problem, wenn Agenten in einer Zielumgebung eingesetzt werden. Daher ist die Überwachung der Netzwerksicherheit immer eine Überlegung wert, wenn es um die Aufrechterhaltung der Unauffälligkeit bei der Befehls- und Kontrollfunktion geht. Angenommen, Angreifer installieren Agenten auf kompromittierten Rechnern in Ihrem Netzwerk und der von diesen Agenten bei der Verbindung mit dem C2-Server erzeugte Datenverkehr verwendet dieselben oder ähnliche Benutzer-Agenten, URIs oder andere Artefakte, die leicht zu erkennen sind. Das Risiko, dass diese Aktivitäten entdeckt werden, wäre außerordentlich hoch, wenn sie aufgrund ihrer wiederholten Verwendung im Voraus bekannt wären. Daher muss der Datenverkehr so umgewandelt oder gestaltet werden, dass er sich entweder in den "normalen" erwarteten Datenverkehr einfügt oder bei jedem Durchlauf einfach neue Werte verwendet werden. Beide Ansätze wären nützlich, um einer Entdeckung zu entgehen. Eine weitere Motivation für den Einsatz von anpassbaren Profilen ist der Wunsch, gegen bekannte Bedrohungen zu testen. Wenn ich einen Agenten und einen C2-Server so einrichten kann, dass sie genau so aussehen, wie malware über die Leitung oder auf einem Ziel endpoint , kann ich sehen, ob mein Netzwerkerkennungsstack oder die Sicherheitsüberwachung von endpoint in der Lage ist, die Aktivität zu erkennen.
Hier kommt die Formbarkeit ins Spiel. Es lohnt sich, auf einige der Optionen einzugehen, die dem Betreiber zur Anpassung von C2 zur Verfügung stehen. Außerdem werden wir in der Zusammenfassung darüber sprechen, wie diese die Erkennung erschweren, insbesondere bei signaturbasierten Erkennungsstrategien. Ich werde die Zusammenfassung der Funktionen nach Netzwerk und endpoint trennen. Die vorgestellten Optionen sind keineswegs als erschöpfende Liste zu betrachten.
Umgehung durch Anpassung
Unabhängig vom Netzwerkprotokoll, z. B. HyperText Transfer Protocol (HTTP) oder HTTPS, kommunizieren Agenten mit Servern auf eine bestimmte Weise. Bei der Verwendung von HTTP gibt es viele Teile einer HTTP-Konversation, die von Verteidigungsmaßnahmen auf der Netzwerkebene untersucht werden können. Zum Beispiel können Strings innerhalb eines HTTP-Headers, die eindeutig genug sind, von Verteidigern verwendet werden, um Verbindungen auf der Leitung zu erkennen. Dinge wie eindeutige Benutzer-Agenten, benutzerdefinierte Akzeptanzzeichenfolgen und eindeutige Pfadwerte können untersucht werden. Einstellungen können auch verwendet werden, um Header-Elemente auf der Serverseite zu ändern.
Mit manipulierbaren Profilen kann man einfach die Werte eines legitimen Programms, z. B. im HTTP-Header, spiegeln, um die Verbindung mit gutartigen Verbindungen, wie z. B. dem Microsoft Windows Update Agent, identisch erscheinen zu lassen. Der Screenshot unten zeigt eine Wireshark-Rekonstruktion einer HTTP-Sitzung mit einem Cobalt Strike Windows Update Malleable Profile.
Es ist erwähnenswert, dass es Datenumwandlungen gibt, um Daten vor der Übertragung zu kodieren. Es mag nicht offensichtlich sein, aber der Uniform Resource Identifier (URI), der der HTTP-GET-Anfrage im obigen Screenshot folgt, wird vor der Übertragung mit Base 64 kodiert und dann auf der Serverseite dekodiert. Die folgende Liste enthält die in Cobalt Strike verfügbaren Datentransformationen.
Darüber hinaus können auch mehrere Transformationen miteinander kombiniert werden. So können z. B. base64 und mask für zusätzliche OPSEC übereinander gelegt werden.
Auch in Fällen, in denen HTTPS verwendet wird, können Werte wie SSL-Zertifikate (Secure Sockets Layer) manipuliert werden. Das folgende SSL-Zertifikat wird von den bereits erwähnten Windows-Update-Profilen verwendet:
Neben der Feinsteuerung der Art und Weise, wie die Verbindungen über die Leitung erscheinen, können auch die Zeitwerte, die bestimmen, wann sich der Client mit dem C2-Server verbindet, über anpassbare Profile manipuliert werden. Werte wie Jitter und Delay ermöglichen es Angreifern, das Zeitintervall zwischen C2-Verbindungen zu ändern.
Endpoint Formbare
Malleable wird nicht nur verwendet, wenn der Agent Daten über das Netzwerk sendet, sondern auch bei der Steuerung der speicherinternen Eigenschaften, der Art und Weise, wie er sich in Prozesse einschleust, sowie bei Aufgaben nach der Ausnutzung. Dies ist nützlich, um endpoint detection and response (EDR) und Antivirus-Erkennung zu umgehen. Das folgende Beispiel zeigt einige Optionen für das Verhalten des Agenten auf dem Zielsystem endpoint , die in anpassbaren Profilen festgelegt werden können.
Unter dem Stage-Block können Sie steuern, wie der Agent in den Speicher geladen wird. Es können Dinge wie Name, Kompilierzeit, Speicherberechtigungen, Verschleierung und Loader-Typ angegeben werden. Analysten, die nach bösartigem Code suchen, der in einen Prozess geladen wurde, überprüfen oft zuerst die Speichersegmente und suchen nach Segmenten, die mit RWX-Berechtigung in verdächtige Speichersegmente geladen wurden.
Unter den Prozessinjektionsoptionen können Sie den injizierten Inhalt gestalten. Sie können Daten mithilfe von Transformationsoptionen auffüllen und die Zuweisungsmethode sowie die Berechtigungen festlegen. Schließlich können Sie auch Post-Exploitation-Aufgaben steuern, indem Sie verschiedene Pipe-Namen auswählen, Smart Injection verwenden und Spawn-Positionen festlegen. Dies eignet sich hervorragend zur Umgehung und zum Testen von EDR-Lösungen. Eine ausführlichere Übersicht finden Sie im Online-Handbuch zu Cobalt Strikes.
Herausforderungen für Verteidiger
Die Möglichkeit, die C2-Kommunikation und das Staging-Verhalten so detailliert zu steuern, macht die Verteidigung und Erkennung mit Signaturen zu einer schwierigen Aufgabe. Ein weiterer Punkt, der hervorgehoben werden sollte, ist die Tatsache, dass Cobalt Strike zwar schon seit einiger Zeit eine Veränderbarkeit zulässt, andere beliebte C2-Frameworks wie Empire C2 jedoch ebenfalls veränderbare Profile verwenden. Dies und die Tatsache, dass diese Profile in jüngster Zeit vermehrt bei Angriffen von APT und ransomware macht die Aufgabe für die Verteidiger immer komplexer.
Netzwerk- und endpoint -Abwehrtechnologien müssen entweder über schnell aktualisierte Signaturen verfügen oder andere Ermittlungsmethoden zur Aufdeckung von Kommando- und Kontrollvorgängen anwenden, die nicht auf wiederholten Mustern in den Daten oder sogar auf zeitlichen Abläufen beruhen, die mit Beaconing-Aktivitäten übereinstimmen.