漏洞
重入攻击 Reentrancy
利用外部合约在 fallback 中重新调用原函数。历史上最著名的 The DAO 事件便因重入漏洞导致约 6000 万美元 ETH 被盗,最终造成以太坊社区分裂(形成 ETH/ETC 链)。
防护方法:先更新状态,再转账。
|
|
预言机操纵 Oracle Manipulation
依赖外部价格源的不可信更新。
解决方法:
-
使用 Chainlink 等权威价格源。
-
增加时序约束和多源验证。
-
使用 TWAP 等加权算法。
整数溢出/下溢
使用 unchecked {} 时需确保逻辑安全。
推荐使用 Solidity 0.8+ 的内建溢出检查或 SafeMath。
权限控制缺失
所有管理函数应使用 onlyOwner 或 AccessControl 修饰符保护。
未初始化代理
基于代理模式的合约若未正确执行初始化函数,可能被任意人初始化并接管合约。
著名的例子包括 Harvest Finance 其在使用 Uniswap V3 做市策略的 Vault 合约中存在未初始化漏洞,如果被利用攻击者可销毁实现合约。该团队曾为此漏洞支付高额赏金修复。
前置交易/三明治攻击
攻击者在交易执行前后分别发送交易,以不利滑点或套利为目的。
合约审计工具
-
Slither:以 Python 编写的静态分析工具,可检测安全漏洞和代码规范问题。常用命令为 slither MyContract.sol(也可指定合约地址)来扫描合约代码
-
MythX:基于云平台的安全分析服务,支持命令行和 API 调用。使用 CLI 时,可执行类似 mythx analyze MyContract.sol 进行安全扫描
-
Foundry:高效的 Solidity 开发测试框架,支持属性测试(模糊测试)。可使用 forge test 运行所有测试
Foundry 模糊测试文档,或通过 forge test –match-path <test 文件路径> 定向运行特定测试文件。
审计流程
-
静态分析(Static Analysis):使用工具如 Slither、Mythril 扫描代码缺陷。
-
动态测试(Fuzzing/Property Testing):模拟攻击行为和极限条件。
-
人工审查(Manual Review):由资深审计员检查业务逻辑漏洞。
-
审计报告生成(Audit Report):明确发现的问题及修复建议。