01.slither简介与安装
01.slither简介与安装
1.什么是slither
Slither 是 Solidity 的第一个开源静态分析框架。 Slither 基于python开发,它可以无需用户干预的情况下在几秒钟内找到真正的漏洞。它是高度可定制化
的,并提供一组 API接口
来轻松检查和分析 Solidity 代码。在智能全约的安全审查中经常使用它,现在您可以将它集成到自己的代码审查系统中。
目前 Slither 已经开源
了核心分析引擎。该核心提供高级静态分析
功能,包括具有污点跟踪
功能的中间表示 (SlithIR),可以在其上构建复杂的检测器。默认系统中包含了许多检测器(如已经包含了检测重入和自杀合约的检测器)。
主要特征是:
- 可定制化,API接口
- 开源,检测器多
- 静态分析和污点跟踪
Slither 的工作原理
- 它以 Solidity 编译器生成的 Solidity 抽象语法树 (AST) 作为初始输入。
- 然后它会生成重要信息,例如合约的
继承图
、控制流图 (CFG)
以及合约中所有表达式
的列表。 - Slither 然后将合约的代码翻译成 SlithIR,这是一种内部表示语言,可以更轻松地编写精确和准确的分析。
- Slither 运行一组预定义的分析,为其他模块(例如,计算数据流、受保护的函数调用等)提供增强的信息。
性能优势
官方使用重入检测器对 Etherscan 提供源代码的一千个最常用的合约(交易数量最多的合约)进行了实验(每个合约最多执行120秒),对主流的几款检测工具,得到的结果如下:
不管从准确性,性能,健壮性等方面,slither都比较优秀。
可以参考https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/
slither不足
SlithIR 仍然存在一些局限性并且有改进的空间。主要的不足有:
- 缺乏形式语义。形式语义会可以带来更严谨的分析方法。
- 支持高级表达式从而无法准确反映低级信息,例如无法评估 gas 的消耗等。
2.mac下slither安装
安装brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
brew upgrade
brew tap ethereum/ethereum
brew install solidity
brew linkapps solidity
安装solc-select****
pip3 install solc-select
# 使用0.4.24版本
solc-select use 0.4.24
# 打印所有可用的版本
solc-select install
# 安装0.8.1版本
solc-select install 0.8.1
安装slither
Using Pip
pip3 install slither-analyzer
Using Git
git clone https://github.com/crytic/slither.git && cd slither
python3 setup.py install
3.slither的目录结构
├── analyses # 提供附加信息,例如数据依赖性分析,evm合约、函数、节点的分析等。
├── core # 把各类东西联系在一起
├── detectors # 检测器。各种检测规则
├── slither.py # 入口脚本
├── slithir # 包含 slither 的中间表示的语义
├── solc_parsing #负责解析solc AST(抽象语法树)
├── tools # 建立在 slither 之上的各种工具
├── visitors # 解析表达式并转换为 slithir
└── ...
4. slither中常用的概念
SlitherIR
什么是IR
在语言设计中,编译器通常对一种语言的“中间表示”(IR)
进行操作,在这种中间语言中可以看到程序解析时额外细节。 https://github.com/crytic/slither/wiki/SlithIR
Slither 将 Solidity 转换为中间表示 SlithIR
,以通过简单的 API 实现高精度分析。它支持污点
和变量
跟踪,以实现复杂模式的检测。
SlithIR 虽然今天可用,但它仍在不断的完善中。 SlithIR 的发展需求也多来自新的检测器模块
。
SlithIR是一种中间语言表示,Slither通过使用自己的中间表示 SlithIR 在 Solidity 上构建创新的漏洞分析。它的主要能力有:
- 访问函数的 CFG
- 合约的继承
- 提供检查 Solidity 表达式的能力。
CFG
控制流图(CFG)是一种常见的代码表示。 顾名思义,它是一种基于图的表示方法,展现了所有的代码执行路径。 每个节点(node)包含一条或多条指令
。边代表控制流操作(if/then/else,循环,等等。
大多数的代码分析技术都是建立在 CFG 的基础表示之上。
参考
slither静态分析功能
https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。