比特幣賭博網站Primedice如何被黑客坑走百萬美金
張愛玲說:出名要趁早。而比特幣這個年輕人卻時刻在提示我們:樹大招風,高處不勝寒。
一個神秘創始人,一群狂熱支持者,比特幣在倍受贊譽的同時飽受攻擊與追殺。
黑客利用比特幣賭博網站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賬戶。由于這些“薛定諤”種子,看起來或許無用的種子都連接到同一個賬戶,表示著有需要獲得種子的海量請求。
似曾相識 Déjà vu
不幸的是,我們在Hufflepuff提現2400+比特幣(那時大約可兌換100萬美元)后發現這個exp的。鑒于比特幣的特性(被指“世界最危險貨幣”)我們除了認輸別無他法。我們通過Hufflepuff的比特幣論壇賬戶與其進行溝通,要求其返還獎金,然而這樣的回擊適得其反。
事實表明,我們開發人員對故障的補丁并不恰當。為了回復我們的要求,Hufflepuff創建了一個新賬戶名為Robbinhood,然后迅速繞過補丁又多贏了2000+的比特幣。然而這次他無法提現超過50或者60比特幣,因為我們已經沒有更多的金幣了。
不久之后他私下向我們發信息:
“你提出的交易被我拒絕了。你的要求顯然是可笑的。我很高興離開你,但如果你打算繼續,我愿奉陪到底。我想你并不愿意繼續下去的,對吧。我真的很享受這XX(不和諧)。你的舉動。
哦,順便提示一下,還有一些沒發放的提款你需要去處理一下。”
這一天賭場沒有贏……
透明度證明及調查目的
Hufflepuff的存款地址:
https://blockchain.info/address/1BiPXmDrHm7VXZnWy6NnW1ZbPc4dcpfkH5
他主要的提現地址:
https://blockchain.info/address/14iS2UvcLK33xkC1K1qL1dhEbp49aiNfNp
RobbinHood 賬戶提款:
https://blockchain.info/address/14HQ67ZhmATviHi9RdYhbUriAGSFmJpYoB
注意:Nappa和Kane是眾多曾用名中的兩個早起使用過的。
Kane的提現地址:
https://blockchain.info/address/18dMBap634aESPTeD3FGcAgJ2S9n4qtBTZ
Nappa存款地址:
https://blockchain.info/address/16h9ggSzUWdvagEJdNvWVYiUkytw6SJgiB
我們已經刪除了任何稍微敏感的信息(郵件即ip),以上所有分享的內容均是可以公開的。
同樣需要注意的是,在這件事彰顯了我們的完整性及可查驗的公平系統。如果我們嘗試操縱任何Hufflepuff參與的賭局,可以輕松發現他在作弊而我們也不會損失2400+甚至更多的比特幣。然而,我們并沒有。在我們減半了最大賭注后,Hufflepuff只是休息了片刻,我相信他認為我們并沒有發現正在發生的事情。我們投資了自己的資金,因此沒有用戶在這件事中受到負面影響。
最后抱歉,這故事講了這么久……