Enumerazione degli Account Locali: Local Account Discovery (T1087.001)

Quando un attaccante mette piede su un sistema compromesso, una delle prime domande che si pone è semplice: chi altro vive qui? La tecnica Local Account Discovery consiste nell'enumerazione degli account utente configurati localmente su una macchina, ed è una delle operazioni di ricognizione post-compromise più diffuse in assoluto. Si colloca nella fase Discovery (TA0007) della kill chain, quella in cui l'avversario esplora l'ambiente per orientarsi prima di agire.

I numeri parlano da soli: 18 gruppi APT documentati, 44 software diversi e almeno 1 campagna nota (Operation CuckooBees) sfruttano questa tecnica. La ragione è banale — i comandi necessari sono nativi del sistema operativo. Su Windows bastano net user e net localgroup; su Linux si legge /etc/passwd o si eseguono id e groups; su macOS si usa dscl . list /Users; su ESXi il comando è esxcli system account list. Nessun malware da caricare, nessun exploit da lanciare: gli strumenti sono già tutti a bordo.

L'output di questa ricognizione è prezioso. Sapere quali account esistono — soprattutto quelli con privilegi amministrativi — consente all'attaccante di pianificare movimenti laterali, privilege escalation e persistenza. Una singola mitigazione è documentata a livello di configurazione del sistema operativo, il che rende la detection comportamentale il vero perno della difesa.


L'enumerazione degli account locali è il punto di partenza di quasi ogni esercizio di post-exploitation. In un engagement red team, l'obiettivo è dimostrare quante informazioni un attaccante può raccogliere senza caricare nulla sul disco, utilizzando esclusivamente i tool nativi del sistema — la cosiddetta tecnica living-off-the-land.

Su Windows, la catena classica parte dal comando più semplice e scala verso output più strutturati. Inizia con il banale:

net user

Questo restituisce la lista completa degli account locali. Per identificare subito chi ha privilegi elevati, il passo successivo è naturale:

net localgroup administrators

Se vuoi un approccio più silenzioso rispetto ai log tradizionali, PowerShell offre cmdlet nativi che restituiscono oggetti strutturati:

Get-LocalUser | Select-Object Name, Enabled, LastLogon

Get-LocalGroupMember -Group "Administrators"

Per un esercizio più avanzato, puoi replicare l'approccio WMI, spesso usato da malware come Bazar e Valak per identificare account amministrativi senza invocare net.exe:

Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount=True"

Su Linux, l'enumerazione è ancora più diretta. Il file /etc/passwd è leggibile da qualsiasi utente per impostazione predefinita, e con un semplice filtro puoi isolare gli account interattivi:

awk -F: '$3 >= 1000 && $7 !~ /nologin|false/ {print $1}' /etc/passwd

I comandi id e groups completano il quadro mostrando appartenenze ai gruppi per l'utente corrente. Per enumerare chi fa parte del gruppo sudo:

getent group sudo

Su macOS, la catena riproduce il comportamento documentato per gruppi come APT32:

dscl . list /Users | grep -v '^_'

Il filtro rimuove gli account di sistema (prefissati con underscore), lasciando solo gli utenti reali. Il comando dscacheutil -q user fornisce dettagli aggiuntivi come la home directory e la shell di default.

Per gli ambienti ESXi, spesso trascurati nei pentest ma sempre più bersagliati, il comando è:

esxcli system account list

In un lab, BloodHound (open source) rappresenta lo standard per visualizzare le relazioni tra account locali e privilegi attraverso la rete. Anche PoshC2 (open source) e Empire (open source) includono moduli specifici per l'enumerazione locale. Se usi Pupy (open source), i moduli PowerView e Pywerview automatizzano l'intero ciclo di discovery.

La raccomandazione operativa: documenta sempre la sequenza temporale dei comandi eseguiti, perché il blue team dovrà correlarli per costruire le proprie regole di detection.


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

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo