1 / 33

Sandboxing JavaScript via Libraries and Wrappers

Explore the use of JavaScript libraries and wrappers to create a sandbox model for third-party JavaScript, without the need for browser modifications. This approach allows for secure execution of untrusted code without compromising integrity or confidentiality. Learn more about this two-tier sandbox architecture and its applications in various scenarios.

monicaj
Download Presentation

Sandboxing JavaScript via Libraries and Wrappers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sandboxing JavaScript via Libraries and Wrappers Phu H. Phung University of Gothenburg, Sweden, and University of Illinois at Chicago

  2. About Me • Receipt of international postdoc grant (3 years) by Swedish Research Council (VR), employed by Univ. of Gothenburg. • Research Associate at UIC. • PhD in Computer Science in 2011 from Chalmers University, Sweden. Hosted by OWASP & the NYC Chapter

  3. Selected research projects • European WebSand(complete) • End-to-end secure web framework • Secure Web Advertisements, funded by NSF (on-going) • Defensive Optimizing Compiler, funded by DARPA (on-going) Hosted by OWASP & the NYC Chapter

  4. This talk • Based on the two published papers: • PH Phung, L Desmet. A two-tier sandbox architecture for untrusted JavaScript, invited paper, JSTools’12. • P Agten, S Van Acker, Y Brondsema, PH Phung, L Desmet, F Piessens. JSand: complete client-side sandboxing of third-party JavaScript without browser modifications, ACSAC’12.

  5. 92% of all websites use JavaScript[w3techs.com] “88.45% of the Alexa top 10,000 web sites included at least one remote JavaScript library” CCS’12

  6. Third-party JavaScript is everywhere • Advertisements • Adhese ad network • Social web • Facebook Connect • Google+ • Twitter • Feedsburner • Tracking • Scorecardresearch • Web Analytics • Yahoo! Web Analytics • Google Analytics • …

  7. Two basic composition techniques Iframe integration <html><body> … <iframesrc=“http://3rdparty.com/frame.html”> </iframe> … </body></html> 3rd party

  8. Two basic composition techniques Script inclusion <html><body> … <script src=“http://3rdparty.com/script.js”> </script> … </body></html> 3rd party

  9. Third-party JavaScript issues • Third-party script inclusion run with the same privilege of the hosting page. • Security issues: • Malicious third-party code • Trusted third-party is compromised • Confidentiality, integrity, and other security risks

  10. Difficult issues with JavaScript • JavaScript is a powerful language, but the language design is bad for security, e.g.: • Dynamic scripts: document.write, eval, ... • Encapsulation leakage • ... A lot of attacks were launched in practice <script> document.write(‘<scr’); document.write(‘ipt> malic’); var i= 1; document.write(‘ious code; </sc’); document.write(‘ript>’); </script> <script> malicious code; </script>

  11. Malicious third-party JavaScript example The most reliable, cost effective method to inject evil code is to buy an ad. Principles of Security. Douglas Crockford http://fromonesrc.com/blog/page/2/

  12. An attack scenario MillionBrowserBotnet (July 2013) • Leverage Advertising Networks using JavaScript to launch Application-Level DDoS • Paid on 2 ad networks for displaying treacherous advertisements on pages visited by hundreds of thousands of people • One day, got 13.6 million views of the ads, just spent less than $100 Jeremiah Grossman & Matt Johansen WhiteHat SECURITY

  13. State-of-the-art • Limit third-party code to safe subset of JavaScript • Facebook JS, ADSafe, ADSafety, ... • Browser-based sandboxing solutions • ConScript, WebJail, Contego, ... • Server-side transformations of scripts to be included • Google Caja, BrowserShield, ... No compatibility with existing scripts Browser modifications imply short-term deployment issues No direct script delivery to browser Great runtime overhead

  14. Our approach • A sandbox model for third-party JavaScript • Using only JS libraries and wrappers • Whitelist (least-privilege) implementation approach • Only properties and objects defined in policies are available to the untrusted code • No browser modification is required • The third-party code is keep in original • Easily dealing with dynamic features of JavaScript “Lightweight Self-Protecting JavaScript”, ASIACCS’09

  15. Two-tier sandbox architecture Base-line API implementation, in e.g. `api.js’ file The policy code can only access the base-line API and provided wrapper functions (ensuring no leaks to global) Sandbox running policy code, defined in a separate JS e.g. `policy.js’ The untrusted code can only access objectsreturned by the outersandbox Sandboxrunning untrusted code, defined in a separate file e.g. `untrusted.js’ JavaScript environment, e.g. the DOM

  16. Two-tier sandbox architecture varapi = loadAPI(…); varouterSandbox = cajaVM.compileModule(policyCode); varenforcedAPI = outerSandbox(api); varinnerSandbox = cajaVM.compileModule(untrustedCode); innerSandbox(enforcedAPI);

  17. The architecture in multiple-principal untrusted code • Base-line API implementation, • in e.g. `api.js’ file Policy 2 Policy 1 untrusted untrusted Policy 3 untrusted

  18. Sandboxing untrusted code • Use Secure ECMAScript (SES) library developed by Google Caja team • Load a piece of code to execute within an isolated environment • The code can only interact with the outside world via provided APIs var api = {...}; //constructingvar makeSandbox = cajaVM.compileModule(untrustedCodeSrc);var sandboxed = makeSandbox(api);

  19. Isolation technique: The SES library Object-capability environment • Scripts can access • Objects they create themselves • Objects explicitly handed to them API Global context untrustedCode sandbox

  20. Isolation technique: The SES library

  21. Base-line APIs implementation • Create aVirtual DOM • Intercepting wrapper around real DOM • Use Harmony Proxies to generically intercept property accesses on objects • Virtual DOM implementation uses the Membrane Pattern • Wrap any object passed from DOM to sandbox (return values) • Unwrap any object passed from sandbox to DOM (arguments)

  22. Wrapper example

  23. Policy definition • Base-line APIs implementation • Can enforce coarse-grained, generic policies, e.g.: • Sanitize HTML • Ensure complete mediation • Fine-grained policies for multiple untrusted JavaScript code • Modular, principal-specific, e.g.: script1 is allowed to read/write elemt_A, script2 is allowed to read elemt_A • Stafeful, e.g.: limit the number of popups to 3 • Cross-principal stateful policies, e.g: after script1 write to elemt_A, disallow access from script2 to elemt_A

  24. Deployment model • Untrusted code is loaded into a string variable • Using server-side proxy + XMLHttpRequest (to overcome same origin policy) • CORS (Cross-Origin Resource Sharing) /UMP(Uniform Messaging Policy) headers set by the script provider <script src=“http://3rdparty.com/script.js”> </script> <script src=“ses.js”></script> <script src=“api.js”></script> <script src=“policy0.js”></script> <script>var script = get(“http://3rdparty.com/script.js”); ses.execute(script,policy0); </script> before after

  25. Secure dynamic script evaluation • Special handlers to intercept all methods that allow script tags to be added • node.appendChild, node.insertBefore, node.replaceChild, node.insertAfter • document.write, … • Event handlers in HTML, e.g. <…onclick=“javascript:xyz(…)”> • Parse partial DOM tree/HTML • Execute scripts in the sandbox environment

  26. Dynamic script loading in JavaScript • Example from Google Maps

  27. Different parsing techniques • Via a sandboxed iframe • Create sandbox iframe • Set content via srcdoc attribute • Better performance • Parsed exactly as will be interpreted by browser • Executed asynchronously • (Alternative) Via a HTML parsing library in JavaScript

  28. Loading additional code in the sandbox • External code needs to be executed in a previously set up sandbox • Loading API + glue code • Dynamic script loading • Two new operations: • innerEval(code) • innerLoadScript(url)

  29. Case studies • Single principal code • Multiple-principal code • Context-aware ads

  30. Implementation challenges • Legacy scripts need additional pre-processing to be compatible with the framework • Secure ECMAScriptrestrictions • A subset of ECMAScritp strict mode • Global variables aliased as window properties • No ‘this’ auto coercion

  31. JS transformation examples

  32. Summary • A client-side JavaScript architecture for untrusted JavaScript • Only using libraries and wrappers • Complete mediation using Secure ECMAScript • DOM node operations • JavaScript APIs • Backward compatibility • No browser modifications • Direct script delivery to the browser • Support for legacy scripts

  33. Thank you!

More Related