差生文具多,菜鸟琢磨工具多。
Mythril
简介:
Mythril是一个以太坊官方推荐的智能合约安全分析工具,使用符合执行来检测智能合约中的各种安全漏洞。在remix和truffle等IDE里都有集成。
安装:
使用docker方式安装可以省去很多依赖包有问题的情况:
Pull the latest release of mythril/myth docker pull mythril/myth |
使用:
docker run mythril/myth -h docker run -v /Users/aaa/go/src/six-days/ethereum-contracts:/contract mythril/myth analyze /contract/bec.sol --solv 0.4.25 --solver-timeout 60 --execution-timeout 60 -o json -t 3 |
mythril当前只能对单个文件进行检测,检测时需要将合约文件挂载到docker上去检测。
如上诉命令,其中:
solv 是指定solidity编译版本
solver-timeout solidity版本下载超时时间
execution-timeout,执行超时时间
o 输出格式,可选text/markdown/json/jsonv2
t 交易个数
运行结果
运行结果如下图所示,检测出了swc 101漏洞。
2、交易数-t参数
在漏洞检测中,有一个很重要的参数-t(–transaction-count 交易数),有必要单独拿出来说一下。
在执行analyze时,Mythril会在一个特制的EVM虚拟机中执行合约,默认的交易数是2,对于大多数的漏洞(如整数溢出)足矣被发现。
由于每个交易可以具有多个有效的最终状态,在理论上,要探索的状态空间与交易数量成指数关系,交易个数越大,执行时间也越长。Mythril在处理多个交易方面通过分析程序路径在读写状态变量的过程关联关系,可以缩小交易个数。
命令:
analyze (a),分析智能合约 disassemble (d),拆解合约,返回合约对应的Opcodes pro §,使用Mythril 专业版(收费) list-detectors,列出可用的安全检测模型 read-storage,通过rpc读取指定地址的存储插槽 leveldb-search,从本地leveldb中检索 hash-to-address,将hash转换为以太坊地址 version,版本号 |
Ethlint工具:
简介:
一个基于文件感知的智能合约扫描工具,内部解析器仅支持solidity V0.5,这意味着>0.5的版本更新不支持,扫描的结果将会是Syntax error。
中文官方文档:Contents — Solium 1.0.0 documentation
安装:
npm install -g solium
验证:solium -V
npm install -g solium
cd myDapp
solium --init
-
solium -d contracts/
或solium -d .
solium -f myContract.sol
修复代码:
Slither工具:
简介:
Slither是一个用Python 3编写的智能合约静态分析框架(源码),提供如下功能:
自动化漏洞检测。提供超30多项的漏洞检查模型
自动优化检测。Slither可以检测编译器遗漏的代码优化项并给出优化建议。
代码理解。Slither能够绘制合约的继承拓扑图,合约方法调用关系图等,帮助开发者理解代码。
辅助代码审查。用户可以通过API与Slither进行交互。
官方手册及下载:GitHub - crytic/slither: Static Analyzer for Solidity
安装:
docker安装:
docker pull trailofbits/eth-security-toolBox
docker run -it -v /home/share:/share trailofbits/eth-security-toolBox
使用:
slither .
slither tests/uninitialized.sol