Slither:Solidity静态分析框架的技术解析与应用

Slither是首个开源的Solidity静态分析框架,具备高速精准的漏洞检测能力,支持自定义API和中间表示SlithIR,可集成CI流程并自动化安全审计,为智能合约开发与研究提供强大工具支撑。

Slither – Solidity静态分析框架

Slither是首个开源的Solidity静态分析框架。Slither快速且精确,无需用户干预即可在数秒内发现真实漏洞。它具有高度可定制性,提供一套API用于轻松检查和分析Solidity代码。我们已在所有安全审计中应用该工具,现在您可将其集成至代码审查流程。

我们开源了Slither的核心分析引擎。该核心提供高级静态分析功能,包括具备污点跟踪能力的中间表示(SlithIR),可基于此构建复杂分析(“检测器”)。我们已开发多种检测器,包括检测重入漏洞和自毁合约的模块,并开源部分示例。

如果您是智能合约开发者、安全专家或学术研究人员,Slither将成为不可或缺的工具。立即安装使用:

1
pip install slither-analyzer

为持续集成而构建

Slither提供简洁命令行界面。对Solidity文件运行所有检测器仅需:

1
$ slither contract.sol

无需配置即可集成至开发流程,每次提交代码时运行以检查是否引入新漏洞。

助力安全审计自动化

Slither提供API通过自定义脚本检查Solidity代码。我们使用该API快速解答代码审查中的独特问题,例如:

  • 识别可修改变量值的代码
  • 隔离受特定变量值影响的条件逻辑语句
  • 发现调用特定函数后间接可达的其他函数

示例脚本展示myContract中写入状态变量myVar的函数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 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)

slither = Slither(sys.argv[1])
contract = slither.get_contract_from_name('myContract')
myVar = contract.get_state_variable_from_name('myVar')
funcs_writing_myVar = contract.get_functions_writing_to_variable(myVar)
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构建创新漏洞分析,提供函数CFG访问、合约继承关系检查及Solidity表达式解析能力。相比Oyente或MAIAN等学术工具需自建有限框架,Slither作为通用框架由开源社区持续维护,支持最广泛的安全分析范围。

学术研究者无需重复解析智能合约信息,可直接基于Slither原型创新,加速研究并确保工具可持续性。通过检测器插件可轻松扩展功能,参阅检测器文档开始编写自定义模块。

后续规划

Slither以最小用户交互实现秒级漏洞检测,已全面应用于Solidity安全审计。未来改进包括:

  • API增强:开源核心后提供更高效的静态分析框架
  • 精密内置分析:为API新增值跟踪等多层信息
  • 工具链集成:与Manticore、Echidna和Truffle结合实现问题自动分类

关于API和核心框架问题可加入Empire Hacking Slack。需要集成支持或获取完整检测器集?请联系我们。

本文技术内容基于Trail of Bits博客2018年10月19日发布的原创研究成果

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