Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
secret_handshake — Ein Prototyp eines Malware-C2-Kanals, der x509-Zertifikate über mTLS verwendet. | Kitploit
Tools/GitHubGitHub/jconwell/secret_handshake
IDS/IPS-UmgehungDatenexfiltrationCommand and ControlRed Teaming
GitHubjconwell/secret_handshake

secret_handshake

Ein Prototyp eines Malware-C2-Kanals, der x509-Zertifikate über mTLS verwendet.

Repository anzeigen
15315vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Secret Handshake - Ein Malware-C2-Kanal mit x509-Zertifikaten über mTLS

Motivation

Zuallererst: Warum stelle ich das überhaupt als Open Source bereit?

MITRE ATT&CK erwähnt nur gestohlene oder selbstsignierte Zertifikate, und NDRs (soweit ich das beurteilen kann) schenken dem Inhalt von x509-Zertifikaten abgesehen von der ausstellenden CA nur sehr wenig Aufmerksamkeit. Im Allgemeinen werden x509-Zertifikate als vertrauenswürdig behandelt und dürfen unsere Firewalls ungehindert passieren. Aber im Wesentlichen sind sie nur Dateien, die wie jede andere leicht schädliche Nutzlasten enthalten können. Wir vertrauen ihnen und ignorieren sie, weil sie ein Kernbestandteil eines Verschlüsselungsprozesses sind, den wir als selbstverständlich betrachten. Das Hauptziel dieses Projekts ist es, das Bewusstsein für eine Klasse von Sicherheitsindikatoren zu schärfen, der wir vertrauen gelernt haben, und Methoden aufzuzeigen, mit denen eine böswillige Nutzung erkannt werden kann.

Hintergrund

Ich habe mich immer gefragt, ob Bedrohungsakteure jemals x509-Zertifikate als Teil ihrer C2-Kommunikation verwendet haben – nicht um den Netzwerkverkehr zu verschlüsseln, sondern um die C2-Kommunikation tatsächlich im x509-Zertifikat einzubetten. Nachdem ich fünf Jahre lang in freier Wildbahn danach gesucht hatte, habe ich schließlich beschlossen, es einfach selbst zu programmieren, um zu sehen, ob es möglich ist … und es ist möglich.

Jede einzelne verschlüsselte Nachricht, die über HTTPS/TLS gesendet wird, wird durch die Übertragung eines x509-Zertifikats ermöglicht. Beim Aufbau eines TLS-Handshakes (Abbildung unten) sendet der Server im vierten Schritt sein x509-Zertifikat an den Client. Der Client verifiziert das Zertifikat, vergleicht die vom Server unterstützten Verschlüsselungsalgorithmen und wählt aus, welcher Algorithmus für die gesamte weitere Kommunikation verwendet wird.

Abbildung 1

Wie dieses Diagramm zeigt, handelt es sich hierbei nur um eine Einbahnübertragung des x509-Zertifikats vom Server zum Client. Das eignet sich nicht besonders gut für die C2-Kommunikation, da der Client keine Möglichkeit hat, dem Server zu antworten. Im besten Fall könnte es nur als Einweg-Datenübertragungsmechanismus verwendet werden (siehe Abschnitt „Bekannte Vorarbeiten“ weiter unten).

Es gibt jedoch eine andere Art von TLS-Sitzung, die gegenseitige TLS-Authentifizierung (mTLS) genannt wird, bei der sowohl der Client als auch der Server x509-Zertifikate austauschen, um sich gegenseitig zu authentifizieren.

Abbildung 2

Wie die obige Abbildung zeigt, wird während der gegenseitigen Authentifizierung zuerst das x509-Zertifikat des Servers an den Client zur Authentifizierung gesendet, und anschließend wird das x509-Zertifikat des Clients an den Server zur Authentifizierung gesendet. Dieser Austausch von Artefakten stellt eine Gelegenheit dar, einen bidirektionalen Kommunikationskanal für C2-Server zu schaffen.

Erstellen eines bidirektionalen Kommunikationskanals über x509-Zertifikate

Da die Server- und Client-Zertifikate von der zugrunde liegenden SSL-Bibliothek ausgetauscht werden, gibt es keine Möglichkeit für den Client, die Nachricht aus dem Zertifikat des Servers zu extrahieren, den Befehl auszuführen und ein Antwortzertifikat zu erzeugen – alles innerhalb einer einzigen mTLS-Verbindung. Das bedeutet, dass der C2-Kanal so ausgelegt werden muss, dass der Anfrage-Antwort-Austausch über zwei verschiedene gegenseitige TLS-Verbindungen erfolgt, ähnlich einem Pseudo-Halbduplex-Übertragungsmodus.

Abbildung 3

Der Anfrage-/Antwortprozess durchläuft die folgenden Schritte:

  • Schritt 1: Sowohl der Client als auch der C2-Server erzeugen ihre jeweiligen Zertifikate. Das Zertifikat des Clients enthält eine generische „Beacon“-Nachricht, und das Zertifikat des Servers enthält den Befehl, den der Client ausführen soll. Wenn kein Befehl für den Client auszuführen ist, erzeugt der Server ein generisches „Sleep“-Zertifikat, das dem Client mitteilt, wie lange er vor dem nächsten Beacon schlafen soll.
  • Schritt 2: Sowohl der Client als auch der C2-Server konfigurieren mit den in Schritt 1 erzeugten Zertifikaten einen Netzwerk-Socket.
  • Schritt 3: Der Client stellt eine Verbindung zum Server her.
  • Schritt 4: Die Server- und Client-Zertifikate werden während des mTLS-Handshakes ausgetauscht.
  • Schritt 5: Sowohl der Server als auch der Client schließen ihre jeweiligen Sockets.
  • Schritt 6: Der Client extrahiert den auszuführenden Befehl aus dem Server-Zertifikat. Da das Zertifikat des Clients nur eine generische „Beacon“-Nachricht enthält, verwirft der Server es.
  • Schritt 7: Der Client führt den Befehl aus und sammelt die Befehlsausgabe.
  • Schritt 8: Sowohl der Client als auch der C2-Server erzeugen ihre jeweiligen Zertifikate. Das Zertifikat des Clients enthält die Ausgabe des soeben ausgeführten Befehls, und der Server erzeugt ein generisches „Sleep“-Zertifikat, das dem Client mitteilt, wie lange er vor dem nächsten Beacon schlafen soll.
  • Schritt 9: Sowohl der Client als auch der C2-Server konfigurieren mit den in Schritt 8 erzeugten Zertifikaten einen Netzwerk-Socket.
  • Schritt 10: Der Client stellt eine Verbindung zum Server her.
  • Schritt 11: Die Server- und Client-Zertifikate werden während des mTLS-Handshakes ausgetauscht.
  • Schritt 12: Sowohl der Server als auch der Client schließen ihre jeweiligen Sockets.
  • Schritt 13: Der Client extrahiert die Schlafdauer aus dem Server-Zertifikat, und der Server extrahiert die Befehlsausgabe aus dem Client-Zertifikat.
  • Schritt 14: Der Client schläft für das vom Server festgelegte Intervall.

Bekannte Vorarbeiten

Nachdem ich das zum Laufen gebracht hatte, war ich ziemlich stolz auf mich, so kreativ und so gewesen zu sein.

Dann stieß ich auf diesen BSides-Vortrag von 2018 von Jason Reaves, der einen Malware-Binary-Dropper mit x509-Zertifikaten über TLS geschrieben hat. Ein Jahr später veröffentlichte Jason dieses Paper, das einen vollwertigen bidirektionalen Kommunikationskanal mit mTLS beschreibt.

Anleitung zum Ausführen

mTLS erfordert, dass sowohl die Zertifikate des Clients als auch des Servers von demselben CA-Zertifikat signiert werden. Der erste Schritt besteht also darin, ein eigenes CA-Privatkey-/Zertifikatpaar zu erzeugen.

Root-CA-Privatkey erzeugen:

openssl genrsa -des3 -out hmCA.key 2048

Hinweis: Die Passphrase verhindert, dass jemand, der in den Besitz Ihres privaten Schlüssels gelangt, ein eigenes Root-Zertifikat erzeugen kann.

Root-CA-Zertifikat erzeugen:

openssl req -x509 -new -nodes -key hmCA.key -sha256 -days 1825 -out hmCA.pem

Kopieren Sie die erzeugten Schlüssel- und Zertifikatsdateien in den Ordner certs/ca_certs. Das Projekt enthält ein Demo-Schlüssel-/Zertifikatpaar, diesen Schritt können Sie also überspringen, wenn Sie möchten.

Client starten:

python client.py

Server starten:

python server.py

Erkennungsmöglichkeiten

Ich möchte niemals etwas potenziell Schädliches veröffentlichen, ohne auch zu beschreiben, wie man es in den Netzwerkprotokollen erkennt.

Man würde meinen, diese Art von TLS-Muster sei leicht zu erkennen, aber so einfach ist es nicht. Eines der Hauptmerkmale dieses C2-Kanals ist sein halbduplexer Kommunikationsstil: Es sind zwei gegenseitige Authentifizierungsabläufe nötig, um eine vollständige Anfrage/Antwort zwischen Server und Client abzuschließen. Dies geschieht dann mehrfach, während der Server verschiedene Befehle an den Client sendet.

Das bedeutet, dass Sie nach Folgendem Ausschau halten sollten:

  • Mehrere mTLS-Sitzungen zwischen derselben Quell- und Ziel-IP, wahrscheinlich auf demselben Port, auch wenn es nicht schwer wäre, die Konfiguration so anzupassen, dass für jede mTLS-Verbindung ein anderer Port verwendet wird.
  • Da das Anfrage-Antwort-Muster zwei mTLS-Sitzungen pro Serverbefehl erfordert, achten Sie auf zwei mTLS-Sitzungen in relativ kurzem Abstand, mit einer längeren Pause zwischen dem nächsten Paar von mTLS-Sitzungen.
  • Achten Sie auf Schlaf- und Jitter-Zeiten zwischen Paaren von mTLS-Sitzungen, genau wie bei jedem anderen C2-Kanal.
  • Die Zertifikats-Hashes sollten sich bei jeder mTLS-Sitzung unterscheiden, da pro Sitzung neue Zertifikate erzeugt werden.
  • Die Zertifikate werden nicht von vertrauenswürdigen Zertifizierungsstellen ausgestellt.
  • Die Bytegrößen der x509-Zertifikate variieren ebenfalls von Sitzung zu Sitzung. Kleine Server-Zertifikate sollten darauf hindeuten, dass Befehle an den Client gesendet werden, während größere Zertifikate höchstwahrscheinlich auf den Download einer schädlichen Binary hindeuten. Client-Zertifikate werden wahrscheinlich stärker in der Größe variieren als Server-Befehlszertifikate, da sie Befehlsausgaben einbetten. Große Client-Zertifikate würden auf Datenexfiltration hindeuten.
  • Wenn innerhalb kurzer Zeit mehrere mTLS-Sitzungen zwischen denselben Quell- und Ziel-IPs auftreten, prüfen Sie, ob manchmal Zertifikate mit demselben Hash gesendet werden. Dies könnte auf eine Wiederverwendung von Befehls-/Antwortzertifikaten hindeuten, z. B. eines „Beacon“-Client-Zertifikats oder eines „Sleep“-Server-Zertifikats.

Das klingt nach einer glasklaren Reihe von Erkennungsregeln, aber wie ich bereits sagte, ist es nicht so einfach. Es stellt sich heraus, dass es eine Reihe von Unternehmensdiensten gibt, die ebenfalls ein ähnliches mTLS-Verkehrsmuster aufweisen, darunter:

  • Tanium
  • Microsoft System Center Configuration Manager (SCCM)
  • Microsoft Monitoring Agent
  • Azure Hybrid Runbook Worker
  • Palo Alto Networks
  • MuleSoft
  • TrustedSource
  • Cohesity Helios
  • EMC's Global Security Organization
  • Alert Logic

Einige davon scheinen Asset-/Geräteverwaltungsdienste zu sein. Theoretisch sollten sie also bei jedem Durchlauf durch alle ihre Geräte denselben Satz von Zertifikaten senden. Sie könnten prüfen, ob es Gruppen von mehreren mTLS-Sitzungen gibt, die sich alle N Stunden wiederholen, und dann feststellen, ob die Zertifikats-Hashes zwischen zwei verschiedenen Gruppen von mTLS-Sitzungen übereinstimmen oder größtenteils übereinstimmen. Prüfen Sie außerdem möglicherweise, ob die Client-Zertifikate für jede mTLS-Sitzung unterschiedlich sind, das Server-Zertifikat jedoch über alle Sitzungen hinweg gleich bleibt.

Mögliche Gegenmaßnahmen

SSL-Inspektion ist eine Möglichkeit, diese Art von C2-Kommunikationskanal potenziell zu blockieren, da der SSL-Inspektionsserver nicht über das bösartige CA-Zertifikat verfügen würde, das zur Authentifizierung des Client-Zertifikats erforderlich ist.

Tool herunterladen