posted on 2007-01-01, 00:00authored byDavid Brumley, Tzi-cker Chiueh, Robert Johnson, Huijia Lin, Dawn Song
We present the design and implementation of RICH
(Run-time Integer CHecking), a tool for efficiently detecting
integer-based attacks against C programs at run time. C
integer bugs, a popular avenue of attack and frequent programming error [1–15], occur when a variable value goes
out of the range of the machine word used to materialize it,
e.g. when assigning a large 32-bit int to a 16-bit short.
We show that safe and unsafe integer operations in C can
be captured by well-known sub-typing theory. The RICH
compiler extension compiles C programs to object code that
monitors its own execution to detect integer-based attacks.
We implemented RICH as an extension to the GCC compiler
and tested it on several network servers and UNIX utilities.
Despite the ubiquity of integer operations, the performance
overhead of RICH is very low, averaging about 5%. RICH
found two new integer bugs and caught all but one of the
previously known bugs we tested. These results show that
RICH is a useful and lightweight software testing tool and
run-time defense mechanism. RICH may generate false positives when programmers use integer overflows deliberately,
and it can miss some integer bugs because it does not model
certain C features.