Intflow: Integer Error Handling with Information Flow Tracking
Total Page:16
File Type:pdf, Size:1020Kb
IntFlow: Integer Error Handling With Information Flow Tracking Marios Pomonis Theofilos Petsios Kangkook Jee Michalis Polychronakis Angelos D. Keromytis December 7, 2014 Columbia University [email protected] IntFlow Columbia University 1 / 29 Integer Error [email protected] IntFlow Columbia University 2 / 29 Example 1. img t *table ptr; 2. unsigned int num imgs = get num imgs(); 3. unsigned int alloc size = sizeof(img t) * num imgs; 4. table ptr = (img t *) malloc(alloc size); 5. for (i = 0; i < num imgs; i++) 6. table ptr[i] = read img(i); [email protected] IntFlow Columbia University 3 / 29 Integer Errors Mathematical representation vs machine representation Instances: Integer overflow/underflow Precision loss Signedness change [email protected] IntFlow Columbia University 4 / 29 Characteristics Mainly C/C++ specific: Signed integers only (Java, Python) Overflow protection (Python) Undefined: Negative ! unsigned INT MAX + 1 Optimizations Expected behavior [email protected] IntFlow Columbia University 5 / 29 Importance Can lead to buffer overflows, memory leaks etc... Integral part of exploits Erroneous memory allocation Integer overflow in top 25 most dangerous software errors > 50 vulnerability reports (CVE) in 2014 QuickTime ! Signedness change launchd (iOS) ! Integer overflow Wireshark ! Signedness change Google Chrome ! Integer overflow [email protected] IntFlow Columbia University 6 / 29 Integer Overflow Checker (IOC)[ICSE2012] Clang AST /* a = b + c */ Dangerous operation bool error = false; Static: operation ! a = safe add(b, c, error); safe function if (error) Dynamic: detect report(); errors Report and (optionally) abort Clang trunk v3.3 [email protected] IntFlow Columbia University 7 / 29 Integer Overflow Checker (IOC)[ICSE2012] Dynamic detection mechanism Offline use Input set from user [email protected] IntFlow Columbia University 8 / 29 IOC Issue Overly comprehensive Lack of severity level Error 6= vulnerability [email protected] IntFlow Columbia University 9 / 29 Developer Intended Violations Idioms ! errors Examples Controlled umax = (unsigned) -1; Expected bahavior neg = (char) INT MAX; Not affected by smax = 1 << (WIDTH - 1) - 1; attacker smax++; IOC ! report all Large list Manually distill critical errors [email protected] IntFlow Columbia University 10 / 29 Intflow Goals: 1. Eliminate reports of developer intended violations 2. Retain and highlight critical error reports [email protected] IntFlow Columbia University 11 / 29 IntFlow Challenges: 1. Can we identify potential vulnerabilities? 2. Can we identify potentially exploitable vulnerabilities? 3. Can we do it accurately? [email protected] IntFlow Columbia University 12 / 29 Critical Arithmetic Errors An error is potentially critical if: 1. Untrusted source ! arithmetic error e.g. read(), getenv()... OR 2. Arithmetic error ! sensitive sink e.g. *alloc(), strcpy()... [email protected] IntFlow Columbia University 13 / 29 IntFlow: Architecture [email protected] IntFlow Columbia University 14 / 29 Static Information Flow Tracking Set of techniques analyzing data-flow Common compiler methodology Distinguishes flows to/from integer operations Pros Cons 3 No runtime 7 Accuracy overhead 7 Scalability 3 Coverage [email protected] IntFlow Columbia University 15 / 29 IntFlow: Architecture [email protected] IntFlow Columbia University 16 / 29 Backward Slicing: Operation ! Sources [email protected] IntFlow Columbia University 17 / 29 Forward Slicing: Source ! Operation [email protected] IntFlow Columbia University 18 / 29 Forward Slicing: Source ! Operation [email protected] IntFlow Columbia University 19 / 29 Sources Examination If sources = trusted ! result = developer intended [email protected] IntFlow Columbia University 20 / 29 Remove IOC Check [email protected] IntFlow Columbia University 21 / 29 IntFlow: Architecture [email protected] IntFlow Columbia University 22 / 29 Sensitive Operations Dynamic detection Operations ! sensitive functions Operation ! bit Check before a sensitive function Report if any bit set [email protected] IntFlow Columbia University 23 / 29 Modes Of Operation Blacklisting mode Untrusted sources ! operation Whitelisting mode Trusted sources ! operation Sensitive mode Operation ! sensitive sinks Combination of modes Blacklisting/Whitelisting + Sensitive " Confidence - # Completeness [email protected] IntFlow Columbia University 24 / 29 Evaluation Whitelisting mode Flexible Context agnostic 3 Untrusted sources 3 Error propagation Upper bound on report number [email protected] IntFlow Columbia University 25 / 29 SPEC CINT2000 250 IOC Intended IntFlow Intended 200 IOC Critical IntFlow Critical 150 100 40 30 20 10 Number of Reported Arithmetic Errors 0 gzip vpr gcc crafty parser perlbmk gap vortex [email protected] IntFlow Columbia University 26 / 29 Real-world Applications Detected vulnerabilities: CVE Number Application Error Type CVE-2009-3481 Dillo Integer Overflow CVE-2012-3481 GIMP Integer Overflow CVE-2010-1516 Swftools Integer Overflow CVE-2013-6489 Pidgin Signedness Change Produced reports Overall Dillo GIMP Swftools Pidgin IOC 330 31 231 68 0 IntFlow 82 26 13 43 0 [email protected] IntFlow Columbia University 27 / 29 Runtime Overhead Offline use CPU-bound (e.g. grep): 50-80% IO-bound (e.g. nginx): 20% [email protected] IntFlow Columbia University 28 / 29 Summary Coupled IFT with IOC Identified critical errors Focused on potentially exploitable vulnerabilities Code: http://nsl.cs.columbia.edu/projects/intflow [email protected] IntFlow Columbia University 29 / 29 Bonus Backup Slides [email protected] IntFlow Columbia University 29 / 29 Runtime Overhead 2 Whitelisting 1.9 Blacklisting 1.8 Sensitive 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1 0.9 Slowdown (normalized) 0.8 0.7 0.6 0.5 grep wget wwwx zshx tcpdump cher nginx [email protected] IntFlow Columbia University 29 / 29 Additional Evaluation Results Independent stress test (red team) Artificial vulnerabilities in popular applications IO Inputs Good: no exploit ! normal execution Bad: exploit ! detect and abort TP+TN Aggregate result ( Total ): 79.30% [email protected] IntFlow Columbia University 29 / 29.