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

Transcript of Atlantis: Robust, Extensible Execution Environments for Web Applications James Mickens Mohan Dhawan.

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.