【區塊鏈安全課堂】Soildity安全之交易順序依賴

weixin_34007886發表於2018-08-13

區塊鏈安全公司WF曲速未來 安全開課:

Soildity作為編寫智慧合約的語言,已經被廣泛的應用。但同時,開發者和使用者也得到了慘痛的教訓,智慧合約的安全問題層出不窮。因此,我們總結了一些常見的Solidity安全問題。前車之鑑,後車之師,希望後來者能有所警惕。

交易順序依賴

一筆交易被傳播出去並被礦工認同包含在一個區塊內需要一定的時間,如果一個攻擊者在監聽到網路中對應合約的交易,然後發出他自己的交易來改變當前的合約狀態,例如對於懸賞合約,減少合約回報,則有一定機率使這兩筆交易包含在同一個區塊下面,並且排在另一個交易之前,完成攻擊。這意味著,如果某個使用者正在揭示拼圖或其他有價值的祕密的解決方案,惡意使用者可以竊取解決方案並以較高的費用複製其交易,以搶佔原始解決方案。

攻擊模型:

攻擊者提交一個有獎競猜合約,讓使用者找出這個問題的解,並允諾給予豐厚的獎勵。

攻擊者提交完合約後就持續監聽網路,觀察是否有人提交了答案的解

有人提交答案,此時提交答案的交易還未確認,攻擊者就馬上發起一個交易降低獎金的數額使之無限接近0。

攻擊者提供較高的Gas,是的自己的交易先被礦工處理。

礦工先處理提交答案的交易時,答案提交者所獲得的獎勵將變得極低,攻擊者就能幾乎免費的獲得正確答案。

相關事件

ERC20

ERC20標準是相當知名的關於Ethereum建設令牌。這個標準有一個潛在的超前漏洞,這個漏洞是由於這個approve()功能而產生的。

該標準規定的approve()功能如下:

13086843-47092e993599fae1

攻擊情景如下

1.Alice允許Bob通過呼叫approve方法傳輸N個Alice的令牌(N> 0)在Token智慧合約上傳遞Bob的地址和N作為方法引數;

2.過了一段時間,Alice決定從N改為M(M> 0)的數量Alice的令牌Bob被允許轉移,所以她再次呼叫批准方法,這個時間傳遞Bob的地址和M作為方法引數;

3. Bob在開採並快速傳送之前注意到Alice的第二筆交易呼叫transferFrom方法轉移N 個Alice的令牌的事件;

4.如果Bob的交易將在Alice交易之前執行,那麼Bob將會執行成功轉移N個 Alice的代幣並獲得轉移另一次M個代幣的能力;

5.在Alice注意到出現問題之前,Bob呼叫了transferFrom方法,這次轉移M個愛麗絲的代幣。

區塊鏈安全公司WF曲速未來 觀點:

對於交易順序依賴這個問題,如果智慧合約的開發者不小心,這種情況會導致實際的和毀滅性的前端攻擊。因此開發者要綜合運用gas限制以及披露方案,從而保障交易資訊在合理的環節以合理的形式呈現。

注: 本文內容由區塊鏈安全公司WF曲速未來(WarpFuture.com)  編譯,轉載請註明來自WF曲速未來。WF是交易所與超級節點的安全技術提供商,為區塊鏈交易所提供媲美某貓雙十一級別的賬戶安全與交易安全對抗雲引擎,現交易所每日安全攻防呼叫量達億級。微信關注公眾號“曲速未來安全區”,知識星球請搜尋“曲速區”。

相關文章