☰
Slither与Manticore:智能合约安全测试如何快速上手
2026/10/23 2:28:21 网站建设 项目流程

Slither与Manticore:智能合约安全测试如何快速上手

【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publications

Trail of Bits 的 publications 仓库汇总了该公司多年的研究成果,其中 Slither 静态分析框架与 Manticore 符号执行引擎是智能合约测试的两件核心武器。本文面向 Solidity 开发者,基于仓库内的演示文稿、Devcon 4 工作坊与审计发现数据集,梳理"静态扫描+符号执行+测试验证"这条可落地的安全测试路径。

![安全与正确性的交集示意](https://raw.gitcode.com/GitHub_Trending/pu/publications/raw/89940dfbec07ad03b0989e67d78e84250765366b/presentations/Return to the 100 Acre Woods/security-now.png?utm_source=gitcode_repo_files)

图:Trail of Bits 将自身定位在 Security 与 Correctness 两个集合的交集上,安全测试工具正是服务这一目标

三个痛点:为什么需要自动化测试

仓库的datasets/smart_contract_audit_findings/目录保存了 246 条真实审计发现记录,每条都标注了漏洞类型、严重度与利用难度。这份数据说明了三件事:

  • 测试覆盖不足直接放大损失:智能合约部署后不可修改,未测到的分支就是上线后的风险敞口。
  • 人工审查无法覆盖全部分支:data validation(输入校验类缺陷)与 access controls(访问控制类缺陷)在记录中占比最高,靠肉眼极易遗漏。
  • 测试套件本身可能失效:传统覆盖率指标看不见测试盲区,需要额外的验证手段。

功能拆解:两条自动化测试路线

跑通 Slither 静态分析

Slither 是面向 Solidity 的静态分析工具(不运行代码、只读程序结构找问题)。它先把合约转成 SlithIR 中间表示,再做污点追踪与数据依赖分析。2023 年 TrustX 演讲还确认它同时支持 Vyper 合约。

  • 自动漏洞检测:内置一组即取即用的安全检测器,覆盖常见错误模式。
  • 代码审查辅助:内置 printer 输出可读摘要,帮你在审查前快速定位可疑点。
  • 合约理解:中间表示暴露函数、变量与状态依赖关系。
  • 直接分析线上合约:Python API 接受已部署合约地址,无需本地源码。

用 Manticore 做符号执行

Manticore 是符号执行引擎(用符号变量代替具体输入,让引擎沿每个分支同时探索)。仓库中 "Return to the 100 Acre Woods" 演讲用状态搜索图说明了它的行为:

![Manticore 状态搜索示意](https://raw.gitcode.com/GitHub_Trending/pu/publications/raw/89940dfbec07ad03b0989e67d78e84250765366b/presentations/Return to the 100 Acre Woods/statesearch.png?utm_source=gitcode_repo_files)

图:Manticore 沿合约条件分支展开状态,对每个状态(红框)做可行性查询

  • 状态空间探索:遇到分支即 fork,穷举可能路径,自动暴露未测到的输入组合。
  • 属性检查:对执行后的状态写约束(constraint,逻辑断言),判定某类 bug 状态是否可达。
  • 具体反例生成:发现可触发路径后自动生成 testcase,输入值可直接复现。
  • 溢出类缺陷:官方工作坊用它演示了整数溢出的完整检测流程。

用审计发现数据集定位检测重点

datasets/smart_contract_audit_findings/README.md 说明了 CSV 各字段含义。用它做优先级排序比拍脑袋可靠:

  • 类型:漏洞类别,如 reentrancy(重入)、timing(时序依赖)、numerics(数值类)。
  • severity 与 difficulty:影响面与利用难度,两个维度共同决定风险权重。
  • static 与 dynamic 标记:分别表示该缺陷能否被静态分析、动态分析(含自定义属性)检测,是挑选工具的依据。

用变异测试验证测试套件

2025 年 DeFi Security Summit 演讲介绍了 slither-mutate 的变异测试能力:向合约注入微小变异,观察测试是否失败。它能暴露传统覆盖率指标看不见的盲区,用于发现高严重度问题的测试缺口。

四步跑通符号执行

  1. 获取仓库(含工作坊全部练习材料):
git clone https://gitcode.com/GitHub_Trending/pu/publications cd publications/workshops/Using Manticore\ and\ Symbolic\ Execution\ to\ Find\ Smart\ Contracts\ Bugs\ -\ Devcon\ 4
  1. 安装 Manticore(工作坊 README 给出的两种方式,Docker 可免去环境依赖):
pip3 install manticore --user # 或 docker pull trailofbits/manticore
  1. 运行溢出检测练习(exercises/overflow.py核心逻辑,完整版见仓库):
user_account = m.create_account(balance=1000) contract_account = m.solidity_create_contract(source_code, owner=user_account, balance=0) contract_account.add(m.make_symbolic_value()) for state in m.running_states: state.constrain(Operators.UGT(value_0, last_return)) if state.is_feasible(): m.generate_testcase(state, 'OverflowFound')
  1. 验证结果:脚本打印Overflow found!后,到 Manticore 的 workspace 目录打开生成的 testcase,即可复现该溢出路径。

进阶技巧

  1. 写自定义 Slither 检测器:用 Python API 遍历函数节点,检测"转账金额依赖 tx.gasprice"这类敏感数据流,完整示例见 detect.py:
slither = Slither("AlarmClock.sol") for node in func.nodes: for operation in node.irs: if isinstance(operation, Transfer) and is_dependent( operation.call_value, SolidityVariableComposed("tx.gasprice"), func ): print(f"{node.expression} uses tainted input in {func}")
  1. 用 slither-mutate 找盲区:变异测试验证测试套件有效性,重点盯那些能改变高严重度行为却未触发失败的变异点。
  2. 从数据集挑检查项:打开 initial_findings.csv,按 type 与 severity 统计后优先排查 data validation 与 access controls 等高频类别。
  3. 区分静态与动态检测边界:static、dynamic 两列同时为 1 的缺陷(如 reentrancy)优先上符号执行;race condition 类静态检测标记为 0,高危场景仍应保留人工审计。
  4. 集成进 CI:把 Slither 检测器挂到每次提交上,问题在合并前暴露,返工成本最低。

高频问题

Q:Slither 支持 Vyper 吗?
A:支持。Slither a Vyper and Solidity static analyzer(TrustX 2023)专门演示了用 Slither 分析 Vyper 代码库并给出使用建议。

Q:Manticore 装哪个版本?
A:Devcon 4 工作坊 README 推荐 0.2.2,安装方式为pip3 install manticore --user或docker pull trailofbits/manticore,具体参数以官方文档为准。

Q:符号执行状态太多跑不完怎么办?
A:先收缩输入空间——减少make_symbolic_value()调用、把符号值限定到某个函数入口,或对无关输入加约束。工作坊的 manticore_api.pdf 给出了完整 API 用法。

小结

Slither 负责静态扫描圈出可疑路径,Manticore 用符号执行验证运行时行为,slither-mutate 再回头验证测试套件本身,三者构成一个闭环。建议下一步把 Slither 检测器接入 CI 流水线,并深入 Slither 框架论文(SlithIR 设计细节)与 Manticore 论文(符号执行引擎原理),理解工具边界后再做定制化检测。

【免费下载链接】publicationsPublications from Trail of Bits项目地址: https://gitcode.com/GitHub_Trending/pu/publications

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询