Galois, a firm specialized in the research and development of new technologies, has open sourced a suite of tools for identifying vulnerabilities in C and C++ code.
Dubbed MATE, the tools are the result of a collaborative effort supported by the United States Air Force and Defense Advanced Research Project Agency (DARPA).
Now available under the BSD 3-clause license, MATE relies on code property graphs (CPGs) for static program analysis, and can identify application-specific bugs that depend on implementation details and high-level semantics.
The CPG includes a target’s abstract syntax tree (AST), call graph (CG), control-flow graph (CFG), inter-procedural control-flow graph (ICFG), inter-procedural dataflow-graph (DFG), control-dependence graph (CDG), memory layout and DWARF type graph, points-to graph (PTG), and source-code to machine-code mapping.
The suite includes several applications built on top of the foundation of the CPG, including Flowfinder, MATE Notebooks, MATE POIs, and Mantiserve.
Flowfinder provides a browser-based user interface that helps in exploring a program’s code property graph, for interprocedural analysis of dataflows. It supports expanding and contracting semantic representations of code and data, as well as creating and manipulating visualizations of flows between components.
As for MATE Notebooks, MATE uses a Python API for querying the CPG, and offers access to interactive Jupyter notebooks for writing whole-program queries.
The suite also comes with several automated analyses for vulnerability detection, called Points of Interest (POIs), which are written in the same Python API. Potential vulnerabilities can be viewed in Flowfinder.
Mantiserve is designed to integrate the CPG with the Manticore symbolic execution tool, which enables the analysis of low-level issues, including memory corruption. Manticore can be used in two modes, namely ‘exploration’ (for finding memory corruption during traditional symbolic execution) and ‘under-constrained symbolic execution’ (which starts at an arbitrary function in the program).
MATE’s under-constrained feature, Galois explains, enables users to analyze parts of programs that are too large or complex for analysis using traditional symbolic execution, while also allowing them to provide constraints to eliminate false positives.
In addition to helping researchers hunt for bugs in C and C++ applications, MATE is also meant to help with the integration of the CPG and corresponding Python API into other programs.