安全顾问反水成黑客,靠瞎猜盗得5000万美元的以太币, 一个区块链大盗的另类传奇
来源 | WIRED 编译 | Guoxi 责编 | Aholiab 出品 | Blockchain(blockchain_camp)
在以太坊上,猜测私钥就像猜测彩票中奖号码一样,从统计学上来说并不现实。但就有一些用户耍小聪明,将自己的以太坊私钥设置成容易记忆的字符,方便了自己的同时,也给区块链大盗留下了可乘之机。
最近《连线(Wired)》杂志曝出了一个区块链大盗的事迹, 他仅靠猜测以太坊私钥盗走了 5000 万美元的以太币,然而币价崩溃他的不义之财缩水了 85% 。
那么,他是怎么偷窃以太币的呢?靠猜测就能破解别人的私钥,这是神马神操作?他又是怎么被揪出来的呢?让我们一起走进这个区块链大盗的悲喜人生。
Adrian Bednarek 是一名安全顾问,而他的客户饱受加密货币失窃的困扰,于是 Bednarek 开始站在对手的角度上思考问题。
从去年夏天开始,如何窃取以太币这个问题一直困扰着 Adrian Bednarek。当然了, 他并不是真的想要成为一个“区块链大盗” 。
不过有这么多种加密货币,为什么 Bednarek 要选择以太币呢?这是因为以太坊出了名的复杂性,同时以太坊各个复杂的组件都可能会带来潜在的安全漏洞,这使得以太币很容易被攻击。
不过,这里的容易被攻击只是相对而言的,以太坊也并不是不堪一击。所以, Bednarek 选择从最简单的攻击方式: 私钥入手 。
我们都知道,以太坊的私钥是其上账户所有权的证明,它可以用来管理以太币。按照以太坊的规定,私钥应该是一串很难被猜出的长达 256 位的二进制数。
不过以太坊用户为了方便记忆也可以任意设置私钥,就比如说设置为 1,但这种简单的私钥很容易被猜出来,因而安全性很差,往往不被人们所采用,人们通常都会使用钱包软件生成有随机性的私钥。
然而出人意料的是,通过检索区块链上存储的以太币交易数据,Bednarek 发现还真的有人使用这种极其简单的私钥进行交易。
不过这个账户中的以太币已经被转走了,几乎可以肯定这笔钱是被区块链大盗偷走的,他赶在 Bednarek 之前偷走了这笔钱。与比特币等其他加密货币相同,如果有人知道了你的以太坊私钥,他就能从私钥中计算得出你的公钥以及账户地址。
所以区块链大盗可以使用这个私钥转走你账户中的以太币余额,而 区块链上验证交易的矿工不会也不能核实发起交易的是不是账户真正的主人 。
这个发现激起了 Bednarek 的好奇心。所以他连续尝试了几个简单的私钥:2、3、4,然后又试了10、20、30这样复杂一点的私钥,不过所有这些私钥对应的账户余额都被清空了,这么看来,靠猜测私钥盗窃以太币并非个案。
为了捕捉更多区块链大盗的信息,Bednarek 和他在安全咨询公司 Independent Security Evaluators 的同事们编写了一些代码,在云服务器上自动化地检查了上百万个简单的私钥。
Bednarek 的团队将这次实验的结果写成了一篇论文,并在周二发表了出来。论文中讲到,Bednarek 的团队发现在过去的几年中,不断有用户将自己珍贵的加密货币存储在几百个私钥非常容易被猜出来的账户之中。
同时,他们还揪出了一个“区块链大盗” 。这个大盗已经使用这种猜测私钥的盗窃方法偷走了近 4.5 万个以太币,按照当时的币价来算,这笔不义之财价值 5000 万美元。
“这个区块链大盗做了和我们一样的事情,只不过他捷足先登了,” Bednarek 说,
“我们不知道这个区块链大盗背后是一个人还是一个团伙,但可以肯定的是,他花费了大量的时间和算力来监视每一笔以太币交易,检测每一个以太币钱包,尝试着去偷走以太币。”
猜对以太坊私钥等于沙里淘金
为了更好地解释区块链大盗是如何偷钱的,首先我们需要说明猜对一个随机生成的以太坊私钥的概率。以太坊的私钥是一个 256 位的二进制数,因此猜对它的概率是 2 的 256 次方分之 1 ,数值上大约是 10 的 78 次方分之 1 ,也就是说分母是 10 后面 78 个 0 。
如何来理解这个量级呢?这个分母大致等于宇宙中原子的个数。对此 Bednarek 做了一个绝妙的比喻, 猜对一个随机生成的以太坊私钥的概率无异于在沙滩上找到别人藏好的一粒沙子 。
我们常说,不怕神一样的对手,就怕猪一样的队友。虽然以太坊本身的私钥机制足够安全,但这架不住有用户为了省事选择那些易于猜测的、安全性极低的私钥。
Bednarek 发现了很多这样的现象,当然了,除了用户自身的责任以外,钱包软件也有责任。有些钱包软件由于编码错误导致其并没有按照给定的长度生成密钥,而有些钱包软件高估了用户群体对区块链的理解程度,以至于让一些没有经验的用户直接选择了自己好记的私钥。
最坏的情况是,钱包软件的开发人员故意破坏了私钥随机生成的过程,以便后期猜出用户的私钥并盗走用户的以太币。
为了找到那些私钥安全性较差的地址, Bednarek 的团队最终扫描了 340 亿个以太坊地址。他们将这个过程称为“ 以太币搜索(ethercombing) ”。就像在沙滩上寻找一粒沙子一样,只不过在以太币搜索中,私钥的排列更加无序,要找的目标也更多。
最终他们找到(准确地说是猜出来)了 732 个曾经存有过以太币但最后余额被清空了的账户。虽然其中一些账户余额清空无疑是账户主人所为,但 Bednarek 指出,自 2015 年以太币正式面世以来,以太坊上发生过很多起因私钥安全性较差导致的以太币失窃事件,他找到的这 732 个账户可能只是冰山一角。
与此同时,在那些被清空的账户中,Bednarek 发现了一个很有趣的现象, 有 12 个账户是被同一个区块链大盗清空的 。也就是说,这 12 个账户中的以太币余额都被转移给了同一个账户,而这个账户的以太币持有量达到了惊人的 4.5 万个。即使在以太币币价已经跌得惨不忍睹的今天,这些以太币仍价值 770 万美元。
高手过招,招招致命
区块链大盗已经偷了这么多钱,现在他有没有金盆洗手呢?带着这个问题, Bednarek 又做了一个实验。他给一个曾被区块链大盗清空过的私钥安全性较差的账户中转入了价值 1 美元的以太币,出乎所有人意料的是,仅仅过了几秒钟,这笔钱就被区块链大盗收入囊中。
紧接着 Bednarek 给一个未被使用过的私钥安全性较差的账户中转入了价值 1 美元的以太币,短短几秒内这笔钱也被清空了,不过这次收款人的账户与上次不同,这个账户只持有价值数千美元的以太币。
在以太坊区块链的未决交易(pending transactions,就是那些发起了但还没被记录到区块链中的交易)中, Bednarek 发现有另一个区块链大盗也在抢这 1 美元的以太币,只不过晚了一步,没有抢到。这么看来,这些区块链大盗似乎都有一个数量庞大的,预先生成的公钥私钥列表,并以非常人所能做到的速度自动化地扫描这些账户。
事实上,研究人员在查看区块链大盗在以太坊区块链上留下的“罪证”时发现,在过去的三年中这个大盗从数千个以太坊账户中盗取了以太币,但他从未有过向外界转移以太币的记录, Bednarek 认为这可能是一起自动执行的以太币盗窃事件 。
在 2018 年 1 月以太币币价达到顶峰时,区块链大盗的账户持有 3.8 万个以太币,在当时价值超过了 5400 万美元。从那时起,以太币币价一落千丈,区块链大盗的财富也缩水了约 85% 。
“你会为他感到难过么?” Bednarek笑着问道, “这个区块链大盗窃取了大量的财富,但随着市场的萎靡,这些不义之财也在大幅度缩水。”
区块链的匿名性设计对实验造成了一定的干扰。尽管 Bednarek 对区块链大盗的犯罪事实一清二楚,但他没有任何办法来找出这个人的真实身份。不过,鉴于朝鲜政府使用加密货币躲避经济制裁的目的以及其最近几年盗取了超过 5 亿美元加密货币的事实, Bednarek 开始怀疑朝鲜,他说“我觉得这背后可能是国家的行为,而且可能就是朝鲜,但这只是猜测。”
私钥的安全性
除了无法揪出区块链大盗的真实身份以外,Bednarek 也无法识别是哪些钱包软件由于故障或损坏生成了安全性较差的私钥,他只能看到这些安全性较差的私钥被创造出来并因此导致以太币失窃的证据。
Bednarek 说“我们可以看到用户的以太币失窃,但我们不能明确这是哪个钱包软件的责任”。对于区块链大盗, 目前尚不清楚他的不义之财是否都来源于那些私钥安全性较差的账户 ,因为除此之外,他还可能有其他的盗窃技巧。
比如说猜测“脑钱包(Brain Wallet)”生成的账户私钥。脑钱包只需用户提供几个单词,它就会自动生成私钥和公钥,乍一看感觉这种方法非常方便,但是这些单词生成的公钥私钥比完全随机生成的更容易被暴力破解。
在 2017 年,一个安全研究人员团队发现一个区块链大盗通过攻击脑钱包总共偷走了 2846 个比特币,即使在比特币币价大幅度跳水的今天,这些比特币的价值仍超过了 1700 万美元。无独有偶的是,在 2015 年年底,一个区块链大盗通过攻击以太坊上的脑钱包偷走了近4 万个以太币,和上文中那个区块链大盗“不分伯仲”。
Bednarek 的团队还没有在比特币区块链上重复这样的实验。不过 Bednarek 已经对 100 个左右私钥安全性较差的比特币账户进行了一次抽查,他发现相应账户的余额全部被清空了。
但在比特币上并没有出现以太坊上一个区块链大盗独大的现象,可能是因为比特币作为第一大加密货币,所以在比特币区块链上盗贼之间的竞争也更加激烈,因而赃款的分布也就更加去中心化。
Bednarek 这次的实验给钱包软件开发人员上了生动的一课。开发人员应该仔细审核钱包软件的代码, 以找出可能会导致生成的私钥安全性较差以及有其他风险的漏洞 。
同时,对于用户来说,用户应该谨慎选择钱包软件。 “因为在你的加密货币被盗后,你不能打电话给服务台,要求他们撤销交易。它们被盗走后,就再也找不回来了,” Bednarek 说, “所以说人们应该选用值得信赖的钱包软件,并从官网等可靠的来源处下载它们。”
不要让你心爱的加密货币成为交给区块链大盗的学费。