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 演示视频: [![asciicast 演示视频](https://asciinema.org/a/bMvlXJ8PkxqE2hoXyYtAmLaec.svg)](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报告查看器, 二进制分析, 二进制安全, 云安全运维, 信息泄露, 原型框架, 堆利用, 堆栈溢出, 多阶段利用, 安全防御评估, 智能合约安全, 栈利用, 概念验证, 符号执行, 自动漏洞利用生成, 请求拦截, 逆向工具