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, 代码安全分析, 信息安全, 内存安全, 可信执行环境, 子域名枚举, 学术论文, 情报收集, 数据泄露检测, 模糊测试引擎, 漏洞研究, 系统安全, 网络安全, 软硬件安全, 隐私保护