网赚论坛

 找回密码
 免费注册
查看: 329|回复: 0
打印 上一主题 下一主题

转:我是如何被盗价值10w的以太坊代币

[复制链接]

23

主题

23

帖子

92

积分

Ⅰ级财主

Rank: 1

积分
92
跳转到指定楼层
楼主
发表于 2017-10-21 17:47:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文:http://weibo.com/ttarticle/p/show?id=2309404160215036594078​​

作为一名自认为非常专业的工程师,​我是 https://etherpush.io (去中心化的点对点的交易所)和 https://dice.etherpush.io (以太坊骰子)的现任作者,我给以太坊提交过commit(虽然就一行代码)给 parity 团队提过安全问题,手里维护过超过2000台的服务器,也时常关注 CVE, 从我手中流过的流量(造成的bug)不计其数,自认为对安全非常重视, 绝不会想到因为自己的疏忽损失了价值10w的以太坊代币。

各位看官,下面就当看戏,避免发生我这种愚蠢错误:

10月4号,在写完部分以太坊骰代码时​,我按照习惯去查看自己某个地址上代币的总额,发现自己的总额只剩下$3.58, 第一时间我就检查了账户上token transfer 事件,发现自己的三个币种 eos,mda,rvt 都被转移走了,那一瞬间我就确认号被盗了,第一时间我不是气恼(可能在大部人工程师眼里,这些就是一串数字吧,哈),反而是思考那个安全场景导致我的私钥泄漏,我开始检查转移去的地址,通过检查这个地址我发现,这个地址不像是通过漏洞转移走的,因为发生交易太少。

所以我开始怀疑自己泄漏了私钥,我对自己的私钥保存向来是非常自信(经过被盗事件后,我彻底改变这种想法),不像大多数人保存私钥的方式,我自己根据 Git 的特性设计了一套本地+远程备份的方式如下:







​我所有私钥在本地虽然是以明文的形式存储的,但是keystore本身加密的密码是非常复杂的,哪怕失窃也需要攻击者花费巨大的计算资源来攻击,我在远程的备份是自己设计的单向 AES256 加密(我人脑记住了32长的iv),所有的keystore本身又经过了一层加密,攻击者需要经过两轮攻击才能获取到私钥,(对这种方式详细感兴趣的可以联系我:)),正是因为如此,我对自己的私钥向来很自信,当然,我被打脸了。

所以我唯一能想到(相信)的答案就是,我运行了恶意软件或者恶意的软件库,因为我本身一直在开发代码,我怀疑是它们在后台扫描了我的硬盘,拿走了私钥。不过后来转念一想,如果是扫描硬盘的话,我必然会有所感觉(mac 会嗡嗡的作响),再加上私钥的加密密码很复杂。这一刻我对错综复杂的软件信任体系感到担忧,只要任何一个安全点被攻破,整个安全层面就荡然无存了。

我开始怀疑 metamask,开始怀疑myetherwallet,我经常使用这两个软件。到最后依然豪无头绪。相比被盗造成经济损失,找不到被盗的原因才是让我真正所难受的,这意味我的安全体系存在漏洞,以后依然可能被盗,索性换了新电脑。

最终在昨天下午(10月6号)继续写以太坊骰子时,我终于发现了原因,为自己愚蠢的错误懊悔不已。开发过智能合约的人可能知道在本地开发时需要搭建本地的测试区块链,但是个人电脑上运行即便是ropsten链或者测试链都很卡,所以大部分都在使用 testrpc (https://github.com/ethereumjs/testrpc) 这个模拟的区块链,这个区块链产生的钱包是通过固定单词词组产生的,聪明的人可能想到了,我因为偷懒(或者愚蠢)自己的某个钱包在今年7月开始使用了这个钱包,我在metamask上有几十个账号用来做测试,因为嫌麻烦最终误用了这个钱包,这个钱包恰恰可以通过某组固定的单词产生(这组单词就是官方的测试单词),所以我的钱包的代币最终被一个同样是开发者的幸运儿转移走了,他运行官方的例子发现竟然有资金:), 赶紧转移走, 不知道是那个傻逼做的,溜了溜了。

在写下这个结论是我不知该庆幸还是恼怒,庆幸的是早日发现了这个问题,虽然损失了10w,恼怒的是我竟然因为这样一个愚蠢的过失导致我自以为是的安全体系被攻破。

最后,所有老爷们,希望你能从我所放下的错误学到一些。在错综复杂的软件世界,人类是最薄弱的一部分。

我被盗代币地址 https://etherscan.io/address/0x41a40c26e5f6b0bce3422811b7ff13a232319522

幸运儿的地址 https://etherscan.io/address/0x1f35924ae9b34bbd1dfa7e527964c430d5afab92

在国庆结束前,就当给大家国庆庆祝生日啦:)

各位要是觉得开心,可以给以太坊骰子 https://dice.etherpush.io 的合约地址打入 0.02 ETH (写了很多区块链应用实在是苦于推广技术,各位看官老爷们求支持)到 0xc54d705cf8dc72f063a2bbddf851b708254ddfab, 第一轮的区块结束时间是4352240高度,大概在三天后开奖, 赢的人将拿到 95% 的代币,开奖的人拿到1%,合约得到剩下的4%
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2024-11-16 14:41 , Processed in 0.499201 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表