审计finding三级验收流水线:自身forge test验证 → GitHub CI → 审查员评审。确保提交真实可靠的验证级产出。
审计验证管道 PoC 一级:自我验证 建立 + 伪造测试 + 发现 + 等级 3:提交前核对表 + 福尔格测试 + ouali
功能概述
审计验证管道 PoC 一级:自我验证 建立 + 伪造测试 + 发现 + 等级 3:提交前核对表 + 福尔格测试 + ouali是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
审计验证流水线
触发条件
触发场景
| 场景 | 对应能力 | 说明 |
|---|---|---|
| 写完 PoC 准备验证 | Level 1: Self-Verification | forge build + forge test 确认攻击效果 |
| 准备提交 finding 到外部平台 | Level 3: Pre-submission checklist | 提交前必须完成三级验收 |
| forge test 结果不确定 | Quality Self-Assessment | 判断 PASS 是否等于 finding 真实 |
| 判断 finding 严重度 | Severity Assessment Guide | 防止高估(Medium→Low 惯例) |
| 推送审计代码到 GitHub | Level 2: GitHub CI | CI 必须配置防止跳过验证 |
决策流程
发现可疑代码 → 写 PoC → forge build → forge test ├─ PASS + 攻击效果确认 → 质量自评 → 提交宝总决策 → (是) 提交外部平台 ├─ PASS + 无攻击效果 → 丢弃(FALSE POSITIVE) └─ FAIL → 修复(最多3轮)→ 仍失败 → 丢弃
反触发(不使用此技能的场景)
- 没有 PoC 代码时:纯代码审查或白板分析不需要 forge 验证
- 非 Solidity 项目:此流水线基于 Foundry,不适用于 Rust/Go/Python 审计
- 理论级发现:没有可运行 PoC 的发现标记为理论级,不进入验收流程
- 宝总明确说"先看看"时:探索阶段不触发正式验收
概述
三级验收流水线,确保每个审计 finding 经过确定性验证后才作为交付物。
核心原则: 代码生成虽具概率性,但验证是确定性的。没有 forge test PASS 的 finding 不是交付物。
三级验收
Level 1: Self-Verification (forge test PASS) Level 2: GitHub CI (automated, prevents skipping) Level 3: Auditor Review (novelty, severity, quality)
串行依赖关系:L1 → L2 → L3。跳过任一环节 = 未验证。
Level 1: Self-Verification
分步操作
1. 阅读源码 → 识别可疑模式 2. 编写 finding 描述(初稿) 3. 编写 Foundry PoC (.t.sol) 4. forge build → 修复编译错误(预期需 2–3 轮迭代) 5. forge test → 检查结果: - PASS + 攻击效果确认 → REAL - PASS + 攻击效果 = 0 → FALSE POSITIVE - FAIL(PoC 缺陷)→ 修复 PoC,重试 - FAIL(被测代码正确)→ FALSE POSITIVE,丢弃 6. 质量自评 7. 向 宝总 汇报,申请进入 Level 3 决策
PoC 模板
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.x;
import "forge-std/Test.sol";
import "../src/TargetContract.sol";
contract POC_FindingName is Test {
TargetContract target;
function setUp() public {
// 部署合约
// 初始化状态
}
function test_attack_succeeds() public {
// 步骤 1:准备攻击前提条件
// 步骤 2:执行攻击
// 步骤 3:断言攻击效果(NOT 仅断言交易成功)
assertGt(attackerProfit, 0, "Attack must produce profit");
}
}
常见陷阱
- vm.roll vs vm.warp:
vm.roll仅修改区块号,需改时间戳请用vm.warp - StaleMessage: 部分协议校验消息新鲜度,需设置正确时间戳
- NotTolled/Payable: 认证类函数可能要求支付费用(例如
kiss()) - Solidity 中的 Unicode 字符: 替换
—、→等非 ASCII 符号为纯 ASCII - 库路径: 核对实际文件位置,勿依赖假设路径
- 虚拟份额/余额: 协议特定的虚拟记账机制可能吸收舍入误差(参考 Morpho 教训)
- PASS ≠ 正确: PoC 通过不代表 finding 成立——须验证攻击 EFFECT,而非仅机制可行
质量自评模板
【提交前质量自评】 - Finding ID: [F-XX] - 验证状态: [ ] 已编译 [ ] forge test PASS [ ] 攻击效果已确认 - 严重度: [H/M/L/I] — 理由: [为何定为此严重度] - 新颖性: [New / Known / Duplicate] — 若已知,请注明来源: [link] - 已知限制: [任何注意事项或边界条件]
Level 2: GitHub CI(待补充)
必需工作流
# .github/workflows/audit-test.yml
name: Audit PoC Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: foundry-rs/foundry-toolchain@v1
- run: forge test --match-path "test/POC_*.t.sol" -vv
- run: forge build
目的
防止因会话中断或记忆疏漏而跳过 Level 1。每次推送均须通过 forge test,方可提交 PR。
Level 3: 审计师复核
审计师核查内容(forge test 无法覆盖)
- 新颖性: 该 finding 是否已被发现?需查阅历史审计报告
- 严重度准确性: Medium 是否确为 Medium?(Sablier 教训:2/5 存在高估)
- 影响量化: 精确计算损失金额,而非定性描述
- 报告质量: 清晰的复现步骤、代码引用、修复建议
- 协议经济学: DeFi 场景下的博弈论分析与激励机制评估
提交前检查清单
- forge test PASS(Level 1)
- 推送后 CI 通过(Level 2)
- 已比对历史审计报告,排除重复项
- 严重度判定附有数据支撑
- 影响已量化(不可仅写“资金损失”)
- 报告符合目标平台提交格式
- 已向 宝总 汇报并获准提交
严重度评估指南
| 严重度 | 判定标准 |
|---|---|
| HIGH | 直接资金损失、核心功能 DoS、权限提升 |
| MEDIUM | 间接损失、受限 DoS、造成经济成本的骚扰行为(griefing) |
| LOW | 违反最佳实践、纵深防御缺陷、仅理论存在且无实际可利用路径 |
| INFO | 代码质量、文档问题,无安全影响 |
常见高估情形:若影响发生需同时满足多个低概率条件,应下调一级。 常见低估情形:若影响具有系统性(波及全部用户),应上调一级。
回溯验证复盘经验(2026-03-31)
- 共提交 135 个 finding,0 个经验证 → Cantina 封禁
- 29 个 finding 进行回溯验证:28 个真实(96.6%),1 个误报(3.4%)
- 代码分析能力扎实;验证层此前缺失
- 误报示例:Morpho F-01(虚拟份额吸收舍入误差)
- 严重度高估示例:Sablier F-03、F-05(Medium → Low)
- PoC 编译报错属正常现象,预期需 2–3 轮修复
- forge test PASS ≠ finding 成立,务必验证攻击 EFFECT,而非仅机制可行
热门AI工具
相关专题
设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。
5722
2024.12.23
更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。
4243
2024.12.20
安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。
1870
2023.10.09
Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。
0
2026.10.21
Playwright页面操作专题汇集元素定位、点击与输入、等待响应、多页面切换、Iframe、事件监听及文件处理的已审核文章,便于按操作场景查阅示例与常见问题。
0
2026.10.21
Playwright入门专题汇集测试框架安装、VS Code配置、录制脚本、编写首个用例、运行调试及查看报告的已审核文章,帮助初学者搭建端到端测试流程。
0
2026.10.21
Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。
0
2026.10.16
怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。
0
2026.10.16
热门下载
相关下载
精品课程
