Protection of software code against illegitimate modifications by its users is a pressing issue to many software developers.
Many software-based mechanisms for protecting program code are too weak (e.g., they have single points of failure) or too
expensive to apply (e.g., they incur heavy runtime performance penalty to the protected programs). In this paper, we present
and explore a methodology that we believe can protect program integrity in a more tamper-resilient and flexible manner. Our
approach is based on a distributed scheme, in which protection and tamper-resistance of program code is achieved, not by a
single security module, but by a network of (smaller) security units that work together in the program. These security units,
or guards, can be programmed to do certain tasks (checksumming the program code is one example) and a network of them can reinforce
the protection of each other by creating mutual-protection. We have implemented a system for automating the process of installing
guards into Win32 executables. It is because our system operates on binaries that we are able to apply our protection mechanism
to EXEs and DLLs. Experimental results show that memory space and runtime performance impacts incurred by guards can be kept
very low (as explained later in the paper).
Portions of this work were supported by sponsors of CERIAS and the Purdue Trask fund.
A US patent on the technology has been filed by Purdue University and licensed to Arxan Technologies, Inc.