Smau Milano 2014 - Andrea Zwirner

Click here to load reader

  • date post

    13-Dec-2014
  • Category

    Technology

  • view

    173
  • download

    1

Embed Size (px)

description

Sicurezza delle applicazioni web

Transcript of Smau Milano 2014 - Andrea Zwirner

  • 1. 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 1 Sicurezza delle applicazioni web Andrea Zwirner Linkspirit [email protected] @AndreaZwirner
  • 2. Andrea Zwirner 2 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 sicurezza informatica Consulenza nella progettazione sicura di software e sistemi Verifiche di sicurezza su software e sistemi Formazione in materia di sicurezza informatica 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 3. Andrea Zwirner 3 Partecipo a diversi progetti legati la ricerca e divulgazione della cultura sulla sicurezza informatica 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 4. La sicurezza informatica 4 Insieme di misure di carattere organizzativo, tecnologico e procedurale mirate a garantire CONFIDENZIALIT INTEGRIT DISPONIBILIT 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web dell'informazione.
  • 5. Sicurezza applicativa 5 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 6. 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 6
  • 7. Consapevolezza 7 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. 23 ottobre 2014 SMAU 2014 Se non si coinvolgono gli utenti, ogni sforzo vano Cybersecurity Strategy of the European Union Commissione europea, febbraio 2013 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 8. Consapevolezza 8 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 9. Titolo della Presentazione e della slide 9 [] 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 allinterno delle istituzioni [...] al fine di accrescere il livello di consapevolezza e di conoscenza della minaccia e dei relativi rischi 23 ottobre 2014 SMAU 2014 Quadro strategico nazionale per la sicurezza dello spazio cibernetico Presidenza del Consiglio dei Ministri, dicembre 2013 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 10. Sicurezza delle applicazioni web 10 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 Ampia superficie d'attacco Svariati petabyte di informazioni di miliardi di utenti (privati, Accesso diretto alle macchine degli utenti stessi 23 ottobre 2014 SMAU 2014 aziende, banche e governi) Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 11. La metodologia 11 23 ottobre 2014 SMAU 2014 O W A S P The Open Web Application Security Project Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 12. Cos' l'OWASP 12 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 13. Cosa fa l'OWASP 13 Attiva nel campo della ricerca e divulgazione della cultura della 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 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
  • 14. Progetti OWASP interessanti 14 Top Ten Project Mobile Security Project Top Ten Mobile Risks Top Ten Mobile Controls Development Guide Secure Coding Practices - Quick Reference Guide Code Review Guide Testing Guide Web Goat Project 23 ottobre 2014 SMAU 2014 ENISA European Network and Information Security Agency Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 15. Top Ten Project 15 Descrive le dieci vulnerabilit valutate come pi rischiose in ambito 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web web application Indirizzato a sviluppatori, designer, manager ed organizzazioni Fornisce linee guida per prevenire e rilevare le vulnerabilit descritte Indipendente da linguaggio / framework utilizzato
  • 16. Top Ten 2013 16 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 17. A1 Injection 17 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Vettori d'attacco Qualunque fonte di dati, incluse quelle interne
  • 18. A1 Impatti 18 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 19. A1 Esempio SQL Injection 19 Parametrizzazione insicura di una query SQL 1. var_id = _post(id); 2. query = SELECT * FROM tab WHERE id = ' + var_id + '; 3. result = invia_query_al_database(query); 4. fai_qualcosa_con(result); 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 20. A1 Esempio SQL Injection 20 Parametrizzazione insicura di una query SQL 1. var_id = _post(id); 2. query = SELECT * FROM tab WHERE id = ' + var_id + '; 3. result = invia_query_al_database(query); 4. fai_qualcosa_con(result); 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Parametri attesi _post(id) = n naturale (o, al pi, intero)
  • 21. A1 Esempio SQL Injection 21 Parametrizzazione insicura di una query SQL 1. var_id = _post(id); 2. query = SELECT * FROM tab WHERE id = ' + var_id + '; 3. result = invia_query_al_database(query); 4. fai_qualcosa_con(result); 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Parametri attesi _post(id) = n naturale (o, al pi, intero) Esempio di parametro inatteso _post(id) = 23'; DROP TABLE tab; --
  • 22. A1 Esempio SQL Injection 22 Parametrizzazione insicura di una query SQL 1. var_id = _post(id); 2. query = SELECT * FROM tab WHERE id = ' + var_id + '; 3. result = invia_query_al_database(query); 4. fai_qualcosa_con(result); SELECT * FROM tab WHERE id = '23'; DROP TABLE tab; --' 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Parametri attesi _post(id) = n naturale (o, al pi, intero) Esempio di parametro inatteso _post(id) = 23'; DROP TABLE tab; --
  • 23. A1 Injection fun! 23 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 24. A1 Injection fun! 24 ZU 0666',0,0); DROP DATABASE TABLICE; -- 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 25. A1 OS Injection 25 Parametrizzazione insicura di un comando shell 23 ottobre 2014 SMAU 2014 1. var_ip = _post(ip); 2. command = /bin/ping -c2 + var_ip; 3. result = esegui_comando(command); 4. stampa_nella_pagina(result); Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Parametri attesi _post(ip) = ip (indirizzo IP) Esempio di parametro inatteso _post(ip) = 127.0.0.1; cat /etc/passwd
  • 26. A1 Prevenzione 26 Utilizzare API che neghino l'uso diretto dell'interprete, fornendo un interfaccia parametrizzata Fare escaping dei caratteri speciali, usando le sequenze specifiche 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 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!
  • 27. A1 Rilevazione 27 Se non sono stati definiti pattern di sviluppo, si vulnerabili. 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Revisione del codice Verifica della separazione fra gli interpreti ed i dati non fidati Penetration test
  • 28. A1 Esempio di parametrizzazione sicura 28 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); 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 29. A2 Broken Auth and Session Mgmt 29 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Vettori d'attacco Sistemi di autenticazione ed autorizzazione
  • 30. A2 Impatti 30 Difficolt di sfruttamento: media 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 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)
  • 31. A2 Scenari d'attacco 31 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 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
  • 32. A2 Prevenzione 32 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 Verificare che i controlli non siano vulnerabili ad attacchi di tipo XSS ( A3: XSS), che permetterebbero il furto di sessioni 23 ottobre 2014 SMAU 2014 Application Security Verification Standard (ASVS) Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 33. A2 Rilevazione [1/2] 33 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 Gli id di sessione sono esposti negli URL? Gli id di sessione sono vulnerabili ad attacchi del tipo session fixation? 23 ottobre 2014 SMAU 2014 errori nelle funzioni di gestione degli account? Creazione, cambio / recupero password, etc Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 34. A2 Rilevazione [2/2] 34 Le sessioni hanno timeout? Gli utenti possono disconnettersi? Gli id di sessione sono cambiati in seguito ad ogni variazione nel livello di autorizzazione? Le password e gli id di sessione sono scambiati attraverso canali crittografati? ( A6: Sensitive Data Exposure) 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 35. A4 Insecure Direct Object References 35 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web Vettori di attacco Cambio di riferimenti ad oggetti da parte di utenti (eventualmente) autenticati in url o parametri GET/POST
  • 36. A4 Impatti 36 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 37. A4 Scenario d'attacco 37 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. 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 38. A4 Prevenzione 38 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 di fornire il contenuto 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 39. A4 Esempio sicuro 39 Mappatura agli oggetti 1. query = prepara('SELECT prendiContiSessione(%)', session_id); 2. conti[] = invia_al_database(query); 3. metti_conti_in_dropdown(conti[], dropdown); qui c' l'interazione dell'utente 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 40. A4 Esempio sicuro 40 1. map_conto = prendi_indice_selezionato(dropdown); 2. query = prepara('SELECT verificaPermessi(%,%)', 3. result = invia_al_database(query); 4. if (result) { 5. tutto_ok_procedi(); 6. } else { 7. biasima_utente_e_disconnetti(session_id); 8. } 23 ottobre 2014 SMAU 2014 conti[map_conto], session_id); Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 41. A4 Rilevazione e prevenzione 41 Verificare che tutti i riferimenti ad oggetto siano indiretti e protetti adeguatamente Mappatura dinamica e limitata alle risorse cui l'utente (o la 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 23 ottobre 2014 SMAU 2014 sessione) ha autorizzazione in lettura Andrea Zwirner Linkspirit Sicurezza delle applicazioni web stesse regole!
  • 42. 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 42 Sicurezza delle applicazioni web Andrea Zwirner Linkspirit [email protected] @AndreaZwirner
  • 43. A8 Cross-site Request Forgery (CSRF) 43 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 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
  • 44. A8 Impatti 44 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 45. A8 Esempio 45 L'utente autenticato sul sito www.sito.it e visita (volontariamente o meno) una pagina del sito dell'attaccante contenente: Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 46. A8 Prevenzione 46 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web funzioni pi delicate Ricordarsi di applicare timeout con tempi inversamente proporzionali al livello di autorizzazione degli utenti
  • 47. A8 - Rilevazione 47 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 pi gettonate In caso di limiti di tempo o budget concentrarsi su queste Tenere in considerazione che, per prevenire attacchi del tipo CSRF, non si pu fare affidamento su cookies o indirizzi IP di provenienza 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web
  • 48. 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web 48 Sicurezza delle applicazioni web Andrea Zwirner Linkspirit [email protected] @AndreaZwirner
  • 49. Riferimenti 49 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 Ding 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 23 ottobre 2014 SMAU 2014 Andrea Zwirner Linkspirit Sicurezza delle applicazioni web spazio cibernetico - 2013