HEALERS (HEALers Enhanced Reliability and Security)

Christof Fetzer Zhen Xiao

Overview

As our reliance on software increases, so does the need to evaluate and enhance the robustness and security of such software. HEALERS is a new software toolkit targeted towards increasing the reliability and security of existing and new applications. HEALERS can automatically generate wrappers for shared libraries to evaluate and/or enhance the robustness of applications. HEALERS performs automatic fault-injection experiments to be able to generate robustness and security wrappers. Such wrappers prevent heap buffer overflows caused by library functions and they detect buffer overflows caused by other functions.

Detection of Buffer Overflow Attacks

Buffer overflow attacks are a major cause of security breaches in modern operating systems. A malicious user might be able to hijack the control flow of a root-privileged program by overwriting a shell script or a function pointer stored on the heap. We developed a security wrapper that provides effective and efficient protection against heap buffer overflows caused by library functions and effective detection of overflows caused by non-library functions. The wrapper intercepts every function call to shared libraries that can write to the heap and performs careful boundary checks before it calls the original function. Our method is transparent to existing programs and does not require source code modification or recompilation.

Automatic Wrapping of Libraries

HEALERS permits a full-automatic or semi-automatic generation of robustness/security wrappers for shared libraries. To facilitate full- and semi-automatic wrapping, HEALERS uses a two phase process. In the first phase, the system extracts the type information for all global functions of a library using header files and man pages. For each function HEALERS uses this type information to generate a fault injector. The fault-injector bombards the function with an adaptive sequence of test cases to determine the weakest argument types that prevent a function from crashing. This automatically derived type information can be extended manually by assertions and additional type information to further increase the robustness/security.

Given the type information derived in the first phase, HEALERS can then generate a variety of wrappers, e.g., retry wrappers, robustness wrappers, and security wrappers. It can also merge different types of wrappers into one single wrapper. A robustness/security wrapper checks that the arguments of the function have the correct type before calling the original function. This checking prevents buffer overflows and robustness violations with a minimal overhead (2%-20%). We evaluate our robustness wrappers with Ballista: HEALERS generated robustness wrappers prevent all crash, hang, and abort failures previously discovered by Ballista.

Publications

Patents

Invited Talks

Copyright Zhen Xiao 2001-2006. All rights reserved.