Come promesso, eccoci alla seconda parte della soluzione per la sfida Browser Under Attack del progetto Honeynet (la I parte è qui).

La quarta domanda chiedeva di tracciare un quadro generale delle operazioni svolte dagli attaccanti. Naturalmente, qui siamo in presenza di una simulazione, nel mondo reale le cose sarebbero andate in questo modo, più o meno:

  • Usando varie tecniche (XSS, RFI, ecc.) gli attaccanti iniettano il codice Javascript in alcuni siti web vulnerabili. Il codice è profondamente offuscato, e lavora in modo nascosto e silenzioso, usando tag IFRAME e applicando stili CSS specifici per nascondere la propria presenza, oltre alle modifiche nelle pagine web attaccate.
  • Quando un visitatore arriva sulla pagina con il codice nascosto, il browser viene “dirottato” verso un server (sploitme.com.cc) che contiene codice attivo di analisi e di attacco. Per prima cosa il browser viene indirizzato con un apposito header HTTP di tipo 302 Found verso una pagina di errore
  • La pagina di errore è in realtà una trappola, ed è falsa, tanto che che l’analisi dei pacchetti di risposta dal server mostra un codice HTTP di risultato del tipo 200 OK, mentre la pagina simula un errore di tipo 404 Not Found (vedi pacchetti #63,174,366). Questa pagina, lato server, contiene in realtà un codice di analisi che controlla il tipo di browser.
  • In funzione del risultato dell’analisi (nel seguito se ne vedrà il tipo e lo scopo), nella falsa pagina 404 viene emesso un altro pezzo di codice Javascript, anche questo profondamente offuscato, che tenta di sfruttare varie falle nel browser per eseguire codice arbitrario.
  • Vi sono indizi (vedi pacchetti da #299 a #366) che il codice lato server sia in grado di capire da quale nazione giunga il visitatore, attraverso uno dei tanti servizi di geolocalizzazione, per escludere i visitatori da una certa nazione, o per includere solo quelli provenienti da una nazione, dall’essere colpiti. La prova viene dalla cattura stessa, dove viene visitato il sito principale di Google, www.google.com, che come sappiamo inoltra i visitatori verso i server di Google della nazione di provenienza: il browser viene inoltrato verso www.google.fr, ossia Google in francese. La visita immediatamente successiva fatta dallo stesso browser ad uno dei siti violati simulati (Il finto RapidShare) porta alla fine ad una falsa pagina 404 sul sito attaccante (sploitme.com.cn) che non contiene alcun codice Javascript (vedi pacchetto #366).

La quinta domanda chiede di elencare le contromisure prese per rallentare l’analisi. Naturalmente, ogni criminale informatico che si rispetti sa che le tracce del suo passaggio sono evidenti ad un occhio esperto, mentre un occhio meno esperto può essere ingannato per un tempo più o meno variabile. Dato che lo scopo è di colpire più utenti possibile, e di rallentare l’individuazione del malware per poter fare più danni possibile, normalmente sono prese alcune contromisure, abbastanza tipiche:

  • Il codice iniettato è sempre offuscato, e qualche volta camuffato da altro, per cui facilmente passa inosservato, anche al webmaster più attento.
  • L’attacco viene portato senza aprire altre finestre o popup, per cui sembra provenire dal sito violato, non dal sito chiamato dal codice Javascript dentro i tag IFRAME.
  • L’attacco è portato appunto da un sito differente, che non compare mai nel codice, ma solo nel Javascript offuscato, per cui è impossibile saperlo senza svelare il codice stesso.
  • Anche svelando il codice Javascript offuscato e ricavando il nome del sito attaccante, ci si trova davanti ad una pagina 404 (falsa ma efficace).
  • Il codice Javascript che tenta di eseguire codice arbitrario sfruttando falle note è codificato usando la notazione Unicode con una escape sequence esadecimale (%u1234), e non è banale da decodificare.

Inoltre, data la presenza di un codice che analizza il tipo di browser che visita la pagina aggressiva, si può ipotizzare che ai visitatori che si presentano con browser e/o sistemi operativi alternativi (come molti professionisti nel campo della sicurezza) venga mostrata una pagina con codice inoffensivo.

La sesta domanda chiede di presentare il codice Javascript identificato nelle precedenti risposte, e di svelarlo, se offuscato. Non riporto per intero il codice, anche perché sarebbe lungo e difficile da comprendere (è riportato per intero nella mia soluzione, pubblicata nella pagina del sito Honeynet relativa alla sfida).
Vale la pena però di fare alcune considerazioni. In tutti i casi il codice Javascript è offuscato, ed in un caso l’offuscamento è annidato, ossia il codice originale è offuscato una prima volta usando la funzione Javascript escape(), ed il risultato è offuscato di nuovo usando una funzione scritta appositamente. Il metodo di offuscamento usato in tutte le false pagine 404 è identico, quello che cambia è il codice Javascript risultante.
Altra cosa da notare è che in presenza del browser Firefox il codice emesso è inoffensivo.

La domanda successiva chiede quale possa essere la funzione della variabile “s” negli URL.
Il valore della variabile è fissato nel codice Javascript iniettato nei siti violati, ed è differente da un sito all’altro. Il valore viene mantenuto nei vari reindirizzamenti, per cui lo scopo non è quello di selezionare l’attacco, cosa che invece è decisa in base al browser o alla geolocalizzazione. Lo scopo, verosimilmente, è quello dell’affiliazione, ossia decidere a chi appartiene il computer dell’ignaro visitatore ad uno dei siti violati, attaccata e conquistata da un malware. Dato che il server che distribuisce il malware è unico, con questo modo si individua l’appartenenza ad un circuito botnet differente. Se il sito A è violato da Mario, ed il sito B è violato da Carlo, tutti e due i siti reindirizzano verso il server attaccante, ma ognuno con un codice di affiliazione differente, permettendo di distinguere a chi assegnare il computer colpito.

L’ottava domanda chiede quale sistema operativo e quale browser siano i bersagli scelti per l’attacco, quali vulnerabilità siano colpite e se sia possibile prevenire l’attacco stesso.
La riposta è piuttosto articolata, ed in breve può essere riassunta così: il bersaglio è Windows XP con Service Pack 2 o precedenti, il browser è Internet Explorer 6, di cui vengono attaccati parecchi componenti ActiveX, sia nativi che forniti da altre applicazioni. Alcune vulnerabilità sono state scoperte nel 2005, mentre altre sono molto recenti, risalendo a fine 2009.
L’unica prevenzione è aggiornare sistema operativo, browser e applicazioni. Naturalmente (questo non l’ho scritto nella soluzione presentata), usando un account non amministrativo per navigare, pur rimanendo colpiti dal malware, in molti dei casi esposti sopra questo non può fare danni, in quanto non ha i privilegi amministrativi, essendo eseguito con i privilegi di Internet Explorer, quindi di un utente “limitato”. Visto che nessuno usa questa strategia, chi sfrutta queste vulnerabilità ha la certezza di colpire praticamente chiunque gli venga a tiro.

Chiudiamo qui. La prossima e ultima parte sarà piuttosto corposa, visto che riguarderà l’analisi degli shellcode.