This is a Type-based Control Flow Integrity enforcement implementation build on top of LLVM compiler infrastructure.
We use the skeleton of llvm-tutor.
This enforcement should protect you from corrupted code pointers. However, it actually is a coarse-grain implementation because of its Naïve
type analysis.
Currently, there are two phases:
- Type Analysis for ICalls. We currently use
FLTA
, which means First Layer Type Analysis , to analyze the type of icalls, and resolve the candidate targets set.
The concepts of FLTA
is from Where Does It Go?
- Instrumentation for Runtime Check. Before every icalls, we insert checks to determine the target is in the candidate sets.
- FLTA
- MLTA
- Shadow Stack
- Protection of Metadata
- Runtime Check
- Modify
LT_LLVM_INSTALL_DIR
inCMakeList.txt
to your llvm directory - Modify
run.sh
, choose your bitcode file
LLVM bicode file which we use is generated by wllvm.