slither_登链社区

国际新闻新闻 / 来源:登链社区 发布日期:2020-08-06 热度:20C
敬告:本站部分内容转载于网络,若有侵权、侵害您的利益或其他不适宜之处,请联系我们,本站将立即删除。
联系邮箱:2876218132#qq.co m
本页标题:slither_登链社区
本页地址:http://www.hnxw.cc/40051-1.html
相关话题:slither
#slither#以太坊合约静态分析工具Slither简介与使用

文章来源:登链社区
原标题:以太坊合约静态分析工具Slither简介与使用




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



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

一、概述

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

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

Slither的工作方式如下:

智能合约源码经过solc编译后得到Solidity抽象语法树(AST)作为Slither的输入。经过information recovery(数据整合),Slither生成合约的继承图,控制流图(CFG)以及合约中函数列表。经过SlithIR转换,Slither将合约代码转换为SlithIR[3],一种内部表示语言,目的是通过简单的API实现高精度分析,支持污点和值的跟踪,从而支持检测复杂的模型。在代码分析阶段,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[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

运行结果

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

3.3 合约继承关系

Slither有一个功能我很喜欢,对复杂合约的关系梳理特别有帮助,就是输出合约继承关系,使用命令如下。slither evidence/EvidenceVoteSaveHandler.sol --print inheritance-graph运行结果是一个dot格式的关系描述,可以使用graphviz工具转成图片格式。下图是一个存证合约的继承关系图。
四、参考
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#detectors: https://github.com/crytic/slither#detectors
[3]

SlithIR: https://github.com/crytic/slither/wiki/SlithIR
[4]

SWC-106: https://links.jianshu.com/go?to=https://swcregistry.io/docs/SWC-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/


本文作者:六天
作者主页:
https://learnblockchain.cn/people/436



论坛
  阅读原文
支持0次 | 反对0次  
  用户评论区,文明评论,做文明人!

通行证: *邮箱+888(如:123@qq.com888)