• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 百科 查看內容
    • 6154
    • 0
    • 分享到

    【深度】探討以太坊智能合約的安全問題

    2018-6-3 22:10

    來源: 巴比特

    以太坊智能合約面臨的威脅與挑戰分析


    每個發行的代幣會在以太坊上部署一個智能合約,智能合約管控代幣的發行、相互之間的轉化。

    這里是從2015年8月份到最近一個月的數據,這個數據表明每個月新部署的智能合約數據。蔣濤談到以太坊最火爆的時候是2017年的下半年中國開發者加入的時候,而5月份智能合約數據開始獲得了長足增長,2017年9月份由于國家政策監管原因,開始下滑,但2017年10月份數據又得到長足增長,然后慢慢穩定下來,2018年的4月份數據開始慢慢降落了。

    這個發展背后伴隨著我們不想看到的一系列安全事件,出現在區塊鏈的各個環節包括:交易所、礦池、錢包、智能合約 。關于交易所,今年年初3月份出現了交易所被攻擊的事件;關于礦池,在上個月遭到了51%算力的攻擊,引起了“雙花現象”;關于錢包,2018年4月份全球最大基于網頁的數字錢包的域名被劫持;關于智能合約 ,2018年4月份公布了關于美鏈智能合約漏洞等,5月份則陸續出現了智能合約漏洞 。

    已公開的漏洞直接影響各大交易所停止了代幣發行的充值或取現,目前還有不少未公開的漏洞 ,我們會聯系相關的項目方和相關交易所,逐步和他們驗證相關的數據。

    因為這個是開發者社區,接下來我們會挑兩個例子,跟大家分享一下漏洞的原理,大家以后再做項目開發時,就能夠避免相關問題:

    第一個漏洞,關于TransferFlaw,這是大家理解的偷幣漏洞 。如果用戶有一個代幣,背后對應的智能合約有安全漏洞 ,攻擊者可以把這些代幣從你的錢包里全部轉走。這里列出了有漏洞的TransferFlaw,TransferFlaw里面有三個參數,這是交易的數值,代碼49-51行做初步的檢查,確保這個參數是有效的,但在代碼53行和54行計算了轉出方本身有的余額保存在fromBalance,同時統計了這次允許轉出的額度,根據計算出來的變量,在代碼行56行和57行,跟當前交易的數值做比較,然后計算兩個條件判斷是否本次交易轉出方有足夠的帳戶余額允許做交易,轉出方是不是有足夠的授權做交易。

    探討以太坊智能合約的安全問題

    大家要關注一下代碼行58行,簡單驗證一下如果把這部分錢或者代幣轉入轉入方,轉入方的余額會不會造成溢出。這三個條件加起來就是代碼行滿足條件下授權這次交易。大家能夠意識到代碼行里的判斷條件,特別是在56行,如果判斷交易的轉出方有足夠余額時,后面的fromBalance不是小于等于value,應該是大于等于value,57行應該是也大于等于value,58行也不應該是大于,而應該是小于。

    探討以太坊智能合約的安全問題

    這里有兩個數字錢包,左邊數字錢包是一個普通者用戶,他有1.2345個UET代幣,是我們自己花錢去買的。右邊的數字錢包是攻擊者的,攻擊者開始的代幣余額是零,攻擊發生的時候這些UET代幣是怎么從用戶的數字錢包轉到了攻擊者錢包?因為這個漏洞的存在,即使這個用戶用的是這些冷錢包,這些錢都可以被轉走。

    第二個漏洞,multiOverflow。multiOverflow是每次交易都去做的話可能引起比較高的交易費用,這個函數的作用是把多筆的單筆交易組成一個批處理。它有兩個參數,就是轉入方和轉入的數值,這里面擁有多筆交易,它做成數組,代碼行227和228數值長度是一樣的,才是個有效的數據,數值長度就變成當前有多少個單個交易。

    探討以太坊智能合約的安全問題

    代碼行249-251相當于把這些要轉出的交易的數值做了一個加法,獲取總值之后判斷轉出方有足夠的余額去授權管理,但因為這個漏洞存在,能夠感覺到這個變量有可能溢出,有可能變成零。

    假設這個數值有兩個地址,一個1、一個2,數值等于2的225次方,2個225次方相加得到256次方,造成條件相當于轉出方的余額大于等于1,后面的循環會把單筆交易的value轉到轉入方,同時轉出方做相減,轉出方加這個值等于2的255次方,造成無限生成代幣漏洞 。


    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频