黑客利用比特币赌博网站Primedice网上赌场的RNG系统漏洞,导致赌场损失价值100万美金的比特币——此事虽然是去年发生的,然而最近Primedice主动站出来公开分享了这段“惨痛”经历,希望同行们引以为戒。
这是悲伤的故事,请大家自备纸巾……
2014年8月
在Primedice第三版发布不久后,我们的团队遇到威胁着我们网站生存的竞争对手。尽管我个人只有非常有限的编程经验,但是我们团队具有接近两年的比特币赌博网站建立经验。巨大的压力之下同时也为了避免进一步的延误,我们经过短短一周的内测beta之后就发布了新版。
这场“抢劫”是从两个不寻常的账户开始的,Nappa和Kane。我们发现在这两个账户发现了一些不正常的赌博模式。Kane自动套现,我们重新观察了Nappa的赌注,发现他们极其可疑却又无法找出问题出在哪里,于是在稍微延迟了其兑现之后进行了简单的电子邮件交流。
2014年9月
在被我们延迟支付了之后,这名“开发者”似乎受到一丝惊吓,于是他在几周之后创建了一个名为“Hufflepuff”的新账户。Hufflepuff是在Primedice上出现过的最大的赌徒,他经常连续每秒赌注在价值8000美元比特币以上,并持续数小时。我们整个团队都非常震惊Hufflepuff持续地打败庄家(正常情况概率很低1%),随时间的他推移获得越来越多的收益。
我们高度怀疑他奖金收益的来路,并一次又一次地限制他的账户以进行调查,然而每次我们的开发者都没有发现任何违规操作。我们没有证据证明他是作弊,因此无法以适当的理由长时间延迟他的提款要求。
另一方面,出于驱使他继续玩下去的强烈动机,我们立即便将奖金支付给他。
我们对每一种可能性进行了大量的研究,运行模拟程序……但最终我们得出的结论是: 他只是难以置信的幸运 。
惊人发现
在Hufflepuff提光了账户中超过2037比特币奖金大约两天之后,我们的主要开发人员发现有少数账户共享同一台服务器上的种子,由此发现了Hufflepuff的攻击利用程序exp。
要了解Hufflepuff是如何打败我们的系统前,首先需要了解一下公平系统(RNG)是如何运作的:
一个用户在下注前得到一串加密随机值(服务器种子),同时必须提交自己的随机值(客户端种子)。这两个随机值结合,用于确定最终输赢。然后用于赌局的随机加密的随机值将在下注后交给用户,以保证他们的赌局是不受操纵的。
你可以在这里找到详细深入的解释:
https://primedice.com/verify 和
http://dicesites.com/provably-fair我们网站的部分功能是发放解密服务器种子(以向用户保证没有赌局的情况发生),放置一个新的随机种子同时丢弃旧的种子。
Hufflepuff发现了一个可以“混淆”我们服务器的方式,使其发放一个同样活跃的解密服务器种子。这个方式就是通过发送大量无法在短时间内处理完成的请求,而每分钟数百个请求即可。 Hufflepuff便可知晓他究竟是否会赢,从而决定要不要参与。
在疯狂地检查我们的服务器之后,EUREKA!!!我们发现了这一问题。我们怀疑可能存在一些问题,而最终发现了上面描述中时间攻击的可能性。我们的数据库中的种子都不活跃,同时都连到了Hufflepuff账户。由于这些“薛定谔”种子,看起来或许无用的种子都连接到同一个账户,表示着有需要获得种子的海量请求。
似曾相识
不幸的是,我们在Hufflepuff提现2400+比特币(那时大约可兑换100万美元)后发现这个exp的。鉴于比特币的特性(被指“世界最危险货币”)我们除了认输别无他法。我们通过Hufflepuff的比特币论坛账户与其进行沟通,要求其返还奖金,然而这样的回击适得其反。
事实表明,我们开发人员对故障的补丁并不恰当。为了回复我们的要求,Hufflepuff创建了一个新账户名为Robbinhood,然后迅速绕过补丁又多赢了2000+的比特币。然而这次他无法提现超过50或者60比特币,因为我们已经没有更多的金币了。
不久之后他私下向我们发信息:
“你提出的交易被我拒绝了。你的要求显然是可笑的。我很高兴离开你,但如果你打算继续,我愿奉陪到底。我想你并不愿意继续下去的,对吧。我真的很享受这XX(不和谐)。你的举动。
哦,顺便提示一下,还有一些没发放的提款你需要去处理一下。”
这一天赌场没有赢……
透明度证明及调查目的
Hufflepuff的存款地址:
http://blockmeta.com/address/1BiPXmDrHm7VXZnWy6NnW1ZbPc4dcpfkH5他主要的提现地址:
http://blockmeta.com/address/14iS2UvcLK33xkC1K1qL1dhEbp49aiNfNpRobbinHood 账户提款:
http://blockmeta.com/address/14HQ67ZhmATviHi9RdYhbUriAGSFmJpYoB注意:Nappa和Kane是众多曾用名中的两个早起使用过的。
Kane的提现地址:
http://blockmeta.com/address/18dMBap634aESPTeD3FGcAgJ2S9n4qtBTZNappa存款地址:
http://blockmeta.com/address/16h9ggSzUWdvagEJdNvWVYiUkytw6SJgiB我们已经删除了任何稍微敏感的信息(邮件即ip),以上所有分享的内容均是可以公开的。
同样需要注意的是,在这件事彰显了我们的完整性及可查验的公平系统。如果我们尝试操纵任何Hufflepuff参与的赌局,可以轻松发现他在作弊而我们也不会损失2400+甚至更多的比特币。然而,我们并没有。在我们减半了最大赌注后,Hufflepuff只是休息了片刻,我相信他认为我们并没有发现正在发生的事情。我们投资了自己的资金,因此没有用户在这件事中受到负面影响。
最后抱歉,这故事讲了这么久……
参考来源: medium ,作者Stunna(Primedice)
翻译:明明知道 摘自:
巴比特