
I tecnici di rete desiderano saperne sempre di più del loro network. In questo articolo illustreremo come le stringhe degli user-agent possono essere utilizzate quali tool per il monitoraggio di una rete per rivelare un'enorme quantità di informazioni provocando un minimo (o addirittura nullo) impatto sulle prestazioni della rete o sulla privacy.
Una stringa di un user-agent è un elemento di un header HTTP inviato dai client HTTP, come i browser Web. La seguente richiesta HTTP include una stringa di un user-agent proveniente da un sistema Windows XP SP3 su cui gira Firefox e che sta dialogando con un server proxy Squid.
GET
http://searchnetworkingchannel.techtarget.com/tips/index/0,289482,sid100_tax311687,00.html
HTTP/1.1
Host:
searchnetworkingchannel.techtarget.com
User-Agent: Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR
3.5.30729)
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer:
http://searchnetworkingchannel.techtarget.com/tip/0,289483,sid100_gci1369534,00.html
Cookie:
BIGipServerlive=2768357386.41503.0000
La stringa di un user agent visualizza molte informazioni interessanti che possano essere utilizzate per identificare la versione del sistema operativo e l'applicazione che ha formulato la richiesta.
Ottenere le stringhe user-agent
Gli amministratori di rete possono ottenere le stringhe degli user-agent in due
modi. Il primo è quello di estrarle loro dai log del proxy. per esempio, un log
di un proxy Squid potrebbe contenere una voce simile alla seguente:
1256175164.757 ::: 38 ::: 192.168.2.107 ::: TCP_MISS/302 ::: 748 ::: GET :::
http://media.techtarget.com/searchNetworkingChannel/images/spacer.gif ::: - ::: DIRECT/206.19.49.139 ::: text/html :::
"http://searchnetworkingchannel.techtarget.com/tips/index/0,289482,sid100_tax311687,00.html" ::: "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)"
Le triplette di due punti (:::) sono state aggiunte intenzionalmente, per motivi che chiariremo successivamente. La voce nel file squid.conf utilizzata per generare questo formato di log è la seguente:
logformat squid-extended %ts.%03tu :::
%6tr ::: %>a ::: %Ss/%03Hs ::: %
Il secondo modo per ottenere le stringhe degli user agent è di esaminare il traffico di rete, magari utilizzando un tool come Httpry.
Estrarre le infromazioni utili
Una volta che avete i log, cosa ci potete fare? Considerate il seguente
comando che esamina il log del proxy Squid, estrae degli indirizzi IP di
origine e gli user-agent, conta le forme uniche e le ordina.
cat /usr/local/squid/logs/access.log |
awk 'FS=":::" {print $3 $12}' | sort -k 2 | uniq -c
Come si può vedere, il separatore di file (FS) è impostato su triplette di due punti. In base alla mia esperienza, i separatori di file "tradizionali", come virgole o slash, appaiono troppo spesso nelle richieste HTTP per essere utile per la registrazione, ma siete liberi di utilizzare qualunque separatore di file desideriate.
Di seguito presento un estratto dell'output che esegue un comando simile su una piccola rete. Descriverò inoltre alcuni interessanti elementi di ciascuno dei due metodi.
r200a:/root#
cat /usr/local/squid/logs/access.log | awk 'FS=":::" {print $3 $12}'
| sort -k 2 | uniq -c
1
103:::
14
192.168.2.104 "-"
7
192.168.2.104 "AVGINET8-WVSHX86 85FREE AVI=270.14.10/2429 BUILD=421
LOC=1033 LIC=8FREE--[...key obscured...] DIAG=90 OPF=0 PCA=" 6
192.168.2.104 "AVGINET8-WVSHX86 85FREE AVI=270.14.11/2430 BUILD=421
LOC=1033 LIC=8FREE--[...key obscured...] DIAG=90 OPF=0 PCA=" 10
192.168.2.104 "AVGINET8-WVSHX86 85FREE AVI=270.14.12/2431 BUILD=421
LOC=1033 LIC=8FREE--[...key obscured...] DIAG=90 OPF=0 PCA=" ...edited...
Le tre entry sopra mostrano che la macchina che fa riferimento al'indirizzo 192.168.2.104 ha aggiornano il suo prodotto antivirus AVG.
4
192.168.2.107 "AVGINET8-WXPPX86 85FREE AVI=270.14.25/2450 BUILD=423
LOC=1033 LIC=8FREE--[...key obscured...] DIAG=380 OPF=0 PCA="
Ora vediamo che un differente computer che esegue AVG. Ha una diversa chiave di licenza. Le ricerche di Google per entrambe le chiavi rivelano che non sono univoche per questi sistemi.
8
192.168.2.104 "Adobe Update Manager 6" 1 192.168.2.104
"Client" ...edited...
Il programma di Adobe è interessante, perché deve verificare le impostazioni del proxy locale per eseguire il proprio aggiornamento. La voce "Client" è estremamente interessante perché appare solo una volta.
Possiamo cercare i log del proxy per tale voce:
r200a:
/ root # grep \"Client /usr/local/squid/logs/access.log
1255628697.525
::: 226 ::: 192.168.2.104 ::: TCP_MISS/204 ::: 406 ::: GET :::
http://g.microsoft.com/_0sfdata/1?CG=%7B2CEDBFBC-DBA8-43AA-B1FD-CC8E6316E3E2%7D&DV=8.0.6001.9&OS=6.0.6002.2.0&BL=en-us&AA=45:15:52:22&AB=556&AC=177&AD=23&AE=104&AF=50&AG=428&AH=0&AI=17&AJ=200&AK=0& AL=6&NR=4&BD=0&NE=0&IU=0&SD=0&NO=0&BS=0&OE=0&UA=0&TP=0&TC=0&TE=0&NP=215
::: - ::: DIRECT/207.46.216.54 ::: - ::: "-" ::: "Client"
Possiamo vedere che il sistema ha acceduto a g.microsoft.com con indirizzo IP 207.46.216.54 (che appartiene al netblock 207.46.0.0/16 di Microsoft). Così sembra essere correlato a un'applicazione Microsoft.
16 192.168.2.104 "MSDW"
Anche questa voce è piuttosto oscura.
r200a:/root#
grep \"MSDW /usr/local/squid/logs/access.log
1255516537.205
::: 1185 ::: 192.168.2.104 ::: TCP_MISS/200 ::: 7640 ::: CONNECT :::
wer.microsoft.com:443 ::: - ::: DIRECT/65.55.53.156 ::: - ::: "-" :::
"MSDW"
1255517315.250
::: 680 ::: 192.168.2.104 ::: TCP_MISS/200 ::: 7640 ::: CONNECT :::
wer.microsoft.com:443 ::: - ::: DIRECT/65.55.53.156 ::: - ::: "-" :::
"MSDW"
1255674327.981
::: 210 ::: 192.168.2.104 ::: TCP_MISS/200 ::: 500 ::: GET :::
http://watson.microsoft.com/StageOne/Generic/MpTelemetry/80240016/ BeginInstall/Install/1_1_1600_0/MpSigDwn_dll/1_1_1600_0/ Windows%20Defender.htm?LCID=1033&OS=6.0.6002.2.00010300.2.0.3.18005&VID=1028&OEM=Dell&LOB=INS
::: - ::: DIRECT/65.55.53.190 ::: text/html ::: "-" :::
"MSDW" ...truncated...
Controllando i log, vediamo un'altra applicazione Microsoft, forse relativa a Windows Defender e Dr. Watson.
2 192.168.2.107
"Python-urllib/2,5"
6 192.168.2.108
"Python-urllib/2.6"
Queste entry di Python probabilmente non sono causate da un'applicazione Windows. Controllando i log vediamo che sono utilizzate da Ubuntu.
r200a:/root# grep \"Python-urllib
/usr/local/squid/logs/access.log
1256133834.436 ::: 188 :::
192.168.2.107 ::: TCP_MISS/304 ::: 275 ::: GET ::: http://changelogs.ubuntu.com/meta-release-lts
::: - ::: DIRECT/91.189.90.132 ::: - ::: "-" :::
"Python-urllib/2.5" 1256133856.075 ::: 206 ::: 192.168.2.107 :::
TCP_MISS/304 ::: 275 ::: GET ::: http://changelogs.ubuntu.com/meta-release-lts
::: - ::: DIRECT/91.189.90.132 ::: - ::: "-" :::
"Python-urllib/2.5" 1256173578.838 ::: 187 ::: 192.168.2.108 :::
TCP_MISS/304 ::: 345 ::: GET ::: http://changelogs.ubuntu.com/meta-release :::
- ::: DIRECT/91.189.90.132 ::: - ::: "-" :::
"Python-urllib/2.6" ...truncated...
Come si può vedere, si può imparare molto su una rete semplicemente osservando le stringhe degli user-agent. Una rete molto semplice come quella utilizzata per generare i log di questo articolo offre più di 60 voci diverse per l'analisi, ma per brevità ne abbiamo visualizzate solo nove. Il data mining delle stringhe degli user-agent può essere utilizzato passivamente per identificare e tenere traccia di applicazioni e sistemi, a fini di inventario e di sicurezza.
* Richard Bejtlich è autore del blog TaoSecurity