01.slither简介与安装

  • 小驹
  • 更新于 2023-06-28 15:15
  • 阅读 1891

Slither基于python开发,它可以无需用户干预的情况下在几秒钟内找到真正的漏洞。它是高度可定制化的,并提供一组API接口来轻松检查和分析Solidity代码。

01.slither简介与安装

1.什么是slither

Slither 是 Solidity 的第一个开源静态分析框架。 Slither 基于python开发,它可以无需用户干预的情况下在几秒钟内找到真正的漏洞。它是高度可定制化的,并提供一组 API接口 来轻松检查和分析 Solidity 代码。在智能全约的安全审查中经常使用它,现在您可以将它集成到自己的代码审查系统中。

目前 Slither 已经开源了核心分析引擎。该核心提供高级静态分析功能,包括具有污点跟踪功能的中间表示 (SlithIR),可以在其上构建复杂的检测器。默认系统中包含了许多检测器(如已经包含了检测重入和自杀合约的检测器)。

主要特征是:

  • 可定制化,API接口
  • 开源,检测器多
  • 静态分析和污点跟踪

Slither 的工作原理

  1. 它以 Solidity 编译器生成的 Solidity 抽象语法树 (AST) 作为初始输入。
  2. 然后它会生成重要信息,例如合约的继承图控制流图 (CFG) 以及合约中所有表达式的列表。
  3. Slither 然后将合约的代码翻译成 SlithIR,这是一种内部表示语言,可以更轻松地编写精确和准确的分析。
  4. Slither 运行一组预定义的分析,为其他模块(例如,计算数据流、受保护的函数调用等)提供增强的信息。

image.png

性能优势

官方使用重入检测器对 Etherscan 提供源代码的一千个最常用的合约(交易数量最多的合约)进行了实验(每个合约最多执行120秒),对主流的几款检测工具,得到的结果如下:

不管从准确性,性能,健壮性等方面,slither都比较优秀。

image.png

可以参考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/

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

1 条评论

请先 登录 后评论
小驹
小驹
0xcD46...3461
weixin: xiaoju521区块链安全分析,欢迎私信沟通交流