模糊测试与 PoC 验证¶
AuditAI 如何使用 Foundry 通过不变式测试和漏洞概念验证来验证漏洞。
概述¶
检测漏洞后,AuditAI 可以使用 Foundry 进行具体执行验证。这产生漏洞真实可利用的硬证据,而非仅仅是理论发现。
Foundry 集成¶
AuditAI 使用 Foundry 的 forge 进行:
- 不变式测试 — 检查合约不变式在随机输入下是否成立
- 漏洞 PoC 生成 — 自动生成演示漏洞的 Foundry 测试合约
- 补丁验证 — 确认修复确实有效
漏洞 PoC 生成¶
exploit_gen 工具生成独立的 Foundry 测试合约:
每个生成的 PoC 是一个完整的 Foundry 测试文件:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import "forge-std/Test.sol";
import "../src/VulnerableBank.sol";
contract VulnerableBankExploitTest is Test {
VulnerableBank bank;
address attacker = address(0xBEEF);
function setUp() public {
bank = new VulnerableBank();
// fund the bank
vm.deal(address(this), 10 ether);
bank.deposit{value: 1 ether}();
}
function testReentrancy() public {
vm.startPrank(attacker);
vm.deal(attacker, 1 ether);
// exploit: deposit and re-enter via fallback
bank.deposit{value: 1 ether}();
// verify: attacker drained the bank
assertGt(attacker.balance, 1 ether);
vm.stopPrank();
}
}
具体执行¶
validator 代理通过 Foundry 运行 PoC 测试:
执行流程:
- 将漏洞利用测试写入临时文件
- 运行
forge test --match-contract <test_name> - 解析输出判断通过/失败
- 返回结构化结果
流水线集成¶
在完整审计流水线中,验证发生在修补之后:
[检测] ──► 漏洞
│
▼
[修补] ──► 修补后的代码
│
▼
[验证] ──► Validator 运行 Foundry 测试
│
├── 通过 ──► 修复确认
└── 失败 ──► 修复被拒,重试
LLM 生成的不变式¶
对于没有现有测试的合约,LLM 可以生成不变式测试合约:
- 分析合约预期行为
- 生成检查不变式的
forge test合约 - 对原始(有漏洞的)代码运行以确认 bug
- 对修补后的代码运行以确认修复
独立漏洞利用执行¶
可以直接运行漏洞利用:
# 对已部署合约执行漏洞利用
python3 -m src.main exploit 0xContractAddress tests/exploits/VulnerableBank_exploit.t.sol
前置要求¶
必须安装 Foundry: