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ù
Ogni interprete di comandi — che sia Bash su Linux, Zsh su macOS, PowerShell su Windows o la CLI di un apparato di rete — tiene traccia di ciò che l'utente digita. Questa cronologia è una miniera d'oro per chi indaga su un'intrusione: rivela esattamente cosa ha fatto l'attaccante, in che ordine, e con quali parametri. Proprio per questo, una delle prime mosse di un avversario esperto consiste nel disabilitare o manipolare il logging della command history, cancellando le proprie tracce prima ancora di iniziare l'operazione vera e propria.
La tecnica si colloca nella tattica Defense Evasion (TA0005), la fase in cui l'avversario cerca di evitare il rilevamento. I metodi variano per piattaforma: su Linux e macOS si agisce sulle variabili d'ambiente HISTFILE, HISTCONTROL e HISTFILESIZE; su Windows si interviene sul modulo PSReadLine di PowerShell; su dispositivi di rete si utilizzano comandi CLI per disattivare il logging; su ESXi si azzerano le stesse variabili della shell.
I numeri confermano che non si tratta di una tecnica di nicchia: 4 gruppi APT, 4 software malevoli, 2 campagne documentate e 2 mitigazioni formali ne attestano l'uso sistematico in operazioni reali. Dalla sottrazione di fondi bancari al compromesso di router enterprise, la manipolazione della cronologia è un pattern trasversale a scenari molto diversi tra loro.
La simulazione di questa tecnica in laboratorio è sorprendentemente semplice, ma il valore sta nel testare se i controlli difensivi del cliente la rilevano davvero. L'obiettivo del red teamer non è solo eseguire il bypass, ma generare gli artefatti (o la loro assenza) che il blue team dovrebbe notare.
Linux e macOS — variabili d'ambiente
Il metodo più diretto consiste nel disattivare completamente la registrazione della sessione corrente. Il comando classico è:
unset HISTFILE
Questo impedisce alla shell di scrivere qualsiasi comando nel file di history al logout. Un'alternativa più sottile agisce sulla dimensione del file:
export HISTFILESIZE=0
Per un approccio meno invasivo — che non modifica variabili ma sfrutta un comportamento legittimo — si può configurare HISTCONTROL affinché ignori i comandi preceduti da uno spazio:
export HISTCONTROL=ignorespace
Da quel momento, ogni comando preceduto da uno spazio (es. " whoami") non verrà registrato. In un engagement reale, è buona pratica concatenare queste azioni all'inizio della sessione post-exploitation.
Per MySQL su host compromessi, l'approccio è analogo:
export MYSQL_HISTFILE=/dev/null
Windows — PSReadLine
Su PowerShell, il modulo PSReadLine scrive di default ogni comando in un file di testo. Per disabilitare completamente il salvataggio:
Set-PSReadLineOption -HistorySaveStyle SaveNothing
Per deviare il file di history verso un percorso controllato dall'attaccante (utile se si vuole mascherare l'attività senza eliminarla del tutto):
Set-PSReadLineOption -HistorySavePath "C:\Windows\Temp\legit.log"
Per rimuovere la cronologia già registrata nella sessione corrente:
Remove-Item (Get-PSReadLineOption).HistorySavePath
ESXi
Sugli hypervisor VMware ESXi la shell usa le stesse variabili Bash. Il comando unset HISTFILE funziona identicamente. In scenari avanzati, l'attaccante potrebbe anche fermare il servizio di syslog:
esxcli system syslog config set --loghost=""
Apparati di rete
Su dispositivi Cisco, un semplice no logging dalla CLI disabilita il logging storico della sessione. La sintassi varia per vendor: su Juniper il meccanismo coinvolge la configurazione del syslog di Junos OS.
Per orchestrare il test, tool come Atomic Red Team (open source) offrono test atomici già pronti per T1562.003 che eseguono queste varianti in modo ripetibile e documentato, ideali per validare le detection rule del SOC.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo