Slither – Solidity静态分析框架
Slither是首个开源的Solidity静态分析框架。Slither快速且精确,无需用户干预即可在数秒内发现真实漏洞。它具有高度可定制性,提供一套API用于轻松检查和分析Solidity代码。我们已在所有安全审计中应用该工具,现在您可将其集成至代码审查流程。
我们开源了Slither的核心分析引擎。该核心提供高级静态分析功能,包括具备污点跟踪能力的中间表示(SlithIR),可基于此构建复杂分析(“检测器”)。我们已开发多种检测器,包括检测重入漏洞和自毁合约的模块,并开源部分示例。
如果您是智能合约开发者、安全专家或学术研究人员,Slither将成为不可或缺的工具。立即安装使用:
|
|
为持续集成而构建
Slither提供简洁命令行界面。对Solidity文件运行所有检测器仅需:
|
|
无需配置即可集成至开发流程,每次提交代码时运行以检查是否引入新漏洞。
助力安全审计自动化
Slither提供API通过自定义脚本检查Solidity代码。我们使用该API快速解答代码审查中的独特问题,例如:
- 识别可修改变量值的代码
- 隔离受特定变量值影响的条件逻辑语句
- 发现调用特定函数后间接可达的其他函数
示例脚本展示myContract
中写入状态变量myVar
的函数:
|
|
图1:Slither API示例
阅读API文档和示例以掌握Slither。
辅助合约理解
Slither内置预定义“打印机”显示合约高层信息,包含四个开箱即用的安全信息打印模块:
- 合约摘要打印机:快速展示合约函数及其可见性 图2:合约摘要打印机
- 函数摘要打印机:显示各函数状态变量读写及函数调用信息 图3:函数摘要打印机
- 继承关系打印机:输出合约继承依赖图 图3:函数摘要打印机
- 权限打印机:展示特权用户可执行操作 图4:权限打印机
参阅Slither文档了解自定义打印机方法。
研究基础架构
Slither使用自研中间表示SlithIR构建创新漏洞分析,提供函数CFG访问、合约继承关系检查及Solidity表达式解析能力。相比Oyente或MAIAN等学术工具需自建有限框架,Slither作为通用框架由开源社区持续维护,支持最广泛的安全分析范围。
学术研究者无需重复解析智能合约信息,可直接基于Slither原型创新,加速研究并确保工具可持续性。通过检测器插件可轻松扩展功能,参阅检测器文档开始编写自定义模块。
后续规划
Slither以最小用户交互实现秒级漏洞检测,已全面应用于Solidity安全审计。未来改进包括:
- API增强:开源核心后提供更高效的静态分析框架
- 精密内置分析:为API新增值跟踪等多层信息
- 工具链集成:与Manticore、Echidna和Truffle结合实现问题自动分类
关于API和核心框架问题可加入Empire Hacking Slack。需要集成支持或获取完整检测器集?请联系我们。
本文技术内容基于Trail of Bits博客2018年10月19日发布的原创研究成果