Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
La tecnica SSH Authorized Keys sfrutta un meccanismo fondamentale dell'autenticazione a chiave pubblica su sistemi Unix-like: il file authorized_keys. Questo file, presente nella home directory di ogni utente sotto il percorso ~/.ssh/authorized_keys, definisce quali chiavi pubbliche possono autenticarsi via SSH senza password. Sugli hypervisor ESXi, il percorso cambia in /etc/ssh/keys-<username>/authorized_keys, mentre sui dispositivi di rete il binding avviene tramite comandi CLI come ip ssh pubkey-chain.
La tecnica si colloca in due tattiche distinte. La prima è Persistence (TA0003): inserendo la propria chiave pubblica nel file, l'attaccante garantisce accesso remoto anche dopo cambio password, reboot o rotazione delle credenziali. La seconda è Privilege Escalation (TA0004): in ambienti cloud, modificare le authorized_keys di un utente con privilegi superiori — ad esempio tramite API REST di Azure o il comando add-metadata della Google Cloud CLI — consente di scalare i privilegi dalla propria identità a quella della VM target.
Il raggio d'azione è ampio: 3 gruppi APT documentati, 3 famiglie malware che automatizzano l'iniezione, e una superficie che copre Linux, macOS, ESXi, ambienti cloud IaaS e apparati di rete. La semplicità d'esecuzione — un singolo echo in append — contrasta con la difficoltà di rilevamento in ambienti dove l'autenticazione a chiave è prassi quotidiana.
L'iniezione di chiavi SSH è una delle tecniche di persistenza più silenziose e, in un engagement red team, merita di essere testata su ogni superficie disponibile: server Linux, macOS, hypervisor e ambienti cloud.
Preparazione della coppia di chiavi
Il primo passo è generare una coppia di chiavi dedicata all'operazione, separata da quelle personali. Il comando classico è sufficiente:
ssh-keygen -t ed25519 -f /tmp/rt_key -P "" -C "redteam-ops"
L'algoritmo Ed25519 è preferibile per la lunghezza ridotta della chiave pubblica, che rende meno evidente l'iniezione in un file con molte entry. Il commento (-C) va scelto in modo da non destare sospetti se qualcuno ispeziona il file — in un test reale si potrebbe usare un nome coerente con l'ambiente target.
Iniezione su Linux e macOS
Una volta ottenuta una shell sul target, l'inserimento è banale:
echo "<contenuto_chiave_pubblica>" >> /home/victim/.ssh/authorized_keys
Prima di procedere, verifica che la directory .ssh esista e che i permessi siano corretti — SSH rifiuta chiavi da file con permessi troppo aperti. Se necessario:
mkdir -p /home/victim/.ssh && chmod 700 /home/victim/.ssh && chmod 600 /home/victim/.ssh/authorized_keys
Per elevare i privilegi, il target ideale è l'utente root. Controlla che in /etc/ssh/sshd_config la direttiva PermitRootLogin sia impostata su yes o prohibit-password. Se hai accesso di scrittura alla configurazione, puoi modificarla e ricaricare il servizio con systemctl reload sshd.
Superficie ESXi
Sugli hypervisor VMware ESXi il percorso è diverso e va rispettato fedelmente:
echo "<contenuto_chiave_pubblica>" >> /etc/ssh/keys-root/authorized_keys
La shell ESXi è spesso disabilitata per default. Durante un assessment, se hai accesso al vCenter o alla DCUI, abilita SSH temporaneamente per testare questa persistenza. Ricorda che ESXi ricostruisce parte del filesystem al reboot, quindi verifica la persistenza effettiva riavviando l'host.
Ambienti cloud — GCP e Azure
In Google Cloud Platform, il comando gcloud permette l'iniezione tramite metadata:
gcloud compute instances add-metadata
Su Azure, l'equivalente passa per una PATCH request all'API di gestione della VM, aggiornando il campo osProfile.linuxConfiguration.ssh.publicKeys. Strumenti come az cli (open source) semplificano l'operazione. Il punto critico per il red team è dimostrare la privilege escalation: se il proprio account cloud può modificare le metadata di una VM che gira con un service account privilegiato, l'impatto è significativo.
Dispositivi di rete
Su router e switch Cisco IOS, la sintassi prevede l'uso della modalità di configurazione:
ip ssh pubkey-chain username admin key-string <contenuto_chiave_pubblica> exit
Questa persistenza è particolarmente insidiosa perché raramente i team di sicurezza monitorano le configurazioni SSH dei dispositivi di rete con la stessa attenzione dedicata ai server.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo