Lo User-Agent è una riga di testo che un browser o un’applicazione invia a un server web per identificarsi. In genere include il nome e la versione del browser/applicazione, il sistema operativo e la lingua.
La struttura è formata da un elenco di parole chiave, con commenti facoltativi, che forniscono ulteriori dettagli. Questi token sono generalmente separati da spazi e i commenti sono racchiusi tra parentesi. Ciascuna parte della stringa User-Agent aiuta il server a determinare come fornire contenuto in un formato compatibile per l’ambiente software del client.
Un esempio potrebbe essere
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
I threat actor spesso alterano o creano stringhe User-Agent con l’obiettivo di camuffare il loro traffico all’interno di richieste legittime.
Un esempio è Raccoon Stealer, noto per l’utilizzo di User-Agent specifici durante la comunicazione con il C2. Queste stringhe User-Agent, siccome sono univoche e distinte, riducono al minimo le possibilità di falsi positivi durante le sessioni di analisi dei log o nelle regole di rilevamento.
Tuttavia è bene ricordare che i casi in cui la sola analisi dello user-agent sia sufficiente per identificare un traffico malevolo sono davvero pochi; vedremo più avanti come questa analisi sia fonte di un grande numero di falsi positivi.
Una buona lista (quasi) “pronta all’uso” la si può trovare a questo indirizzo.
In breve le colonne sono:
Viene pertanto semplice inserire nelle nostre regole di analisi il controllo e la generazione di allarmi laddove si presentino le occorrenze.
Per prima cosa è doveroso sottolineare nuovamente che questa pratica è fonte di falsi positivi e che questi, in una buona gestione, sono da dover gestire (perdonate il gioco di parole). Inoltre, queste operazioni, non sono "set and forget", ma devono essere costantemente mantenute aggiornate.
Partendo da queste grandi verità, volendo consigliare altre semplici regole di rilevamento oltre a quella già descritta, queste potrebbero essere ricavate andando a controllare:
Tuttavia, come già detto, non sono da prendere come verità assoluta e quindi vanno sempre contestualizzate all’interno delle vostre infrastrutture.
Hacker utilizzano spesso HTTP per facilitare le comunicazioni tra il sistema compromesso e C2. Dopotutto, non è necessario progettare un protocollo personalizzato quando puoi utilizzare l’HTTP che fornisce già la maggior parte delle funzionalità di cui si ha di bisogno. Inoltre l’HTTP in genere è consentito dalla maggior parte delle reti senza restrizioni pertanto è conveniente che il traffico malware si nasconda nella navigazione web già diversificata avviata dall’utente.
Quando un utente malintenzionato sceglie di utilizzare HTTP, ottiene l’accesso ad un’ampia gamma di funzionalità le quali forniscono immediatamente la possibilità di controllare la negoziazione del contenuto anche in base all’uso dell’user-agent.
Dirò una cosa ovvia ma, in prima battuta, se il traffico è in HTTPS non ci sarà modo di visionarne il suo contenuto pertanto è necessario implementare una buona politica di deep packet inspection per amor di decrittare tutto il traffico non in chiaro.
Il rilevamento dello user-agent è fondamentale per i team SOC nell’identificare le minacce. Tuttavia questa pratica è spesso sottovalutata in quanto è fonte di non pochi grattacapi relativi alla gestione dei falsi positivi che ahimè si devono mette in conto.
Spero vivamente che con gli esempi forniti di migliorare il processo di threat hunting, dando spunti per aiutarti a scoprire informazioni più significative con meno falsi allarmi.
EOF