• <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>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 3398
    • 0
    • 分享到

    智能合約屢現漏洞,該如何選擇安全的幣種?

    2018-8-8 22:08

    來源: hellobtc

    大白導讀:區塊鏈,無疑是近兩年最火熱的頭條詞語。隨著這項分布式存儲技術的崛起,寄托于區塊鏈技術的數字貨幣也成為了投資熱門。除了比特幣是基于自身的底層架構而來,現在市面上大多數數字貨幣,都是通過以太坊智能合約發出。這種方式,雖然讓人們可以更為便利地進行融資,但是智能合約安全問題卻成了重大的隱患。

    發展了這么多年的互聯網,都常遇到各類的黑客襲擊事件。作為“新生寵兒”的區塊鏈,又怎么會沒人覬覦呢?有人會說,如果我們的數字貨幣在以太坊區塊鏈上,除非發生51%攻擊,不然被盜的可能性很低。沒錯,這對以太坊主網來說確實如此,但是不代表智能合約不會有問題。

    比如7月8日,AMR項目被爆出智能合約中的漏洞可以讓黑客無限生成代幣,而由于該項目當時已經上線交易所,黑客可以通過這些“假幣”進行砸盤獲利,這也就意味著黑客可以“無限印鈔”,最終導致的是普通投資者的巨大損失。

    一、導致代幣增發的“整數溢出”漏洞是什么?

    該項目的智能合約中,整數溢出的重大漏洞,使得黑客可以憑空打造出無限的AMR代幣。

    所謂的整數溢出,就是說如果兩個8位變量A和B按位相乘,結果超出8位,超出位將被丟棄,只保留后8位長度。該漏洞中產生溢出的變量名為totalTokensToTransfer,該變量類型為uint,在Solidity中,uint長度為256位,所以只要累加超過2^256-1大小的數,將會導致整數溢出。

    例如以下的公式,在發生整數溢出的時候,最前面的“1”就會被丟棄,那么整個totalTokensToTransfer的值就會被置零。而totalTokensToTransfer表示轉出代幣的總量,并且為了保證轉出的代幣不能超過自己的余額,合約中也進行了校驗。

    整數溢出原理


    如果發生了整數溢出,就會造成以下代碼第198行的情況,totalTokensToTransfer=0。換句話說,這時候程序會認為你的轉出代幣總量為零,只要你的余額中有少量代幣,就可以繞過代碼第203和205行的驗證,從而完成轉賬。然而事實上,totalTokensToTransfer是個非常大的數值,只不過這時候代碼無法檢驗出來而已,從而黑客就可以“憑空”造出無數代幣。

    ?整數溢出攻擊后的代碼

    這類智能合約的漏洞,其他項目方也曾出現過。例如SMT和BEC的漏洞,就和AMR的漏洞非常類似。它們都是由于沒有進行大數保護,從而造成整數溢出,形成了“無限印鈔”的現象。

    針對智能合約中,沒有大數保護的漏洞,其解決方法其實很簡單。很多代碼是因為直接使用普通的加減乘除符號,但缺少了整數溢出判斷,從而造成數據溢出的隱患,而使用library SafeMath可以徹底解決數據溢出的問題。因此,只需要徹查智能合約代碼,把其中的“+” “-” “*” “/”換成library SafeMath,就可以徹底解決數據溢出的問題。

    二、整數溢出攻擊的受害者都有誰?

    其實不用說,代幣被溢出漏洞攻擊導致增發,所有持幣者將遭受損失,這其中就包括,項目方和投資者。

    黑客為啥會攻擊項目呢?道理很簡單,項目代幣已經上線交易所,且有不錯的交易深度。如果黑客能夠無限獲得代幣,也就意味著可以無限砸盤,從交易所直接獲利。

    比如SMT項目,在4月25日發生了智能合約漏洞事件后,SMT幣價大幅降低,因此暴跌近20%,而且從此一蹶不振,幣價持續走弱。所以這類漏洞事件,不僅會對投資者造成影響,也會對項目方造成信任危機,甚至直接導致代幣歸零。

    好在SMT在被攻擊之后,作出了積極的回應。首先是相關交易所停止了交易,并凍結了“假幣”及大額砸盤者的賬戶,從而防止黑客將資產轉移;其次是SMT基金會凍結同等數量的SMT“真幣”,以保證外面流通的代幣總量不變;最后暫停SMT交易直到智能合約重新校驗完成。

    ?SMT價格趨勢

    BEC(美鏈)同樣在被“溢出”漏洞攻擊后,遭遇黑客拋售“假幣”砸盤的悲慘命運。BEC市場瞬間蒸發64億人民幣的市值,使得BEC價格接近歸零。最后交易所中止了交易,并且選擇了交易數據回滾,盡可能地降低因此造成的損失。

    ?BEC價格趨勢


    三、如何應對合約漏洞?

    智能合約漏洞不斷,除了這類整數溢出的漏洞,還有重入攻擊,當年大名鼎鼎的THE DAO就被黑客利用這種漏洞攻擊而導致大量的以太幣被盜走的。重入攻擊原理其實也不復雜:以太坊網絡可以調用外部合約,但是外部調用存在被攻擊者劫持的風險,并在被攻擊的合約上進行惡意操作,從而導致資產被盜。所謂“重入”,就是黑客在外部合約的任意位置“重新輸入”了其他代碼執行,代碼被黑客篡改了。除此之外,還有重放攻擊、重排攻擊、短地址攻擊等等。

    面對如此多的被黑客攻擊的事件,我們是否能從中吸取教訓,盡量減少這種攻擊事件及減少投資的損失呢?

    對于項目方而言,毫無疑問需要去審核項目的代碼,不僅是項目團隊自身審核,更需要專業的第三方安全機構來審核,并且給出專業的檢驗報告。同時,項目方最好能設立專門的“保險資金”,來應對此類由于安全問題而造成的損失。

    對于交易所而言,應該在代幣上線交易所之前,就對其代碼的安全性進行審核。對于上線的代幣,應該實時監控各類代幣是否有大額鏈上轉入的情況。如有異常,應該立刻鎖定對應賬戶進行排查。如果已經發生砸盤現象,需要做到快速凍結對應賬戶,防止其將資產轉移,必要時進行數據回滾,最大化降低損失。

    對于投資者而言,在投資之前,如果沒有相應的判斷能力,建議選擇那些已經經歷過長時間檢驗的市值靠前的幣種,相對來說它們存在重大漏洞的風險比較小。如果選擇投資“新幣”,代碼的安全問題是一個不可忽視的問題,投資者最好是具備相應的識別能力,同時需要項目方給出相應的智能合約檢測報告,以及確保項目方設立了專門的“保險資金”,從而減少投資風險。

    如果遇到“整數溢出”這類攻擊,項目方應拿出對應數量“真幣”來鎖定,確保整體流通量不變;同時聯系交易所暫停交易并凍結嫌疑賬戶;之后代碼的修復以及代碼全面的審核,避免重蹈覆轍。如果是有擔當的項目發,還應該在二級市場進行回購,保證代幣價格的穩定。這些方法雖是“亡羊補牢”,這樣能盡可能減小投資者損失以及重建投資者的信心。

    對于整個行業而言,代碼審計應該形成行業規范,面對不進行代碼審查的項目方,交易所就不應該給予上線機會。不提供第三方代碼審計報告的項目,投資者也應該敬而遠之!

    區塊鏈技術發展時間不長,但是速度卻很快。然而跑得太快,很多時候就意味著風險如果項目方在想著追趕風口時,卻忽視了最重要的“基本功”,連關鍵的代碼安全都無法保障,最后的結局可能是“欲速則不達”!

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系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>
      妖精视频