Top Banner
Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt
69

Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Mar 26, 2015

Download

Documents

Brian Lopez
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Ajax Security

Douglas Crockford

Yahoo!

javascript.crockford.com/security.ppt

Page 2: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Security

The number 1 biggest problem with the whole World

Wide Web.

Page 3: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

The browser is not a safe programming environment.

It is inherently insecure.

Page 4: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

What can an attacker do if he gets some script into

your page?

Page 5: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

An attacker can request additional scripts from any

server in the world.Once it gets a foothold, it can

obtain all of the scripts it needs.

Page 6: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

An attacker can make requests of your server.

Your server cannot detect that the request did not

originate with your application.

Page 7: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

An attacker can read the document.

The attacker can see everything the user sees.

Page 8: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

An attacker has control over the display and can request information from the user.

The user cannot detect that the request did not originate

with your application.

Page 9: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

An attacker can send information to servers anywhere in the world.

Page 10: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

The browser does not prevent any of these.

That's why they happen.

Page 11: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

The consequences of a successful attack are

horrible.

Harm to customers. Loss of trust.

Legal liabilities.

Possible criminal penalties.

Page 12: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

This is not a Web 2.0 problem.

All of these problems came with Netscape 2 in 1995.

Page 13: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

The Turducken Problem

• Many Languages:

HTTP, HTML, URL, CSS, JavaScript, XML, JSON, plaintext, SQL...

• Each language has different quoting and commenting conventions.

• The languages can be nested inside each other.

Page 14: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

A text that is benign in one context might be dangerous

in another.

Sloppy encoding allows injection of evil scripts

Page 15: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

A Simple Attack

http://yourdomain.com/

<script>alert("XSS");</script>

<html><body>

<p>File not found: <script>alert("XSS");</script>

</p></body></html>

• The script runs with the authority of your site.

Page 16: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

A Simple Attack

http://yourdomain.com/

<script>alert("XSS");</script>

<html><body>

<p>File not found: &lt;script>alert("XSS");&lt;/script>

</p></body></html>

• Proper escapement provides some safety.

Page 17: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Another Example

• Bad text

" + alert("XSS") + "

• Bad encoding

{"json": "" + alert("XSS") + ""}

• Good encoding

{"json": "\" + alert(\"XSS\") + \""}

Page 18: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Coding hygiene is critical for avoiding turducken

attacks.Use good encoders. json.org/json2.js

Do not use simple concatenation.

Never trust the browser.

Validate all input.

Page 19: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Cross Site Data Access

It is extremely useful to

obtain data from other

sites and mash it up.

Page 20: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Same Origin Policy

Prevents useful things.Allows dangerous things.

Page 21: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Script Tag Hack

• Scripts (strangely) are exempt from Same Origin Policy.

• A dynamic script tag can make a GET request from a server.

receiver(jsontext);

• Extremely dangerous. It is impossible to assure that the server did not send an evil script.

Page 22: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

JavaScript's Global Object

The root cause of XSS attacks.

All scripts run with the same authority.

Page 23: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

JavaScript is an insecure language.

The ES4 Proposal is even worse.

It should be abandoned.

Page 24: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Document Object Model

All nodes are linked to all other nodes and to the

network.

Page 25: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Cookies

Ambient authority leads to confusion and impersonation

(XSRF)

Page 26: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Remedy: Crumbs

An explicit secret should be sent with the ambient cookie.

Frustrates XSRF attacks.

Not effective against XSS attacks.

Page 27: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Excellent Code Quality

If code is clean and readable, it is less likely to contain

insecurities.

Page 28: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

JSLint

• JSLint defines a professional subset of JavaScript.

• It imposes a programming discipline that makes me much more confident in a dynamic, loosely-typed environment.

http://www.JSLint.com/

Page 29: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Warning!JSLint will hurt your

feelings.

Page 30: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

If the web as been totally screwed up from the

beginning, why should we worry about it now?

1. Escalating legal penalties

2. Mashups

3. Competition

Page 31: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Mashups

The most interesting innovation in software

development in 20 years.

Page 32: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Mashups are insecure.

Mashups must not have access to any confidential

information.

Page 33: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

If there is script from two or more sources, the application

is not secure.

Period.

Page 34: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Advertising is a mashup.

Page 35: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Competition to displace the web.

Silverlight.

AIR.

JavaFX.

Page 36: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

That wouldn't be the end of the world.

It would just be the end of the WWW.

Page 37: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

A Three Prong Strategy to Fix the Web

1. Safe JavaScript subsets.

2. Small browser improvements.

3. Massive browser improvements.

This could take a while, so we should proceed on all three immediately.

Page 38: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

1. Safe JavaScript Subsets.

The easiest way to improve JavaScript is to make it

smaller.

Page 39: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

ADsafe

• A JSLint option.

• It defines a safe HTML/JavaScript subset.

• Removes from JavaScript all features that are unsafe or suspect.

• Allows foreign ads and widgets to safely interact.

Page 40: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

ADsafe

• No global variables or functions may be defined.

• No global variables or functions can be accessed except the ADSAFE object.

• The [] subscript operator may not be used.

• These words cannot be used: apply call callee caller constructor eval new prototype this watch

• Words starting with _ cannot be used.

Page 41: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Dangers

• There may still be undiscovered weaknesses in ECMAScript and its many implementations.

• Browser implementations are changing, introducing new weaknesses.

• The DOM wrappers must be flawless.

• We are still subject to XSS attacks.

Page 42: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

2. Add Simple Features to the Browsers.

Even simple improvements can take a long time to

distribute.

Page 43: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

JSONRequest for safe data interchange.

Page 44: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Vats

Communicating computational containment vessels

Page 45: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

HTML Provides No Modules

• It was conceived to be a document format.

• We are using it as an application format.

• Applications requires modules.

• Modules protect their contents.

• Modules communicate by exposing clean interfaces.

Page 46: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Vats

• Adapting Google's Gears or Adobe's AIR to provide communicating containment.

• Provides cooperation under mutual suspicion.

• Heavyweight.

• Distribution is difficult.

• Still subject to XSS attacks.

Page 47: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

3. We need to replace JavaScript and the DOM.

As long as we are using insecure languages, we will be subject to XSS attacks.

Page 48: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Start with the ADsafe subset, and then carefully add features to enhance

expressiveness.

Page 49: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

A is an Object.

Object A has state and behavior.

A

Page 50: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Object A has a reference to

Object B.

A

B

An object can have references to other

objects.

has-a

Page 51: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

...because it has a

reference to Object B.

Object A can communicate with Object

B...A

B

Page 52: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Object B provides an

interface that constrains

access to its own state and

references.

A

B

Every object is a micro vat.

Page 53: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Object A does not have a reference to Object C, so Object A cannot communicate with Object

C.

A

BIn an Object

Capability System, an object can only

communicate with objects that it has

references to.

C

Page 54: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

An Object Capability System is produced by constraining the ways that references are

obtained.

A reference cannot be obtained simply by knowing

the name of a global variable or a public class.

Page 55: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

There are exactly three ways to obtain a reference.

1. By Creation.

2. By Construction.

3. By Introduction.

Page 56: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

1. By Creation

If a function creates an object, it gets a reference to

that object.

Page 57: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

2. By Construction

An object may be endowed by its constructor with references.

This can include references in the constructor's context and inherited

references.

Page 58: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

3. By Introduction

A

BC

A has a references to B and C.B has no references, so it cannot communicate with A or C.C has no references, so it cannot communicate with A or B.

Page 59: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

3. By Introduction

A

BC

A calls B, passing a reference to C.

Page 60: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

3. By Introduction

A

BC

B is now able to communicate with C.

It has the capability.

Page 61: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Weaknesses to avoid include

1. Arrogation.

2. Corruption.

3. Confusion.

4. Collusion.

Page 62: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

There is no security in obscurity

Tricks and puzzles are not effective.

Speed bumps are not effective.

Page 63: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

False security increases the danger.

Ineffective measures make things worse.

Page 64: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

The security problems are not new.

The problems are getting harder to ignore.

Page 65: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Ultimately

• We need to replace JavaScript with a secure language.

• The current ES4 proposal is not that language.

• We need to replace HTML and the DOM with a secure application delivery system.

• The current HTML5 proposal is not that either.

Page 66: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Ultimately

• Secure programming language to replace JavaScript.

• A modular application framework to replace the DOM and CSS.

• A common text representation and protocol to replace HTTP and the Ajax stack.

• Otherwise, the web may fall to newer proprietary systems.

Page 67: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Meanwhile

• Never trust the browser.

• Formally validate everything you receive from the browser.

• Properly encode everything you send to the browser or database.

• Do not circumvent what little security the browser offers.

• Never put data on the wire unless you want it to be delivered.

• Don't take ineffective measures.

Page 68: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Be Rigorous

• Sloppiness aids the Enemy.

• Neatness counts.

• Use good encoders.

• Avoid concatenation.

• Be paranoid.

Page 69: Ajax Security Douglas Crockford Yahoo! javascript.crockford.com/security.ppt.

Turducken