曲速區披露:令人沉思的KickICO代幣被盜原因區塊鏈
據區塊鏈安全公司曲速未來消息,區塊鏈眾籌平臺KICKICO7月26日遭到黑客攻擊,損失770萬美元。黑客是通過訪問控制KickCoin智能合約的私鑰來進行攻擊。“他們使用了KickCoin智能合約與Bancor網絡整合的方法:黑客破壞了大約40個地址的代幣,并在相應數量的其他40個地址創建了代幣。
KickICO是一個基于區塊鏈的資金募集平臺,根據KickICO的官方公告,KickICO遭黑客入侵,損失了770萬美元。
根據公告,安全漏洞發生在7月26日09:04。這一漏洞導致黑客成功獲得了“KICK智能合約賬戶”的訪問權限,從而控制了KickICO代幣平臺。
很明顯,又是一個權限原因,中心化的問題。
中心化問題:
去中心化程度也是區塊鏈項目抗攻擊能力很重要的一個指標。以太坊的創始人V神曾經給真正的“去中心化”這個概念給過一個具體的定義,不滿足定義的實際上都屬于“假去中心化”。
衡量是否為真正的去中心化V神給了一個具體的判斷依據如下:
1.結構去中心化?:系統由幾臺物理計算機組成?系統最多可以承受幾臺計算機同時崩潰?
2.政治去中心化:有多少個體或者組織擁有系統的實際控制權?
3.邏輯去中心化: 系統呈現和維護的接口和數據結構看起來更像一個整體,還是非晶群?一個簡單的啟發是:如果將系統分為提供者和用戶兩部分,那么這兩個部分是否作為獨立單元繼續正常運行。
縱覽目前市面上大部分的以太坊智能合約,大多都設立的owner特權角色。即使一份智能合約沒有代碼上的缺陷,它也會有很大的風險,被稱之為“單點威脅”,因為owner特權角色在一定程度上可以影響該智能合約的運行秩序,而我們并不能保證owner自己不作惡又或是owner特權不會被攻擊者竊取。
而這次的KickICO盜幣事件就是由于owner私鑰被竊取導致。
KickICO盜幣事件解析:
在事件發生之后,官方也發表了聲明稱是由于owner私鑰被竊取導致,但是并沒有說明為什么私鑰會被竊取,這里不排除有合約owner為一己私利監守自盜的可能。
那攻擊者拿到owner私鑰后是如何進行盜幣操作的呢?我們來看如下圖:
通過上面的圖可以看到,攻擊者調用了一個名為issue的函數從合約地址中轉出了大量的代幣。在轉出大量的代幣之前,攻擊者為了躲避流通總量異常監控,攻擊者先調用了另外一個函數:
通過上面的圖可以看到,攻擊者調用destroy函數將他人大量的代幣轉入了合約內,這一進一出數個回合,代幣的流通總量沒有發生變化,攻擊者很高明地利用這種方式變相轉移了他人大量代幣,同時又躲避了流通總量異常監測,給自己預留了很多時間來拋售代幣獲利。但,重點不是這個。
看到這里所有的Kick項目的投資人都應該捏一把汗,因為你的資產可以被某個人隨意操控,同時這個人還具有“隨意印鈔”的無上權利。
我們來看看合約對這兩個特權函數是如何定義的:
issue函數的代碼量很少,我們可以看到,這個函數雖然是有onlyOwner限制,但是此函數居然能直接對某個賬戶進行發幣,而沒有任何限制,我們再來看看destroy函數。
這個函數雖然沒有onlyOwner修飾符,但是從417行可以看出來,owner還是有特權的,若調用者是owner的時候,就不驗證_from參數是否為調用者了。
我們在看兩行關鍵代碼(420-421),可以看到這兩行代碼是作用是控制_from地址中的代幣數量減少,由于上面提到的417行,所以owner可以直接把任意賬戶的代幣減少。
其他隱患
經調查:目前市面上70%的Token智能合約都存在特權角色,不同的是他們的特權大小不一,所以從理論上來說,這70%的智能合約都存在單點威脅,已發生的案例就有:
1.去中心化交易所Bancor錢包私鑰被竊取,25000個eth被盜;
2.具有相關報導了tradeTrap問題,大量代幣mintToken函數存在整型溢出,owner可重置他人賬戶余額;
曲速未來實驗室表示:KickICO代幣被盜的根本原因是因為Kick合約中為owner權限設立了太多特權函數,而直接原因是因為Kick合約owner的私鑰被攻擊者竊取。
總結
雖然,KickICO重新控制了智能合約,并且保證所有被盜的資金都將歸還到原錢包賬戶中。但目前大部分智能合約設立特權角色,雖然說從業務角度來說是可以理解的,但是這是與區塊鏈的核心思想相悖的,區塊鏈去中心化的目的之一就是消除單點威脅,而設立特權角色實際上是制造單點威脅。面對“假去中心化”的項目,投資人需要謹慎以及提高警惕,因為特權賬戶隨時可能會監守自盜亦或是特權賬戶被竊取而產生大量經濟損失。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。