Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
secret_handshake — Un prototipo di canale C2 per malware che utilizza certificati x509 su mTLS | Kitploit
Strumenti/GitHubGitHub/jconwell/secret_handshake
Evasione IDS/IPSEsfiltrazione DatiCommand and ControlRed Teaming
GitHubjconwell/secret_handshake

secret_handshake

Un prototipo di canale C2 per malware che utilizza certificati x509 su mTLS

Vedi Repository
1531532 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Secret Handshake - Un Canale C2 per Malware Che Usa Certificati x509 su mTLS

Motivazione

Prima di tutto, perché dovrei renderlo open source?

MITRE ATT&CK parla solo di certificati rubati o autofirmati, e gli NDR (per quanto ne so) prestano pochissima attenzione al contenuto dei certificati x509 al di fuori di chi è la CA emittente. In generale, i certificati x509 sono considerati affidabili e possono attraversare i nostri firewall senza problemi. Ma in sostanza sono solo file che possono facilmente contenere payload dannosi come qualsiasi altro. Ci fidiamo e li ignoriamo perché sono un componente fondamentale di un processo di cifratura che diamo per scontato. L'obiettivo principale di questo progetto è aumentare la consapevolezza verso una classe di indicatori di sicurezza di cui ci fidiamo, ed evidenziare metodi che possono essere usati per rilevarne gli usi malevoli.

Contesto

Mi sono sempre chiesto se gli attaccanti abbiano mai usato certificati x509 come parte della loro comunicazione C2, non per cifrare il traffico di rete, ma per incorporare effettivamente la comunicazione C2 nel certificato x509. Dopo aver cercato qualcosa del genere "in the wild" per 5 anni, ho finalmente deciso di codificarlo da solo per vedere se è possibile... lo è.

Ogni singolo messaggio cifrato inviato su HTTPS/TLS è reso possibile dal trasferimento di un certificato x509. Quando si stabilisce un handshake TLS (figura sotto), durante il quarto passaggio il server invia il suo certificato x509 al client. Il client verifica il certificato, confronta gli algoritmi di cifratura supportati dal server e sceglie quale algoritmo usare per tutta la comunicazione successiva.

Figura 1

Come mostra questo diagramma, si tratta solo di un trasferimento unidirezionale del certificato x509 dal server al client. Questo non si presta bene alla comunicazione C2 perché non c'è modo per il client di rispondere al server. Al massimo, potrebbe essere usato come meccanismo di trasferimento dati unidirezionale (vedi sezione "Prior Art" sotto).

Ma esiste un altro tipo di sessione TLS chiamata Mutua Autenticazione TLS (mTLS), in cui sia il client che il server si scambiano certificati x509 come metodo per autenticarsi a vicenda.

Figura 2

Come mostra la figura sopra, durante l'autenticazione reciproca il certificato x509 del server viene inviato al client per l'autenticazione, e poi il certificato x509 del client viene inviato al server per l'autenticazione. Questo scambio di artefatti rappresenta un'opportunità per creare un canale di comunicazione bidirezionale per i server C2.

Creare un canale di comunicazione bidirezionale tramite certificati x509

Poiché i certificati del server e del client vengono scambiati dalla libreria SSL sottostante, non c'è l'opportunità per il client di estrarre il messaggio dal certificato del server, eseguire il comando, e generare un certificato di risposta tutto all'interno di una singola connessione mTLS. Questo significa che il canale C2 deve essere progettato in modo tale che lo scambio richiesta-risposta avvenga su due diverse connessioni TLS mutuali, un po' come una modalità di trasmissione pseudo half-duplex.

Figura 3

Il processo di richiesta/risposta segue i seguenti passaggi:

  • Passo 1: sia il client che il server C2 generano i rispettivi certificati. Il certificato del client contiene un messaggio generico di "beacon", e il certificato del server contiene il comando che vuole far eseguire al client. Se non c'è alcun comando da far eseguire al client, il server genera un certificato generico di "sleep" per dire al client per quanto tempo dormire prima del beacon successivo.
  • Passo 2: sia il client che il server C2 configurano un socket di rete con i certificati generati al passo 1.
  • Passo 3: il client stabilisce una connessione con il server.
  • Passo 4: i certificati del server e del client vengono scambiati durante l'handshake mTLS.
  • Passo 5: sia il server che il client chiudono i rispettivi socket.
  • Passo 6: il client estrae il comando da eseguire dal certificato del server. Poiché il certificato del client contiene solo un messaggio generico di "beacon", il server lo scarta.
  • Passo 7: il client esegue il comando e raccoglie l'output del comando.
  • Passo 8: sia il client che il server C2 generano i rispettivi certificati. Il certificato del client contiene l'output del comando appena eseguito, e il server genera un certificato generico di "sleep" per dire al client per quanto tempo dormire prima del beacon successivo.
  • Passo 9: sia il client che il server C2 configurano un socket di rete con i certificati generati al passo 8.
  • Passo 10: il client stabilisce una connessione con il server.
  • Passo 11: i certificati del server e del client vengono scambiati durante l'handshake mTLS.
  • Passo 12: sia il server che il client chiudono i rispettivi socket.
  • Passo 13: il client estrae la durata del sonno dal certificato del server, e il server estrae l'output del comando dal certificato del client.
  • Passo 14: il client dorme per l'intervallo specificato dal server.

Prior Art

Dopo averlo fatto funzionare, ero piuttosto orgoglioso di me stesso per essere stato tutto creativo e quant'altro.

Poi mi sono imbattuto in questo intervento al BSides del 2018 di Jason Reaves che ha scritto un dropper di malware usando certificati x509 su TLS. Un anno dopo Jason pubblicò questo articolo che descrive un canale di comunicazione bidirezionale completo usando mTLS.

Istruzioni Per L'Esecuzione

mTLS richiede che sia il certificato del client che quello del server siano firmati dalla stessa CA, quindi il primo passaggio è generare la propria coppia chiave privata / certificato della CA

Crea la chiave privata della CA root:

openssl genrsa -des3 -out hmCA.key 2048

nota: La passphrase impedirà a chiunque entri in possesso della tua chiave privata di generare un proprio certificato root.

Crea il certificato della CA root

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

Copia i file di chiave e certificato generati nella cartella certs/ca_certs. Il progetto include una coppia chiave/certificato demo, quindi puoi saltare questo passaggio se vuoi.

Avvia il client:

python client.py

Avvia il server:

python server.py

Rilevamenti

Non voglio mai rilasciare qualcosa di potenzialmente malevolo senza anche spiegare come rilevarlo nei log di rete.

Penseresti che rilevare questo tipo di pattern TLS sia facile, ma non è così semplice. Uno dei principali indizi di questo canale C2 è il suo stile di comunicazione half-duplex; servono due flussi di autenticazione reciproca per completare una richiesta/risposta completa tra server e client. Questo poi si ripete più volte mentre il server invia diversi comandi al client.

Questo significa che dovresti cercare:

  • Più sessioni mTLS tra gli stessi IP di origine e destinazione, probabilmente sulla stessa porta, anche se non sarebbe difficile configurare il canale per usare porte diverse per ogni connessione mTLS.
  • Poiché il pattern richiesta-risposta richiede due sessioni mTLS per ogni comando del server, cerca 2 sessioni mTLS abbastanza ravvicinate, con una pausa più lunga tra la coppia successiva di sessioni mTLS.
  • Cerca tempi di sleep e jitter tra le coppie di sessioni mTLS, come faresti con qualsiasi altro canale C2.
  • Gli hash dei certificati dovrebbero essere diversi per ogni sessione mTLS, poiché vengono generati nuovi certificati per ogni sessione.
  • I certificati non saranno emessi da certificate authority affidabili.
  • Anche le dimensioni in byte dei certificati x509 varieranno a ogni sessione. Certificati server piccoli dovrebbero indicare comandi inviati al client, ma certificati più grandi indicherebbero molto probabilmente il download di un binario malevolo. I certificati client probabilmente varieranno più in dimensione rispetto ai certificati dei comandi del server, poiché incorporano l'output dei comandi. Certificati client di grandi dimensioni indicherebbero esfiltrazione di dati.
  • Se ci sono più sessioni mTLS tra gli stessi IP di origine e destinazione in un breve periodo di tempo, verifica se a volte vengono inviati certificati con lo stesso hash. Questo potrebbe indicare il riutilizzo di certificati di comando/risposta, come un certificato client "beacon" o un certificato server "sleep".

Sembra un insieme di regole di rilevamento infallibile, ma come ho detto prima non è così facile. A quanto pare esiste una serie di servizi enterprise che hanno anche loro un pattern di traffico mTLS simile, tra cui:

  • 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

Molti di questi sembrano essere servizi di gestione di asset/dispositivi, quindi in teoria dovrebbero inviare lo stesso set di certificati ogni volta che eseguono la scansione di tutti i loro dispositivi. Potresti verificare se ci sono set di più sessioni mTLS che si ripetono ogni N ore, e poi controllare se gli hash dei certificati tra due set diversi di sessioni mTLS corrispondono, o corrispondono in gran parte. Inoltre, potenzialmente cerca certificati client diversi per ogni sessione mTLS, ma lo stesso certificato server su tutte le sessioni.

Potenziale Mitigazione

L'SSL inspection è un modo per bloccare potenzialmente questo tipo di canale di comunicazione C2, poiché il server di SSL inspection non avrebbe il certificato CA malevolo necessario per autenticare il certificato del client.

Scarica lo strumento