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

栏目: IT技术 · 发布时间: 5年前

内容简介:Slither是一款以太坊智能合约静态安全检测工具本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

Slither是一款以太坊智能合约静态安全检测工具

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

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

一、概述

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

  • 自动化漏洞检测。提供超30多项的漏洞检查模型,模型列表详见: https://github.com/crytic/slither#detectors
  • 自动优化检测。Slither可以检测编译器遗漏的代码优化项并给出优化建议。
  • 代码理解。Slither能够绘制合约的继承拓扑图,合约方法调用关系图等,帮助开发者理解代码。
  • 辅助代码审查。用户可以通过API与Slither进行交互。

二、Slither运行流程

Slither的工作方式如下:

  1. 智能合约源码经过solc编译后得到Solidity抽象语法树(AST)作为Slither的输入。
  2. 经过information recovery(数据整合),Slither生成合约的继承图,控制流图(CFG)以及合约中函数列表。
  3. 经过SlithIR转换,Slither将合约代码转换为 SlithIR ,一种内部表示语言,目的是通过简单的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/src/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 问题。

运行命令 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 Slither: The Leading Static Analyzer for Smart Contracts

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

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

一、概述

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

  • 自动化漏洞检测。提供超30多项的漏洞检查模型,模型列表详见: https://github.com/crytic/slither#detectors
  • 自动优化检测。Slither可以检测编译器遗漏的代码优化项并给出优化建议。
  • 代码理解。Slither能够绘制合约的继承拓扑图,合约方法调用关系图等,帮助开发者理解代码。
  • 辅助代码审查。用户可以通过API与Slither进行交互。

二、Slither运行流程

Slither的工作方式如下:

  1. 智能合约源码经过solc编译后得到Solidity抽象语法树(AST)作为Slither的输入。
  2. 经过information recovery(数据整合),Slither生成合约的继承图,控制流图(CFG)以及合约中函数列表。
  3. 经过SlithIR转换,Slither将合约代码转换为 SlithIR ,一种内部表示语言,目的是通过简单的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/src/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 问题。

运行命令 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 Slither: The Leading Static Analyzer for Smart Contracts

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 10分钟前
  • 阅读 ( 5 )
  • 学分 ( 0 )
  • 分类:智能合约

以上所述就是小编给大家介绍的《以太坊合约静态分析工具Slither简介与使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

降维攻击

降维攻击

高德 / 世界图书出版公司 / 2016-3-31 / 39.80元

本书优势: 第一,降维攻击是一个刚开始流行的商业概念,未来随着电影《三体》的上映,这个概念会更加流行,会成为一个全社会的讨论热点。推出这本书,正好借势营销,是一个热点窗口,同时这个概念的商业价值,又符合了时下市场的需求。 第二,这本书的案例和分析,立足于本土,因为降维攻击的思维,很好地表现了国内许多互联网企业崛起的过程,百度,阿里、腾讯、京东等电商的崛起历程都充满了降维的智慧,对于目前......一起来看看 《降维攻击》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器