Nota: Se stai leggendo questo messaggio è perchè non vedi i nostri file css, oppure perchè non hai un browser "standards-compliant browser". Leggi l'aiuto.

TechTarget Italy & 01net Network SearchCIO.it SearchNetworking.it SearchSecurity.it 01net 01netCIO 01netPMI 01netTRADE 01netNETS iTechStudio Digifocus Applicando CIO Club ProntoImprese IlSoftware
Cerca
in
Come monitorare il funzionamento della rete
Network management
Come monitorare il funzionamento della rete
Elementi di un header HTTP, le stringhe degli user-agent possono essere impiegate quali strumenti di controllo del network per rivelare informazioni sulle reti client senza interferire sulle prestazioni delle reti stesse e nemmeno sulla privacy. Ecco come usarle in modo efficace.
16 Febbraio 2010

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

Il Sole 24 ORE S.p.A.

Sede Legale in Milano, Via Monte Rosa, 91 - Sede Operativa: Via Carlo Pisacane, 1 - Pero (MI)

Partita Iva - Codice Fiscale 00777910159 - Dati societari