SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
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
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


                                             Fabio Quarti, Federico Villa          2

venerdì 12 marzo 2010
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




                                               Fabio Quarti, Federico Villa                      3

venerdì 12 marzo 2010
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.


                                              Fabio Quarti, Federico Villa                     4

venerdì 12 marzo 2010
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




                                                   Fabio Quarti, Federico Villa               5

venerdì 12 marzo 2010
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




                                                     Fabio Quarti, Federico Villa                 6

venerdì 12 marzo 2010
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



                                                Fabio Quarti, Federico Villa                     7

venerdì 12 marzo 2010
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)‫‏‬




                                                Fabio Quarti, Federico Villa                        8

venerdì 12 marzo 2010
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




                                               Fabio Quarti, Federico Villa                     9

venerdì 12 marzo 2010
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>




                                               Fabio Quarti, Federico Villa                      10

venerdì 12 marzo 2010
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




                                              Fabio Quarti, Federico Villa                     11

venerdì 12 marzo 2010
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.




                                               Fabio Quarti, Federico Villa                     12

venerdì 12 marzo 2010
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 - Come?:
     • Sono stati effettuati sfruttando vulnerabilità note e exploit conosciuti.
     • Sono state scelte applicazioni conosciute, familiari a molti utenti.



• 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




                                                 Fabio Quarti, Federico Villa               13

venerdì 12 marzo 2010
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




                                     Fabio Quarti, Federico Villa   14

venerdì 12 marzo 2010
Fine Presentazione




                        Fine Presentazione
                              That's all, Folks!




                              Fabio Quarti, Federico Villa   15

venerdì 12 marzo 2010
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
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




                                            Fabio Quarti, Federico Villa              17

venerdì 12 marzo 2010
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.




                                               Fabio Quarti, Federico Villa                     18

venerdì 12 marzo 2010
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)‫‏‬




                                               Fabio Quarti, Federico Villa                     19

venerdì 12 marzo 2010
SQL-Injection in Webgoat 2




                        Fabio Quarti, Federico Villa   20

venerdì 12 marzo 2010
SQL-Injection in Webgoat 3




                        Fabio Quarti, Federico Villa   21

venerdì 12 marzo 2010
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>




                                               Fabio Quarti, Federico Villa                     22

venerdì 12 marzo 2010
Cross-Site Scripting in WG 2




                         Fabio Quarti, Federico Villa   23

venerdì 12 marzo 2010
Cross-Site Scripting in WG 3




                         Fabio Quarti, Federico Villa   24

venerdì 12 marzo 2010
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>




                                                Fabio Quarti, Federico Villa                     25

venerdì 12 marzo 2010
Cross-Site Scripting in PhpBB2 2




                         Fabio Quarti, Federico Villa   26

venerdì 12 marzo 2010
Cross-Site Scripting in PhpBB2 3




                         Fabio Quarti, Federico Villa   27

venerdì 12 marzo 2010
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




                                               Fabio Quarti, Federico Villa                     28

venerdì 12 marzo 2010
SQL-Injection in PhpNuke 7.8 2




                        Fabio Quarti, Federico Villa   29

venerdì 12 marzo 2010
SQL-Injection in PhpNuke 7.8 3




                        Fabio Quarti, Federico Villa   30

venerdì 12 marzo 2010
Conclusione

       • Conclusioni:
           • Buoni risultati in fase di testing
           • Problemi con documenti non formati e Blind SQL-Injection
           • Problemi con l'esecuzione di codice JavaScript




                                     Fabio Quarti, Federico Villa   31

venerdì 12 marzo 2010
Fine Presentazione




                        Fine Presentazione
                             E l'ultimo chiuda la porta




                                 Fabio Quarti, Federico Villa   32

venerdì 12 marzo 2010

Mais conteúdo relacionado

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

ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Google Analytics - intruduzione
Google Analytics - intruduzioneGoogle Analytics - intruduzione
Google Analytics - intruduzioneFLT.lab
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Hackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e DifesaHackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e DifesaSimone Onofri
 
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007jekil
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansDavide Nardone
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensoredjekil
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013Massimo Chirivì
 
Smau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo ChirivìSmau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo ChirivìSMAU
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 

Semelhante a Tesi Triennale: Navigazione automatica e rilevazione di errori in applicazioni web (20)

ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Google Analytics - intruduzione
Google Analytics - intruduzioneGoogle Analytics - intruduzione
Google Analytics - intruduzione
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Hackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e DifesaHackers vs Developers - SQL Injection - Attacco e Difesa
Hackers vs Developers - SQL Injection - Attacco e Difesa
 
07 - Web apps e CMS
07 - Web apps e CMS07 - Web apps e CMS
07 - Web apps e CMS
 
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007
 
Installing Apache tomcat with Netbeans
Installing Apache tomcat with NetbeansInstalling Apache tomcat with Netbeans
Installing Apache tomcat with Netbeans
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013La sicurezza delle Web Application - SMAU Business Bari 2013
La sicurezza delle Web Application - SMAU Business Bari 2013
 
Smau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo ChirivìSmau Bari 2013 Massimo Chirivì
Smau Bari 2013 Massimo Chirivì
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
 
Swagger loves webapi
Swagger loves webapiSwagger loves webapi
Swagger loves webapi
 
MyTask
MyTaskMyTask
MyTask
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 

Último

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 

Último (9)

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 

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

  • 1. 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
  • 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 Fabio Quarti, Federico Villa 2 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 3 venerdì 12 marzo 2010
  • 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. Fabio Quarti, Federico Villa 4 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 5 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 6 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 7 venerdì 12 marzo 2010
  • 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)‫‏‬ Fabio Quarti, Federico Villa 8 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 9 venerdì 12 marzo 2010
  • 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> Fabio Quarti, Federico Villa 10 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 11 venerdì 12 marzo 2010
  • 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. Fabio Quarti, Federico Villa 12 venerdì 12 marzo 2010
  • 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 - Come?: • Sono stati effettuati sfruttando vulnerabilità note e exploit conosciuti. • Sono state scelte applicazioni conosciute, familiari a molti utenti. • 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 Fabio Quarti, Federico Villa 13 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 14 venerdì 12 marzo 2010
  • 15. Fine Presentazione Fine Presentazione That's all, Folks! Fabio Quarti, Federico Villa 15 venerdì 12 marzo 2010
  • 16. 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
  • 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 Fabio Quarti, Federico Villa 17 venerdì 12 marzo 2010
  • 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. Fabio Quarti, Federico Villa 18 venerdì 12 marzo 2010
  • 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)‫‏‬ Fabio Quarti, Federico Villa 19 venerdì 12 marzo 2010
  • 20. SQL-Injection in Webgoat 2 Fabio Quarti, Federico Villa 20 venerdì 12 marzo 2010
  • 21. SQL-Injection in Webgoat 3 Fabio Quarti, Federico Villa 21 venerdì 12 marzo 2010
  • 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> Fabio Quarti, Federico Villa 22 venerdì 12 marzo 2010
  • 23. Cross-Site Scripting in WG 2 Fabio Quarti, Federico Villa 23 venerdì 12 marzo 2010
  • 24. Cross-Site Scripting in WG 3 Fabio Quarti, Federico Villa 24 venerdì 12 marzo 2010
  • 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> Fabio Quarti, Federico Villa 25 venerdì 12 marzo 2010
  • 26. Cross-Site Scripting in PhpBB2 2 Fabio Quarti, Federico Villa 26 venerdì 12 marzo 2010
  • 27. Cross-Site Scripting in PhpBB2 3 Fabio Quarti, Federico Villa 27 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 28 venerdì 12 marzo 2010
  • 29. SQL-Injection in PhpNuke 7.8 2 Fabio Quarti, Federico Villa 29 venerdì 12 marzo 2010
  • 30. SQL-Injection in PhpNuke 7.8 3 Fabio Quarti, Federico Villa 30 venerdì 12 marzo 2010
  • 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 Fabio Quarti, Federico Villa 31 venerdì 12 marzo 2010
  • 32. Fine Presentazione Fine Presentazione E l'ultimo chiuda la porta Fabio Quarti, Federico Villa 32 venerdì 12 marzo 2010