Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

32
Politecnico di Milano Navigazione automatica e rilevazione di errori in applicazioni web Relatore: Prof. Stefano Zanero Fabio Quarti Federico Villa A.A. 2006/2007 venerdì 12 marzo 2010

description

 

Transcript of Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Page 1: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Politecnico di Milano

Navigazione automatica e rilevazione di errori in

applicazioni web

Relatore: Prof. Stefano Zanero

Fabio Quarti

Federico Villa

A.A. 2006/2007

venerdì 12 marzo 2010

Page 2: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 2

Sommario

• Obiettivo:• Illustrare la realizzazione di un bot per la navigazione automatica e la

rilevazione di errori in applicazioni web;

• Introduzione:• L'applicazione e il Sequence Diagram• SQL-Injection

• Cross-Site scripting XSS

• Architettura:• Crawling• Rilevazione SQL-Injection

• MD5• DataBase Error Check

• Analisi Document Object Model (DOM)‏• Rilevazione XSS

• Test• Conclusioni

venerdì 12 marzo 2010

Page 3: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 3

L'Applicazione

• Cos’è?:• È un bot automatico, in grado di navigare autonomamente lungo un percorso di una Applicazione Web

fino ad una pagina Target.

• E' facilmente scriptabile, e riceve input tramite semplici file XML• Una volta ottenuto il codice della pagina Target, è in grado di individuare se si sono verificate SQL-

Injection o Cross Site Scripting

• Perchè?:• E' un ausilio per gli sviluppatori di Applicazioni Web• E' progettata per essere richiamata da tool di analisi statica del codice, che spesso producono un

numero molto elevato di falsi positivi

• Come?:• Confronta il codice della pagina Target ottenuta con il parametro da validare, con il codice della

medesima pagina ottenuto con un set più o meno vasto di dati validi

venerdì 12 marzo 2010

Page 4: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 4

Sequence Diagram

• L’applicazione naviga una volta per ogni valore corretto e una volta per il valore potenzialmente invalido

• Al ternime della navigazione confronta la pagina potenzialmente invalida con le pagine sicuramente valide, sfruttando le tecniche che vedremo in seguito.

venerdì 12 marzo 2010

Page 5: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 5

SQL-Injection

• Cos’è?:• È un errore che consente ad un aggressore di inviare comandi SQL sfruttando un campo di

input di un’applicazione web

• Si verifica quando un campo di input non è correttamente validato e viene sfruttato per costruire una query

• Esempio:• Immaginiamo la query:

select * from Users where Login=‘”+stringa_login+“’and Password=‘”+stringa_password+“’” • Immaginiamo di riuscire ad immettere, tramite un campo di input non controllato, il valore

di stringa_login lupin’; -- otteniamo la seguente query:

select * from Users where Login=‘lupin’; --and Password=‘”+stringa_password+“’”• A seguito di questa query è possibile ottenere l’autenticazione sul sistema remoto senza

immettere alcuna password ma conoscendo solo il nome utente.

• Prevenzione:• Parsing dei caratteri “speciali”• Eliminazione degli errori SQL

• Validazione tutti i dati in ingresso

venerdì 12 marzo 2010

Page 6: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 6

Cross-Site Scripting XSS

• Cos’è?:• È un errore che consente ad un aggressore di inserire codice di scripting sfruttando un

campo di input di un’applicazione web

• Consente di effettuare: cookie theft, session hijack e accesso alle informazioni riservate

• Tipi:• Stored: il codice maligno è permanentemente immagazzinato nel server e viene inviato a

tutti i client che si connettono, che poi lo eseguono ne browser.

• Reflected: il codice viene inviato al client tramite messaggi di errore o esiti di ricerche, perché considera lo script come proveniente da un sito sicuro

• Esempio:• Immaginiamo di inserire in un guestbook o in un forum il seguente codice:

<script>location=“http://www.polimi.it/”</script>Otteniamo il reindirizzamento sul sito del Politecnico.

• Prevenzione:• Verificare l’input e bandire lo scripting

venerdì 12 marzo 2010

Page 7: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 7

Architettura: Crawling

• Come funziona:• La navigazione avviene in modo lineare; il percorso che il bot deve seguire è specificato in

un file xml

• Sfruttiamo la libreria HTTP Unit sviluppata per Java

• Struttura XML:<?xml version="1.0"?><percorso> <pagina URL='index.html' nomeform='' method=""/> <pagina URL='/formcp/index.html' nomeform='login' method="" useName="false" Name=""> <attributo nome='username' valore='tesi' ischeckbox='false' checkboxstate='false' istest='false' /> <attributo nome='chiave' valore='tesi' ischeckbox='false' checkboxstate='false' istest='false' /> </pagina> </percorso>

• Specifichiamo l’indirizzo della pagina, il nome del form che deve essere riempito, il valore degli attributi, il tipo degli attributi e se il campo è l’input in cui effettuare l’injection

venerdì 12 marzo 2010

Page 8: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 8

Architettura: Error Detection

• Come funziona:• La rilevazione degli errori avviene confrontando il codice HTML della pagina ottenuta dai

dati invalidi con il codice delle pagine ottenute sfruttando il set di dati validi forniti dal chiamante.

• E' realizzata tramite tre controlli in cascata

• Controlli:• MD5

• Rilevazione Errori DataBase• Confronto Alberi Document Object Model (DOM) ‏

venerdì 12 marzo 2010

Page 9: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 9

Controlli: MD5

• Cos'è MD5:• Message Digest 5 è un algoritmo di crittografia dei dati a senso unico che produce, a partire da una

stringa di lunghezza arbitraria, una stringa chiamata digest, lunga 128bit composta da 32 simboli esadecimali.

• Due stringhe diverse, in teoria, non possono avere lo stesso MD5.• E' stato “rotto” nel 2005.

• Come funziona:• Alcune pagine dinamiche sono configurate per mostrare sempre la stessa pagina in caso di successo,

indipendentemente dai dai dati inseriti• Confrontando gli hash della pagina potenzialmente invalida con quelli delle pagine valide, è possibile

individuare immediatamente parametri sicuramente validi

venerdì 12 marzo 2010

Page 10: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 10

Controlli: Errori DB

• Come funziona:• Spesso, i tentativi di SQL-Injection possono generare errori nel DBMS. Altrettanto spesso, questi errori

vengono mostrati a video [sempre, se si sta effettuando il debug di una applicazione]

• Il Bot cerca all'interno di una pagina la presenza di messaggi provenienti dal DBMS

• Errori DBMS:• La lista degli errori SQL è un file XML, che contiene le espressioni regolari associate ad ogni messaggiio.• E' facile scrivere un nuovo file contenente errori di un altro DBMS o errori custom• Struttura del file:

<?xml version="1.0"?><dbms_error> <error regex=’Can&apos;t create file &apos;[0-9a-zA-Z ]* &apos;(errno: [0-9a-zA-Z ]*)’/> <error regex=’Can&apos;t create table &apos;[0-9a-zA-Z ]* &apos;(errno: [0-9a-zA-Z ]*)’/></dbms_error>

venerdì 12 marzo 2010

Page 11: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 11

Controlli: DOM

• Cos'è Document Object Model:• è una forma di rappresentazione dei documenti strutturati come modello orientato agli oggetti. E' uno

standard del W3C• DOM permette di associare ad una pagina xHTML ben formata un albero che rappresenta la struttura

del documento

• Come funziona:• In una applicazione, pagine simili hanno una struttura simile, ma pagine contenutisticamente molto

differenti possono avere la medesima struttura• Confrontando l'albero DOM della pagina ottenuta dal dato invalido con tutti i DOM degli alberi ritenuti

validi, è possibile verificare se la struttura da verificare rispetti uno o più alberi validi

venerdì 12 marzo 2010

Page 12: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 12

Controlli: XSS Detection

• Come funziona:• Il dato da testare è uno script. L'applicazione effettua l'injection dello script nella pagina target • Verifica che la stringa sia presente in una pagina specificata, senza che il tag <script> sia stato

modificato, eliminato o convertito nella corrispondente entity.• E'è il controllo più facile da progettare, ma non è semplice da implementare. Infatti, lo script, una volta

inserito, può trovarsi in una posizione differente dalla pagina in cui è stata effettuata l'injection.

venerdì 12 marzo 2010

Page 13: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 13

Test Effettuati

• Test Didattico: WebGoat• WebGoat è un set di applicazioni volutamente insicure, preparate dall'OWASP - Open Web Application

Security Project, con il fine di istruire gli sviluppatori a prevenire vulnerabilità.

• Il bot è stato in grado di rilevare l'SQL-Injection e il Cross Site Scripting

• Test Reali:• PhpBB2: l'applicazione rileva correttamente un Cross Site Scripting avvenuto a causa del mancato

controllo del campo “autore” nel form di ricerca dei post

• PhpNuke v7.8: l'applicazione rileva correttamente una SQL-Injection avvenuta a causa del mancato controllo dei parametri inviati alla query nel campo principale della ricerca

• Test Reali - Come?:• Sono stati effettuati sfruttando vulnerabilità note e exploit conosciuti.• Sono state scelte applicazioni conosciute, familiari a molti utenti.

venerdì 12 marzo 2010

Page 14: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 14

Conclusione e sviluppi futuri

•Conclusioni:• Corretto funzionamento applicazione

• Problemi con documenti non formati e Blind SQL-Injection

• Sviluppi futuri:• Ottimizzazione codice

• Correzione errori di navigazione

• Implementazione di una differente politica di confronto DOM

venerdì 12 marzo 2010

Page 15: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 15

Fine Presentazione

Fine PresentazioneThat's all, Folks!

venerdì 12 marzo 2010

Page 16: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Politecnico di Milano

Navigazione automatica e rilevazione di errori in

applicazioni web:Test in Dettaglio

Relatore: Prof. Stefano Zanero

Fabio Quarti

Federico Villa

A.A. 2006/2007

venerdì 12 marzo 2010

Page 17: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 17

Sommario

• Obiettivo:• Illustrare la casistica e il software con cui è stata testata l'applicazione

sviluppata.

• Test Didattici:• WebGoat• SQL-Injection

• Cross-Site scripting XSS

• Test Reali:• PhpBB2 e XSS in PhpBB2• PhpNuke v7.8 e SQL-Injection in PhpNuke v7.8

• Conclusioni

venerdì 12 marzo 2010

Page 18: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 18

WebGoat

• Cos'è WebGoat• WebGoat è un set di applicazioni volutamente insicure, preparate dall'OWASP - Open Web Application

Security Project, con il fine di istruire gli sviluppatori a prevenire vulnerabilità.

• Mette a disposizione dell'utente un finto portale bancario su cui effettuare le injection SQL e un finto guestbook su cui effettuare il Cross-Site Scripting

• Cos'è OWASP• The Open Web Application Security Project (OWASP) is dedicated to finding and fighting the causes of

insecure software. Everything here is free and open source. The OWASP Foundation is a 501c3 not-for-profit charitable organization that ensures the ongoing availability and support for our work. Participation in OWASP is free and open to all.

venerdì 12 marzo 2010

Page 19: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 19

SQL-Injection in Webgoat 1

• Come• E' possibile effettuare l'injection in un campo adibito all'autenticazione di un utente che vuole

vedere i suoi numeri di carta di credito

• Con una banale injection è possibile forzare il sistema a mostrare tutti i numeri di carta di credito di tutti gli uenti

• E' sufficiente inserire, invece del nome utente di prova “Smith”, la stringa ’ OR (LENGTH(last_name)<100) ‏

venerdì 12 marzo 2010

Page 20: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 20

SQL-Injection in Webgoat 2

venerdì 12 marzo 2010

Page 21: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 21

SQL-Injection in Webgoat 3

venerdì 12 marzo 2010

Page 22: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 22

Cross-Site Scripting in WG 1

• Come• E' possibile effettuare l'injection in un campo adibito all'inserimento di messaggi in un guestbook• Il messaggio viene immediatamente mostrato, senza essere controllato• La stringa utilizzata per l'Injection è <script>JavaScript:alert("XSS

Avvenuto con successo!")</script>

venerdì 12 marzo 2010

Page 23: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 23

Cross-Site Scripting in WG 2

venerdì 12 marzo 2010

Page 24: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 24

Cross-Site Scripting in WG 3

venerdì 12 marzo 2010

Page 25: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 25

Cross-Site Scripting in PhpBB2 1

• Cosa è:• Php Bulletin Board V2 è una tra i più popolari sistemi Open Source per la gestione di forum scritti

mediante il linguaggio di programmazione PHP.

• Come• E' possibile effettuare l'injection in un campo adibito all'inserimento della query di ricerca per autore• Il messaggio viene immediatamente mostrato, senza essere controllato• La stringa utilizzata per l'Injection è <script>JavaScript:alert

("XSS Eseguito!")</script>

venerdì 12 marzo 2010

Page 26: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 26

Cross-Site Scripting in PhpBB2 2

venerdì 12 marzo 2010

Page 27: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 27

Cross-Site Scripting in PhpBB2 3

venerdì 12 marzo 2010

Page 28: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 28

SQL-Injection in PhpNuke 7.8 1

• Cosa è:• PhpNuke, definito dall’autore come il futuro del Web, è una piattaforma scritta in php che

permette ad un amministratore di creare un portale per una comunità di utenti, consentendo a ciascun utente di pubblicare, modificare e commentare articoli e news.

• E' altamente modulare

• Come• E' possibile effettuare l'injection in un campo adibito alla ricerca all'interno di PhpNuke• Con una banale injection è possibile forzare il sistema a mostrare tutti gli hash delle password degli

amministratori• E' sufficiente inserire nel campo di ricerca la stringa s%’)

UNION SELECT 0,user_id,username,user_password,0,0,0,0,0,0 FROM nuke_users

venerdì 12 marzo 2010

Page 29: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 29

SQL-Injection in PhpNuke 7.8 2

venerdì 12 marzo 2010

Page 30: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 30

SQL-Injection in PhpNuke 7.8 3

venerdì 12 marzo 2010

Page 31: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 31

Conclusione

•Conclusioni:• Buoni risultati in fase di testing

• Problemi con documenti non formati e Blind SQL-Injection

• Problemi con l'esecuzione di codice JavaScript

venerdì 12 marzo 2010

Page 32: Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web

Fabio Quarti, Federico Villa 32

Fine Presentazione

Fine PresentazioneE l'ultimo chiuda la porta

venerdì 12 marzo 2010