智能合约安全审计 | 环境搭建

智能合约安全审计 | 环境搭建

工欲善其事必先利其器,只有知道怎么搭建智能合约安全漏洞实战练习的环境,才能更好的进行合约漏洞的复盘。

本文主要介绍在进行以太坊智能合约安全漏洞实验演练时需要的工具和环境,方便后续漏洞实战操作。

阅读本文前,你应该对区块链、以太坊、智能合约有所了解。本文在第一部分简单快速介绍一下相关内容。

基础知识复习

快速了解区块链

区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

简单地说,区块链就是一种去中心化的分布式账本数据库。

区块链网络传递的是价值信息,解决的是信任问题。

1.png
什么是以太坊

以太坊(Ethereum)是一个建立在区块链技术之上的去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。

以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,只要专注于开发应用本身逻辑的智能合约,这样就可以大大降低开发难度。

以太坊与比特币很大的不同是以太坊拥有智能合约的概念。比特币是数字货币 - 价值存储,而以太坊不单单是数字货币,还支持智能合约。

如果想更深入地了解什么是以太坊,还可以参考另一篇文章:以太坊是什么 - 以太坊开发入门指南(https://learnblockchain.cn/2017/11/20/whatiseth/)

什么是智能合约

那么什么是智能合约呢?以太坊网络上运行程序就称之为智能合约, 它和其他的程序一样,也是代码和数据(状态)的集合。

2.png

智能合约是由事件驱动的、具有状态的、运行在一个可复制的、共享的账本之上的计算机程序,当满足特定条件时,智能合约会自动执行。合约一旦部署不可修改、合约执行后不可逆、所有执行事务可追踪。

智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。

区块链是去中心化的系统,存在于所有允许的各方之间,智能合约消除了传统的系统中对导致各方冲突的中间商的需要。

3.png

如果想更深入地了解智能合约原理,还可以参考另一篇文章:智能合约运行原理(https://learnblockchain.cn/2018/01/04/understanding-smart-contracts/)

智能合约安全漏洞实战环境搭建

目前开发智能合约的IDE,首推还是Remix,Remix是以太坊智能合约编程语言Solidity的一个基于浏览器的IDE,强烈建议新手使用Remix在线IDE(https://remix.ethereum.org/)来进行开发,不用本地安装Solidity。

如果想自己本地搭建开发环境,可以看另一篇文章: 搭建智能合约开发环境Remix IDE及使用(https://learnblockchain.cn/2018/06/07/remix-ide/)。

我们在进行智能合约的安全漏洞实战过程中,需要开发测试,如果通过Remix在线IDE来进行的话,根据 Remix IDE 的 Environment 选项不同,有不同的方法,如下图所示:

5.png

Remix IDE 的 Environment 选项有三种:

  • Javascript VM,这个Remix内置的虚拟机,提供了合约部署、运行的功能,跟以太坊虚拟机功能一样的,这个相当于在内存中模拟了一条区块链,如果选择Javascript VM模式,可对合约进行debug调试;
  • Injected Web3,主要是通过插件使用,配合metamask可方便部署智能合约到以太坊测试网或者主网;
  • Web3 Provider,将Remix连接指定的以太坊节点,比如通过本地通过安装以太坊客户端geth搭建的私有链节点。

下面分别从上述三种模式对智能合约的安全漏洞实战环境搭建进行讲解,以方便后续对智能合约漏洞进行实战练习。

本文所使用的Solidity开发也将基于在线Remix IDE来进行。

Javascript VM

Javascript VM模式,也是最简单的方式,可以直接使用在线Remix IDE来进行智能合约的开发、编译、部署、调用、测试、调试等,很适合入门选手进行练习,如下图所示:


4.png

具体的Remix IDE使用这里不在赘述,可移步Remix官方文档
https://remix-ide.readthedocs.io/en/latest/#

Injected Web3

Injected Web3,主要是通过插件使用,配合metamask可方便部署智能合约到以太坊测试网或者主网。

在这种模式下,可以使用remix + metamask + myetherwallet的模式开发部署智能合约,这种方法最简单也最常用;还可以使用Truffle + Infura这种工程化的高级开发部署方法。

Remix(http://remix.ethereum.org)不用介绍了;

MetaMask(https://www.metamask.io)是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便,Metamask详细图文教程:https://www.jianshu.com/p/7ea707978dc5

MyEtherWallet(https://www.myetherwallet.com)或简称MEW钱包,是最有名的以太钱包之一,MEW钱包是一个基于网络的服务,允许您控制您的资金。它用于安全地存储、发送和接收以太和ERC-20代币,以及用于与智能合同进行交互。该服务为其用户提供了一个地址(公共地址),用户可以在此接收任何人的硬币和代币。它还为用户提供了一种通过私钥(秘密密码)发送硬币的快捷方式。

Infura(https://infura.io/)就是一个可以让你的dApp快速接入以太坊的平台,不需要本地运行以太坊节点,背后是负载均衡的API节点集群。使用它的好处就是,你永远不必担心连接的节点失效的问题,Infura会管理好这一切。

Truffle(https://www.trufflesuite.com)是针对基于以太坊的Solidity语言的一套开发框架。本身基于Javascript。对以太坊客户端做了深度集成,开发,测试,部署一行命令都可以搞定。Truffle - 以太坊Solidity编程语言开发框架使用指南(https://truffle.tryblockchain.org/index.html)

下面介绍如何通过remix + metamask + myetherwallte这种简单的方法开发、部署、调用合约,开始之前请自行安装好Metamask钱包插件到浏览器。

这里使用简单的测试用Solidity智能合约:

pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData;
    function set(uint x) public {
        storedData = x;
    }
    
    function get() public constant returns (uint) {
        return storedData;
    }
}

将合约写入Remix IDE编辑器中,并完成编译。

6.png

然后在Metamask中选择测试网络,并申请测试ETH,因为在我们部署合约到以太网测试网时也需要测试ETH手续费,部署到以太坊主网就得真正的花真金白银ETH了。

7.png

在测试网中申请测试ETH

8.png

然后通过Remix IDE点击部署,此时弹出Metamask交易确认,看到了是需要花费测试ETH的。

10.png

部署成功后,可以在Remix IDE的console窗口看到我们在测试网的交易hash,以及我们的合约。

11.png

此时可以通过Remix IDE直接调用已经部署的合约,也可以通过myetherwallet来调用任意合约,进入myetherwallet网站之后,需要选择跟myetherwallet进行交互的方式,这里我们选择Metamask,然后myetherwallet就会和Metamask建立连接。

9.png

我们输入部署之后的合约地址,再输入合约的ABI,然后就可以直接调用我们部署的合约。


12.png

调用合约,如图所示,我们设置一个x值为2,然后获取x的值,返回结果为2。

13.png

14.png
Web3 Provider

Web3 Provider,将Remix连接指定的以太坊节点,比如通过本地安装以太坊客户端geth搭建的私有链节点。

Geth是典型的开发以太坊时使用的客户端,基于Go语言开发。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。

安装完以后,把geth控制台启动,通过如下命令进入:

geth --datadir testNet --dev console 2>> test.log

执行命名后,会进入geth控制台:

open_geth_eth.jpg

然后创建账户,解锁账户,编写合约,编译合约,从编译详情中拷贝WEB3DEPLOY中的内容,通过修改相关信息后进入geth客户端执行,进行合约部署。

15.png

部署成功即可直接在geth控制台进行合约调用,整个部署和调用过程确保账户中有余额。更多详细过程请见另一篇文章:使用remix+geth开发部署智能合约(https://learnblockchain.cn/2017/11/24/init-env/)

磨刀不误砍柴工,先了解清楚基础知识,才能更好的了解智能合约,以及智能合约的安全问题。

工欲善其事必先利其器,只有知道怎么搭建智能合约安全漏洞实战练习的环境,才能更好的进行合约漏洞的复盘。

本篇文章为以太坊智能合约安全漏洞实战的前奏文章,敬请期待后续的智能合约安全漏洞实战详情文章。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容

  • 上期《众说区块链》讨论的主题是“数字货币交易所”,围绕这个的相关主题,大家对这方面的相关话题展开了进一步的谈论。 ...
    宇宙永恒阅读 330评论 0 0
  • 本文列出2019年最新整理的用于区块链开发的43种流行的开发库、开发工具与开发框架。 1、MetaMask 人人都...
    编程狂魔阅读 2,143评论 0 1
  • 目标读者: 专业的程序员; 想深入了解以太坊/区块链及其生态的读者; 如果你已经有一定的以太坊技术基础,只想研究一...
    编程狂魔阅读 1,662评论 0 11
  • 你想了解如何写智能合约,但有非常有限的技术知识?你想了解如何编写智能合约来为你的ICO发布数字货币吗?这里有一个关...
    编程狂魔阅读 3,580评论 0 1
  • 碰巧从卧室出去,迎头便撞上了鬼鬼祟祟从厨房想冲到窝里的安娜,看来听到我的脚步声,伺机回到原位假装什么都未发生,结果...
    momomo唐阅读 242评论 0 0