以太坊(英语:Ethereum)是一个开源的有智能合约功用的公共区块链平台。经过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称“以太虚拟机”Ethereum Virtual Machine)来处置点对点合约。
以太坊的概念初次在2013至2014年间由程序员Vitalik Buterin,受比特币启示后提出,大意为“下一代加密货币与去中心化应用平台”,与买卖股票的证券买卖所相似。
以太坊数字货币平台主要恪守以下两个准绳。
1、简介准绳
以太坊协议将尽可能简单,即使以某些数据存储和时间上的低效为代价。
2、通用准绳
没有“特性”是以太坊设计哲学中的一个基本性局部。取而代之的是,以太坊提供了一个内部的图灵完备的脚本言语以供用户来构建任何能够准确定义的智能合约或买卖类型。
详细事情
这是一同自动化盗币的攻击行为,攻击者应用以太坊节点 Geth/Parity RPC API 鉴权缺陷(RPC:一种计算机协议,以太坊RPC结点是以太坊与其他系统交互的窗口),歹意调用 eth_sendTransaction 盗取代币,单被盗的且还未转出的以太币价值就高达现价 2 千万美金,还有代币品种 164 种,总价值难以估量(很多代币还未上买卖所正式发行)。
攻击过程
综合受害者情报、Reddit 资讯及蜜罐日志剖析,回溯攻击行为可能为:
动作 概率
全球扫描 8545 端口(HTTP JSON RPC API)、8546 端口(WebSocket JSON RPC API)等开放的以太坊节点,发送 eth_getBlockByNumber、eth_accounts、eth_getBalance 遍历区块高度、钱包地址及余额 24%
不时反复调用 eth_sendTransaction 尝试将余额转账到攻击者的钱包 32%
当正好碰上节点用户对本人的钱包执行 unlockAccount 时,在 duration 期间内无需再次输入密码为买卖签名,此时攻击者的 eth_sendTransaction 调用将被正确执行,余额就进入攻击者的钱包里了 42%
简单的说,以太网在高频买卖中能够设置一段时间无需输入密码,时间长短由用户本人制定,假如黑客正好在这个时间发出余额转移指令,以太网账户就自动执行该操作,从而完成钱包转移。
攻击时间线
国内顶尖的区块链平安团队慢雾平安团队在对攻击者钱包地址停止细致的剖析,得到如下主要攻击时间线:
时间 详细动作
2016/02/14 03:59:14 PM 第一次 IN(进账),这天是情人节
2016/02/16 06:33:30 PM 第二次 IN,时隔 2 天,猜想自动化攻击程序初次上线
2016/05/19 07:46:33 PM 第一次 OUT(出账),此时共 IN 51 笔
2016/07/20 06:35:57 PM 第二次 OUT,此时共 IN 57笔
2017/05/11 06:34:35 PM PM Shapeshift(知名买卖所) IN 7 笔,跨度 71 天
2017/06/10 02:39:53 AM OUT 最后一笔,此时共 IN 约 207 笔
2017/06/21 07:46:49 AM f2pool(知名矿池) IN 36 笔,跨度 4 小时
这种时间线的跟踪能够侧面辅助剖析攻击者的行为痕迹。
我们从上面提到过的攻击时间线来看,攻击者其实很不普通,这种埋伏的攻击发作在以太坊历史上第一个知名黑客事情之前,其实当时是以太坊没被市场正式认可的时期便能够看出攻击者是十分早期的以太坊研讨者,也很懂黑客技术,攻击者在实战过程中也在不时优化这套工程 。
防御措施
距这次盗币事情被发现至今已有两年之久,但攻击者的脚步似乎并没有停下来的意义。2018 年 3 月 盗币事情被披露,截止到2018年7 月 1 日,攻击者行动并未中止。累计盗取了 47865 枚 ETH,价值高达现价 2 千多万美金,还有总量过百亿的各类 Token。
我们该如何防御这种攻击呢?
1、更改默许的 RPC API 端口
2、更改 RPC API 监听地址为内网
3、配置 iptables 限制对 RPC API 端口的访问
4、账户信息(keystore)不要寄存在节点上 (由于账户不在节点上,所以就不会用到 unlockAccount 了)
5、私钥物理隔离(如冷钱包、手工誊写)或者高强度加密存储并保证密钥的平安

后续
这起应用以太坊 RPC 鉴权缺陷施行的自动化盗币攻击,曾经在全球范围内对运用者形成了十分严重的经济损失。
你以为这就完毕了么?
该事情还有新的躲藏攻击方式!
新的攻击方式
以太坊节点的 RPC 接口开放,但是账户没有 ETH (此时黑客曾经经过扫描发现目的);
黑客立刻结构买卖并签名(签名设置的金额为 X,nonce 设置为当前的 N+1,N+2,…,N+N),能够结构多个;
以太坊节点发现本人的问题,关闭 RPC 端口;
以太坊节点以为本人曾经平安,开端往账户转入 ETH;
其实此时攻击者经过程序自动化实时监控发现你的转入,立刻开端播送之前 RPC 开放的时分签名好的信息;
此时攻击完成。
这种攻击手法十分荫蔽且真实存在,我们只能见招拆招。
对此提示大家:请勿将私钥导入节点,如不得不导入,请先将 RPC 改成监听内网或运用 iptables。
屏蔽外部访问:针对已导入私钥的节点,平安起见倡议暂停运用,把相关资产平安转移后废弃这个私钥文件,并在其他隔离机器里重重生成新的私钥,将来采用私钥签名买卖+节点播送买卖的方式来停止转账操作。
进一步剖析
对 RPC API 相关模块功用停止进一步剖析,还会发现一些潜在的平安风险,也是需求留意的
比方:假如 RPC API 启用了 personal 模块,就能够经过 personal_unlockAccount 办法爆破账户密码,假设爆破胜利,就能够一次性完成解锁 + 转账。假如 RPC API 启用了 miner 模块,就能够经过 miner_setEtherbase 办法修正挖矿的钱包地址。
从防御剖析角度,我们还发现,Geth 等的日志机制不完善,无法记载 RPC API 恳求的来源 IP(配置 --debug、–verbosity 5 均无效),招致直接在被攻击的以太坊节点上取证溯源攻击者 IP 是一件很费事的事。
层出不穷的攻击方式
固然以太坊自身的强健性曾经禁受住考验,但是平安是一个整体。经过这个事情我们能够看出以太坊生态的一些平安缺陷,有的平安缺陷可能会被以为这是一种机制,需求运用者留意,但这个对运用者来说做平安的门槛太高。高门槛的平安一定是会更容易滋生大攻击事情。
平安性考虑
经过这个事情的追踪调查及攻击手法的完好考虑,我们越发认识到网络空间遵照黑暗森林规律。我们认真考虑一下这起持续时间之久且如今还在活泼的攻击的一切细节,假如我们是攻击者,我们一个脚本工程就能够轻松拿下全球数以万计,以至百万千万的数字资产。
下面我说一下本人的感受吧 我分享区块链平安性问题的缘由是在区块链中平安的重要性永远是第一位的 ,由于几千亿美金的代币都在区块链上,绝大局部区块链是开源的,谁都能够研讨开源代码,稍有不慎无数的代币可能会没了。
著名的买卖所都发作过被攻击的事情,并且每次的平安事故都很严重,很多人账户可能一夜之间归零。区块链的将来十年的平安运转毫无疑问是这个行业的定海神针,是好像神普通的存在,btc这么多年还在运转,大家有没有感到奇异,为什么最早的还在运转,新的项目都是晋级改版过的反而问题很多,由于任何行业都在提升,出问题是很正常的,不出问题才是例外,其实由于区块链的特性,对平安的请求极高,如何满足更高级别的平安,其实才是区块链开发应用前提 。