vul337/EnclaveFuzz
GitHub: vul337/EnclaveFuzz
面向 Intel SGX enclave 应用的覆盖率引导式模糊测试工具,旨在发现可信执行环境中的安全漏洞。
Stars: 26 | Forks: 4
# EnclaveFuzz:发现 SGX 应用程序中的漏洞
本仓库是 [NDSS 2024](https://www.ndss-symposium.org/ndss2024/) 论文 [EnclaveFuzz](docs/EnclaveFuzz.pdf) ([Slide](docs/Slide.pdf), [海报_CN](docs/Poster.pdf)) 的公开代码。
```
@inproceedings{chen2024enclavefuzz,
title={EnclaveFuzz: Finding Vulnerabilities in SGX Applications},
author={Chen, Liheng and Li, Zheming and Ma, Zheyu and Li, Yuan and Chen, Baojian and Zhang, Chao},
booktitle={Proceedings of the 31st Annual Network and Distributed System Security Symposium (NDSS)},
year={2024},
}
```
# 分支
Fuzzer2.0 - 使用经过 fuzz 优化的 SGX SDK 进行 fuzz 测试
Fuzzer1.0 - 使用原生 SGX SDK 进行 fuzz 测试(支持硬件模式和模拟模式)
# 平台
Ubuntu 20.04
LLVM 13
# 使用说明
## 获取所有子模块
```
git submodule update --init --recursive
```
## 安装依赖
TODO: 请通知我
## 构建 SVF
SensitiveLeakSan 依赖于 SVF
```
export LLVM_DIR=/usr/lib/llvm-13 # If you already installed llvm-13 like 'sudo apt install clang-13 llvm-13 lld-13'
./build_svf.sh
```
## 准备 kAFL(可选)
如果您想使用 kAFL 作为 fuzz 引擎,请准备 kAFL。详细的安装指南请参考 [kAFL 文档](https://intellabs.github.io/kAFL/tutorials/installation.html)
```
cd kAFL
make deploy
cd ..
```
## 准备完整的 linux-sgx 源代码
```
./BeforeGetSDK.sh
```
或者安装原生 SGX SDK,它将准备完整的 linux-sgx 源代码并在 /opt/intel/ 目录下安装原生 SGX SDK
```
cd ThirdParty/linux-sgx-build-scripts
./prepare.sh
./build_install.sh [DEBUG=1] # [DEBUG=1] means DEBUG=1 is optional argument passed to script
# ./uninstall.sh # 卸载 SGXSDK
# ./unprepare.sh # 清理您的机器环境并清理 linux-sgx repo
cd ../..
```
## 构建 EnclaveFuzz 并获取优化的 SGX SDK
```
./build.sh [MODE=RELEASE|DEBUG] [FUZZER=LIBFUZZER|KAFL] # Default MODE is RELEASE, default FUZZER is LIBFUZZER (first choice is the default)
./GetSDK.sh [MODE=RELEASE|DEBUG] [FUZZER=LIBFUZZER|KAFL] [SILENT=TRUE|FALSE] [SDK_VER=2_19|2_14] [INST_COV=TRUE|FALSE] # INST_COV means instrument coverage collection code at SGX SDK
# ./clean.sh # 清理 EnclaveFuzz 和优化的 SGX SDK
```
## 获取准备好的 SGX 应用程序
我们准备了所有经过修改的 SGX 应用程序,可以直接进行 fuzz 测试。
```
git clone git@github.com:LeoneChen/SGX_APP.git
```
### 各个 SGX 应用程序的分支
Fuzzer2.0 - 使用经过 fuzz 优化的 SGX SDK 进行 fuzz 测试
Fuzzer1.0 - 使用原生 SGX SDK 进行 fuzz 测试(支持硬件模式和模拟模式)
sgxfuzz - 使用 SGXFuzz 进行 fuzz 测试
### 我们如何修改它们
以 [ehsm](https://github.com/LeoneChen/ehsm) 为例,我们 fork 了原始仓库,并在此基础上通常添加了一个 commit(例如:[ehsm 的 commit](https://github.com/LeoneChen/ehsm/commit/70948b65019b2b59fb23fe8af573dbfd54696c13))。
我们所作的所有修改都可以在该 commit 中找到。
### 如何使用它们
以 [ehsm](https://github.com/LeoneChen/ehsm) 为例,使用 `build.sh [MODE=RELEASE|DEBUG] [FUZZER=LIBFUZZER|KAFL]` 来构建它,并使用 `clean.sh` 来清理它,这些脚本是我们添加的。
有些仓库使用 Autotool 构建,例如 [BiORAM-SGX](https://github.com/LeoneChen/BiORAM-SGX),你需要使用 `./bootstrap && build.sh [MODE=RELEASE|DEBUG] [FUZZER=LIBFUZZER|KAFL]` 或类似的命令。
#### 示例
以 [sgx-wallet](https://github.com/LeoneChen/sgx-wallet) 为例
```
cd ~/EnclaveFuzz/SGX_APP/sgx-wallet # I put EnclaveFuzz repo at home path (~) , and put SGX_APP at EnclaveFuzz
git checkout Fuzzer2.0
./build.sh MODE=DEBUG
~/EnclaveFuzz/Tool/setup.sh sgx-wallet enclave.so /data/leone/SGX-WALLET/Fuzzer2 TASKSET="taskset -c 127"
cd /data/leone/SGX-WALLET/Fuzzer2
./fuzz.sh # default run 86400 second
# ./stop.sh # 在 fuzzing 结束前停止
# ./merge.sh # 在 fuzzing 时合并来自 Source Based Coverage 的 profraw
# ./show_cov.sh # 显示来自 Source Based Coverage 的结果
# coverage_exp.log # 这是来自 libfuzzer 的日志
```
# 联系我
欢迎提出任何问题,您可以通过 issue 或我的电子邮件提问。
我的邮箱:791960492@qq.com标签:Atomic Red Team, C/C++, CISA项目, EnclaveFuzz, Fuzzing, Intel SGX, kAFL, LibFuzzer, LLVM, meg, NDSS 2024, SGX安全, TEE, TruffleHog, UML, 事务性I/O, 代码安全分析, 信息安全, 内存安全, 可信执行环境, 子域名枚举, 学术论文, 情报收集, 数据泄露检测, 模糊测试引擎, 漏洞研究, 系统安全, 网络安全, 软硬件安全, 隐私保护