04 Program Tools
04 Program Tools
John
Mitchell
So>ware
bugs
are
serious
problems
Slides
from:
S.
Bugrahe,
A.
Chou,
I&T
Dillig,
D.
Engler,
J.
Franklin,
A.
Aiken,
…
Manual
tesMng
Entry
1
2
4
only
examines
small
subset
of
1
3
4
behaviors
1
1
2
4
1
3
4
1
2
4
1
3
4
2
3
1
2
3
1
2
4
1
3
4
1
2
4
1
2
3
1
3
4
4
1
2
3
1
2
3
1
3
4
1
2
4
1
2
4
1
3
4
Exit
So#ware
.
.
.
Behaviors
9
Program
Analyzers
analyze
large
code
bases
poten5ally
reports
many
may
emit
false
alarms
warnings
Example
• Coverity
demo
video:
hcp://youtu.be/_Vt4niZfNeA
• ObservaMons
– Code
analysis
integrated
into
development
workflow
– Program
context
important:
analysis
involves
sequence
of
funcMon
calls,
surrounding
statements
– This
is
a
sales
video:
no
discussion
of
false
alarms
StaMc
analysis
goals
• Bug
finding
– IdenMfy
code
that
the
programmer
wishes
to
modify
or
improve
• Correctness
– Verify
the
absence
of
certain
classes
of
errors
Soundness,
Completeness
Property
Defini5on
Undecidable
Decidable
Unsound
May
not
report
all
errors
May
not
report
all
errors
Reports
no
false
alarms
May
report
false
alarms
Decidable
Decidable
Sound
Modules
Reported
Over-‐approxima5on
of
Error
Behaviors
. . .
So#ware
Outline
• General
discussion
of
tools
– Goals
and
limitaMons
– Approach
based
on
abstract
states
• More
about
one
specific
approach
– Property
checkers
from
Engler
et
al.,
Coverity
– Sample
security-‐related
results
• StaMc
analysis
for
Android
malware
– …
Slides
from:
S.
Bugrahe,
A.
Chou,
I&T
Dillig,
D.
Engler,
J.
Franklin,
A.
Aiken,
…
Does
this
program
ever
crash?
entry
X ß 0
Is
Y
=
0
?
yes
no
Is
Y
=
0
?
yes
no
Is
X
<
0
?
exit
yes
no
crash
Does
this
program
ever
crash?
entry
X ß 0
Is
Y
=
0
?
yes
no
Is
Y
=
0
?
yes
no
Is
X
<
0
?
exit
yes
no
crash
infeasible
path!
…
program
will
never
crash
Try
analyzing
without
approximaMng…
entry
X
ß
0
X
=
0
Is
Y
=
0
?
yes
no
X
=
2
0
1
X
ß
X
+
1
X
ß
X
-‐
1
X
=
3
1
2
X
=
3
1
2
Is
Y
=
0
?
X
=
3
1
2 yes
no
Is
X
<
0
?
exit
yes
no
X
=
3
1
2
crash
non-‐termina5on!
…
therefore,
need
to
approximate
dataflow
elements
X = 0 din
dataflow
equa5on
transfer
func5on
X
=
0
din1
X
ß
X
+
1
f1
X
=
1
dout1
dout1
=
f1(din1)
X
=
1
din2
dout1
=
din2
Is
Y
=
0
?
f2
dout2
=
f2(din2)
X
=
1
dout2
dout1
=
f1(din1)
din1
din2
dout2
=
f2(din2)
f1
f2
X
ß
0
X
=
0
Is
Y
=
0
?
yes
no
X
=
0
X
=
0
X
ß
X
+
1
X
ß
X
-‐
1
X
=
pos
X
=
neg
X
=
T
lost
Is
Y
=
0
?
precision
X
=
T
X
=
T
yes
no
Is
X
<
0
?
exit
yes
no
X
=
T
X
=
T
terminates...
crash
…
but
reports
false
alarm
…
therefore,
need
more
precision
X
=
T
true
X
≠
neg
X
=
T
X
≠
pos
Y
=
0
Y
≠
0
X
=
pos
X
=
0
X
=
neg
false
X
=
⊥
X
=
⊥
refined
signs
signs
laUce
laUce
Boolean
formula
laUce
Try
analyzing
with
“path-‐sensiMve
signs”
approximaMon…
entry
X
ß
0
true
X
=
0
Is
Y
=
0
?
yes
no
Y=0
X
=
0
X
=
0
Y≠0
X
ß
X
+
1
X
ß
X
-‐
1
Y=0
X
=
pos
X
=
neg
Y≠0
no
precision
loss
Y=0
X
=
pos
Is
Y
=
0
?
Y≠0
X
=
neg
X
=
neg
Y≠0
yes
no
Y=0
X
=
pos
Is
X
<
0
?
exit
refinement
yes
no
X
=
pos
Y=0
terminates...
crash
…
no
false
alarm
…
soundly
proved
never
crashes
Outline
• General
discussion
of
tools
– Goals
and
limitaMons
– Approach
based
on
abstract
states
• More
about
one
specific
approach
– Property
checkers
from
Engler
et
al.,
Coverity
– Sample
security-‐related
results
• StaMc
analysis
for
Android
malware
– …
Slides
from:
S.
Bugrahe,
A.
Chou,
I&T
Dillig,
D.
Engler,
J.
Franklin,
A.
Aiken,
…
Bugs to Detect
Some examples
• Crash Causing Defects • Uninitialized variables
• Null pointer dereference • Invalid use of negative values
• Use after free • Passing large parameters by value
• Double free • Underallocations of dynamic data
• Array indexing errors • Memory leaks
• Mismatched array new/delete • File handle leaks
• Potential stack overrun • Network resource leaks
• Potential heap overrun • Unused values
• Return pointers to local variables • Unhandled return codes
• Logically inconsistent code • Use of invalid iterators
• Typical mistake:
fd = open(“file”, O_CREAT);
29
Example: Chroot protocol checker
chroot() chdir(“/”)
30
TOCTOU
check(“foo”) use(“foo”)
31
Tainting checkers
32
Example code with function def, calls
#include <stdlib.h>
#include <stdio.h>
33
Callgraph
main
fgets printf
34
Reverse Topological Sort
8 main
3 7
4 5 6
35
Apply Library Models
8 main
3 7
4 5 6
fgets printf
Tool has built-in summaries of
library function behavior 2 1
36
Bottom Up Analysis
8 main
3 7
4 5 6
37
Bottom Up Analysis
8 main
3 7
4 5 6
38
Bottom Up Analysis
8 main
3 7
4 5 6
39
Finding Local Bugs
#define SIZE 8
void set_a_b(char * a, char * b) {
char * buf[SIZE];
if (a) {
b = new char[5];
} else {
if (a && b) {
buf[SIZE] = a;
return;
} else {
delete [] b;
}
*b = ‘x’;
}
*a = *b;
}
40
Control Flow Graph
char * buf[8];
Represent logical structure of
code in graph form
if (a)
a !a
*b = ‘x’;
*a = *b;
END
41
Path Traversal
Conceptually: Analyze each path
Conceptually
through control graph separately
char * buf[8];
Actually Perform some checking
computation once per node;
if (a) combine paths at merge nodes
a !a
*b = ‘x’;
*a = *b;
END
42
Apply Checking
if (a)
!a •
Checker
• Defined by a state diagram, with state
if (a && b)
transitions and error states
!(a && b)
delete [] b; •
Run Checker
• Assign initial state to each program var
*b = ‘x’; • State at program point depends on
state at previous point, program actions
• Emit error if error state reached
*a = *b;
END
43
Apply Checking
Null pointers Use after free Array overrun
char * buf[8];
“buf is 8 bytes”
if (a)
!a
if (a && b)
!(a && b)
delete [] b;
*b = ‘x’;
*a = *b;
END
44
Apply Checking
*b = ‘x’;
*a = *b;
END
45
Apply Checking
*b = ‘x’;
*a = *b;
END
46
Apply Checking
*a = *b;
END
47
Apply Checking
END
48
Apply Checking
49
False Positives
50
A False Path
char * buf[8];
if (a)
a !a
*b = ‘x’;
*a = *b;
END
51
False Path Pruning
Integer Range Disequality Branch
char * buf[8];
if (a)
!a
if (a && b)
a && b
buf[8] = a;
END
52
False Path Pruning
Integer Range Disequality Branch
char * buf[8];
if (a)
!a “a in [0,0]” “a == 0 is true”
if (a && b)
a && b
buf[8] = a;
END
53
False Path Pruning
Integer Range Disequality Branch
char * buf[8];
if (a)
!a “a in [0,0]” “a == 0 is true”
if (a && b)
a && b “a != 0”
buf[8] = a;
END
54
False Path Pruning
Integer Range Disequality Branch
char * buf[8];
Impossible
if (a)
!a “a in [0,0]” “a == 0 is true”
if (a && b)
a && b “a != 0”
buf[8] = a;
END
55
Environment Assumptions
56
Statistical Analysis
57
Application to Security Bugs
58
Sanitize integers before use
60
Example security holes
/* 2.4.5/drivers/char/drm/i810_dma.c */
61
User-pointer inference
62
Results for BSD and Linux
Linux BSD
Violation Bug Fixed Bug Fixed
Gain control of system 18 15 3 3
Corrupt memory 43 17 2 2
Read arbitrary memory 19 14 7 7
Denial of service 17 5 0 0
Minor 28 1 0 0
Total 125 52 12 12
63
Outline
• General
discussion
of
tools
– Goals
and
limitaMons
– Approach
based
on
abstract
states
• More
about
one
specific
approach
– Property
checkers
from
Engler
et
al.,
Coverity
– Sample
security-‐related
results
• StaMc
analysis
for
Android
malware
– …
Slides
from:
S.
Bugrahe,
A.
Chou,
I&T
Dillig,
D.
Engler,
J.
Franklin,
A.
Aiken,
…
STAMP
Admission
System
Sta5c
Analysis
More
behaviors,
fewer
details
Static
STAMP
Dynamic
Alex
Aiken,
Dynamic
Analysis
John
Mitchell,
Fewer
behaviors,
Saswat
Anand,
Jason
Franklin
more
details
Osbert
Bastani,
Lazaro
Clapp,
Patrick
Mutchler,
Manolis
Papadakis
Analysis
Step 1 Convert bytecode to intermediate
format (called Quads)
Source: sendSMS()
getLoc() Sink: SMS
Location
• Source-to-sink flows
o Sources: Location, Calendar, Contacts, Device ID etc.
o Sinks: Internet, SMS, Disk, etc.
Data Flow Analysis in Action
• Malware/Greyware Analysis
o Data flow summaries enable enterprise-specific policies
Source:
Web SQL Stmt Sink: SQL
Untrusted_Data
Challenges
• Android is 3.4M+ lines of complex code
o Uses reflection, callbacks, native code
Android
• Whole-program analysis
STAMP
o Context sensitive
OS
HW
Building Models
• 30k+ methods in Java/Android API
o 5 mins x 30k = 2500 hours
• Account
data
• Audio
• Calendar
• Call
log
30+ types of
• Camera
sensitive data
• Contacts
• Device
Id
• Location
• Photos
(Geotags)
• SD
card
data
• SMS
Data Destinations (Sinks)
• Internet
(socket)
• SMS
• Email
10+ types of
• System
Logs
exit points
• Webview/Browser
• File
System
• Broadcast
Message
Currently Detectable Flow Types
Description:
This application allows you to synchronize
your Facebook contacts on Android.
IMPORTANT:
* "Facebook does not allow [sic] to export phone
numbers or emails. Only names, pictures and
statuses are synced."
* "Facebook users have the option to block one or all
apps. If they opt for that, they will be EXCLUDED
from your friends list."
READ_SYNC_SETTINGS
WRITE_SETTINGS
READ_SYNC_STATS WRITE_CONTACTS
GET_ACCOUNTS WRITE_SECURE_SETTINGS
INTERNET WRITE_SETTINGS
Expected Flows
Sources Sinks
READ_CONTACTS INTERNET
READ_SYNC_SETTINGS
WRITE_SETTINGS
READ_SYNC_STATS WRITE_CONTACTS
GET_ACCOUNTS WRITE_SECURE_SETTINGS
INTERNET WRITE_SETTINGS
Observed Flows
Read Source:
Send Internet Sink: Internet
Contacts Contacts
Example
Study:
Mobile
Web
Apps
• Goal
IdenMfy
security
concerns
and
vulnerabiliMes
specific
to
mobile
apps
that
access
the
web
using
an
embedded
browser
• Technical
summary
• WebView
object
renders
web
content
• methods
loadUrl,
loadData,
loadDataWithBaseUrl,
postUrl
• addJavascriptInterface(obj,
name)
allows
JavaScript
code
in
the
web
content
to
call
Java
object
method
name.foo()
Summary
• Analyze
a
dataset
of
737,828
Android
apps
• Found
large
number
of
apps
contain
severe
vulnerabiliMes
• 37,418
apps
are
vulnerable
to
a
remote
code
execuMon
exploit
when
run
on
any
Android
device,
because
of
security
oversight
in
older
versions
and
slow
adopMon
of
safe
versions
• 45,689
apps
are
vulnerable
to
a
remote
code
execuMon
exploit
when
run
on
73%
of
the
in-‐use
Android
devices.
• Offer
recommendaMons
for
developers
who
wish
to
avoid
these
vulnerabiliMes.
Origin
Severity
• Severity
of
exploits
in
apps
that
include
Bridge
Objects
and
can
navigate
to
content
belonging
to
untrusted
origins.
HTTP
Severity
• Severity
of
Bridge
Object
exploits
in
apps
that
load
content
over
HTTP.
SSL
Error
Prevalence
• Prevalence
of
apps
that
can
or
must
ignore
SSL
errors
based
on
implementaMons
of
onReceivedSslError
SSL
Error
Severity
• Severity
of
Bridge
Object
exploits
in
apps
that
must
ignore
SSL
cerMficate
errors.
Lecture Summary