首页 > 世链号 > 以太坊合约静态分析工具 Slither 简介与使用
币小葱  

以太坊合约静态分析工具 Slither 简介与使用

摘要:以太坊官方推荐的另一款静态智能合约分析工具 Slither。

上篇学习了 Mythril[1],一种动态的以太坊智能合约安全分析工具。今天来看看以太坊官方推荐的另一款静态智能合约分析工具 Slither。

本篇文章不做工具的对比与评测,仅从原理和使用角度阐述。

一、概述

Slither 是一个用 Python 3 编写的智能合约静态分析框架,提供如下功能:

  • 自动化漏洞检测。提供超 30 多项的漏洞检查模型,模型列表详见:https://github.com/crytic/slither#detectors[2]。

  • 自动优化检测。Slither 可以检测编译器遗漏的代码优化项并给出优化建议。

  • 代码理解。Slither 能够绘制合约的继承拓扑图,合约方法调用关系图等,帮助开发者理解代码。

  • 辅助代码审查。用户可以通过 API 与 Slither 进行交互。

二、Slither 运行流程

Slither 的工作方式如下:

  1. 智能合约源码经过 solc 编译后得到 Solidity 抽象语法树(AST)作为 Slither 的输入。

  2. 经过 information recovery (数据整合),Slither 生成合约的继承图,控制流图(CFG)以及合约中函数列表。

  3. 经过 SlithIR 转换,Slither 将合约代码转换为 SlithIR[3],一种内部表示语言,目的是通过简单的 API 实现高精度分析,支持污点和值的跟踪,从而支持检测复杂的模型。

  4. 在代码分析阶段,Slither 运行一组预定义的分析,包括合约中变量、函数的依赖关系;变量的读写和函数的权限控制。

  5. 经过 Slither 的核心处理之后,就可以提供漏洞检测、代码优化检测和代码理解输出等。以太坊合约静态分析工具 Slither 简介与使用

三、使用

3.1 安装

Slither 支持 pip、源码编译和 docker 三种安装方式。pip 安装

  •  
 pip3 install slither-analyzer 

源码编译

 $ git clone https://github.com/crytic/slither.git && cd slither$ python3 setup.py install 

docker 安装

  •  
 docker pull trailofbits/eth-security-toolbox 

在安装时,会有大量的依赖安装,这里建议使用 docker,不容易出错。

docker 安装后运行使用命令:docker run -it -v /Users/aa/go/hide/six-days/blockchain:/contract trailofbits/eth-security-toolbox 其中 -v 是指将本地的磁盘目录映射到容器中。

3.2 合约漏洞检测

检测合约

 pragma solidity ^0.5.0;contract Suicidal{ function kill() public{ selfdestruct(msg.sender); }} 

漏洞分析合约有一个 public 类型的 kill 方法,任何人都能够销毁合约,属于 SWC-106[4] 问题。

运行命令slither overflow_simple_add.sol --solc /usr/bin/solc-v0.5.0 --json res.json 其中:

  • --solc 参考可以指定编译版本。如果不指定的话也可以使用 solc-select 命令设置默认的编译版本,solc-select -l 查看已有的编译版本;solc-select 0.5.0 配置编译版本为 0.5.0。

  • --json 可以指定输出结果为 json

更多命令详见:https://github.com/crytic/slither/wiki/Usage

运行结果以太坊合约静态分析工具 Slither 简介与使用

从结果中可以看到,共从 46 个检测模型中检测出 3 个问题,其中红色的就是合约销毁问题。

3.3 合约继承关系

Slither 有一个功能我很喜欢,对复杂合约的关系梳理特别有帮助,就是输出合约继承关系,使用命令如下。slither evidence/EvidenceVoteSaveHandler.sol --print inheritance-graph 运行结果是一个 dot 格式的关系描述,可以使用 graphviz 工具转成图片格式。下图是一个存证合约的继承关系图。以太坊合约静态分析工具 Slither 简介与使用

四、参考

Slither: A Static Analysis Framework For Smart Contracts[5]

Slither: The Leading Static Analyzer for Smart Contracts[6]

参考资料

[1]

Mythril: https://learnblockchain.cn/article/1283

[2]

https://github.com/crytic/slither#detectorshttps://github.com/crytic/slither#detectors

[3]

SlithIR: https://github.com/crytic/slither/wiki/SlithIR

[4]

SWC-106: https://links.jianshu.com/go?to=https%3A%2F%2Fswcregistry.io%2Fdocs%2FSWC-106

[5]

Slither: A Static Analysis Framework For Smart Contracts: https://arxiv.org/abs/1908.09878

[6]

Slither: The Leading Static Analyzer for Smart Contracts: https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/


本文作者:六天

来源链接:mp.weixin.qq.com

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。