TEApot(Transient Execution Attack pot) is a project used to evaluate whether your system is affected by Meltdown and Spectre. My goal is to build a easy-to-use(hard to implement) and configurable transient attack test suite.
This project is mainly based on project Transient Fail developed by IAIK. More information will be found on their paper A Systematic Evaluation of Transient Execution Attacks and Defenses.
Linux with gcc and other dependent libraries.
Developed on 5.4.0-47-generic #51~18.04.1-Ubuntu.
x86 and arm64 are supported.
Meltdown-like and Spectre-like vulnerabilities, more information will be also found on paper A Systematic Evaluation of Transient Execution Attacks and Defenses.
This vulnerablities are supported:
| Systematic type name | CVE | Description |
|---|---|---|
| Meltdown_AC | - | - |
| Meltdown_BR | - | - |
| Meltdown_DE | - | - |
| Meltdown_GP | CVE-2018-3640 | Spectre V3a, rogue system register read |
| Meltdown_NM | CVE-2018-3665 | Lazy FP |
| Meltdown_P | CVE-2018-3615/CVE-2018-3620/CVE-2018-3646 | Foreshadow, L1 terminal fault |
| Meltdown_PK | - | - |
| Meltdown_RW | Spectre V1.2, write to page with read-only flag | |
| Meltdown_SS | - | - |
| Meltdown_UD | - | - |
| Meltdown_US | CVE-2017-5754 | Meltdown, rogue data cache load |
| Spectre_BTB | CVE-2017-5715 | Spectre V2, branch target injection |
| Spectre_PHT | CVE-2017-5753 | Spectre V1, bounds check bypass |
| Spectre_RSB | - | - |
| Spectre_STL | CVE-2018-3693/CVE-2018-3639 | Spectre V1.1, NG and V4, speculative store bypass |
This test suite allows you to select the vulnerabilities with option "-v".
Default option is "all" for testing all vulnerabilities.
You can enable and specify a markdown file as output of valid PoCs with option "-o"
You can show simple supported vulnerablities options with option "-s"
You can use option "-m" in test mode, simple result output will be available.
0 means vulnerable, 1 means not vulnerable, other values mean error or not tested.
You can use option "-h" to show all help messages or read the last part of this document.
lib: Global libraries;libcache: Cache operation libraries;libpte: PTEditor developed by Michael Schwarz that allows manipulation of paging structures via a Linux kernel module;meltdown: PoC of Meltdown-like vulnerabilities;spectre: PoC of Spectre-like vulnerabilities;Makefile: Makefile of this test suite;run.sh: Main entry of this test suite;README.md: The file you are reading!
- Some preparation
sudo apt-get install libelf-dev build-essential pkg-config bison flex libssl-dev libelf-dev bc
sudo apt-get purge libc6-dev
sudo apt-get install libc6-dev
sudo apt-get install libc6-dev-i386
sudo apt-get install build-essential
sudo apt-get install seccomp
sudo apt-get install libseccomp-dev
sudo apt-get install zsh- Clone this repository
git clone https://github.com/Mashiro1995/TEApot.git- Make
make- Grant execution permissions and run!
chmod +x run.sh
./run.sh
# notice that you need input your password for kernel operation during this test- Run options
Test mode : run.sh [-options]
Generation mode : run.sh [-options] -g [output-path]
Test all vulnerablities : run.sh [-o filename] [-m]
Test specific vulnerablities : run.sh [-v "list of vulnerablities"] [-o filename] [-m]
Show usage : run.sh -h
Show supported vulnerablities: run.sh -l [-m]
Auto mode will test all vulnerablities covered in this test suite.
In manual mode, you can specify vulnerablities to be tested with options -v and followed by a list of vulnerablities.
-g generation mode, specific path to save specific PoCs
-o enable and specify a markdown file as output of valid PoCs
-v list of vulnerablities to be tested. If not specified, all vuls will be test
-h show usage
-l show supported vulnerablities
-s show simple supported vulnerablities options
-t specific timeout time, default 120s
-m used in test mode, simple result output will be available.
0 means vulnerable, 1 means not vulnerable, other values mean error or not tested.
You can select combination of vulnerabilities with following inputs:
| Options | Vulnerabilities to be tested |
|---|---|
| all | All vulnerabilities |
| meltdown | All Meltdown vulnerabilities |
| spectre | All Spectre vulnerabilities |
| spectre_btb | All Spectre_BTB vulnerabilities |
| spectre_pht | All Spectre_PHT vulnerabilities |
| spectre_rsb | All Spectre_RSB vulnerabilities |
You can also use multi_parameters to select specific vulnerabilities and separate them with spaces:
| Options | Vulnerabilities to be tested | Options | Vulnerabilities to be tested |
|---|---|---|---|
| ac | Meltdown_AC | btb_sa_ip | Spectre_BTB_sa_ip |
| br | Meltdown_BR | btb_sa_oop | Spectre_BTB_sa_oop |
| de | Meltdown_DE | btb_ca_ip | Spectre_BTB_ca_ip |
| gp | Meltdown_GP | btb_ca_oop | Spectre_BTB_ca_oop |
| nm | Meltdown_NM | pht_sa_ip | Spectre_PHT_sa_ip |
| p | Meltdown_P | pht_sa_oop | Spectre_PHT_sa_oop |
| pk | Meltdown_PK | pht_ca_ip | Spectre_PHT_ca_ip |
| rw | Meltdown_RW | pht_ca_oop | Spectre_PHT_ca_oop |
| ss | Meltdown_SS | rsb_sa_ip | Spectre_RSB_sa_ip |
| ud | Meltdown_UD | rsb_sa_oop | Spectre_RSB_sa_oop |
| us | Meltdown_US | rsb_ca_ip | Spectre_RSB_ca_ip |
| rsb_ca_oop | Spectre_RSB_ca_oop | ||
| stl | Spectre_STL |
Examples:
# Examples:
run.sh
# Test all vulnerabilities.
run.sh -m
# Test all vulnerabilities and save simple result to result.txt.
run.sh -v "meltdown spectre_btb" -o codes
# Test all Meltdown and all Spectre_BTB type vulnerabilities, and save successful PoCs to path "codes".
run.sh -v "meltdown spectre_btb" -o codes -m
# Test all Meltdown and all Spectre_BTB type vulnerabilities, save simple result to result.txt, and successful PoCs to path "codes".
run.sh -v "meltdown spectre_btb" -g codes
# PoCs of Meltdown and all Spectre_BTB type vulnerabilities will be saved to path "codes" with out test.