Statically-Informed Dynamic Analysis Tools to Detect Algorithmic Complexity Vulnerabilities
Authors:
- Benjamin HollandBHBenjamin Holland
- Ganesh Ram SanthanamGSGanesh Ram Santhanam
- Payas AwadhutkarPAPayas Awadhutkar
- Suresh KothariSKSuresh Kothari
- 1 October 2016
- conference paper
- Published by Institute of Electrical and Electronics Engineers (IEEE)
- Vol. 4, 79-84
Abstract
Algorithmic Complexity (AC) vulnerabilities can be exploited to cause a denial of service attack. Specifically, an adversary can design an input to trigger excessive (space/time) resource consumption. It is not possible to build a fully automated tool to detect AC vulnerabilities. Since it is an open-ended problem, a human-in-loop exploration is required to find the program loops that could have AC vulnerabilities. Ascertaining whether an arbitrary loop has an AC vulnerability is itself difficult, which is equivalent to the halting problem. This paper is about a pragmatic engineering approach to detect AC vulnerabilities. It presents a statically-informed dynamic (SID) analysis and two tools that provide critical capabilities for detecting AC vulnerabilities. The first is a static analysis tool for exploring the software to find loops as the potential candidates for AC vulnerabilities. The second is a dynamic analysis tool that can try many different inputs to evaluate the selected loops for excessive resource consumption. The two tools are built and integrated together using the interactive software analysis, transformation, and visualization capabilities provided by the Atlas platform. The paper describes two use cases for the tools, one to detect AC vulnerabilities in Java bytecode and another for students in an undergraduate algorithm class to perform experiments to learn different aspects of algorithmic complexity Tool and Demo Video: https://ensoftcorp.github.io/SID.Keywords
This publication has 13 references indexed in Scilit:
- OpenJDK’s Java.utils.Collection.sort() Is Broken: The Good, the Bad and the Worst Case2015
- Static detection of asymptotic performance bugs in collection traversalsACM SIGPLAN Notices, 2015
- Input-Sensitive ProfilingIEEE Transactions on Software Engineering, 2014
- Alternating Runtime and Size Complexity Analysis of Integer Programs2014
- Algorithmic profiling2012
- On the Termination of Integer Loops2012
- SPEEDACM SIGPLAN Notices, 2009
- COSTA: Design and Implementation of a Cost and Termination Analyzer for Java Bytecode2008
- Measuring empirical computational complexity2007
- A New Algorithm for Identifying Loops in Decompilation2007