Dynamic Code Evaluation & Taint Analysis Prof. Tom Austin San - - PowerPoint PPT Presentation

dynamic code evaluation taint analysis
SMART_READER_LITE
LIVE PREVIEW

Dynamic Code Evaluation & Taint Analysis Prof. Tom Austin San - - PowerPoint PPT Presentation

CS 152: Programming Language Paradigms Dynamic Code Evaluation & Taint Analysis Prof. Tom Austin San Jos State University Parsing JSON (in-class) Review: additional Ruby eval methods instance_eval evaluates code within the body of an


slide-1
SLIDE 1

CS 152: Programming Language Paradigms

  • Prof. Tom Austin

San José State University

Dynamic Code Evaluation & Taint Analysis

slide-2
SLIDE 2

Parsing JSON

(in-class)

slide-3
SLIDE 3

Review: additional Ruby eval methods

  • instance_eval evaluates

code within the body of an object.

  • class_eval evaluates code

within the body of a class.

  • These methods can take a string
  • r (more safely) a block of code.
slide-4
SLIDE 4

class_eval example

(in class)

slide-5
SLIDE 5
slide-6
SLIDE 6

The mind of a developer

What does my code need to do? Stupid documentation Hmm… I wonder if my code is secure

slide-7
SLIDE 7

Web Security in the News

slide-8
SLIDE 8

How do companies/developers cope?

  • Train/shame developers to follow

best practices.

  • Hire security experts
  • Use analysis tools
  • Hush up mistakes
  • Budget to handle emergencies
  • Bury their heads in the sand.
slide-9
SLIDE 9

Secure By Architecture

Developers make mistakes.

Can we design tools to create secure systems, despite developer mistakes?

slide-10
SLIDE 10

Success story: memory-safe languages

  • Buffer overflows were once ubiquitous
  • Memory-safe languages manage

memory automatically

– Developer focus on functionality – Security-critical bugs are eliminated

  • Buffer overflows have virtually

disappeared

– Except in your OS, web browser, etc.

slide-11
SLIDE 11

Three Security Mechanisms

  • Taint analysis:

– protect critical fields from "dirty" data

  • Information flow analysis:

– Prevent secrets from leaking.

slide-12
SLIDE 12

Taint Analysis: Protecting against dirty data

slide-13
SLIDE 13

Taint analysis

  • Taint analysis focuses on integrity:

– does "dirty" data corrupt trusted data?

  • Integrated into Perl and Ruby
  • Handles explicit flows only

– direct assignment – passing parameters

slide-14
SLIDE 14

Attacks preventable by taint analysis

  • Data under the control of the user

may pose a security risk

– SQL injection – cross-site scripting (XSS) – cross-site request forgery (CSRF)

  • Taint tracking tracks untrusted

variables and prevents then from being used in unsafe operations

slide-15
SLIDE 15

Taint Tracking History

  • 1989 – Perl 3 support for a taint mode
  • 1996 – Netscape included support for a

taint mode in server-side JavaScript

– Later abandoned

  • Ruby later implemented a taint mode;

we'll review in more depth.

slide-16
SLIDE 16

Taint Mode in Ruby

  • Protect against integrity attacks.

– E.g. Data pulled from an HTML form cannot be passed to eval.

  • Cannot taint booleans or ints.
  • Multiple ways to run in safe mode:

– Use –T command line flag. – Include $SAFE variable in code.

slide-17
SLIDE 17

$SAFE levels in Ruby

  • 0 – No checking (default)
  • 1

– Tainted data cannot be passed to eval – Cannot load/require new files

  • 2 – Can't change, make, or remove directories
  • 3

– New strings/objects are automatically tainted – Cannot untaint tainted values

  • 4 – Safe objects become immutable
slide-18
SLIDE 18

s = "puts 4-3".taint $SAFE = 1 # Can't eval tainted data s.untaint # Removes taint from data puts s.tainted? eval s $SAFE = 3 s2 = "puts 2 * 7" # Tainted s2.untaint # Won't work now eval s2 eval s # this is OK

slide-19
SLIDE 19

# Data from web s = "Robert'); DROP TABLE " + "STUDENTS;--" s.taint exec_query("SELECT *" + " FROM STUDENTS" + " WHERE NAME='" + s + "';"

slide-20
SLIDE 20

class Record def exec_query(query_str) if query_str.tainted? puts "Err: tainted string" else # Perform the query ... end end end

slide-21
SLIDE 21

Information Flow Analysis

Her ere be d e be dragon

  • ns…
slide-22
SLIDE 22

Information Flow Analysis

  • Related to taint analysis
  • Focuses on confidentiality:

– does secret data leak to public channels?

  • Assumes attacker controls some code
  • Must consider implicit flows

– can the attacker deduce secrets?

slide-23
SLIDE 23

Developer Sensitive Data

Challenge of Securing Information

Private Channel Public Channel

Policy: Keep location

  • f the spray paint can

from leaking to public channels.

slide-24
SLIDE 24

Developer Sensitive Data Private Channel Public Channel

if (chan.police){ write(chan, spraycanLocation); } if (chan.police){ write(chan, spraycanLocation); }

Challenge of Securing Information

slide-25
SLIDE 25

Developer Sensitive Data Private Channel Public Channel

if (chan.police){ write(chan, spraycanLocation); } if (chan.police){ write(chan, spraycanLocation); }

New Developers

write(chan, spraycanLocation);

New System Requirements

slide-26
SLIDE 26

Information Leaked

slide-27
SLIDE 27

Applications often make use of 3rd party libraries of questionable quality...

Additional Information Flow Challenges

…or have vulnerabilities to code injection attacks... …so we must assume that the attacker is able to inject code into our system.

slide-28
SLIDE 28

Sensitive Data Public Data Private Channel Public Channel

Information Flow Analysis in Action

slide-29
SLIDE 29

Private Channel Public Channel Sensitive Data Public Data

Information Flow Analysis in Action

slide-30
SLIDE 30

Sensitive Data Public Data Private Channel Public Channel

Public outputs do not depend

  • n private inputs

Termination-Insensitive Non-Interference

slide-31
SLIDE 31

Explicit and Implicit Flows

spraycanLocation = "Kwik-E-Mart"police;

Location is only visible to the police.

x = spraycanLocation;

Explicit flow from spraycanLocation to x.

if (x.charAt(0) < 'N') { firstCharMax = 12; }

Implicit flow from x to firstCharMax.

slide-32
SLIDE 32

write(chan, spraycanLocation);

Developer

Core Functionality

Security Expert Business Domain Expert

Label Data

Attach label police to spraycanLocation

Enforcement Mechanism

label: police chan: police

slide-33
SLIDE 33

write(chan, spraycanLocation);

Developer

Core Functionality

Security Expert Business Domain Expert

Label Data

Attach label police to spraycanLocation

Enforcement Mechanism

label: police chan: public

DENIED

slide-34
SLIDE 34

Denning-style Static Analysis

  • Certification process, perhaps

integrated into a compiler.

  • Data can flow down the lattice
  • Programs can be guaranteed

to be secure before the program is ever executed.

slide-35
SLIDE 35

Static Analysis Certification

var secret = truebank; var y = true; if (secret) y = false;

var leak = true; if (y) leak = false;

  • Analysis ensures

that private data does not affect public data.

  • In this example,

y's final value depends on x.

  • [Denning 1976]
slide-36
SLIDE 36

Purely Dynamic Info Flow Controls

  • Instrument interpreter with runtime

controls

  • Implicit flows can be handled by:

– Ignoring unsafe updates – Crashing on unsafe updates – Leaking some data (not satisfying noninterference)

slide-37
SLIDE 37

A Tainting Approach One obvious strategy: if a public variable is updated in a private context, make it private as well.

var secret = truebank; var y = true; if (secret) y = false; Set y=falsebank

slide-38
SLIDE 38

Challenges With Implicit Flows

var secret = truebank; var y = true; if (secret) y = false;

var leak = true; if (y) leak = false; y=falsebank leak=true y=true leak=false secret=falsebank

slide-39
SLIDE 39

Dynamic Monitors Reject Executions

var secret = truebank; var y = true; if (secret) y = false;

Execution terminates to protect the value

  • f secret.

Zdancewic 2002

slide-40
SLIDE 40

Secure Multi-Execution

Executes program multiple:

  • High execution

– Sees all information – Only writes to authorized channels

  • Low execution

– Only sees public data – Writes to public channels – Confidential data replaced with default values.

slide-41
SLIDE 41

var pass = mkSecret("scytale"); if (pass[0]==("s")) write(chan,"s");

var pass=""; if (pass[0] ==("s")) write(chan, "s");

Low Execution Program

var pass="scytale"; if (pass[0] ==("s")){ write(chan, "s");

High Execution Program Original Program

slide-42
SLIDE 42

Secure Multi-Execution

High execution Low execution Private inputs Public inputs Dummy Values Private

  • utputs

Public

  • utputs
slide-43
SLIDE 43

Lab: Taint tracking

Today's lab explores taint tracking in Ruby. Starter code is available on the course website. Details in Canvas.