Cronologia Shell: Shell History (T1552.003)

La tecnica T1552.003 - Shell History rientra nella tattica TA0006 (Credential Access) del framework MITRE ATT&CK e sfrutta un comportamento tanto banale quanto pervasivo: gli utenti digitano credenziali direttamente sulla riga di comando come parametri di programmi, e queste finiscono nei file di cronologia della shell.

Su Linux e macOS, shell come Bash e Zsh conservano gli ultimi mille comandi digitati in file come ~/.bash_history o ~/.zsh_history, che vengono aggiornati al logout dell'utente. Su Windows, PowerShell mantiene una cronologia persistente in %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt, accessibile anche via Get-History. Il Command Prompt tradizionale non conserva invece alcuna cronologia persistente.

L'impatto operativo è significativo perché la tecnica non richiede exploit, privilegi speciali oltre alla lettura dei file dell'utente proprietario, né tool sofisticati. Un attaccante che ha compromesso un account può ottenere in pochi secondi password passate a mysql -p, token API in header curl, chiavi di cifratura passate a openssl o segreti in variabili d'ambiente esportate manualmente. Il malware Kinsing (S0599) ha integrato la ricerca in bash_history come step ricorrente delle proprie routine di credential harvesting su sistemi Linux, confermando come questa fonte sia considerata affidabile anche da operatori automatizzati e non solo da red team umani.

In un ingaggio di red team, la raccolta della cronologia shell è tra le prime azioni post-exploitation su host Linux e macOS perché offre un rapporto segnale/rumore eccellente. Una volta ottenuta una sessione, l'enumerazione di base parte da comandi elementari:

cat ~/.bash_history ~/.zsh_history 2>/dev/null

find /home /root -maxdepth 2 -name '._history' -readable 2>/dev/null*

Per un triage più mirato, il grep su pattern ad alta densità di credenziali riduce drasticamente il tempo di analisi:

grep -E -i '(passwd|password|token|secret|api[_-]?key|-p |PGPASSWORD|AWS_SECRET)' ~/.bash_history

Estendere la ricerca a tutti gli utenti richiede accesso privilegiato, tipicamente ottenuto tramite escalation successiva:

for f in $(find / -name '.bash_history' -o -name '.zsh_history' 2>/dev/null); do echo "=== $f ==="; cat $f; done

Su macOS, oltre a Bash e Zsh (default da Catalina), vale la pena controllare ~/.python_history, ~/.mysql_history e ~/.psql_history, che spesso contengono password inline.

In ambiente Windows, il file ConsoleHost_history.txt di PSReadLine è leggibile senza privilegi elevati per ciascun utente del sistema. Il comando Get-History mostra solo la sessione corrente, mentre l'artefatto persistente si legge con:

Get-Content $env:APPDATA\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Per enumerare tutti i profili utente:

Get-ChildItem C:\Users*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt -Force

Tra i tool utili in laboratorio, LinPEAS e WinPEAS (open source) includono moduli dedicati che parsano automaticamente le history alla ricerca di pattern sensibili. LaZagne (open source) estende la logica ad altri store di credenziali. Per scenari cloud, Pacu (open source) può correlare chiavi AWS trovate in history con permessi effettivi sull'account.

Una buona pratica offensiva è coprire le proprie tracce durante l'ingaggio disabilitando temporaneamente la scrittura in history con unset HISTFILE o export HISTFILE=/dev/null prima di eseguire comandi rumorosi, replicando così anche il comportamento evasivo osservato in campo. In PowerShell l'equivalente è Set-PSReadLineOption -HistorySaveStyle SaveNothing, che va invocato all'inizio della sessione per essere efficace.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.
We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.