Slither – Solidity静态分析框架
Slither是首个开源的Solidity静态分析框架。Slither快速且精确;它能在几秒钟内无需用户干预即可发现真实漏洞。它具有高度可定制性,并提供一组API来轻松检查和分析Solidity代码。我们在所有安全审计中都使用它。现在您可将其集成到代码审查流程中。
我们开源了Slither的核心分析引擎。该核心提供高级静态分析功能,包括具有污点跟踪能力的中间表示(SlithIR),可在此基础上构建复杂分析(“检测器”)。我们已构建许多检测器,包括检测重入和自杀合约的检测器。我们开源部分检测器作为示例。
如果您是智能合约开发者、安全专家或学术研究人员,您会发现Slither非常宝贵。立即开始使用:
|
|
为持续集成而构建
Slither具有简单的命令行界面。要在Solidity文件上运行所有检测器,只需:
|
|
您无需任何配置即可将Slither集成到开发流程中。每次提交时运行它,以检查是否添加了新错误。
帮助自动化安全审查
Slither提供API通过自定义脚本检查Solidity代码。我们使用此API快速回答关于正在审查代码的独特问题。我们已使用Slither:
- 识别可修改变量值的代码。
- 隔离受特定变量值影响的条件逻辑语句。
- 查找因调用特定函数而可传递到达的其他函数。
例如,以下脚本将显示myContract
中哪些函数写入状态变量myVar
:
|
|
图1:Slither API示例
阅读API文档和示例以开始利用Slither。
辅助理解合约
Slither附带一组预定义的“打印机”,显示合约的高级信息。我们包含四个开箱即用的打印机,以打印基本安全信息:合约摘要、函数摘要、继承图和授权概述。
-
合约摘要打印机 提供合约的快速摘要,显示函数及其可见性: 图2:合约摘要打印机
-
函数摘要打印机 显示每个函数的有用信息,如读取和写入的状态变量,或调用的函数: 图3:函数摘要打印机
-
继承打印机 输出突出显示所有合约继承依赖关系的图: 图3:函数摘要打印机
-
授权打印机 显示具有特权的用户可在合约上执行的操作: 图4:授权打印机
有关添加自定义打印机的信息,请参阅Slither文档。
研究基础
Slither使用自己的中间表示SlithIR,在Solidity上构建创新漏洞分析。它提供对函数CFG、合约继承的访问,并允许您检查Solidity表达式。
许多学术工具,如Oyente或MAIAN,在发布时推动了技术发展。然而,每个学术团队必须发明自己的框架,仅为其特定兴趣领域构建。维护很快成为挑战。相比之下,Slither是一个通用框架。因为它能够进行最广泛的安全分析,它由我们的开源社区定期维护和使用。
如果您是学术研究人员,不要花费时间和精力解析和从智能合约中恢复信息。在Slither之上原型化您的创新,更快完成研究,并确保其长期保持实用性。
使用新的检测器插件轻松扩展Slither功能。阅读检测器文档以开始编写自己的检测器。
下一步
Slither可在几秒钟内以最少或无用户交互发现真实漏洞。我们在所有Solidity安全审查中使用它。您也应该使用!
我们许多进行中的项目将改进Slither,包括:
- API增强:既然我们已开源核心,我们打算提供最有效的静态分析框架。
- 更精确的内置分析:我们计划使API可访问多个新信息层,如值跟踪。
- 工具链集成:我们计划将Slither与Manticore、Echidna和Truffle结合,以自动化问题分类。
关于Slither的API及其核心框架的问题?加入Empire Hacking Slack。需要帮助将Slither集成到开发流程中?想要访问我们的完整检测器集?联系我们。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News