Slither:首个Solidity静态分析框架,快速发现智能合约漏洞

Slither是首个开源的Solidity静态分析框架,能够在数秒内自动检测智能合约漏洞,支持自定义检测器和API集成,提供合约摘要、函数分析等可视化工具,助力开发者和研究人员提升代码安全性。

Slither – Solidity静态分析框架

Slither是首个开源的Solidity静态分析框架。Slither快速且精确;它可以在几秒钟内无需用户干预就发现真实漏洞。它具有高度可定制性,并提供一组API来轻松检查和分析Solidity代码。我们在所有安全审查中都使用它。现在,您可以将其集成到您的代码审查流程中。

我们正在开源Slither的核心分析引擎。该核心提供高级静态分析功能,包括具有污点跟踪能力的中级表示(SlithIR),在此基础上可以构建复杂分析(“检测器”)。我们构建了许多检测器,包括检测重入和自杀合约的检测器。我们开源了一些作为示例。

如果您是智能合约开发者、安全专家或学术研究人员,那么您会发现Slither非常宝贵。立即开始使用:

1
pip install slither-analyzer

为持续集成而构建

Slither具有简单的命令行界面。要在Solidity文件上运行其所有检测器,您只需要:

1
$ slither contract.sol

您可以在没有任何配置的情况下将Slither集成到您的开发流程中。在每次提交时运行它,以检查您是否未引入新错误。

帮助自动化安全审查

Slither提供了一个API,通过自定义脚本检查Solidity代码。我们使用此API快速回答关于我们正在审查的代码的独特问题。我们已使用Slither来:

  • 识别可以修改变量值的代码。
  • 隔离受特定变量值影响的条件逻辑语句。
  • 查找由于调用特定函数而可传递访问的其他函数。

例如,以下脚本将显示myContract中哪些函数写入状态变量myVar

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# function_writing.py
import sys
from slither.slither import Slither

if len(sys.argv) != 2:
    print('python.py function_writing.py file.sol')
    exit(-1)

# Init slither
slither = Slither(sys.argv[1])

# Get the contract
contract = slither.get_contract_from_name('myContract')

# Get the variable
myVar = contract.get_state_variable_from_name('myVar')

# Get the functions writing the variable
funcs_writing_myVar = contract.get_functions_writing_to_variable(myVar)

# Print the result
print('Functions that write to "myVar": {}'.format([f.name for f in funcs_writing_myVar]))

图1:Slither API示例

阅读API文档和示例以开始利用Slither。

帮助理解合约

Slither附带一组预定义的“打印机”,显示关于合约的高级信息。我们包含了四个开箱即用的打印机,用于打印基本安全信息:合约摘要、函数摘要、继承图和授权概述。

  1. 合约摘要打印机 提供合约的快速摘要,显示函数及其可见性:

    图2:合约摘要打印机

  2. 函数摘要打印机 显示每个函数的有用信息,例如读取和写入的状态变量,或调用的函数:

    图3:函数摘要打印机

  3. 继承打印机 输出一个图,突出显示所有合约的继承依赖关系:

    图4:继承打印机

  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

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计