dhruvvvv2019-pixel/ABI-stateful-vault-fuzzer
GitHub: dhruvvvv2019-pixel/ABI-stateful-vault-fuzzer
基于 ABI 内省的有状态模糊测试引擎,用于自动发现 DeFi 金库协议中的通胀式会计漏洞并输出最小化漏洞利用路径。
Stars: 0 | Forks: 0
# ABI 有状态模糊测试器
## 概述
我构建这个项目是为了探索如何使用有状态模糊测试来自动发现 DeFi 智能合约中的会计漏洞。
该项目是一个通用的、基于 ABI 驱动的有状态模糊测试器,专注于检测金库协议中的通胀式攻击。该引擎没有硬编码特定的漏洞利用序列,而是动态加载合约 ABI,发现可调用的状态更改函数,生成随机交易序列,改变区块链状态,并自动搜索会计异常。
该项目针对的核心漏洞是金库式协议中经典的通胀攻击模式,在这种攻击中,直接的资产捐赠会操纵 `totalAssets()` 并由于整数除法舍入,导致未来的存款铸造出零份额。
该项目结合了:
* Solidity 智能合约
* Foundry 工具链
* 有状态模糊测试
* ABI 内省
* 多角色交易模拟
* 漏洞利用最小化
* 自动异常检测
* 使用 Anvil 进行本地 EVM 执行
# 该项目解决的问题
许多 DeFi 金库协议使用基于以下内容的会计公式计算份额:
* 金库内部的资产总额
* 已铸造的份额总额
如果攻击者在不铸造份额的情况下直接将资产转入金库,金库的账目就会被扭曲。
这可能会造成以下情况:
1. 攻击者操纵汇率
2. 受害者存入真实资产
3. 受害者收到零份额
4. 受害者实际上损失了资金
此类问题通常被称为通胀攻击。
该项目的目标是使用有状态模糊测试自动发现此类易受攻击的执行路径。
# 使模糊测试器泛化的原因
该项目背后重要的架构理念是,漏洞利用路径并未被硬编码。
该引擎不会手动执行:
* 存款
* 捐赠
* 存款
相反,它会:
1. 动态加载 ABI 元数据
2. 自动发现可调用函数
3. 生成随机交易序列
4. 变异交易顺序和参数
5. 在链上执行序列
6. 监控金库账目变化
7. 自动检测漏洞利用条件
这使得架构成为协议驱动型,而不是漏洞利用脚本驱动型。
唯一与特定漏洞相关的组件是预言机,它负责定义什么才算是通胀式会计异常。
# 项目架构
```
inflation-fuzzer/
│
├── contracts/
├── script/
├── test/
├── fuzzer/
├── foundry.toml
└── README.md
```
# 智能合约
## MockERC20.sol
一个用作底层金库资产的简化 ERC20 实现。
它支持:
* mint
* transfer
* approve
* transferFrom
* allowance 跟踪
模糊测试器使用此代币进行:
* 攻击者存款
* 受害者存款
* 直接捐赠攻击
* 模糊测试期间的余额重置
## VulnerableVault.sol
这是一个故意设为易受攻击的金库合约。
该金库:
* 接受存款
* 跟踪金库份额
* 计算份额铸造量
* 维护资产账目
该漏洞之所以存在,是因为直接的代币捐赠增加了金库资产,却没有铸造新的份额。
这会导致汇率扭曲并引发通胀攻击。
## IVaultLike.sol
一个轻量级接口抽象,表示类似金库的协议行为。
它有助于保持模糊测试架构的模块化和面向协议。
# Python 模糊测试器架构
Python 引擎负责:
* ABI 加载
* 函数发现
* 序列生成
* 交易变异
* 有状态执行
* 异常检测
* 漏洞利用最小化
整个模糊测试过程使用 Foundry + Anvil 在实时的本地 EVM 环境中运行。
# 核心组件
## bootstrap.py
初始化模糊测试环境。
职责:
* 连接到本地区块链
* 加载 ABI 产物
* 创建 Web3 合约对象
* 动态发现可调用函数
* 初始化账户和协议状态
该文件负责体现项目基于 ABI 驱动的特性。
## sequences.py
生成并变异交易序列。
职责:
* 随机参数生成
* 随机参与者选择
* 捐赠交易生成
* 序列变异
* 状态空间探索
该引擎探索多步交易路径,而不是孤立的单函数调用。
## executor.py
运行时执行引擎。
职责:
* 执行生成的交易序列
* 批准代币转账
* 模拟攻击者与受害者的交互
* 跟踪金库账目变化
* 调用异常预言机
* 收集执行跟踪
该组件执行与实时 EVM 的实际有状态交互。
## oracle.py
定义什么情况算作漏洞利用。
该预言机检测以下情况:
* 账目被通过捐赠操纵
* 发生了受害者存款
* 金库份额未正确增加
* 发生了零份额式异常
这是系统的语义漏洞检测器。
## state.py
实现区块链快照/回滚逻辑。
这允许:
* 确定性模糊测试
* 独立的序列执行
* 可重现的漏洞利用发现
每个模糊测试序列独立执行,同时仍保持序列内部的状态演变。
## minimizer.py
将漏洞利用跟踪缩减为最小的可重现交易序列。
这使得发现的漏洞利用:
* 更易于理解
* 更易于调试
* 更易于演示
## engine.py
项目的主要协调器。
它:
1. 初始化环境
2. 生成模糊测试种群
3. 执行序列
4. 变异状态
5. 检测异常
6. 最小化漏洞利用
7. 存储漏洞利用跟踪
该文件控制着完整的模糊测试生命周期。
# 有状态模糊测试工作流
```
Deploy Contracts
↓
Load ABI Artifacts
↓
Discover Callable Functions
↓
Generate Transaction Sequences
↓
Execute Stateful Interactions
↓
Track Vault Accounting Changes
↓
Detect Inflation Anomalies
↓
Minimize Exploit Trace
↓
Save exploit.json
```
# 漏洞利用模式示例
该引擎能够自动发现类似于以下情况的序列:
```
attacker deposit
↓
attacker donation
↓
victim deposit
↓
victim receives zero shares
```
而无需手动硬编码漏洞利用路径。
# 使用的技术
* Solidity
* Foundry
* Anvil
* Python
* Web3.py
* 有状态模糊测试
* ABI 内省
* 本地 EVM 测试
# 如何运行该项目
## 步骤 1 — 安装 Git
下载 Git:
[https://git-scm.com/downloads](https://git-scm.com/downloads)
验证安装:
```
git --version
```
## 步骤 2 — 安装 Python
下载 Python:
[https://www.python.org/downloads/](https://www.python.org/downloads/)
在安装期间:
启用:
```
Add Python to PATH
```
验证:
```
python --version
```
## 步骤 3 — 安装 Foundry
打开 PowerShell 并运行:
```
iwr https://raw.githubusercontent.com/foundry-rs/foundry/master/foundryup/install.ps1 -useb | iex
```
然后运行:
```
foundryup
```
验证:
```
forge --version
```
## 步骤 4 — 克隆仓库
```
git clone
cd abi-stateful-vault-fuzzer
```
## 步骤 5 — 安装 forge-std
```
git init
forge install foundry-rs/forge-std
```
## 步骤 6 — 安装 Python 依赖项
```
pip install web3
```
## 步骤 7 — 构建合约
```
forge build
```
这将生成:
* 编译后的字节码
* ABI 产物
* 合约元数据
## 步骤 8 — 启动本地区块链
```
anvil
```
保持此终端打开。
## 步骤 9 — 复制第一个私钥
在 Anvil 的输出中,复制:
```
Private Keys
(0) 0x...
```
此密钥将用于部署。
## 步骤 10 — 部署合约
在项目文件夹中打开一个新终端并运行:
```
forge script script/Deploy.s.sol --broadcast --rpc-url http://127.0.0.1:8545 --private-key YOUR_PRIVATE_KEY
```
替换:
```
YOUR_PRIVATE_KEY
```
为你从 Anvil 复制的私钥。
## 步骤 11 — 复制合约地址
部署输出将显示:
```
Token: 0x...
Vault: 0x...
```
复制这两个地址。
## 步骤 12 — 运行测试
```
forge test
```
这将验证:
* 合约是否正确编译
* 通胀漏洞是否存在
* 环境配置是否正确
## 步骤 13 — 运行模糊测试器
```
cd fuzzer
python engine.py
```
## 步骤 14 — 输入合约地址
在提示时粘贴:
* 已部署的金库地址
* 已部署的代币地址
## 步骤 15 — 等待漏洞利用发现
该引擎将:
* 发现 ABI 函数
* 生成有状态交易序列
* 变异交互
* 搜索会计异常
* 自动检测漏洞利用路径
最终你应该会看到:
```
🚨 TRUE INFLATION ATTACK FOUND 🚨
```
随后是:
```
🚨 EXPLOIT FOUND 🚨
```
# 总结
这个项目帮助我探索了:
* 智能合约安全
* 有状态模糊测试
* DeFi 金库账目
* ABI 驱动的自动化
* EVM 执行内部机制
* 漏洞利用发现工作流
* 区块链测试基础设施
该项目的主要焦点是构建一个轻量级的、面向研究的模糊测试系统,该系统能够通过有状态的协议交互,而不是硬编码的漏洞利用脚本,自动发现金库式协议中的漏洞利用路径。
标签:ABI分析, CISA项目, DeFi安全, EVM, Foundry, GitHub, Inflation Attack, Python, Solidity, Stateful Fuzzing, Web3安全, 代码生成, 会计异常检测, 区块链安全, 整数溢出, 无后门, 智能合约安全, 智能合约审计, 渗透测试工具, 逆向工具, 通胀攻击, 重码漏洞