保利網路黑客如何工作?
最近
PolyNetwork
被黑客入侵,導致數百萬美元被耗盡。保利團隊說:
黑客利用了合約呼叫之間的漏洞,漏洞並不是傳聞中的單身守門員造成的。
我想知道 Poly Network Hack 是如何完成的。Solidity 程式碼中存在哪些漏洞。
=> 之前是否有任何 Solidity 的處理機製或某種批准機制來防止這種黑客攻擊?
有關的:
Poly Network 遭遇重大黑客攻擊,總計 6.1 億美元的加密貨幣被盜。
以下內容來自這兩個來源:
基本上,Poly 有一份契約,負責驗證是否與正確的帳戶進行通信。這是一個白名單,一個地址列表,這些地址被批准向系統發送有關不同鏈上 txs 狀態的消息。這個合約叫做
EthCrossChainData
,我們簡稱它Data
。如果您可以將您的地址添加到此白名單中,那麼您就可以告訴 Poly 任何您喜歡的內容,它會相信您。例如,您可以告訴 Poly,Poly 中的所有資產現在實際上都屬於您,因為您已經進行了相關交易,將資金鎖定在其他鏈上,而網路只會相信您。這正是黑客所做的。但是怎麼做?
該
Data
合約由另一個合約擁有:EthCrossChainManager
合約,我們將其稱為Manager
合約。的部分目的Manager
是執行來自其他鏈的呼叫,這意味著它具有執行一些任意程式碼的功能,並且在這種情況下,它也比應有的更開放 - 特別是來自另一個鏈的任何人可以呼叫一個名為 的函式verifyHeaderAndExecuteTx
,該函式可以呼叫其他 Poly Network 合約。還記得Manager
樓主怎麼樣Data
嗎?這意味著,如果黑客能夠弄清楚如何創建有效載荷,Manager
合約將解釋為意味著它應該將黑客添加到Data
合約的白名單中,它就會這樣做。我相信你已經猜到了,這就是黑客所做的。不過,事實要復雜一些。
verifyHeaderAndExecuteTx
只會執行符合函式簽名的程式碼-函式簽名是函式名稱和參數的_method, "(bytes,bytes,uint64)"
keccak256 散列的前 4 個字節(您可以在名為“函式簽名”)。這可能有助於阻止該函式呼叫任何其他函式,但由於_method
是使用者生成的,黑客所要做的就是弄清楚如何在其中放置一些任意值,以使 keccak256 散列的前 4 個字節符合他們想要的目標有效載荷。(換句話說,它們不需要散列衝突,因為函式選擇器只使用前四個字節,而四個字節的衝突並不難。)一旦他們能夠建構一個與函式簽名相衝突的有效負載,以便將自己添加到白名單中,他們就會將自己添加到他們可以添加的每條鏈上,並耗盡所有資金。