Catch them all – user enumeration in the real world (part 1 of 3)

Nel precedente articolo abbiamo studiato gli attacchi di tipo password spraying. Come già spiegato, questi attacchi sono efficaci se l’attaccante ha a disposizione una lunga lista di utenti validi su un determinato sistema. Questa lista di utenti è ottenibile attraverso la tecnica dell’enumerazione. L’enumerazione degli utenti è spesso una fase che gli attaccanti tralasciano o comunque mettono in secondo piano. Questo a mio avviso avviene per due ragioni principali:

  • Gli attaccanti non concentrano le loro attenzioni verso un singolo obiettivo: sembra strano leggere questa frase ma non è sbagliato dire che spesso i gruppi criminali non hanno un obiettivo prefissato. Nella maggior parte dei casi invece si cerca di trovare un serie di obiettivi più vulnerabili al fine di installare componenti software malevoli. Essendo una questione prettamente monetaria, si punta più sulla quantità che sulla qualità degli obiettivi

  • L’enumerazione degli utenti è un’attività che può richiedere molto tempo: escludendo alcuni casi ben specifici come vulnerabilità software o scorrette configurazioni, l’enumerazione degli utenti è un’attività che richiede uno studio approfondito del sistema da attaccare. Studio che spesso costringe l’attaccante ad interagire direttamente con i componenti di una determinata azienda, utilizzando quindi delle tecniche di ingegneria sociale.

Negli attacchi mirati contro aziende o entità governative, dove l’attaccante è fortemente motivato e/o sovvenzionato da un governo ostile, l’enumerazione degli utenti assume un ruolo centrale.

Enumerazione degli utenti in ambiente Unix/Linux

In questa prima parte ci concentreremo su alcune tecniche di enumerazione utenti in ambiente unix/linux, per poi mostrare in che modo è possibile combinare questa ultime con attacchi di tipo bruteforce al fine di aumentarne l’efficacia.

In principio era “Finger”

Per ragioni prettamente storiche, può essere utile parlare del servizio Finger. Se qualcuno di voi ha avuto modo di leggere qualche vecchio testo riguardante l’hacking, avrà sicuramente letto qualcosa riguardante questo servizio. Finger nasce a fine anni 70′, è uno dei primi servizi di ARPANET (l’antenato dell’attuale internet) e si prefiggeva lo scopo di fornire utili informazioni riguardante gli utenti di un determinato sistema. E’ un servizio assai obsoleto e, ad esser onesti, sarà molto difficile per noi trovarne uno attivo sui nuovi sistemi; tuttavia, ritengo sia utile parlarne per un approfondimento teorico sul nostro tema

E’ possibile utilizzare telnet o netcat per recuperare il banner del server finger, tentando di collegarsi alla porta tcp 79 nel seguente modo:

telnet 79
nc -vn 79

Se doveste essere così fortunati da ricevere una risposta, allora ci troveremmo in uno di questi 3 casi:

  • Un varco temporale si è aperto sotto la vostra scrivania e siete stati instantaneamente risucchiati nel 1985;
  • Vi trovate alla presenza di un bel honeypot e un sedicente ricercatore di sicurezza inizierà ad osservare tutti i vostri movimenti;
  • Siete stati davvero fortunati e siete collegati con un server finger.

Solo in quest’ultimo caso possiamo utilizzare i seguenti comandi

echo "root" | nc -vn  79    #Recupera le informazioni relative all'utente root
echo "*" | nc -vn 79 #Recupera tutti gli utenti presenti in un sistema

E’ così che agli albori di internet venivano enumerati gli utenti sui server Unix. Ora le tecniche sono simili ma i servizi da interrogare diversi

SMTP – L’immortale

Un altro servizio sfruttabile per estrapolare informazioni sugli utenti è SMTP. Anche SMTP è un servizio abbastanza antico, ma al contrario di finger è ancora ampiamente utilizzato per l’invio della posta elettronica. Da protocollo presenta alcuni comandi che, se abilitati, possono essere utilizzati per i nostri scopi.

I Comandi in questione sono principalmente 2: VRF e EXPN.

Spesso sono disabilitati di default sui server proprio per evitare di fornire troppe informazioni ad un potenziale attaccante.
In questa sessione utilizzeremo uno script python per enumerare gli utenti con il comando VRFY.

Nmap è tuo amico

E’ possibile eseguire una scansione con nmap per avere una lista di comandi disponibili sul server.

Per completezza aggiungo che nmap oltre ad essere un portscanner molto potente è anche altamente “customizzabile” tramite una serie di plugin; uno di questi plugin permette di effettuare direttamente l’enumerazione degli utenti.

Noi però scriveremo il nostro tool da zero, perchè vogliamo imparare… giusto?

Dall’output notiamo subito che tra i comandi utilizzabili è presente VRFY. Creeremo quindi uno script python in grado di sfruttare questo comando per enumerare gli utenti

EnumUSR.py – Il nostro tool di enumerazione

#SCRIPT enumusr.py

from socket import *
import sys
import time

TIMEOUT_CONN=2
SMTP_PORT = 25

user_list = ["root", "admin","nick","james","julius", "marco","luca","mike"]

ip = sys.argv[1]


connSkt = socket(AF_INET, SOCK_STREAM)
connSkt.settimeout(TIMEOUT_CONN)
connSkt.connect((ip, SMTP_PORT))
rcv_data = connSkt.recv(1024)
print("SMTP server banner: {}".format(rcv_data.decode('utf-8')))
for user in user_list:
vrfy_data = "VRFY {}\r\n".format(user)
connSkt.send(vrfy_data.encode())
rcv_data = connSkt.recv(1024)
#print(rcv_data.decode('utf-8').strip("\r\n"))
if rcv_data.decode('utf-8').startswith("252"):
print(user+" - found!")
time.sleep(1)
connSkt.close()

Eseguiremo lo script con il seguente comando: python enumusr.py 172.18.0.3

Nel nostro caso abbiamo trovato 3 utenti validi sul sistema e possiamo utilizzarli in un attacco di tipo password spraying. Per approfondire questo tipo di attacco vi rimando al mio primo articolo https://www.cyberdoomera.com/2024/01/05/break-the-shell/.

SSHScan strikes back

Possiamo utilizzare il seguente comando per creare la nostra userlist da utilizzare con il tool sshscan

python enumusr.py 172.18.0.4 | grep '\- found' | awk -F' - ' '{print $1}' > userlist.txt

Una volta create la nostra userlist con gli utenti trovati, possiamo lanciare il nostro comando sshscan per iniziare l’attacco bruteforce

python sshscan.py scan 172.18.0.4 172.18.0.5 userlist.txt pwd.txt -v

Non male vero?

Basterà utilizzare una lista di utenti sufficientemente lunga per avere buone possibiltà di successo.

E’ consigliabile costruire questa lista in base al tipo di target da attaccare, ad esempio:

  • se state cercando di attaccare un server italiano, potrebbe essere utile avere a disposione una lista di nomi di persona italiani;
  • se il nostro obiettivo è un’azienda, potremmo recuperare l’organigramma e utilizzare altre tecniche di ingegneria sociale per ottenere i nomi dei dipendenti e aggiungerli alla nostra lista.

Contromisure

In questo articolo abbiamo analizzato due tecniche per enumerare gli utenti in ambito unix/linux. Le contromisure attuabili sono le seguenti:

  • disabilitare il servizio finger: come già spiegato, Finger è un servizio che ha fatto ormai il suo tempo, è obsoleto, pericoloso e già disabilitato di default sui sistemi attuali;
  • disabilitare i comandi VRFY e EXPN: Al contrario di Finger, SMTP è ancora ampiamente utilizzato e spesso non ha senso disabilitare il suo servizio nella sua interezza. E’ comunque possibile disabilitare i comandi VRFY ed EXPN se non strettamente necessari tramite impostazioni.

Considerazioni finali

In questa sessione abbiamo analizzato alcune tecniche riguardante l’enumerazione degli utenti in ambiente unix/linux, utilizzato degli script custom per effettuare questi attacchi e studiato delle strategie per la loro mitigazione. Nel prossimo articolo continueremo a parlare di enumerazione in ambito windows.

Link utili

https://book.hacktricks.xyz/network-services-pentesting/pentesting-finger

https://pentestlab.blog/2012/11/20/smtp-user-enumeration/

https://nmap.org/