DieHard: probabilistic memory safety for unsafe languages

@inproceedings{Berger2006DieHardPM,
  title={DieHard: probabilistic memory safety for unsafe languages},
  author={E. Berger and Benjamin G. Zorn},
  booktitle={PLDI '06},
  year={2006}
}
Applications written in unsafe languages like C and C++ are vulnerable to memory errors such as buffer overflows, dangling pointers, and reads of uninitialized data. Such errors can lead to program crashes, security vulnerabilities, and unpredictable behavior. We present DieHard, a runtime system that tolerates these errors while probabilistically maintaining soundness. DieHard uses randomization and replication to achieve probabilistic memory safety by approximating an infinite-sized heap… 

Figures and Tables from this paper

DieHard : Efficient Probabilistic Memory Safety
TLDR
Analytical and experimental results are presented that show DieHard’s resilience to a wide range of memory errors, and report on a broad deployment of DieHard to the general public.
Samurai: protecting critical data in unsafe languages
TLDR
This work presents a data-centric solution to memory corruption called critical memory, a memory model that allows programmers to identify and protect data that is critical for correct program execution, and presents Samurai, a runtime system that implements critical memory in software.
Hardening software against memory errors and attacks
TLDR
A series of runtime systems that protect deployed applications from memory errors and decrease the probability of successfully exploiting security vulnerabilities caused by memory errors, and a system that automatically corrects heap-based buffer overflows and dangling pointers without requiring programmer intervention.
Enforcing Alias Analysis for Weakly Typed Languages
TLDR
A compilation strategy for standard C programs that guarantees sound semantics for an aggressive interprocedural pointer analysis, a call graph, and type information for a subset of memory and shows that the sound analysis information enables static checking techniques that reliably eliminate many run-time checks.
Boundless memory allocations for memory safety and high availability
TLDR
A compiler extension is implemented, Boundless, that automatically adds the tolerance feature to C applications at compile time, and it is shown that this can increase the availability of applications.
Practical low-overhead enforcement of memory safety for c programs
TLDR
This dissertation demonstrates the compatibility of a pointer-based approach to provide comprehensive memory safety that works with mostly unmodified C code with a low performance overhead by hardening legacy C/C++ code with minimal source code changes and shows the effectiveness of the approach by detecting new memory safety errors and previously knownMemory safety errors in large code bases.
Exterminator: Automatically correcting memory errors with high probability
TLDR
Exterminator is a system that automatically corrects heap-based memory errors without programmer intervention, and enables collaborative bug correction by merging patches generated by multiple users.
Tolerating memory leaks
TLDR
Whereas existing VMs grind to a halt and then crash on programs with leaks, Melt keeps many of these programs running much longer without significantly degrading performance and gives developers more time to fix leaky programs.
Exterminator: automatically correcting memory errors with high probability
TLDR
Exterminator is a system that automatically correct sheap-based memory errors without programmer intervention, and enables collaborative bug correction by merging patches generated by multiple users.
Practical memory safety for C
TLDR
Three compiler-based tools for analysing and instrumenting unmodified source code to automatically generate binaries hardened against memory errors are developed: BBC and WIT to harden user-space C programs, and BGI toharden and to isolate Microsoft Windows kernel extensions.
...
1
2
3
4
5
...

References

SHOWING 1-10 OF 52 REFERENCES
Enhancing Server Availability and Security Through Failure-Oblivious Computing
TLDR
Failure-oblivious computing is presented, a new technique that enables servers to execute through memory errors without memory corruption and enables the servers to continue to operate successfully to service legitimate requests and satisfy the needs of their users even after attacks trigger their memory errors.
Protecting C programs from attacks via invalid pointer dereferences
TLDR
The design and implementation of a security tool for C programs that provides protection against a wide range of attacks via bad pointer dereferences, including but not limited to buffer overruns and attempts to access previously freed memory are described.
An efficient and backwards-compatible transformation to ensure memory safety of C programs
TLDR
This paper presents a new approach to dynamic detection of memory errors in C that operates via source code transformation and combines efficient data-structures with simple, localized optimizations to obtain good performance.
A dynamic technique for eliminating buffer overflow vulnerabilities (and other memory errors)
TLDR
A compiler that inserts dynamic checks into the generated code to detect all out of bounds memory accesses and enables the servers to execute successfully through buffer overflow attacks to continue to correctly service user requests without security vulnerabilities.
Memory safety without runtime checks or garbage collection
TLDR
A compiler technique is created that ensures memory safety of dynamically allocated memory without programmer annotations, runtime checks, or garbage collection, and works for a large subclass of type-safe C programs.
Efficient Techniques for Comprehensive Protection from Memory Error Exploits
TLDR
This approach argues that this approach provides probabilistic protection against all memory error exploits, whether they be known or novel, and is implemented as a fully automatic source-to-source transformation which is compatible with legacy C code.
Address Obfuscation: An Efficient Approach to Combat a Broad Range of Memory Error Exploits
TLDR
This paper develops a systematic study of a particular kind of obfuscation called address obfuscation that randomizes the location of victim program data and code, and presents an implementation that transforms object files and executables at link-time and load-time.
Quantifying the performance of garbage collection vs. explicit memory management
TLDR
The results quantify the time-space tradeoff of garbage collection: with five times as much memory, an Appel-style generational collector with a non-copying mature space matches the performance of reachability-based explicit memory management.
Using Valgrind to Detect Undefined Value Errors with Bit-Precision
TLDR
Memcheck detects a wide range of memory errors in programs as they run, and improves on that of previous tools by being accurate to the level of individual bits, giving Memcheck a low false positive and false negative rate.
Efficient detection of all pointer and array access errors
TLDR
This work presents a pointer and array access checking technique that provides complete error coverage through a simple set of program transformations, and is the first technique that detects all spatial and temporal access errors.
...
1
2
3
4
5
...