Chiavi SSH Persistenti: SSH Authorized Keys (T1098.004)
La tecnica T1098.004 descrive l'abuso del file authorized_keys di OpenSSH come meccanismo di persistenza e, in molti scenari, di escalation dei privilegi. Un attaccante che riesce a scrivere una propria chiave pubblica in ~/.ssh/authorized_keys (o in /etc/ssh/keys-<username>/authorized_keys su ESXi) ottiene un canale d'accesso stabile, resistente ai riavvii e ai cambi di password, sfruttando un meccanismo di autenticazione considerato legittimo dagli amministratori.
MITRE ATT&CK mappa questa tecnica su due tattiche: TA0003 (Persistence), perché la chiave sopravvive a reboot e rotazione credenziali, e TA0004 (Privilege Escalation), quando la chiave viene inserita nell'account di un utente con privilegi superiori — tipicamente root — o quando l'iniezione avviene attraverso metadata cloud che concedono accesso a VM con ruoli IAM elevati.
Lo scenario è particolarmente insidioso in ambienti ibridi: le API di Google Cloud (gcloud compute instances add-metadata) e le richieste PATCH verso Azure Compute permettono l'inserimento di chiavi SSH senza toccare direttamente il filesystem della VM, aggirando molte pipeline di monitoraggio endpoint. Anche gli apparati di rete sono nel perimetro: il comando IOS ip ssh pubkey-chain consente a un attaccante con accesso amministrativo di legare chiavi persistenti ad account privilegiati.
I dati MITRE censiscono 3 gruppi APT, 3 famiglie malware e 3 mitigazioni documentate, ma la reale prevalenza è probabilmente superiore data la semplicità operativa: bastano un echo con redirect e i permessi corretti sulla directory .ssh.
Dal punto di vista offensivo, l'iniezione di una chiave in authorized_keys è una delle azioni post-exploitation più economiche e affidabili su sistemi Unix-like. Una volta ottenuto un shell come utente target, la sequenza minima è generare localmente una coppia con ssh-keygen -t ed25519 -f ./implant_key -N "" e poi appendere la parte pubblica sul bersaglio.
Su Linux/macOS il pattern tipico è:
mkdir -p ~/.ssh && chmod 700 ~/.ssh echo "ssh-ed25519 AAAA... attacker@op" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
I permessi restrittivi sono fondamentali: sshd rifiuta il file se world-writable. Per rendere l'operazione silenziosa in red team, è buona prassi conservare il timestamp originale con touch -r /etc/passwd ~/.ssh/authorized_keys per non alterare l'mtime della directory .ssh.
Su ESXi il path cambia: le chiavi vanno in /etc/ssh/keys-root/authorized_keys e l'SSH service va abilitato via vim-cmd hostsvc/enable_ssh o dalla DCUI. Verifica sempre prima con chkconfig --list | grep -i ssh per capire lo stato del servizio.
Negli scenari cloud la superficie si sposta sulle API di controllo. Su GCP, se le credenziali compromesse hanno il ruolo compute.instanceAdmin, un red teamer può eseguire:
gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=keys.txt --zone=ZONE
dove keys.txt contiene una riga nel formato username:ssh-rsa AAAA... user. Su Azure, l'endpoint REST virtualMachines/{name} accetta un PATCH sul blocco osProfile.linuxConfiguration.ssh.publicKeys — l'equivalente CLI è az vm user update con --ssh-key-value.
Per emulazione controllata delle TTP dei gruppi documentati, Atomic Red Team (open source) include test per T1098.004 che riproducono l'append della chiave e il fingerprint del comportamento di TeamTNT. Per esercizi più realistici su cloud, Stratus Red Team di DataDog (open source) offre l'attacco aws.persistence.iam-backdoor-user e scenari GCP analoghi.
Catena tipica in un'operazione: initial access via exploit web → escalation locale → drop di chiave in /root/.ssh/authorized_keys (pattern osservato in Earth Lusca) → pivoting laterale via SSH usando la chiave come credenziale valida. Per il pivoting, sshuttle (open source) o il classico ssh -D 1080 permettono di trasformare l'accesso in tunnel SOCKS senza deployare implant aggiuntivi.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo