freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Slither:第一款针对Solidity的静态分析框架
2018-11-18 15:00:19

Slither是第一个开源的针对Solidity语言的静态分析框架。Slither速度非常快,准确性也非常高,它能够在不需要用户交互的情况下,在几秒钟之内找到真正的漏洞。该工具高度可配置,并且提供了多种API来帮助研究人员审计和分析Solidity代码。

1.png

目前,我们开源了Slither的核心分析引擎,这个核心提供了很多高级静态分析功能。除此之外,我们还构建了很多检测工具。

如果你是一名智能合约的开发者,一名安全专家,或者是一名学术研究人员,你肯定能发现Slither的价值。

可自主集成其他功能

Slither拥有简单的命令行接口,如果你想对一份Solidity文件运行所有的检测工具,你只需要运行:

$slither contract.sol

1.gif

你可以在无需进行任何配置的情况下,将你自己设计的功能整合进Slither,不过你需要确保自己添加的代码不存在漏洞。

自动化安全审计

Slither提供了一个API来给研究人员通过自定义脚本审计Solidity代码。我们可以使用Slither做到:

1、 识别能够修改变量值的代码;

2、 隔离受特定变量值影响的条件逻辑语句;

3、 查找能够调用特定函数的其他函数;

比如说下面这段脚本, myContract的function(s)函数会给状态变量myVar写入值:

#function_writing.py

import sys

from slither.slither import Slither

iflen(sys.argv) != 2:

print('python.pyfunction_writing.py file.sol')

exit(-1)

#Init slither

slither= Slither(sys.argv[1])

# Getthe contract

contract= slither.get_contract_from_name('myContract')

# Getthe variable

myVar= contract.get_state_variable_from_name('myVar')

# Getthe functions writing the variable

funcs_writing_myVar= contract.get_functions_writing_to_variable(myVar)

#Print the result

print('Functionsthat write to "myVar": {}'.format([f.name for f infuncs_writing_myVar]))

大家可以阅读一下【API文档】和【样本代码】来初步了解Slither。

帮助理解智能合约

Slither预定义了一套“printer”,它们可以显示关于智能合约的高级信息,其中包括四个关于安全方面的关键数据:合约摘要、函数摘要、继承图和授权概述。

1、 合约摘要printer

这个printer可以快速显示合约的大致信息,并显示函数和对应的可见度:

2.png

2、 函数摘要printer

显示关于每个函数的信息,例如状态变量、读写操作和函数调用信息:

3.png3、 继承图printer

以图表的形式输出所有合约的继承依赖关系:

4.png4、 授权printer

显示用户对智能合约的操作权限:

5.png

大家可以查看一下Slither的【文档】来了解如何添加自己的printer。

工具安装

Slither要求Python 3.6+、solc和Solidity编译器。

使用pip安装:

$ pip install slither-analyzer

使用Git安装:

$ git clone https://github.com/trailofbits/slither.git && cd slither

$ python setup.py install

工具使用

审计单一文件:

$slither tests/uninitialized.sol # argument can be file, folder or glob, be sureto quote the argument when using a glob

[..]

INFO:Detectors:Uninitializedstate variables in tests/uninitialized.sol, Contract: Uninitialized, Vars:destination, Used in ['transfer']

[..]

如果目标是一个目录的话,它将会审计目录中的每一个.sol文件。

项目地址

GitHub:https://github.com/trailofbits/slither

*参考来源:trailofbits,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

# solidity # Slither
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录