atlantis: robust, extensible execution environments for web applications james mickens mohan dhawan

47
Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Upload: diana-brassfield

Post on 11-Dec-2015

222 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis: Robust, Extensible Execution Environments for Web Applications

James Mickens Mohan Dhawan

Page 2: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Your web browser

Page 3: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Our Claim• Web browsers are a

horrifying platform!

– APIs are too complex– Implementations are

too brittle– Writing robust apps is

too hard

Our Solution

HTMLCSS

JavaScript

Monolithic browser

HTML/CSS parser

DOM tree

Layout/rendering

Scripting runtime

Atlantisexokernel

HTML/CSS parser

DOM tree

Layout/rendering

Scripting runtime

HTMLCSS

JavaScript

Pages manage their own complexity!

Page 4: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Why Do We Need Another Browser?

Page 5: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

The “Web Protocol”

HTML

CSS

Core JavaScript

DOM Storage

Web workers

SilverlightPDF

<video> tag

Web sockets

Java

HTTPSHTTP

JavaScript DOM Bindings

<canvas> tag

file://JSON

Data URIs

QuicktimeFlash

Which version does the

browser use?

Page 6: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

No Single Browser Will Ever Get It Right

Theory Practice

Page 7: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Each Browser Will Fail In Different Ways

Monster Other Monster

Firefox IE

Page 8: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Outline

• The Adversarial Web Browser: Case Studies• Atlantis: Design and Implementation• Evaluation• Related Work

Page 9: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Let Me Teach You About Life

Web browsers areterrible and buggy.

Bah! I use JS libraries likejQuery to hide the complexity.You are foolish and hysterical.

Page 10: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

What You ThinkYour Web App

jQuery

Nice, browser-neutral interface

Largely tolerable browser APIs

Browsers

Page 11: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

What You ThinkYour Web App

jQuery

Nice, browser-neutral interface

Browsers

What Is

Largely tolerable browser APIs

Page 12: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Your Web App

jQuery

Partially browser-neutral interface

Browsers

What Is

Flaky, semi-consistent APIs

Page 13: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Why the Suicide Rate for Web Developers

is 89%

Page 14: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

James Mickens vs. Browsers:Event Handling

<html> <div> <button> Click me! </button> </div></html>

<html>

<div>

<button>

captureHandler(evt)

bubbleHandler(evt)

targetHandler(evt)

“Official” event model

1) Capture phase2) Target phase3) Bubble phase

Event

I’d like support for the official three-phase model.

Ok!

Ok!

I WILL NOT SUPPORT THE CAPTURE PHASE. Lolz.

9

8-

Page 15: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Problem: Different browsers have different DOM tree implementations!

Page 16: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

James Mickens vs. Browsers:Event Handling, Part 2

I’d like you to fire a blur event when the input focus changes.

Enter your name:

james

Focus!Blur!

Ok!

Sometimes I’ll fire the event, but sometimes I won’t. Rofl.

I’ll generate multiple events for each blur.

Page 17: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

!=

Page 18: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

James Mickens vs. Browsers:Layout and Rendering

I’d like to specify an element’s size as a percentage of the enclosing element.

<html> <div width=“49.5%”> </div> <div width=“50.5%”> </div></html>

Page 19: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

James Mickens vs. Browsers:Layout and Rendering

I’d like to specify an element’s size as a percentage of the enclosing element.

<html> <div width=“49.5%”> </div> <div width=“50.5%”> </div></html>

Page 20: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Problem: HTML/CSS parsing and layout engine are completely opaque to the web page!

?

Markup parser + layout engine

<html>

<head> <body>

<title> <div> <div>

HTML

CSS

Page 21: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

James Mickens vs. Browsers:Extending the JavaScript Runtime

I’d like to introspect/extend objects without the crippling fear that I’ll wedge my browser.Help me help myself.

This “should” “work”. Except when it won’t.Also, I’m dating your mom.

//Application codeobj.f = function(){return 42;};

//Third-party diagnostic code//[e.g., Mugshot@NSDI 2010] might//do something like this . . .oldF = obj.f;obj.f = function(){ mugshot.logCall(oldF); return oldF(); };

Page 22: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Problem: Opaque dependencies between C++ objects in browser and reflected versions in JavaScript!

function addEventListener(eName, callback){ nativeInvoke([“__addListener”, evtName, callback]);}

__addListener(e,c){ //C++ code}

JavaScript (“user” layer)

C++(“kernel” layer)

DOMnodeUnfathomable

browser

Page 23: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Problem: Opaque dependencies between C++ objects in browser and reflected versions in JavaScript!

function addEventListener(eName, callback){ nativeInvoke([“__addListener”, evtName, callback]);} JavaScript

(“user” layer)C++

(“kernel” layer)

DOMnodeUnfathomable

browser

__addListener(e,c){ //C++ code}

Page 24: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

How do we fix all of this?

Page 25: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Outline

• The Adversarial Web Browser: Case Studies• Atlantis: Design and Implementation• Evaluation• Related Work

Page 26: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Monolithic Browser

Page 27: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

OP (Oakland 08)

RhinoKHTMLNo change in

extensibility

Page 28: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis

Per-instance kernel

Defined by web page!

Executes Syphon code

1 process w/3 C# AppDomains

Page 29: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis: Defining the Web Stack

Load foo.html. It shall be done.

HTML

Page 30: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis: Defining the Web Stack

Load foo.html. It shall be done.

HTML

Page 31: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis: Defining the Web Stack

<environment> <compiler=‘http://foo/compiler.syp’> <markupParser=‘http://bar/mParser.js’> <runtime=‘http://baz/runtime.js’></environment>

Syphon Interpreter

compiler.syp mParser.syp runtime.syp

mParser.js

High-level application runtime

DOM tree AJAX libraryLayout andRendering

Atlantis kernel– Bitmap rendering– Frame creation and

destruction– Cross-frame messaging– Low-level GUI events– Blocking/non-blocking HTTP sockets

Page 32: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis: Defining the Web Stack

Syphon Interpreter

<html> . . .</html>

JScompiler.syp HTML+CSSparser.syp DOM.syp

By default, thy gets a backwards-compatible stack.

I cannot findeth an<environment> tag.

Page 33: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Atlantis: Defining the Web Stack

Syphon Interpreter

<html> . . .</html>

JScompiler.syp HTML+CSSparser.syp DOM.syp

By default, thy gets a backwards compatible stack.

It’s all made of JavaScript!

Page 34: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Common case: You don’t write the (extensible!) web stack

Page 35: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Facebook

Microsoft

jQuery

Page 36: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Outline

• The Adversarial Web Browser: Case Studies• Atlantis: Design and Implementation• Evaluation• Related Work

Page 37: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Extensibility• DOM nodes have an innerHTML property– Assign a string to dynamically update DOM tree– Allows for cross-site scripting attacks!

• Want: Ability to shim innerHTML and automatically install a sanitizer

var comment = document.getElementById(“commentBox”);var contentParent = document.getElementById(“parent”);contentParent.innerHtml = comment.value; //What if this is //JavaScript source?

Page 38: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

DON’T WORRY ATLANTIS CAN HELP YOU

Page 39: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

• In Atlantis, to change the DOM tree implementation:– YOU JUST DO IT– The entire implementation belongs to you!– Don’t have to wait on browser vendors!

Extensibility

Page 40: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Page Load Times

Page 41: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Outline

• The Adversarial Web Browser: Case Studies• Atlantis: Design and Implementation• Evaluation• Related Work

Page 42: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

• Microkernel browsers: OP, Gazelle, ServiceOS– Isolate commodity JS engines, HTML renderers, etc.– Better security . . .– . . . but same extensibility, robustness

Related Work

Page 43: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

• JavaScript abstraction frameworks– JavaScript libraries: jQuery, mooTools, Prototype– Compile-to-JavaScript: GWT, Script#

• Extremely useful!• However, they can’t . . .– Hide all browser quirks– Make black-box components introspectable

Related Work

Page 44: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Conclusions

• Web browsers have a lot of potential . . .

Page 45: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Conclusions• The aggregate “web protocol” is big and complex!– No individual browser can get it all right– Different browsers will fail in different ways

Page 46: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan

Conclusions

• Atlantis: an exokernel browser– Kernel handles low-level

networking, GUI events, bitmap rendering

– Application defines higher-level abstractions

• Advantages– Strong security– Powerful extensibility

Page 47: Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan