Damn Vulnerable DeFi(六)
要学一下Mermaid 用来画图,作为安全审计的工具。
用slither扫描了truster
找到了unchecked-transfer(高危漏洞)
Unused return 未使用的返回值(中危漏洞)
如何用foundry测试TrusterLenderPool.sol
你想要用 Foundry 来测试 damn-vulnerable-defi 中的 TrusterLenderPool 合约,核心是要验证该合约的正常闪电贷逻辑和已知漏洞(忽略返回值导致的权限被盗)。我会给你一个完整的 Foundry 测试示例,包含正常场景和攻击场景的测试,让你能直观验证合约的漏洞和修复效果。
前置准备
- 确保你的项目结构符合 Foundry 规范:
1
2
3
4
5
6
7damn-vulnerable-defi/
├── src/
│ └── truster/
│ └── TrusterLenderPool.sol # 目标合约
└── test/
└── truster/
└── TrusterLenderPool.t.sol # 测试文件(新建) - 安装必要依赖(如果未安装):
1
forge install openzeppelin/openzeppelin-contracts
完整测试代码(TrusterLenderPool.t.sol)
1 | |
代码关键部分解释
setUp 函数:
- Foundry 的
setUp()是测试前置函数,会在每个测试用例执行前运行; - 部署测试用的 ERC20 代币(DVT)和 TrusterLenderPool 合约;
- 将所有代币转入借贷池,模拟真实场景;
- 给攻击者账户分配 ETH,用于支付交易手续费。
- Foundry 的
正常闪电贷测试(testNormalFlashLoan):
- 验证闪电贷的基本逻辑:借出代币后必须归还,否则会触发
require(balanceAfter >= balanceBefore); - 这里调用闪电贷时
target=address(0),仅执行代币转账,验证池子余额不变。
- 验证闪电贷的基本逻辑:借出代币后必须归还,否则会触发
漏洞攻击测试(testExploitTruster):
- 核心漏洞点:合约允许
borrowAmount=0(无需归还),且flashLoan中target.functionCall(data)不检查返回值,也不限制调用的合约和方法; - 攻击者构造
approve函数的 calldata,让借贷池合约调用 DVT 的approve方法,授权攻击者转走所有代币; - 授权成功后,攻击者调用
transferFrom直接转走池子里的所有代币。
- 核心漏洞点:合约允许
如何运行测试
进入项目根目录:
1
cd /home/kali/Desktop/test10/damn-vulnerable-defi运行单个测试文件:
1
forge test --match-path test/truster/TrusterLenderPool.t.sol -vvv--match-path:指定测试文件路径;-vvv:显示详细的测试日志(包括每一步的状态变化)。
运行特定测试用例(比如只运行攻击测试):
1
forge test --match-test testExploitTruster -vvv
测试结果解读
- 如果测试通过(显示
PASS):说明合约确实存在漏洞,攻击者可以成功盗取代币; - 如果修复了合约(比如限制
borrowAmount > 0或检查functionCall返回值),再运行测试会失败(显示FAIL),说明漏洞已修复。
修复后的合约测试验证
如果你按照之前的建议修复了 TrusterLenderPool 合约(比如限制 borrowAmount > 0、检查 functionCall 返回值),再运行 testExploitTruster 测试用例,会触发以下报错:
require(borrowAmount > 0):直接阻止借 0 个代币的请求;require(success):如果授权操作被拦截,会回滚交易。
总结
- Foundry 测试 TrusterLenderPool 的核心是:
- 先通过
setUp()初始化合约和账户状态; - 编写正常场景测试验证基本功能;
- 编写漏洞场景测试验证攻击逻辑,确认漏洞存在;
- 先通过
- 运行测试时,通过
forge test命令指定测试文件/用例,结合-vvv查看详细日志; - 修复合约后重新运行测试,若攻击用例失败,说明漏洞已被修复。
这个测试示例覆盖了 Truster 合约的核心漏洞场景,你可以在此基础上扩展(比如测试修复后的合约、增加边界条件测试等)。
forge test和slither测试有什么区别?
你想了解 forge test 和 slither 这两个工具在智能合约测试/审计中的核心区别,本质上是要分清动态测试和静态分析的不同定位——前者验证合约“运行时是否符合预期”,后者检查合约“代码本身是否有安全缺陷”。下面我会从核心定位、工作原理、使用场景等维度,清晰对比两者的区别,并告诉你如何搭配使用。
一、核心定位与本质区别
| 特性 | forge test (Foundry 测试) | Slither (静态分析工具) |
|---|---|---|
| 测试类型 | 动态测试(Dynamic Testing)/ 功能测试 | 静态分析(Static Analysis)/ 漏洞扫描 |
| 核心目标 | 验证合约“运行时行为”是否符合预期(功能对不对) | 检查合约“源代码”是否存在已知漏洞(代码有没有坑) |
| 是否执行代码 | 是(在模拟区块链环境中执行测试用例) | 否(仅解析、分析源代码,不执行) |
| 依赖条件 | 需要编写测试用例(test 函数),指定输入和预期输出 | 无需编写测试用例,直接扫描合约源代码 |
| 发现问题类型 | 功能逻辑错误、边界条件不满足、预期结果不符 | 已知安全漏洞(如忽略返回值、重入、溢出、权限问题) |
| 结果解读 | “测试通过/失败”,说明功能是否达标 | “漏洞告警”,说明代码存在的安全风险点 |
二、工作原理详解
1. forge test(动态测试)
- 原理:你编写测试用例(比如之前的
testExploitTruster),Foundry 会在模拟的以太坊虚拟机(VM) 中执行这些用例:- 部署合约、初始化账户和状态(
setUp函数); - 调用合约的目标函数(如
flashLoan); - 检查执行结果是否符合预期(
assertEq、require等断言)。
- 部署合约、初始化账户和状态(
- 特点:
- 针对性强:只验证你编写了测试用例的场景;
- 能发现“逻辑漏洞”:比如闪电贷本该归还代币却没归还、授权额度计算错误等;
- 依赖测试覆盖度:如果没写攻击场景的测试用例,就发现不了漏洞。
2. Slither(静态分析)
- 原理:不执行代码,仅通过语法解析、数据流分析、控制流分析扫描源代码:
- 解析 Solidity 代码,生成抽象语法树(AST);
- 遍历代码逻辑,匹配内置的“漏洞规则库”(比如“调用 transfer 不检查返回值”“外部调用未限制权限”等);
- 输出匹配到的漏洞告警和风险提示。
- 特点:
- 自动化程度高:无需手动编写用例,一键扫描所有已知漏洞;
- 能发现“代码缺陷”:比如你之前看到的“忽略 transfer/functionCall 返回值”,是 Slither 直接从代码语法中识别的;
- 无法发现“逻辑漏洞”:比如合约功能设计错误(如闪电贷允许借 0 代币),Slither 不会告警,因为语法上无问题,只是逻辑设计有坑。
三、使用场景对比
适合用 forge test 的场景:
- 验证合约核心功能是否正常(比如闪电贷能否正常借出/归还代币);
- 测试边界条件(比如借超出池子余额的代币是否会报错);
- 复现漏洞场景(比如编写攻击用例,验证漏洞是否可被利用);
- 迭代开发时的回归测试(修改代码后,快速验证原有功能是否被破坏)。
适合用 Slither 的场景:
- 快速扫描合约,发现常见的、低级的安全漏洞(比如忘记检查返回值、整数溢出、未初始化变量);
- 审计初期的“初筛”:在编写测试用例前,先排除明显的代码缺陷;
- 合规检查:确保合约代码符合行业安全规范(比如遵循 OpenZeppelin 最佳实践)。
四、实战搭配示例(以 TrusterLenderPool 为例)
- 第一步:Slither 初筛
运行slither src/truster/ --detect all,快速发现“忽略返回值”的漏洞(代码缺陷),先修复这类低级问题。 - 第二步:forge test 验证
编写测试用例:- 正常场景:验证修复后闪电贷功能是否正常;
- 攻击场景:验证修复后攻击者无法再盗取代币;
- 第三步:结合使用
Slither 发现“代码层面的漏洞”,forge test 验证“修复后的逻辑是否真的安全”,两者互补。
总结
- 核心区别:
forge test验证“合约运行得对不对”(动态行为),slither检查“合约代码有没有坑”(静态缺陷); - 互补性:Slither 能快速发现已知的代码漏洞,但无法验证逻辑是否合理;forge test 能验证逻辑是否符合预期,但需要手动编写测试用例;
- 最佳实践:智能合约审计/测试时,先跑 Slither 做静态漏洞初筛,再写 forge 测试用例验证功能和漏洞修复效果,两者结合才能全面保障合约安全。
简单来说,Slither 是“代码体检仪”,告诉你代码有没有已知的健康问题;forge test 是“功能验收测试”,告诉你合约实际用起来是否符合要求。
forge test的解析
你现在看到的这个 forge test 运行结果核心是:2个测试用例中1个通过、1个失败,失败的原因是“攻击者(player)执行的交易数量不符合预期(0 != 1)”。我会逐行拆解这个结果,告诉你每部分的含义、失败原因,以及该怎么理解和排查。
一、结果逐段解读
1. 开头的警告(无关紧要)
1 | |
- 含义:你用的是 Foundry 的 nightly(夜间构建)版本,不是稳定版,仅提醒,不影响测试结果;
- 处理:可以忽略,或按提示设置环境变量
export FOUNDRY_DISABLE_NIGHTLY_WARNING=1关闭。
2. 编译结果(正常)
1 | |
- 含义:Foundry 成功编译了 18 个合约文件(包括测试合约、目标合约、OpenZeppelin 依赖等),编译器版本是 0.8.25,耗时 1.51 秒;
- 关键:
Compiler run successful!说明代码语法无错误,编译没问题。
3. 测试执行结果(核心)
1 | |
- 含义:
- 总共运行了 2 个测试用例(属于
TrusterChallenge测试合约); test_assertInitialState():通过(PASS),消耗了 21982 gas,说明“初始状态验证”符合预期;test_truster():失败(FAIL),失败原因是Player executed more than one tx: 0 != 1(攻击者执行的交易数量是 0,但测试预期是 1),消耗了 6768 gas。
- 总共运行了 2 个测试用例(属于
4. 失败的详细调用轨迹(Traces)
1 | |
- 逐行拆解:
- 执行
test_truster()测试函数,总耗 gas 6768; - 调用
VM::startPrank(player):模拟以player(攻击者)身份执行交易; - 调用
VM::stopPrank():结束模拟身份; - 调用
VM::getNonce(player):获取player地址的交易次数(nonce,以太坊中每笔交易对应一个 nonce,初始为 0,每发一笔交易 +1),返回结果是 0; - 调用
VM::assertEq(0, 1, ...):测试用例要求验证“player 的交易次数是 1”,但实际是 0,触发断言失败,交易回滚; - 最终因断言失败,整个测试用例回滚。
- 执行
5. 汇总结果
1 | |
- 核心:测试套件整体失败,仅
test_assertInitialState()通过,test_truster()失败,无跳过的用例。
二、失败原因分析
这个失败是 测试用例的断言逻辑 导致的,而非合约代码本身的漏洞,核心原因:
test_truster()测试用例中,编写者预期“攻击者(player)需要执行至少 1 笔交易”(所以断言nonce == 1);- 但实际执行中,攻击者地址的
nonce是 0(说明没有发送任何交易); - 断言
assertEq(0, 1)不成立,测试直接失败。
为什么攻击者没发交易?
结合 damn-vulnerable-defi 的 Truster 挑战规则,这个测试用例的逻辑应该是:
- 预期你编写攻击代码,让
player发送 1 笔交易(调用flashLoan并完成攻击); - 但你的测试代码中,
test_truster()函数里没有实际执行攻击者的交易逻辑(比如没调用pool.flashLoan()),只是启动/停止了prank,所以nonce还是 0。
三、如何修复这个测试失败?
以 damn-vulnerable-defi 的 Truster 挑战为例,你需要在 test_truster() 中补充攻击者的交易逻辑,示例如下:
1 | |
- 核心修改:在
startPrank和stopPrank之间,补充攻击者调用合约的交易逻辑(调用flashLoan),这样player的nonce会变成 1,断言就会通过。
总结
- 本次测试失败不是合约漏洞,而是
test_truster()中缺少攻击者的交易执行逻辑,导致断言nonce == 1不成立; - 关键信息:
[PASS] test_assertInitialState():初始状态验证正常,合约部署、代币转账等前置逻辑没问题;[FAIL] test_truster():断言失败,因为攻击者未发送任何交易(nonce=0≠1);
- 修复方向:在
test_truster()中补充攻击者调用flashLoan的交易代码,让player的nonce变为 1,满足断言要求。
简单来说,这个失败是“测试代码没写全”导致的,不是合约本身的问题,补充攻击交易逻辑后就能通过测试。
想要做安全审计或者区块链安全研究员的难点是什么?
要成为区块链安全审计师或安全研究员,难点不在于单一技术的掌握,而在于跨领域知识的深度融合、实战经验的积累,以及对抗性思维的养成。结合你的渗透测试背景和区块链学习路径,核心难点可以分为以下几个维度:
一、技术栈的广度与深度双重挑战
区块链安全不是单一技术领域,而是密码学、智能合约开发、底层协议、传统网络安全的交叉学科,每个分支都需要深入钻研:
- 智能合约层面的深度门槛
- 不仅要懂 Solidity 语法,更要理解 EVM 底层执行机制(比如 opcode 执行逻辑、存储布局
slot、delegatecall/call/staticcall的权限差异)。很多漏洞(如重入、存储碰撞、函数选择器碰撞)都源于对 EVM 底层的理解不足。 - 要熟悉不同公链的合约特性:比如以太坊的
CREATE2部署机制、BSC 的低 gas 限制导致的优化漏洞、Solana 的 Rust 合约内存安全问题(与 EVM 完全不同),跨链场景下的桥接协议漏洞(比如资产跨链的签名验证逻辑)。
- 不仅要懂 Solidity 语法,更要理解 EVM 底层执行机制(比如 opcode 执行逻辑、存储布局
- 传统安全与区块链安全的思维转换
你的渗透测试经验是优势,但需要适配区块链的特殊性:- 传统渗透测试的“漏洞利用”是破坏系统可用性/保密性,而区块链安全的“漏洞利用”是直接盗取资产,攻击路径更短、后果更严重;
- 传统漏洞可以通过补丁修复,而智能合约一旦部署无法修改,审计时需要做到“零容错”,任何小疏忽都可能导致数百万美元损失;
- 传统安全的“权限控制”是基于账户/角色,而区块链的权限是基于合约代码逻辑(比如
onlyOwner修饰符的滥用、未授权的函数调用)。
- 密码学与共识协议的底层理解
研究员级别的岗位需要理解共识层漏洞(比如 PoW 的 51% 攻击、PoS 的长程攻击)、密码学原语的正确使用(比如 ECDSA 签名重放攻击、哈希函数碰撞风险)。
例如:很多合约因错误使用ecrecover导致签名被伪造,本质是对椭圆曲线签名算法的细节理解不到位。
二、实战经验的稀缺性与高门槛
区块链安全是实践驱动的领域,书本知识无法替代实战经验,而实战机会的获取是核心难点:
- 真实漏洞场景的复杂性远超靶场
- Damn Vulnerable DeFi 等靶场的漏洞是“孤立、简化”的,而真实项目的漏洞往往是多个缺陷的组合(比如“忽略返回值 + 权限失控 + 外部调用未校验”叠加导致的攻击)。
- 真实项目会引入大量第三方库(如 OpenZeppelin 版本兼容问题)、复杂业务逻辑(如 AMM 定价算法、借贷协议的清算机制),审计时需要穿透业务逻辑找漏洞,而不是只看代码语法。
- 漏洞挖掘的“对抗性思维”难以培养
审计师需要站在攻击者视角思考问题,而不是“按部就班查漏洞清单”:- 比如 Truster 合约的漏洞,Slither 只能发现“忽略返回值”,但真正的攻击点是“允许借 0 代币 + 任意外部调用”的组合逻辑,这需要你跳出工具的局限,主动构造攻击路径。
- 高级漏洞(如闪电贷攻击、重入攻击的变种)需要理解业务流程,比如“如何利用闪电贷操纵代币价格,再触发清算机制获利”,这需要对 DeFi 业务的深度理解。
- 复现真实漏洞的成本高
要积累经验,需要复现历史上的重大漏洞(如 The DAO 攻击、Poly Network 攻击、Axie Infinity 盗币事件),但这需要:- 还原当时的合约代码和网络状态;
- 理解攻击的完整链路(从漏洞发现到利用的每一步);
- 分析漏洞的根本原因(是代码缺陷还是设计缺陷)。
三、工具链的驾驭与定制能力
成熟的审计师/研究员不能只依赖现成工具,而要具备工具定制和数据分析能力:
- 静态分析工具的局限性与优化
Slither、Mythril 等工具只能发现已知漏洞,对于复杂的逻辑漏洞(如业务逻辑缺陷)无能为力。你需要:- 理解工具的检测原理(比如 Slither 如何通过数据流分析发现重入漏洞);
- 定制检测规则(比如针对特定项目的业务逻辑,编写 Slither 插件);
- 不迷信工具结果:工具告警的“高危漏洞”可能是误报,而真正的致命漏洞可能被工具忽略。
- 动态分析与形式化验证的门槛
- 动态分析(如 Echidna、Manticore)需要编写属性测试用例,验证合约是否满足“不变性”(比如“借贷协议的总储备金 = 所有用户存款之和”),这需要掌握形式化验证的思维;
- 形式化验证(如 Certora)是目前最高效的漏洞检测手段,但学习曲线极陡,需要掌握逻辑语言(如 Solidity 断言、TLAPS 语言)。
- 链上数据的分析能力
研究员需要从链上数据中挖掘潜在攻击(比如异常交易、大额转账、合约调用模式),这需要掌握:- 链上数据查询工具(如 Etherscan API、Graph 协议);
- 数据分析技能(Python + Pandas 处理交易数据,识别异常模式)。
四、行业门槛与持续学习的压力
- 行业的“信任背书”门槛
区块链安全是结果导向的行业,初级审计师很难仅凭简历获得信任:- 大厂或审计机构更看重实战成果:比如在 Code4rena、Sherlock 等漏洞赏金平台的排名、提交的漏洞报告、参与过的审计项目;
- 初级岗位竞争激烈,很多团队要求候选人“自带案例”(比如独立发现某个合约的漏洞,并提交详细报告)。
- 技术迭代速度快,需要持续学习
区块链技术的更新速度远超传统安全领域:- 新的公链(如 Aptos、Sui)采用全新的虚拟机(Move 语言),漏洞类型与 EVM 完全不同;
- 新的协议(如 zk-Rollup、账户抽象 ERC-4337)带来新的攻击面(比如 zk 证明的伪造风险、智能账户的权限管理漏洞);
- 新的攻击手段(如 MEV 提取导致的前端攻击、跨链消息伪造)不断涌现,需要你保持对行业动态的敏感度。
- 合规与伦理的边界把握
区块链安全涉及大量资产,需要明确合法合规的边界:- 漏洞挖掘必须遵循“负责任披露”原则,不能利用漏洞盗取资产;
- 参与漏洞赏金计划时,要严格遵守平台规则,避免触碰法律红线;
- 审计报告的撰写需要客观严谨,既不能遗漏高危漏洞,也不能夸大风险导致项目恐慌。
五、从初级审计到研究员的进阶难点
- 初级审计师:能使用工具发现常见漏洞,撰写基础审计报告;
- 资深审计师:能穿透复杂业务逻辑,发现组合漏洞,提出修复方案;
- 安全研究员:能预测新的漏洞类型,提出防御机制,甚至推动行业安全标准的制定。
从初级到研究员的跨越,难点在于从“被动查漏洞”到“主动创造漏洞检测方法”,需要你具备科研能力(比如发表安全论文、提出新的攻击模型)。
总结
对你而言,最大的优势是渗透测试的对抗性思维和漏洞挖掘经验,这是很多纯开发背景的审计师不具备的。你需要突破的难点是:
- 补足 EVM 底层、DeFi 业务逻辑的知识;
- 通过靶场复现、漏洞赏金平台积累实战经验;
- 从“工具使用者”升级为“工具定制者”,提升漏洞挖掘的效率和深度。
这个过程没有捷径,但你的技术背景已经为你铺平了一半的道路。
我可以帮你整理一份区块链安全研究员进阶路线图,涵盖从初级到资深的学习资源、实战平台和能力提升节点,需要吗?
如何深入理解DeFi 业务
要深入理解 DeFi 业务逻辑,核心是从「协议本质」出发,拆解其核心机制、经济模型和风险点,而不是停留在“知道概念”的层面。结合区块链安全审计的视角(你需要理解业务才能发现逻辑漏洞),可以按照「基础认知 → 核心协议拆解 → 实战验证 → 风险建模」的路径逐步深入,以下是具体方法:
一、先建立 DeFi 的底层认知框架
DeFi 的本质是去中心化的金融基础设施,所有协议都是围绕「资产流转、价值定价、风险对冲」三大核心需求设计的。在学习任何 DeFi 协议前,先明确两个底层逻辑:
- DeFi 的核心特征
- 无许可性:任何人都能参与,无需开户/审核(这也是漏洞的温床,比如未授权调用);
- 可编程性:合约代码定义所有规则,没有人工干预(漏洞一旦存在,无法事后补救);
- 组合性(Composability):协议之间可以自由组合(比如 Aave 借贷的资产可以存入 Curve 做流动性挖矿),这会导致风险传导(一个协议漏洞可能波及多个关联协议)。
- DeFi 的核心资产与载体
- ERC20 代币:绝大多数 DeFi 资产的载体,理解
transfer/approve/transferFrom的授权逻辑是基础; - 智能合约账户:用户通过钱包地址与协议交互,权限完全由代码控制;
- 链上数据透明性:所有交易、持仓、资金流向都可在区块链浏览器(如 Etherscan)查询(这是审计和漏洞分析的关键)。
- ERC20 代币:绝大多数 DeFi 资产的载体,理解
二、拆解 DeFi 核心协议的业务逻辑(从简单到复杂)
DeFi 协议种类繁多,但核心只有几大类:借贷协议、DEX(去中心化交易所)、稳定币、流动性挖矿/收益聚合器。学习的关键是不记名词,而是拆解「钱怎么进、怎么赚、怎么出」。
1. 第一步:从「借贷协议」入手(最容易理解业务逻辑)
以 Aave/Compound 为例,这是 DeFi 的基础协议,核心是「存币生息、借币抵押」。
- 核心业务流程拆解
- 存款端:用户存入 ERC20 代币 → 协议铸造对应数量的「计息凭证」(如 Aave 的
aToken)→aToken随时间累积利息(本质是协议将存款出借给借款人,收取利息后分给存款人)。 - 借款端:用户抵押资产(抵押率通常 150%+)→ 借出其他资产 → 支付利息 → 归还借款+利息后赎回抵押品。
- 清算机制:如果借款人的抵押品价值下跌(低于清算阈值),任何人都可以触发清算 → 以折扣价买入抵押品 → 偿还借款人的债务(这是借贷协议的核心风险点,很多漏洞出现在清算逻辑)。
- 存款端:用户存入 ERC20 代币 → 协议铸造对应数量的「计息凭证」(如 Aave 的
- 安全审计视角的关键问题
- 抵押率计算是否准确?(比如是否实时更新价格,价格喂价是否被操纵)
- 清算逻辑是否有漏洞?(比如清算折扣是否可被利用,清算权限是否未授权)
- 计息凭证的铸造/销毁是否与资产余额严格对应?(比如是否存在超额铸造
aToken的情况)
2. 第二步:深入 DEX 的核心机制(重点是「定价逻辑」)
DEX 分为两类:订单簿型(如 0x) 和 AMM(自动做市商,如 Uniswap/Curve),AMM 是主流,核心是「用数学公式定价,替代传统交易所的买卖盘」。
- Uniswap V2 核心业务拆解
- 核心公式:
x * y = k(x 和 y 是交易对的两种代币数量,k 是常数)→ 代币价格由y/x决定,交易时 x 增加则 y 减少,价格自动变化。 - 流动性挖矿:用户存入两种代币做市 → 获得 LP 代币 → 赚取交易手续费 → 赎回 LP 代币时取回本金+手续费。
- 核心公式:
- 安全审计视角的关键问题
- 价格操纵风险:比如通过闪电贷注入大量代币,瞬间改变
x/y的比例,操纵价格后套利(即「闪电贷攻击」的典型场景); - LP 代币的铸造逻辑:是否严格按照存入资产的比例计算,是否存在漏洞导致超额铸造;
- 手续费分配是否公平:是否存在某类账户可以盗取手续费的情况。
- 价格操纵风险:比如通过闪电贷注入大量代币,瞬间改变
3. 第三步:理解复杂协议的组合逻辑(如收益聚合器、跨链桥)
高阶 DeFi 协议(如 Yearn、MakerDAO、跨链桥)的核心是「协议的协议」,业务逻辑更复杂,但本质是对基础协议的组合和优化。
- 以 Yearn 为例:用户存入代币 → Yearn 自动将资产分配到收益最高的借贷/挖矿协议(如 Aave、Curve)→ 赚取的收益再复投 → 最大化用户收益。
- 审计关键:资产转移的权限控制(Yearn 合约是否有权限将用户资产转入其他协议?是否存在权限滥用)、收益计算逻辑(是否存在少算/多算收益的漏洞)。
- 以 MakerDAO 为例:用户抵押 ETH → 铸造稳定币 DAI → DAI 与美元挂钩的核心是「抵押品价值 ≥ DAI 发行量 + 清算惩罚」。
- 审计关键:抵押品定价机制(是否依赖中心化喂价?喂价是否可被操纵)、清算触发条件(是否存在恶意触发清算的漏洞)。
三、实战验证:从「链上数据 + 合约代码」反向推导业务逻辑
理论学习后,必须通过实战拆解真实协议来深化理解,这是审计师的核心技能。具体步骤:
- 选一个简单协议,查链上数据
- 打开 Etherscan,搜索一个主流 DeFi 协议(如 Uniswap V2 工厂合约
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); - 查看「Contract → Read Contract」:调用
getPair函数,输入两个代币地址(如 ETH/USDC),获取交易对合约地址; - 查看交易对合约的「Holders」:看 LP 代币的持有者,理解流动性分布;
- 查看「Transactions」:找一笔 Swap 交易,分析交易的输入输出数据(
input字段),理解swap函数的参数和执行逻辑。
- 打开 Etherscan,搜索一个主流 DeFi 协议(如 Uniswap V2 工厂合约
- 阅读合约代码,映射业务逻辑
- 找到协议的开源代码(如 Uniswap V2 在 GitHub 的仓库);
- 把代码中的函数和链上业务对应起来:比如
swap函数对应「用户兑换代币」的操作,mint函数对应「用户添加流动性」的操作; - 重点关注核心状态变量:比如 Uniswap V2 的
reserve0/reserve1(两种代币的储备量),这直接决定了定价公式x*y=k的执行。
- 用 Damn Vulnerable DeFi 复现业务漏洞
- DVF 中的很多题目都是基于真实 DeFi 协议的简化版(比如
Truster对应闪电贷协议,Puppet对应 Uniswap 价格操纵); - 完成题目时,强制自己思考:这个漏洞是如何利用业务逻辑的?如果是真实协议,如何修复?
- DVF 中的很多题目都是基于真实 DeFi 协议的简化版(比如
四、建立「业务风险建模」思维(审计师的核心能力)
深入理解 DeFi 业务的最终目标,是从业务逻辑中识别潜在的攻击面,而不是单纯的技术漏洞。你需要学会:
- 识别「业务逻辑漏洞」的特征
- 技术漏洞:比如忽略返回值、重入攻击(Slither 等工具可发现);
- 业务逻辑漏洞:比如「闪电贷 + 价格操纵 + 清算」的组合攻击(工具无法发现,必须理解业务才能识别)。
举个例子:某借贷协议允许用户用 LP 代币抵押借款,攻击者可以:
① 用闪电贷借入大量代币,添加流动性获得 LP 代币;
② 用 LP 代币抵押借出协议的平台币;
③ 卖出平台币,砸盘导致 LP 代币价值暴跌;
④ 触发清算,以极低价格赎回 LP 代币,归还闪电贷,赚取差价。
这个攻击的核心是利用「LP 代币抵押率过高 + 价格喂价延迟」的业务缺陷,而非单一技术漏洞。
- 总结不同协议的「高危攻击面」
协议类型 核心业务 高危攻击面 借贷协议 抵押借款 + 清算 价格操纵、清算逻辑漏洞、超额借款 AMM DEX 代币兑换 + LP 挖矿 闪电贷价格操纵、LP 代币铸造漏洞 稳定币 抵押铸造 + 锚定 喂价操纵、抵押品不足、清算失败 跨链桥 资产跨链转移 签名伪造、跨链消息篡改、权限失控
五、持续跟进行业动态,理解业务创新
DeFi 业务的迭代速度极快,新协议(如 LSD、ZK-Rollup 上的 DeFi)会不断带来新的业务逻辑和攻击面。你需要:
- 关注行业媒体:DeFi Llama(看协议锁仓量排名)、Bankless(看深度分析)、慢雾科技(看漏洞分析报告);
- 参与漏洞赏金平台:Code4rena、Sherlock,看真实审计项目的漏洞报告,学习别人如何从业务逻辑中发现漏洞;
- 跟踪新协议的机制:比如 LSD(流动性质押衍生品)的核心是「质押 ETH 获得 LSD 代币,同时继续挖矿」,其攻击面在于「质押资产的托管机制」和「LSD 代币的定价逻辑」。
总结
深入理解 DeFi 业务的关键,是「从业务本质出发,用代码和链上数据验证,以风险建模收尾」。对你而言,结合渗透测试的对抗性思维,重点要关注「业务流程中的权限控制、资产流转的逻辑闭环、经济模型的数学稳定性」——这些才是 DeFi 审计的核心,也是工具无法替代的能力。
我可以帮你整理一份 DeFi 核心协议拆解清单,包含 Uniswap V2、Aave、MakerDAO 的关键合约地址、核心函数和审计重点,需要吗?
深入理解DeFi 业务,有哪些书籍或者资料可以学习
深入理解DeFi业务,可选择体系化的书籍搭建知识框架,再借助权威线上文档、课程和行业报告补充实战与前沿内容。以下是分类型整理的优质学习资料,适配从入门到深入研究的不同需求:
专业书籍
- 《DeFi——开放金融:理论、范式和实践》
这本书由经济学博士刘平等学者编写,内容覆盖极为全面,从分布式记账、去中心化网络等底层技术,到借贷、保险、交易所等DeFi核心应用场景均有涉及。它还专门分析了Uniswap、Compound等主流协议,同时探讨了DeFi的合规架构、治理结构和安全问题,适合想要系统掌握DeFi理论与实践结合的学习者,尤其适合作为深入研究的入门学术类读物。 - 《DeFi与金融的未来》
作者包含坎贝尔·R·哈维等金融与DeFi领域专家,书籍分为7章,既剖析了传统金融体系的痛点以及DeFi的解决方案,也深入探讨了Uniswap、Compound等核心创新协议。它的优势在于打通了传统金融与DeFi的认知壁垒,适合有金融基础、想理解DeFi行业价值与未来趋势的读者。 - 《How to DeFi》系列(含入门版与高级版)
这是CoinGecko团队编写的DeFi经典读物,入门版适合零基础用户快速了解DeFi基础应用,高级版则针对有基础的学习者,深入拆解DEX聚合器、去中心化衍生品、跨链桥等复杂模块,还分析了DeFi漏洞利用场景。其中文版可通过Gitbook在线阅读,内容贴合行业实操,能帮助读者快速对接真实DeFi业务场景。 - 《DeFi for Dummies》
作为“傻瓜书”系列的一员,它以通俗易懂的语言梳理了DeFi的发展历程、核心应用和未来方向。书中涵盖资产管理、借贷、投资等DeFi关键领域,还介绍了在主流平台搭建基础DeFi应用的方法,适合传统金融从业者或新手快速入门,降低理解DeFi的门槛。
线上权威文档与报告
- 主流协议官方文档
深入DeFi业务的核心是理解头部协议的运作逻辑,这些官方文档是最权威的资料:- Uniswap Docs:详细讲解AMM自动做市商机制、流动性池规则、手续费分配等核心业务,是理解DEX的关键资料;
- Aave Docs:聚焦去中心化借贷的抵押机制、计息规则、清算流程等,可掌握DeFi借贷的核心业务逻辑;
- MakerDAO Docs:围绕DAI稳定币的铸造、抵押品管理、去中心化治理等展开,能深入理解算法稳定币的业务原理。
- 行业报告与漏洞分析
- 慢雾科技&派盾漏洞报告:两大区块链安全机构会定期发布DeFi漏洞分析报告,通过真实案例(如闪电贷攻击、合约权限漏洞等),反向推导DeFi业务流程中的风险点,帮助理解业务逻辑与安全的关联性;
- DeFi Llama行业报告:作为DeFi锁仓量数据权威平台,其报告不仅包含数据统计,还会分析各赛道(如借贷、DEX、LSD)的业务创新和趋势,适合跟踪行业动态。
实战向线上课程
- Coursera《Decentralized Finance (DeFi) Primitives》
由《DeFi与金融的未来》作者之一坎贝尔·R·哈维授课,属于“DeFi:金融的未来”专项课程的核心模块。课程深入讲解代币设计、去中心化交易所运作、闪电贷机制等核心业务,包含实操作业,适合想要通过案例和实践深化业务理解的学习者,课程支持多语言字幕,兼顾不同基础用户。 - CSDN DeFi面试题库
这份资料虽为面试导向,但内容涵盖DEX、借贷、稳定币、闪电贷、DAO治理等核心业务模块,还包含“如何防范DeFi清算风险”“流动性池套利原理”等实操性问题。通过梳理题库,能快速掌握DeFi业务的核心考点与关键逻辑,适合巩固业务知识并对接实战场景。
Code4rena是什么
Code4rena(简称C4)是2021年成立的Web3领域社区驱动型智能合约审计平台,2024年8月被收购,凭借创新的竞争性审计模式颠覆了行业,成为众多头部加密货币项目信赖的安全审计解决方案提供商。以下是关于它的核心信息详细介绍:
- 核心运作模式
- 角色分工明确:平台主要涉及三类核心角色,一是安全审计员(Wardens),即注册的安全研究人员,他们通过审计代码寻找漏洞来获取赏金,目前平台注册审计员已超10400名;二是项目发起方(Sponsors),也就是需要进行智能合约审计的加密项目,他们设立赏金池吸引审计员参与;三是评审员(Judges),负责判定漏洞的有效性、严重程度和报告质量,同时评估审计员的表现,保障审计结果的可靠性。
- 竞争性审计流程:项目发起方提出审计需求后,平台会组织大量审计员开展竞争性审计。相比传统审计通常仅2名左右审计人员参与,C4每次审计平均能汇集上百名安全专家。审计结束后,评审员完成风险分类,最终向项目方出具包含漏洞详情、风险等级和修复建议的审计报告,后续还会提供漏洞修复审核等持续支持。
- 核心服务类型
- 竞争性审计:这是其标志性服务,也是颠覆Web3审计行业的核心模式。通过数百名审计员竞争找漏洞的形式,挖掘代码中高严重级别的安全隐患,适配大多数普通项目的审计需求。
- Zenith审计:专门组建业绩优异的顶尖审计团队,为项目提供深度安全分析,适合对安全级别要求极高的重点项目。
- 漏洞修复审核:针对项目方完成漏洞修复后的成果,提供二次审核服务,确保修复方案有效落地,比如Hybra Finance的漏洞修复就曾在该平台进行多轮审核。
- 与传统审计和漏洞赏金计划的差异
对比维度 Code4rena 传统审计 普通漏洞赏金计划 人员规模 上百名审计员参与,视角多元 通常仅少数几名审计人员,能力范围有限 参与人数不确定,缺乏集中组织 激励机制 赏金池明确,审计员有稳定收益预期 审计机构收取固定服务费用,审计人员无额外激励 无固定赏金保障,审计投入与回报不成正比 灵活性 48小时内可启动审计,适配项目快速上线需求 流程固定,等待周期长 无统一启动和推进流程,效率参差不齐 - 行业成果与影响力:截至目前,Code4rena已完成488次审计,累计发现超1365个高危漏洞,各类漏洞相关发现达25152个。众多头部加密协议都选择其进行智能合约审计,其审计模式不仅提升了Web3领域智能合约的审计效率和深度,也为安全研究人员提供了积累实战经验、展现能力的核心平台。
Sherlock是什么
Sherlock 是2021年成立于以太坊链上的Web3领域智能合约全生命周期安全平台,凭借混合审计模式和创新的安全保障机制脱颖而出,还被TechBullion评为2026年最佳Web3智能合约审计公司,深受Aave、以太坊基金会等头部项目信赖。以下是其核心信息的详细介绍:
- 独特的混合审计模式
这是Sherlock区别于多数审计平台的核心优势,它融合了传统专家审计与竞赛式审计的优点。一方面会指派业绩优异的资深安全专家主导项目审计,保障审计的专业性和深度;另一方面会发起审计竞赛,邀请全球数十名安全专家同台竞争找漏洞,借助众包力量挖掘常规审计易遗漏的问题。并且平台会依据过往审计竞赛、协作审计中的表现来动态组建审计团队,针对不同协议的风险特点匹配对应优势的审计人员,比固定团队审计覆盖更全面。此外,2025年9月它还推出了Sherlock AI审计工具,可贯穿开发全流程扫描代码提交和拉取请求,帮助开发人员提前发现漏洞,完善了其全生命周期安全保障体系。 - 多元化核心服务
- 基础审计服务:包含传统定制审计和审计竞赛两种形式。传统审计中会出具详细的漏洞报告,审计竞赛则以赏金激励专家挖掘高危漏洞,像Optimism、Notional等项目都曾通过其审计竞赛发现代码中的特殊问题。
- 财务保障与漏洞赏金:它是业内少有的为审计提供高额赔付保障的平台,若审计遗漏漏洞导致项目遭受攻击,最高可向协议方赔付200万美元。同时还能为项目搭配漏洞赏金计划,且设置了提交押金机制减少无效报告,再通过专家筛选确保仅向项目方传递关键漏洞信息。
- 智能合约保障服务:与常规面向用户的安全保障不同,Sherlock的保障服务直接对接协议方,一旦协议出现漏洞损失,可覆盖所有用户的相关损失,无需用户单独操作,大幅降低了协议方的赔付压力和用户的风险成本。
- 清晰的角色与流程
平台核心涉及三类角色,分别是提供智能合约的项目发起方、参与漏洞挖掘的安全审计专家以及监督赔付流程的第三方机构。流程上,项目方提出审计需求后,平台组建定制化审计团队并发起审计竞赛;审计结束后提交漏洞报告与修复建议;后续若出现遗漏漏洞引发的损失,由第三方机构监督保障金的赔付流程,确保公平公正。 - 行业影响力与优势
其客户涵盖Aave、1inch、Morpho等众多头部DeFi协议和以太坊基金会等机构。相较于传统审计平台,它既解决了固定团队视角局限的问题,又通过财务赔付机制替代单纯的口碑背书,让平台与项目方的利益深度绑定。同时,因前期审计工作扎实,其提供的智能合约保障定价也更具竞争力,还能以低于多数机构单独审计的成本,为项目打包提供审计、百万级保障和高额赏金等一站式服务。
安全的投入产出比是不是太低了,不如solidity开发?
不能简单判定区块链安全领域的投入产出比低于Solidity开发,二者的投入产出逻辑、适用场景和长期价值差异显著。区块链安全的投入更偏向“风险防控”和“长期增值”,Solidity开发则侧重“快速落地”和“短期变现”,以下从多维度对比分析,帮你清晰理解二者的投入产出特点:
- 短期投入与变现速度
- Solidity开发短期投入产出比更占优:Solidity学习曲线相对平缓,语法接近JavaScript,新手借助Remix、Hardhat等成熟工具,短期内就能开发基础合约并完成部署。变现路径也很直接,比如承接NFT铸造、简单DApp开发等外包项目,或入职初创团队做合约开发,国内初级Solidity开发月薪普遍在1万 - 2.5万,能快速实现技能变现。而且项目上线周期短,开发者可快速通过多接项目、迭代产品获得收益。
- 区块链安全短期投入高、变现慢:想从事安全相关工作,除了懂Solidity,还得深入学习EVM底层、密码学、DeFi业务逻辑,以及Slither、Foundry等审计测试工具,甚至要研究大量历史漏洞案例。前期投入的学习成本远超基础Solidity开发。且初级安全岗位少,入门多依赖漏洞赏金平台(如Code4rena)提交报告积累口碑,初期可能投入大量时间却难有回报,短期投入产出比看似较低。
- 长期收益与收入天花板
- Solidity开发收入存在瓶颈,竞争加剧易稀释收益:随着Solidity生态成熟,入门开发者越来越多,基础开发岗位竞争逐渐激烈。普通合约开发的薪资增长会随着技能同质化而放缓,若仅停留在“编写基础合约”层面,很难突破收入天花板。此外,项目迭代中还可能因代码漏洞面临返工,若因漏洞造成资产损失,还需承担相应责任,后期维护成本会逐步增加。
- 区块链安全长期收益更高,增值空间大:安全是区块链的刚性需求,2025年智能合约漏洞导致的资产损失累计已超120亿美元,项目方对安全审计的付费意愿极强。简单合约审计费就达15万 - 30万元,复杂DeFi协议更是高达40万 - 80万元。从薪资看,国外中级区块链安全专家年薪达11万 - 15万美元,高级专家更是超15万美元;国内资深安全审计师薪资也远超同级Solidity开发,还能转型为安全顾问、安全总监,甚至创立审计公司。同时,安全专家的经验越丰富越吃香,随着行业发展,其技能价值会持续提升,不会因技术迭代快速贬值。
- 风险与投入容错率
- Solidity开发风险传导快,容错成本高:Solidity合约一旦部署无法修改,若因代码漏洞(如重入攻击、权限失控)引发安全事故,开发者可能面临项目方索赔、行业口碑崩塌等问题。比如某团队因忽略整数溢出问题,导致合约被攻击,不仅项目搁置,开发者也很长时间难以接到新订单,这种隐性风险会间接降低实际投入产出比。
- 区块链安全以“控风险”为核心,容错率相对高:安全工作的核心是提前排查漏洞,即便初期漏检小漏洞,也可通过后续复盘优化提升能力。而且随着经验积累,漏洞判断准确率会越来越高,失误率会持续降低。此外,安全领域的个人口碑是“正向积累”的,一旦在漏洞赏金平台挖出重大漏洞,或为知名项目完成审计,会快速获得行业认可,后续合作和变现会更顺畅。
- 变现模式的多样性
- Solidity开发变现模式较单一:主要依赖全职岗位薪资、外包项目,或参与项目获得代币激励,变现渠道集中在“代码产出”相关领域。虽然也能通过开发工具、课程变现,但门槛较高,多数开发者难以触及。
- 区块链安全变现模式更丰富:除了全职审计、安全岗位薪资,还能通过漏洞赏金平台赚奖金、为项目提供专项安全咨询、开发安全工具(如漏洞检测插件)、开设安全课程等方式变现。比如资深安全研究员开发的审计工具可对外售卖,安全课程也能持续产生收益,多种变现渠道能进一步提升长期投入产出比。
综上,若追求快速变现,Solidity开发是更优选择;但从长期来看,区块链安全的投入产出比并不低,且随着行业对安全需求的持续增长,其不可替代性和增值空间会远超基础Solidity开发。若你已有渗透测试背景,转型区块链安全,前期积累的对抗性思维还能成为核心优势,长期来看性价比更高。