PHP Aspis: Using Partial Taint Tracking To Protect Against Injection Attacks
USENIX WebApps 2011 Portland, OR, USA Ioannis Papagiannis, Matteo Migliavacca, Peter Pietzuch Department of Computing, Imperial College London
Using Partial Taint Tracking To Protect Against Injection Attacks - - PowerPoint PPT Presentation
PHP Aspis: Using Partial Taint Tracking To Protect Against Injection Attacks Ioannis Papagiannis , Matteo Migliavacca, Peter Pietzuch Department of Computing, Imperial College London USENIX WebApps 2011 Portland, OR, USA Injection
USENIX WebApps 2011 Portland, OR, USA Ioannis Papagiannis, Matteo Migliavacca, Peter Pietzuch Department of Computing, Imperial College London
2
USENIX WebApps 2011
<?php $name=$GET[„name‟]; $sql = “SELECT * FROM USERS WHERE user=”. $name; mysql_query($sql); ?>
3
USENIX WebApps 2011
<?php $name=$GET[„name‟]; $sql = “SELECT * FROM USERS WHERE user=”. ; mysql_query($sql); ?> http://…?name=
4
USENIX WebApps 2011
<?php $name=$GET[„name‟]; $sql = “SELECT * FROM USERS WHERE user=”. ; mysql_query($sql); ?> http://…?name=Yiannis
5
USENIX WebApps 2011
<?php $name=$GET[„name‟]; $sql = “SELECT * FROM USERS WHERE user=”. $name; mysql_query($sql); ?>
2 3 taint data in entry points propagate taint use taint to guide sanitisation
6
No support
[Venema06]
[Yip09, Pietraszek06]
USENIX WebApps 2011
taint tracking
“modifications to the Zend engine should be avoided. Changes here result in incompatibilities with the rest
specially patched Zend engines. … Therefore, this method is generally considered bad practice” The PHP Manual
7
USENIX WebApps 2011
data provided by langpop.com
8
Source-to-source transformations Partial Taint Tracking taint tracking!
USENIX WebApps 2011
9
Source-to-source transformations Partial Taint Tracking taint tracking!
USENIX WebApps 2011
10
USENIX WebApps 2011
On demand Portable
11
USENIX WebApps 2011
Challenges:
(how can you attach taint to strings?)
(no metaprogramming)
On demand Portable
12
Partial taint tracking: Code is not equally vulnerable
Third-party plugin code Code that handles user data
year WordPress WordPress Plugins 2009 2 13 2010 2 10
CVE WordPress-Platform Injection Vulnerabilities
CVE # Functionality 2009-2851 Display user comments 2009-3891 File upload handler 2010-4257 Trackback handling 2010-4536 Display user comments
CVE WordPress-Core Injection Vulnerabilities
USENIX WebApps 2011
13
USENIX WebApps 2011
14
USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
15
USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
“Yiannis” Taint
Input HTTP Request
16
USENIX WebApps 2011
PHP Aspis Transformed Application
“Yiannis” Taint
Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
Input HTTP Request HTML Output SQL Query Eval Statement
17
USENIX WebApps 2011
WordPress
“Yiannis” Taint
WordPress plugin WordPress Core
Input HTTP Request HTML Output SQL Query Eval Statement
18
USENIX WebApps 2011
PHP Aspis Transformed Application
“Yiannis” Taint
Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
Input HTTP Request HTML Output SQL Query
Taint meta-data
Eval Statement
Vulnerability prevention
19
USENIX WebApps 2011
PHP Aspis Transformed Application
“Yiannis” Taint
Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
Input HTTP Request HTML Output SQL Query Eval Statement
Taint meta-data Vulnerability prevention
20
Character Level
USENIX WebApps 2011
“SELECT * FROM USERS WHERE user=yiannis”;
untainted tainted
Variable Level
“SELECT * FROM USERS WHERE user=yiannis”;
tainted
21
USENIX WebApps 2011
More than 1 bit of taint meta-data is required
“SELECT * FROM USERS WHERE user=yiannis”;
untainted
Partial sanitisation (e.g. )
untainted (for SQL Injection)
Character Level
“SELECT * FROM USERS WHERE user=yiannis”;
untainted tainted
Variable Level
“SELECT * FROM USERS WHERE user=yiannis”;
tainted
22
Example
USENIX WebApps 2011
“SELECT * FROM USERS WHERE user=yiannis”;
Taint Category SQL Injection XSS Eval Injection untainted untainted untainted tainted tainted
23
Example
USENIX WebApps 2011
“SELECT * FROM USERS WHERE user=yiannis”;
Generic way to define:
How an application is supposed to sanitise What to do if it doesn’t Sanitisation Functions htmlentities() htmlspecialchars() Guarded Sinks echo()→AspisAntiXSS() print()→AspisAntiXSS() …
XSS taint category excerpt
Taint Category SQL Injection XSS Eval Injection untainted untainted untainted tainted tainted
24
USENIX WebApps 2011
PHP Aspis Transformed Application
“Yiannis” Taint
Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
Input HTTP Request HTML Output SQL Query
Taint meta-data Vulnerability prevention
Eval Statement
25
USENIX WebApps 2011
PHP Aspis Transformed Application
“Yiannis” Taint
Tracking Code
PHP Statements Library Calls Sanitisation Operations
Non Tracking Code
Input HTTP Request HTML Output SQL Query
Taint meta-data Vulnerability prevention
Eval Statement
26
USENIX WebApps 2011
to from Tracking Non Tracking Tracking Non Tracking
27
USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code Non Tracking Code
Input HTTP Request
“Yiannis” Taint to from Tracking Non Tracking Tracking Non Tracking
28
USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code Non Tracking Code
Input HTTP Request
“Yiannis” Taint to from Tracking Non Tracking Tracking Non Tracking
29 USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code Non Tracking Code
Input HTTP Request
“Yiannis” Taint
to from Tracking Non Tracking Tracking Non Tracking
30 USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code Non Tracking Code
Input HTTP Request
“Yiannis” Taint
to from Tracking Non Tracking Tracking Non Tracking
31 USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code Non Tracking Code
Input HTTP Request
“Yiannis” Taint
to from Tracking Non Tracking Tracking Non Tracking
32 USENIX WebApps 2011
PHP Aspis Transformed Application Tracking Code Non Tracking Code
Input HTTP Request
“Yiannis” Taint
to from Tracking Non Tracking Tracking Non Tracking
33
USENIX WebApps 2011
Vulnerabilities Prevented
Tracking-code only Tracking to non tracking
Vulnerabilities Not Prevented
Non Tracking-code only Non Tracking to Tracking Tracking/Non Tracking mixes
to From Tracking Non Tracking Tracking Non Tracking to from Tracking Non Tracking Tracking Non Tracking
34
USENIX WebApps 2011
35
USENIX WebApps 2011
Original value Aspis-protected value “Hello” array ( “Hello”, TaintCats ) 12 array ( 12, TaintCats )
Interoperation with non-tracking code
2-10x faster than object initialisation Scalar assignment semantics
36
USENIX WebApps 2011
Original expression Transformed Expression $s.$t concat($s,$t) if ($v) {} if ($v[0]) {} $j = $i++ $j = postincr($i)
37
USENIX WebApps 2011
Library functions do not work with Aspis-protected values
use interceptors! Default Interceptor strip input taint add empty output taint good as the default fclose(), fopen() Custom Interceptors guess the taint of the output substr() reimplement the function sort()
More custom interceptors, less false negatives
38
USENIX WebApps 2011
Taint representation Expressions Statements PHP Library Function Calls Taint initialisation Tracking/Non Tracking Calls Calls to sanitisation functions Calls to sinks Variable variables Variable function calls Include Statements Dynamic code generation
39
USENIX WebApps 2011
40
Is PHP Aspis effective in preventing injection attacks? What is the performance overhead?
USENIX WebApps 2011
41
Is PHP Aspis effective in preventing injection attacks? What is the performance overhead?
USENIX WebApps 2011
42
USENIX WebApps 2011
WordPress
“Yiannis” Taint
Plugin Tracking Code WordPress Core
Non Tracking Code
Use all reported WordPress plugins to the CVE since 1/1/2010 Replay the provided attack vectors where possible
CVE attack vector Tainted?
Tainted?
43
USENIX WebApps 2011
Total plugins with injection vulnerabilities: 15 Tested plugins: 14
Vulnerabilities prevented: 12
Vulnerabilities not prevented: 2 (false negatives)
No observed false positives
44
USENIX WebApps 2011
0.2 0.4 0.6 0.8 1 1.2 1.4 DBGen 50 100 150 200 250 300 350 400 450 500 PrimeGen 50 100 150 200 250 300 350 400 450 WordPress Off On Partial
Page Generation (ms) Issues DB queries Generates prime numbers Blogging platform
45
Partial taint tracking
PHP Aspis design favours false negatives
“Reasonable” performance overhead
performance
USENIX WebApps 2011
46
USENIX WebApps 2011
47
USENIX WebApps 2011
[1] Venema, W. Runtime taint support proposal. In PHP Internals mailing list (2006) [2] Yip, A. Wang X., et all. Improving application security with data flow assertions. In SOSP 2009 [3] Pietraszek, T and Berghe, C. Defending against injection attacks through context sensitive string evaluation. In Recent Advances in Intrusion Detection (2006)