Slither:第一款针对Solidity的静态分析框架

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

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

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

可自主集成其他功能

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

$slither contract.sol

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

自动化安全审计

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

1、 识别能够修改变量值的代码; 2、 隔离受特定变量值影响的条件逻辑语句; 3、 查找能够调用特定函数的其他函数;

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

#function_writing.pyimport sysfrom slither.slither import Slither iflen(sys.argv) != 2:print('python.pyfunction_writing.py file.sol')exit(-1) #Init slitherslither= Slither(sys.argv[1]) # Getthe contractcontract= slither.get_contract_from_name('myContract') # Getthe variablemyVar= contract.get_state_variable_from_name('myVar') # Getthe functions writing the variablefuncs_writing_myVar= contract.get_functions_writing_to_variable(myVar) #Print the resultprint('Functionsthat write to "myVar": {}'.format([f.name for f infuncs_writing_myVar]))

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

帮助理解智能合约

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

1、 合约摘要printer

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

2、 函数摘要printer

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

3、 继承图printer

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

4、 授权printer

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

大家可以查看一下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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-11-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

QQ三国盗号木马分析报告

近年来网络游戏越来越火,人们充值大量金钱玩一个心爱的游戏已成常态,所以有些游戏账号非常值钱,特别是QQ三国这种每次更新都要氪金的游戏,虽然只剩下部分老玩家在玩,...

15730
来自专栏WindCoder

区块链一键登录:MetaMask教程(One-click Login with Blockchain: A MetaMask Tutorial)

在线用户对传统电子邮件/密码注册流程的抵抗力日益增强。通过Facebook,Google或GitHub的一键式社交登录功能被证明是更理想的选择。然而,它存在一种...

31220
来自专栏北京马哥教育

NoSQL之mongodb我见

NoSQL介绍: NoSQL数据管理系统是目前非常流行的一种非关系性、分布式、不支持ACID设计规范式的数据库;NoSQL简单的数据模型、元数据和数据分离、弱一...

33990
来自专栏腾讯云安全的专栏

你熟悉的Android Root 方式有哪些?|附演示视频

30150
来自专栏区块链大本营

绯闻女孩传八卦也能作为区块链协议?10分钟告诉你为啥

随着比特币等数字加密货币的兴起,区块链技术逐渐升温,霎时间,各种区块链技术落地场景应运而生。但是关于区块链技术本身,“去中心化”、“数据不可篡改”、“数据溯源”...

12420
来自专栏听雨堂

微信小程序中用户唯一ID的获取

折腾到半夜,搞得挺兴奋,总结一下,免得忘了: 1、微信小程序直接获得的是一些简单信息,基本无用 2、用户唯一标识是openid,还有一个unionid是关联多个...

2.9K50
来自专栏java 成神之路

常见黑客渗透测试工具

79930
来自专栏魏艾斯博客www.vpsss.net

更换 sitemap 插件为 Google XML Sitemaps 及相关设置过程

26120
来自专栏FreeBuf

实现一个简单的Burp验证码本地识别插件

为什么要写一个这个东西呢?虽然现在好多大网站都不用图片验证码了,但是仍然有一部分陈旧的web系统用着一些简单的图片验证码。当遇到带有验证码,而验证码的形式又非常...

20140
来自专栏黑白安全

苹果电脑“快速查看”存在漏洞 或可泄密加密数据

一般认为,自十多年前“快速查看”这一功能推出以来,这个安全漏洞就已存在。本月初,安全研究员Wojciech Regula在博客中详细描述了这一安全漏洞。Patr...

8930

扫码关注云+社区

领取腾讯云代金券