Slither基于python开发,它可以无需用户干预的情况下在几秒钟内找到真正的漏洞。它是高度可定制化的,并提供一组API接口来轻松检查和分析Solidity代码。
Slither 是 Solidity 的第一个开源静态分析框架。 Slither 基于python开发,它可以无需用户干预的情况下在几秒钟内找到真正的漏洞。它是高度可定制化
的,并提供一组 API接口
来轻松检查和分析 Solidity 代码。在智能全约的安全审查中经常使用它,现在您可以将它集成到自己的代码审查系统中。
目前 Slither 已经开源
了核心分析引擎。该核心提供高级静态分析
功能,包括具有污点跟踪
功能的中间表示 (SlithIR),可以在其上构建复杂的检测器。默认系统中包含了许多检测器(如已经包含了检测重入和自杀合约的检测器)。
主要特征是:
继承图
、控制流图 (CFG)
以及合约中所有表达式
的列表。 官方使用重入检测器对 Etherscan 提供源代码的一千个最常用的合约(交易数量最多的合约)进行了实验(每个合约最多执行120秒),对主流的几款检测工具,得到的结果如下:
不管从准确性,性能,健壮性等方面,slither都比较优秀。
可以参考https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/
SlithIR 仍然存在一些局限性并且有改进的空间。主要的不足有:
/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
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
Using Pip
pip3 install slither-analyzer
Using Git
git clone https://github.com/crytic/slither.git && cd slither
python3 setup.py install
├── analyses # 提供附加信息,例如数据依赖性分析,evm合约、函数、节点的分析等。
├── core # 把各类东西联系在一起
├── detectors # 检测器。各种检测规则
├── slither.py # 入口脚本
├── slithir # 包含 slither 的中间表示的语义
├── solc_parsing #负责解析solc AST(抽象语法树)
├── tools # 建立在 slither 之上的各种工具
├── visitors # 解析表达式并转换为 slithir
└── ...
什么是IR
在语言设计中,编译器通常对一种语言的“中间表示”(IR)
进行操作,在这种中间语言中可以看到程序解析时额外细节。
https://github.com/crytic/slither/wiki/SlithIR
Slither 将 Solidity 转换为中间表示 SlithIR
,以通过简单的 API 实现高精度分析。它支持污点
和变量
跟踪,以实现复杂模式的检测。
SlithIR 虽然今天可用,但它仍在不断的完善中。 SlithIR 的发展需求也多来自新的检测器模块
。
SlithIR是一种中间语言表示,Slither通过使用自己的中间表示 SlithIR 在 Solidity 上构建创新的漏洞分析。它的主要能力有:
控制流图(CFG)是一种常见的代码表示。 顾名思义,它是一种基于图的表示方法,展现了所有的代码执行路径。 每个节点(node)包含一条或多条指令
。边代表控制流操作(if/then/else,循环,等等。
大多数的代码分析技术都是建立在 CFG 的基础表示之上。
slither静态分析功能
https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!