A static and symbolic analysis tool for finding memory safety bugs in browser code and other software.
Sys is a static and symbolic analysis tool designed to find memory safety bugs in complex software, with a particular focus on browser code. It combines static analysis with symbolic execution to detect subtle vulnerabilities, such as uninitialized memory access or buffer overflows, that might be missed by other methods. The tool operates directly on LLVM intermediate representation, enabling analysis of optimized production builds.
Security researchers and software engineers working on memory safety, particularly those analyzing or developing complex, performance-critical systems like web browsers or similar large-scale C/C++ codebases. It is also suitable for developers needing to audit production-quality code for subtle security vulnerabilities.
Developers choose Sys for its ability to find 'good bugs in good code'—subtle, security-critical vulnerabilities in well-written, production-quality software where traditional testing might not be sufficient. Its integration of static and symbolic analysis, combined with support for multiple optimization levels, allows it to detect issues that other tools may overlook.
Sys: A Static/Symbolic Tool for Finding Good Bugs in Good (Browser) Code
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Specifically finds memory safety bugs like uninitialized memory and heap out-of-bounds errors, with concrete examples demonstrated in Firefox's Prio library code from the README.
Supports analysis across multiple optimization levels (O0 to O3, Og, Os, Oz), allowing it to inspect production builds without recompilation, as detailed in the -e option usage.
Combines static and symbolic execution to detect subtle vulnerabilities that might be missed by other methods, aligning with its philosophy of finding 'good bugs in good code'.
Only tested on Arch Linux, with the README explicitly stating that support for other OSes is untested and requires community patches, making deployment challenging.
Requires precise installation of LLVM-9, Boolector configured with shared libraries, and Haskell Stack, which can be error-prone and time-consuming, as highlighted in the install section.
Points to a 'very very very new reimplementation' (sys2), suggesting the current version might be less maintained, and the README lacks detailed tutorials or integration guides.