Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Arile! Scopri di più
Il port knocking è una tecnica stealth che trasforma una sequenza apparentemente innocua di tentativi di connessione a porte chiuse in un segnale segreto. L'avversario invia pacchetti SYN verso una serie predefinita di porte — ad esempio 200, 80, 22, 53, 3 — e solo quando la combinazione è corretta il sistema bersaglio apre una porta per la comunicazione reale. È, in pratica, il lucchetto a combinazione del traffico di rete.
La tecnica si colloca in tre tattiche distinte della kill chain. In Defense Evasion (TA0005), perché le porte rimangono chiuse e invisibili a qualsiasi scansione fino all'attivazione della sequenza. In Persistence (TA0003), perché il meccanismo di knock può sopravvivere ai riavvii come servizio o modulo kernel, garantendo accesso continuo. In Command and Control (TA0011), perché il canale C2 viene stabilito solo dopo l'autenticazione tramite knock, rendendo il traffico malevolo indistinguibile dal rumore di fondo.
L'implementazione originale — cd00r — utilizza le librerie libpcap per intercettare i pacchetti senza aprire socket aggiuntivi. Varianti più evolute sfruttano raw socket per operare su porte già in uso da servizi legittimi, rendendo la detection ancora più complessa. Il panorama documentato include 2 gruppi APT, 4 famiglie malware e 1 mitigazione ufficiale, a testimonianza di una tecnica di nicchia ma persistente negli arsenali offensivi più sofisticati.
Il modo più diretto per comprendere il port knocking è costruirlo in laboratorio. Il punto di partenza naturale è knockd (open source), il demone incluso nel pacchetto knock disponibile sui repository di tutte le principali distribuzioni Linux. L'installazione è banale:
sudo apt install knockd
La configurazione risiede in /etc/knockd.conf. Un setup minimale per aprire la porta SSH dopo una sequenza di tre knock si presenta così:
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 10
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 10
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Dopo aver avviato il servizio con sudo knockd -d -i eth0, il red teamer può inviare la sequenza dalla macchina attaccante usando il client knock:
knock -v <target_ip> 7000 8000 9000
In alternativa, senza installare nulla sul lato client, bastano tre chiamate rapide con nmap in modalità SYN scan:
for port in 7000 8000 9000; do nmap -Pn --max-retries 0 -p $port <target_ip>; done
Per simulare scenari più vicini al comportamento reale degli avversari, vale la pena studiare l'implementazione originale di cd00r, il cui codice sorgente è pubblicamente disponibile. A differenza di knockd, cd00r usa libpcap in modalità promiscua per sniffare i pacchetti di knock senza che il sistema operativo risponda con RST. Questo lo rende invisibile a scansioni standard: nessuna porta in LISTEN, nessun servizio visibile.
Per il red team che vuole testare la variante ICMP — come quella documentata per UNC3886 sui firewall FortiGate — si può costruire una proof-of-concept con uno script Python che utilizza la libreria scapy (open source) per inviare pacchetti ICMP con payload specifici:
sudo scapy
All'interno della shell interattiva, la sequenza si riduce a poche righe che inviano ICMP echo-request con byte pattern predefiniti nel payload. Il listener sul target può essere un semplice sniffer BPF che filtra icmp and icmp[icmptype] == 8.
Un approccio ancora più strutturato prevede l'uso di Meterpreter (open source, parte di Metasploit Framework) come implant finale, combinato con un port-knock trigger personalizzato che apre il canale solo alla ricezione della sequenza corretta. Questo simula fedelmente il pattern osservato con Mafalda e metaMain, dove il knock non apre direttamente una porta ma autentica l'implant presso un secondo componente (Cryshell), creando una catena indiretta verso il C2.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo