农企新闻网

以太坊生态缺陷招致的一同亿级代币偷盗大案

发布者:李阳远
导读近日,慢雾平安团队观测到一同自动化盗币的攻击行为,攻击者应用以太坊节点 Geth/Parity RPC API 鉴权缺陷,歹意调用 eth_sendTransaction 盗取代币,继续工夫长达两年,单被盗的且还未转出的以太币价值就高达现价 2 千万美金,还有代币品种 164 种,总价值难以估量(很多代币还未上买卖所正式发行)。如下图:攻击进程慢雾平安团队综合受益者情报、Reddit 资讯及蜜罐日

近日,慢雾平安团队观测到一同自动化盗币的攻击行为,攻击者应用以太坊节点 Geth/Parity RPC API 鉴权缺陷,歹意调用 eth_sendTransaction 盗取代币,继续工夫长达两年,单被盗的且还未转出的以太币价值就高达现价 2 千万美金,还有代币品种 164 种,总价值难以估量(很多代币还未上买卖所正式发行)。如下图:

以太坊生态缺陷导致的一起亿级代币盗窃大案

攻击进程

慢雾平安团队综合受益者情报、Reddit 资讯及蜜罐日志剖析,回溯攻击行为
能够为:

全球扫描 8545 端口(HTTP JSON RPC API)、8546 端口(WebSocket JSON RPC API)等开放的以太坊节点,发送 eth_getBlockByNumber、eth_accounts、eth_getBalance 遍历区块高度、钱包地址及余额

不时反复调用 eth_sendTransaction 尝试将余额转账到攻击者的钱包

当正好碰上节点用户对本人的钱包执行 unlockAccount 时,在 duration 时期内无需再次输出密码为买卖签名,此时攻击者的 eth_sendTransaction 调用将被正确执行,余额就进入攻击者的钱包里了


unlockAccount 函数引见

该函数将运用密码从本地的 keystore 里提取 private key 并存储在内存中,函数第三个参数 duration 表示解密后 private key 在内存中保管的工夫,默许是 300 秒;假如设置为 0,则表示永世存留在内存,直至 Geth/Parity 加入。详见:

https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_unlockaccount

攻击工夫线

我们在 Etherscan 上对攻击者钱包地址停止细致的剖析,失掉如下次要攻击工夫线:

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 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 小时

这种工夫线的跟踪可以正面辅佐剖析攻击者的行为痕迹。

影响态势

以太坊生态缺陷导致的一起亿级代币盗窃大案

以太坊生态缺陷导致的一起亿级代币盗窃大案

以太坊生态缺陷导致的一起亿级代币盗窃大案

经过慢雾平安团队独有的墨子(MOOZ)零碎对高端智能装备、新一代信息技术、新能源、新材料、新制造、新零售、新技术、生物制药等新的产业集群正在迸发活力;创新驱动、科技支撑、知识产权转化、技术转移等新的动能正在超越旧的动力,新经济成为支撑经济发展的重要力量。全球约 42 亿 IPv4 空间停止扫描探测,发现暴露在公网且开启 RPC API 的以太坊节点有 1 万多个。这些节点都存在被直接盗币攻击的高风险。

进攻建议

更改默许的 RPC API 端口,配置办法如:--rpcport 8377 或 --wsport 8378

更改 RPC API 监听地址为内网,配置办法如:--rpcaddr 192.168.0.100 或 --wsaddr 192.168.0.100

配置 iptables 限制对 RPC API 端口的拜访,举例:只允许 192.168.0.101 拜访 8545 端口:
iptables -A INPUT -s 192.168.0.101 -p TCP --dport 8545 -j ACCEPT
iptables -A INPUT -p TCP --dport 8545 -j DROP

账户信息(keystore)不要寄存在节点上 (由于账户不在节点上,所以就不会用到 unlockAccount 了)

任何转账均用 web3 的 sendTransaction 和 sendRawTransaction 发送私钥签名过的 transaction

私钥物理隔离(如冷钱包、手工誊写)或许高强度加密存储并保证密钥的平安

进一步考虑

经过这个事情的追踪调查及攻击手法的完好复现,我们越发认识到网络空间遵照黑暗森林规律,这个规律参考自《三体》:“宇宙就是一座黑暗森林,每个文明都是带枪的猎人,像幽灵般潜行于林间,悄悄拨开挡路的树枝,极力不让脚步收回一点儿声响,连呼吸都必需小心翼翼,他必需小心,由于林中四处都有与他一样潜行的猎人,假如他发现了别的生命,能做的只要一件事,开枪消灭之。”

我们细心复盘了这起继续两年且如今还在活泼的攻击的一切细节,假如我们是攻击者,我们一个脚本工程就可以轻松拿下全球数以万计,甚至百万千万的数字资产。

我们需求特别提下攻击者的手法,不晓得大家有没有留意到,攻击的第一步为什么调用的是 eth_getBlockByNumber 来获取区块高度?这个调用的细节是:eth_getBlockByNumber("0x00", false),假如区块高度不是最新的,那么这个调用就会报错,后续也就没必要执行钱包地址、余额等查询操作,由于余额不精确,且最初一步的转账操作一定没法完成。这种攻击逻辑的设计,关于这个攻击场景来说是一种十分暴力美学的设计。

我们从下面提到的“攻击工夫线”来看,攻击者其实很不普通,这种埋伏的攻击发作在以太坊历史上第一个知名的黑客攻击事情 The DAO 事情之前(2016/06/17),且事先是以太坊技术被市场正式认可的时期。可以看出,攻击者是十分晚期的以太坊技术研讨者,并且很懂黑客工程化技术。攻击者在实战进程中不时优化这套工程。

我们还对 RPC API 相关模块功用停止进一步剖析,发现了一些潜在的平安风险,也是需求大家留意的,比方:假如 RPC API 启用了 personal 模块,就可以经过 personal_unlockAccount 办法爆破账户密码,假设爆破成功,就可以一次性完成解锁 + 转账。假如 RPC API 启用了 miner 模块,就可以经过 miner_setEtherbase 办法修正挖矿的钱包地址。

在我们的墨子(MOOZ)零碎的全网探测中,我们发现这些暴露在公网的以太坊节点开启的 RPC API 模块不尽相反。这为更复杂的攻击提供了差别条件。

从进攻剖析角度,我们还发现,Geth 等的日志机制不完善,无法记载 RPC API 恳求的来源 IP(配置 --debug、--verbosity 5 均有效),招致直接在被攻击的以太坊节点上取证溯源攻击者 IP 是一件很费事的事。

虽然以太坊自身的强健性曾经禁受住考验,但是平安是一个全体。经过这个事情我们可以看出以太坊生态的一些平安缺陷,有的平安缺陷能够会被以为这是一种机制,需求运用者留意,但这个对运用者来说做平安的门槛太高。高门槛的平安一定是会更容易繁殖这种大攻击事情。

最初,希望我们这篇文章的披露能给这个生态带来更多平安。

AD: 进击•交融 猎云网&AI星球2018年度人工智能产业峰会 将于4月17号在深圳大中华希尔顿酒店举行。这里有最深度的考虑,最有价值的投资建议,以及最酷的黑科技展现,精彩不容错过。