Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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
1531514vor 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.

Tool herunterladen