幾行平淡無奇的代碼,悄無聲息地薅走價值約4000 萬元人民幣,黑客的手段是越來越高明了。

神奇的是,這次安全事故發生後,代幣的價格沒崩,沒有單獨的受害者,也沒有維權,就因為黑客沒偷項目方的秘鑰,也沒盜走用戶的資產,而是採用了一種更隱蔽的方式:在礦工兢兢業業挖礦的時候,悄悄「增發」了RVN(Ravencoin),讓人以為(至少看起來)像是系統正常產生的代幣。

事情的經過是這樣的。

6 月29 日早上,海外的CryptoScope 團隊成員最先發現區塊鏈項目Ravencoin 並沒有按照預期運行,在每個區塊正常產生RVN 之外,還額外創建了多餘的RVN。他們很快對異常進行標記。在確認漏洞後,他們聯繫了Ravencoin 開發團隊。

經開發團隊確認,Ravencoin 確實存在漏洞,隨後團發布緊急修復公告。截至這時,漏洞已經讓系統多產生了約1.4%(約3 億枚)的RVN 代幣,這部分憑空產生的代幣,數量大概是所有RVN 礦工埋頭苦幹44 天的開採量。

由於這部分RVN 沒有任何限制,等到被發現時,大部分代幣已經流入了加密市場,凍結、回滾等常規操作已經無法奏效。

根據CryptoScope 的披露,這些被增發的代幣,大部分流入了幣安,少部分流入了OKEx。或許,這個「聰明」的黑客並沒有急躁地賣出砸盤,而是有耐心地出貨,一直到被發現。根據加密貨幣行情網站Coinmarketcap 的數據,今年6、7 月份,RVN 代幣的二級市場價格並沒有產生明顯下跌,甚至在7 月6 日後迎來了上漲。

不幸的是,在開發團隊發布補丁和新協議執行之前的幾個小時,又有人利用這個漏洞「增發」了約480 萬枚RVN。根據團隊的披露和確認,至少有三個加密地址牽涉其中。

核心開發者Tron Black 透露,其中有一個「攻擊者」留下了蛛絲馬跡,開發人員掌握了信息後,希望對方將增發的RVN 轉至RXBurnXXXXXXXXXXXXXXXXWUo9FV 地址進行銷毀。據披露,被掌握信息的「盜賊」後續將增發的部分代幣打回了銷毀地址。最終,大約390 萬枚RVN 代幣通過這種方式被銷毀掉了。

Ravencoin 為什麼會被盯上?

黑客之所以盯上Ravencoin 的挖礦代碼,而不是盜走團隊的私鑰,或者用戶的幣,其實也有原因。

Ravencoin 簡稱RVN,中文名是「烏鴉幣」或「渡鴉幣」,於2018 年1 月誕生,無IC0,無預挖礦,是個純粹的「社區幣」。烏鴉幣在比特幣源碼基礎上進行算法改良,優化轉賬環節,並增加類似以太坊的資產通證發行功能,意在打造一個完全去中心化、社區自治的區塊鏈服務平台。

其實,區塊鏈領域中完全社區化的項目並不算多,因為沒有預挖和預留,估計除了老老實實挖礦的收入,開發團隊手上也沒多少幣。之前加密貨幣交易平台幣安的創始人趙長鵬,就曾公開讚揚烏鴉幣團隊:「沒有IC0,社區化項目,低調謙遜的團隊,不需要上幣費。」

去年10 月,烏鴉幣升級算法,更改為X16R 的升級版X16Rv2,目的就是為了阻止烏鴉幣網絡上ASIC 礦機繼續挖礦。在此之前,大約有83% 的算力是ASIC 礦機,升級後,RVN 的算力很快從原來的30T 下降到5T 左右。

有意思的是,這個並沒有公佈全部成員,基本只有Bruce Fenton 和Tron Black 兩位開發者露臉的團隊,不過,這沒有影響外界對項目的估值。

此前,在接受媒體採訪時,美國電商巨頭Overstock 的前CEO Partrick Byrne 表示已將數百萬美元投入了烏鴉幣,並聲稱提供的服務比人們意識到的還要多。去年10 月,他在推特回答網友詢問曾買入什麼加密貨幣時坦言,是比特幣和烏鴉幣。而包括Medici Ventures 和tZERO 也曾表示,要在基礎設施方面支持烏鴉幣的開發。

沒想到,平日低調的烏鴉幣竟然被黑客盯上了。

黑客的方法

一位微信名為「奮鬥的M4ster」的社區成員提供了他的分析思路,發現這名黑客只用了3 行代碼就成功「生成」了價值4000 萬人民幣的財富。

問題出在上面這段代碼,從代碼表達上看,這部分與鑄幣有關,但這段代碼只有一個else if。

在代碼語言中,else if 是「否則如果」的意思,是一種判定條件,很顯然,這段代碼裡只判定了一個條件,沒有繼續判定其他條件。

於是,黑客只要發送一筆交易,就可以憑空鑄出一筆新幣,即便這筆新幣不在正常的RVN 總量範圍內,而是超出總量之外的數量,一筆交易就可以憑空造成50 萬枚RVN。

RVN 總量有210 億枚,幾十萬的新增幾乎就是九牛一毛,誰都發現不了。黑客笑了。

從5 月9 日,黑客發起第一筆攻擊開始,他用了近兩個月時間,總共發送了5000 筆交易,慢慢造出了約3 億枚RVN,佔總量的1.4%,總價值4000 萬人民幣。

黑客的最後一次攻擊發生在6 月29 日。當時CryptoScope 團隊正在解bug,順便看了一眼瀏覽器,突然就覺得RVN 的總量有點問題。在黑客持續攻擊了2 個月後,這一行為最終被發現了。

一般來說,代碼上的漏洞都是黑客仔細研究代碼發現的,需要付出極大成本才能發現一個有價值的漏洞,而RVN 的這段代碼,是黑客自己寫的。

Ravencoin 作為一個開源項目,所有人都可以在Github 上為該項目提供代碼。因為開源項目的初衷就是讓所有開發者齊心協力,為項目優化做貢獻,每個人都可以把自己的想法寫成代碼,放在Github 上。代碼會由項目方審核,決定用不用這段代碼。

黑客在1 月提交了這段代碼,項目方沒有發現問題,直接整合進了項目裡面,這才給了黑客機會。而黑客整整潛伏了4 個月,才開始攻擊。

誰受到了損失

這並不是一次普通概念的黑客攻擊。一般的黑客攻擊,是需要黑客攻擊賬戶,從賬戶中盜走用戶資產。所以黑客攻擊中大部分損失的是用戶,但這次的另類黑客攻擊,損失的是誰?

用戶並沒有受到損失,因為資產價格沒有波動,項目方也幾乎沒有損失,他們自己也無需補償任何人。

真正損失的是礦工。

看了項目方提供的增發解決方案,基本上都是從挖礦角度解決,比如提前產量減半、強制總量達到上限後停止挖礦等。按照這樣的邏輯,這場黑客攻擊的損失方只能是礦工。礦工靠挖礦生存,這3 億枚RVN 本應是礦工的獎勵,現在他們拿不到了。

如果這一切都是黑客從頭計劃好的,那麼這就是一場完美的攻擊,1 月佈局,5 月攻擊,7 月收尾,如果不是意外被發現,整個過程可能還會持續更長時間。用戶不會報警,因為沒有損失,項目方不會報警,因為是自己審核問題,礦工也無法報警,他們損失的是若干年以後的獎勵,而且,誰會去受理這樣的報案呢?