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:函数摘要打印机
-
继承打印机 输出一个图,突出显示所有合约的继承依赖关系:
图4:继承打印机
-
授权打印机 显示具有特权的用户可以在合约上执行的操作:
图5:授权打印机
有关添加您自己的打印机的信息,请参阅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