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. 继承打印机 输出突出显示所有合约继承依赖关系的图: 图3:函数摘要打印机

  4. 授权打印机 显示具有特权的用户可在合约上执行的操作: 图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

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