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

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

内容简介: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简介与使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Web Form Design

Web Form Design

Luke Wroblewski / Rosenfeld Media / 2008-5-2 / GBP 25.00

Forms make or break the most crucial online interactions: checkout, registration, and any task requiring information entry. In Web Form Design, Luke Wroblewski draws on original research, his consider......一起来看看 《Web Form Design》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具