GhostFrankWu/SAEG
GitHub: GhostFrankWu/SAEG
SAEG 是一个基于 angr 符号执行引擎的有态自动漏洞利用生成框架,旨在自动化处理包含信息泄露的多阶段漏洞利用。
Stars: 177 | Forks: 17
# SAEG: 有态自动漏洞利用生成
SAEG 是一个使用 angr 作为符号执行引擎的自动漏洞利用生成(AEG)框架。其目的是提供一个高效的框架,用于处理包含信息泄露的多阶段漏洞利用。作为概念验证,SAEG 实现了部分栈利用以及一个堆利用的原型。
我们提供了源代码和一键部署脚本,以供复现和参考其他研究。它还提供了一些基准测试用例,你可以在 [CI 运行结果](https://github.com/GhostFrankWu/SAEG/actions/) 中查看这些测试用例的结果。
如果你想了解更多关于 SAEG 的信息,请参考[我们的文章](#Publication)。
SAEG 是一个使用 angr 作为符号执行引擎的 AEG(自动漏洞利用生成)框架,旨在提供一个高效的处理包含信息泄露的多步利用的框架。作为概念验证,SAEG 实现了部分栈利用以及一个堆利用的原型,并提供了源码及一键部署环境以供复现研究,同时也提供了一些基准测试用例,你可以在 CI 中看到这些测试用例的[运行结果](https://github.com/GhostFrankWu/SAEG/actions/)。
如果您希望了解更多关于 SAEG 的信息,请查看[我们的文章](#Publication)。
SAEG 演示视频:
[](https://asciinema.org/a/bMvlXJ8PkxqE2hoXyYtAmLaec)
## 在 Docker 上安装与测试
推荐在 Docker 上使用 Ubuntu 20.04 或更高版本来运行测试。
[Dockerfile](Dockerfile) 示例基于 Ubuntu 22.04。
更多详情请参阅 [CI 文件](.github/workflows/test.yml)。
```
docker build -t saeg:01 .
# 运行 stack testset
docker run -v /tmp:/test_res saeg:01 bash -c 'cd /aeg && python3 saeg.py -f x -t stack'
# 获取结果
cat /tmp/test_result.txt
# 交互式运行 SAEG
docker run -it saeg:01 bash
```
如果您在中国大陆地区,[Dockerfile](Dockerfile) 中有两行注释掉的源(apt 和 pip),您可以取消注释以加速构建。
## 额外数据集
除了论文基准数据外,本仓库还提供了一组额外数据,以便更广泛的研究使用;该数据集不包含在 CI 中。
除论文基准数据外,本仓库还提供了一组额外数据,以便更广泛的研究使用;该数据集不包含在 CI 中。
```
docker run -v /tmp:/test_res saeg:01 bash -c 'cd /aeg && python3 test_extra_dataset.py'
cat /tmp/extra_test_result.txt
```
SAEG 暂不支持以及资源受限的额外样例保存在 [assets/extra_dataset/unsupported](assets/extra_dataset/unsupported/),供研究者使用其他方法进行测试。
**请尽情改进或超越 SAEG**!
SAEG 暂不支持以及资源受限的额外样例保存在 [assets/extra_dataset/unsupported](assets/extra_dataset/unsupported/),供研究者使用其他方法进行测试。
**这里面的许多测试样例 SAEG 都不支持,请尽情玩耍,拓展 AEG 的边界**!
## 使用方法
本地 pwn 文件:
```
python3 saeg.py -f input_file
```
指定 libc 和 ld 进行远程 pwn:
```
python3 saeg.py -f input_file -l [LIBC.so] -d [LD.so] -i [ip:port]
# 例如:
# python3 saeg.py -f ./vuln -l `pwd`/libc.so -d ./ld.so -i 192.168.1.1:1337
```
获取帮助信息:
```
python3 saeg.py --help
```
## 框架结构
- [aseg.py](saeg.py) 运行框架
- [testset.py](testset.py) 测试索引
- [Dockerfile](Dockerfile)
- **aeg_module/**
+ [aeg_main.py](aeg_module/aeg_main.py) 入口及外部状态机
+ [challenge.py](aeg_module/challenge.py) 初始化二进制文件并分析其静态信息
+ [binary_interactive.py](aeg_module/binary_interactive.py) 存储标签信息并维护交互的模块
+ [mod_leak.py](aeg_module/mod_leak.py) 信息泄露攻击模板
+ [mod_exploit.py](aeg_module/mod_exploit.py) 栈利用攻击模板
+ [mod_technique.py](aeg_module/mod_technique.py) 在 angr 的 step() 过程中监控内存写入和执行路径
+ [mod_sim_procedure.py](aeg_module/mod_sim_procedure.py) angr 的函数 Hook
+ [mod_sim_procedure_heap.py](aeg_module/mod_sim_procedure_heap.py) angr 的内存函数 Hook
+ [utils.py](aeg_module/utils.py) 交互、计算和 shellcode 等杂项工具
SAEG 的设计理念是可扩展性。如果你想简单地修改/扩展框架,可以从以 `mod_` 开头的文件入手。
## 附加文档
### 引用
如果你在研究中使用了本仓库,请引用我们的论文:
```
@inproceedings{saeg,
title = {SAEG: Stateful Automatic Exploit Generation},
author = {Yifan Wu and Yinshuai Li and Hong Zhu and Yinqian Zhang},
booktitle = {European Symposium on Research in Computer Security},
year = {2024}
}
```
### 出版物
我们论文**草稿**版本的链接(既非提交版本也非预印本):
[论文 PDF](https://ghostfrankwu.github.io/papers/saeg_draft.pdf)
### 开源项目参考
Zeratool 是一个用于二进制分析和(栈)利用的传统符号执行框架:
https://github.com/ChrisTheCoolHut/Zeratool
BOF_AEG 是一个基于 angr 的简单栈利用工具:(目前不可用)
https://github.com/Kirito0/bof_aeg
用于栈利用和内存损坏检测的简单框架:
https://github.com/Hank0438/AEG
用于内存损坏检测的框架:
https://github.com/angr/heaphopper
优秀的内核 AEG(基于 angr):
https://github.com/plummm/SyzScope
https://github.com/seclab-ucr/SyzBridge
## 讨论
GitHub 提供的 CI 服务器性能波动较大,因此即使连续运行两次也可能出现显著偏差。因此更推荐在本地运行性能测试。
本框架侧重于静态分析和动态验证,因此其有效性对于所有保护机制(包括系统级 ASLR)被禁用以及利用栈上悬空指针的场景来说不够精确。目前,其他可行的解决方案包括动态运行并与 GDB 交互,但这些内容并非本工作的目标(信息泄露)。
SAEG 是一个使用 angr 作为符号执行引擎的自动漏洞利用生成(AEG)框架。其目的是提供一个高效的框架,用于处理包含信息泄露的多阶段漏洞利用。作为概念验证,SAEG 实现了部分栈利用以及一个堆利用的原型。
我们提供了源代码和一键部署脚本,以供复现和参考其他研究。它还提供了一些基准测试用例,你可以在 [CI 运行结果](https://github.com/GhostFrankWu/SAEG/actions/) 中查看这些测试用例的结果。
如果你想了解更多关于 SAEG 的信息,请参考[我们的文章](#Publication)。
SAEG 是一个使用 angr 作为符号执行引擎的 AEG(自动漏洞利用生成)框架,旨在提供一个高效的处理包含信息泄露的多步利用的框架。作为概念验证,SAEG 实现了部分栈利用以及一个堆利用的原型,并提供了源码及一键部署环境以供复现研究,同时也提供了一些基准测试用例,你可以在 CI 中看到这些测试用例的[运行结果](https://github.com/GhostFrankWu/SAEG/actions/)。
如果您希望了解更多关于 SAEG 的信息,请查看[我们的文章](#Publication)。
SAEG 演示视频:
[](https://asciinema.org/a/bMvlXJ8PkxqE2hoXyYtAmLaec)
## 在 Docker 上安装与测试
推荐在 Docker 上使用 Ubuntu 20.04 或更高版本来运行测试。
[Dockerfile](Dockerfile) 示例基于 Ubuntu 22.04。
更多详情请参阅 [CI 文件](.github/workflows/test.yml)。
```
docker build -t saeg:01 .
# 运行 stack testset
docker run -v /tmp:/test_res saeg:01 bash -c 'cd /aeg && python3 saeg.py -f x -t stack'
# 获取结果
cat /tmp/test_result.txt
# 交互式运行 SAEG
docker run -it saeg:01 bash
```
如果您在中国大陆地区,[Dockerfile](Dockerfile) 中有两行注释掉的源(apt 和 pip),您可以取消注释以加速构建。
## 额外数据集
除了论文基准数据外,本仓库还提供了一组额外数据,以便更广泛的研究使用;该数据集不包含在 CI 中。
除论文基准数据外,本仓库还提供了一组额外数据,以便更广泛的研究使用;该数据集不包含在 CI 中。
```
docker run -v /tmp:/test_res saeg:01 bash -c 'cd /aeg && python3 test_extra_dataset.py'
cat /tmp/extra_test_result.txt
```
SAEG 暂不支持以及资源受限的额外样例保存在 [assets/extra_dataset/unsupported](assets/extra_dataset/unsupported/),供研究者使用其他方法进行测试。
**请尽情改进或超越 SAEG**!
SAEG 暂不支持以及资源受限的额外样例保存在 [assets/extra_dataset/unsupported](assets/extra_dataset/unsupported/),供研究者使用其他方法进行测试。
**这里面的许多测试样例 SAEG 都不支持,请尽情玩耍,拓展 AEG 的边界**!
## 使用方法
本地 pwn 文件:
```
python3 saeg.py -f input_file
```
指定 libc 和 ld 进行远程 pwn:
```
python3 saeg.py -f input_file -l [LIBC.so] -d [LD.so] -i [ip:port]
# 例如:
# python3 saeg.py -f ./vuln -l `pwd`/libc.so -d ./ld.so -i 192.168.1.1:1337
```
获取帮助信息:
```
python3 saeg.py --help
```
## 框架结构
- [aseg.py](saeg.py) 运行框架
- [testset.py](testset.py) 测试索引
- [Dockerfile](Dockerfile)
- **aeg_module/**
+ [aeg_main.py](aeg_module/aeg_main.py) 入口及外部状态机
+ [challenge.py](aeg_module/challenge.py) 初始化二进制文件并分析其静态信息
+ [binary_interactive.py](aeg_module/binary_interactive.py) 存储标签信息并维护交互的模块
+ [mod_leak.py](aeg_module/mod_leak.py) 信息泄露攻击模板
+ [mod_exploit.py](aeg_module/mod_exploit.py) 栈利用攻击模板
+ [mod_technique.py](aeg_module/mod_technique.py) 在 angr 的 step() 过程中监控内存写入和执行路径
+ [mod_sim_procedure.py](aeg_module/mod_sim_procedure.py) angr 的函数 Hook
+ [mod_sim_procedure_heap.py](aeg_module/mod_sim_procedure_heap.py) angr 的内存函数 Hook
+ [utils.py](aeg_module/utils.py) 交互、计算和 shellcode 等杂项工具
SAEG 的设计理念是可扩展性。如果你想简单地修改/扩展框架,可以从以 `mod_` 开头的文件入手。
## 附加文档
### 引用
如果你在研究中使用了本仓库,请引用我们的论文:
```
@inproceedings{saeg,
title = {SAEG: Stateful Automatic Exploit Generation},
author = {Yifan Wu and Yinshuai Li and Hong Zhu and Yinqian Zhang},
booktitle = {European Symposium on Research in Computer Security},
year = {2024}
}
```
### 出版物
我们论文**草稿**版本的链接(既非提交版本也非预印本):
[论文 PDF](https://ghostfrankwu.github.io/papers/saeg_draft.pdf)
### 开源项目参考
Zeratool 是一个用于二进制分析和(栈)利用的传统符号执行框架:
https://github.com/ChrisTheCoolHut/Zeratool
BOF_AEG 是一个基于 angr 的简单栈利用工具:(目前不可用)
https://github.com/Kirito0/bof_aeg
用于栈利用和内存损坏检测的简单框架:
https://github.com/Hank0438/AEG
用于内存损坏检测的框架:
https://github.com/angr/heaphopper
优秀的内核 AEG(基于 angr):
https://github.com/plummm/SyzScope
https://github.com/seclab-ucr/SyzBridge
## 讨论
GitHub 提供的 CI 服务器性能波动较大,因此即使连续运行两次也可能出现显著偏差。因此更推荐在本地运行性能测试。
本框架侧重于静态分析和动态验证,因此其有效性对于所有保护机制(包括系统级 ASLR)被禁用以及利用栈上悬空指针的场景来说不够精确。目前,其他可行的解决方案包括动态运行并与 GDB 交互,但这些内容并非本工作的目标(信息泄露)。标签:AEG, angr, CGC, CISA项目, DNS 反向解析, Docker, Go语言工具, pwnable, RHG, Web报告查看器, 二进制分析, 二进制安全, 云安全运维, 信息泄露, 原型框架, 堆利用, 堆栈溢出, 多阶段利用, 安全防御评估, 智能合约安全, 栈利用, 概念验证, 符号执行, 自动漏洞利用生成, 请求拦截, 逆向工具