以太坊安全分析工具Mythril简介与使用

2020-07-23 13:12 栏目:经验之谈 来源:网络整理 查看()

1.什么是神话

Mythril是一个由Ethereum官方推荐的智能合同安全分析工具,它使用合规性执行来检测智能合同中的各种安全漏洞,并集成在集成开发环境中,如Remix和块菌。它包含以下安全分析模型。

SWC是一个弱安全情报合同分类和相应的案例,https://swcregistry.io/[1]

以太坊安全分析工具Mythril简介与使用

第二,安装神话

Mythril由python开发,可以由pip3和docker安装。

1.苹果操作系统安装

brew更新

brew升级

brew tap ethereum/ethereum

brew安装级别db

brew install solidity

pip3安装mythril

2.pip3-Ubuntu安装

#更新

sudo apt更新

#安装solc

sudo apt安装软件-属性-通用

sudo add-apt-repository PP : ether eum/ether eum

sudo apt安装solc

#安装libssl-dev、python3-dev和python3-pip

sudo apt安装libssl-dev python 3-dev python 3-pip

#安装mythril

pip3安装mythril

神话版本

3.码头安装

#拉最新发布的神话/神话

码头工人拉神话/神话

Iii .神话的使用

成功安装Mythril后,使用神话-h命令查看帮助文档。我在这里用docker安装了它,检查帮助的命令是docker运行mythril/神话-h。

1.神话指挥

通过帮助命令,您可以看到Mythril的命令是:

分析(a),分析智能合同

分解(d),分解合同并返回合同对应的操作码

专业版(p),使用Mythril专业版(收费)

列表检测器,列出了可用的安全检测模型

读存储,通过rpc读取指定地址的存储槽

Leveldb-搜索,从本地level db检索

函数到散列,计算合同方法的函数识别码

哈希到地址,将哈希转换为以太网地址

版本,版本号

这里,以一个简单的整数溢出契约为例,执行analyze check命令,看看是否可以检测到整数溢出问题。合同的地址是https://swcregistry.io/docs/SWC-101 #溢出_简单_地址[16]

漏洞分析漏洞是一个加法整数溢出问题。在加法中,初始余额=1,存款的输入值为uint256 2**256-1的最大值,计算出的余额为0

pragma稠度0 . 4 . 24;

合同溢出_添加

uint公共余额=1;

函数add(uint256存款)public {

余额=存款。

{}

{}

运行命令

docker run-v/Users/AAA/go/src/六天/ether eum-contract 3360/contract mythril/神话分析/contract/bec . sol-solv 0 . 4 . 25-solver-time out 60-execution-time out 60-o JSON-T3

其中:

Solv是指定的实体编译版本

求解器-超时坚固性版本下载超时

执行超时,执行超时

o输出格式,可选文本/减价/json/jsonv2

交易次数

运行结果运行结果如下图所示,检测到swc 101的漏洞。

以太坊安全分析工具Mythril简介与使用

2.交易编号-t参数

在漏洞检测中,有一个非常重要的参数-t (-t(-交易计数交易号),因此有必要单独取出它。在执行分析时,Mythril将在一个特殊的EVM虚拟机中执行合同,默认事务号为2,这足以发现大多数漏洞(如整数溢出)。

由于每个事务可以有多个有效的最终状态,理论上,要探索的状态空间与事务数量成指数关系,并且事务数量越大,执行时间越长。Mythril可以通过分析程序路径和读写状态变量之间的关系来减少事务的数量。

例如,Mythril正式提供的KillBilly合同示例。代码如下(源代码来自:https://gist . github.com/b-mueller/2b 251297 ce 88 aa 7628680 f 50 f 177 a 81 a # file-killely-sol[17])。

务实稳健的^0.5.7;

合同KillBilly {

布尔公共是可杀的;

映射(地址=bool)公共批准的杀手;

构造函数()公共{

is _ killable=false

{}

函数killize(addr)public {

approved _ killers[addr]=true;

{}

function activatekillability()public {

要求(批准的杀手[msg . sender]==true);

is _ killable=true

{}

函数commencekilling()公共{

需要(is _ kill able);

`

自毁(msg . sender);

{}

{}

为了破坏契约,我们需要调用killerize方法来授权调用方,然后调用activatekillability方法,将is_killable变量设置为true,最后调用commencekilling方法来使用契约。也就是说,为了检测由不适当的访问控制导致的合同破坏(SWC-106)漏洞,至少需要执行三个事务。

指定事务的数量为2

文件运行-v/用户/AAA/go/src/六天/区块链:/合同神话/神话a/合同/killbilly.sol -t 2

运行结果如下。

以太坊安全分析工具Mythril简介与使用

指定事务的数量为3

文件运行-v/用户/AAA/go/src/六天/区块链:/合同神话/神话a/合同/killbilly.sol -t 3

运行结果如下。

以太坊安全分析工具Mythril简介与使用

可以看出,此时已经发现了swc 106的漏洞。

三.摘要

自以太网诞生以来,智能合同的安全问题层出不穷,给项目方和用户带来了巨大的损失。Mythril安全检查工具可以有效检测SWC的一些安全漏洞,为智能合同的安全提供了安全保障。当使用Mythril工具时,请记住该工具不是万能的,而且Mythril很难检测到一些隐藏的漏洞或复杂的测试用例。例如,BEC著名的ERC20合同https://SWC Registry.io/docs/SWC-101 # bectokensol[18]造成整数溢出,Mythril没有检测到溢出漏洞。

四.参考

https://github.com/Consensys/mythril[19]

https://mythril-classic . read docs . io/en/master/[20]

https://swcregistry.io/[21]

https://medium.com/hackernoon/practic-smart-contract-security-analysis-and-exploitation-part-1-6 c2f 2320 b0c[22]

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发