區塊鏈是目前比較火熱的話題,縱身而出的虛擬幣也愈來愈多,比特幣,以太坊,瑞波幣,萊特幣,狗狗幣,門羅幣都是基於區塊鏈而生的虛擬貨幣,在監管以及匿名,安全方面受到衆多人的喜歡,不少虛擬幣交易平臺,以及交易所網站也愈來愈多,國內像火幣網,幣安,比特兒,幣行網,可贏可樂都是目前較火的交易所。程序員
目前咱們SINE安全在對虛擬貨幣進行安全檢測以及安全分析,關於2018年以太坊被爆出的合約漏洞,咱們來詳細的跟你們介紹一下,首先查看以前的以太坊代碼,對其仔細的人工檢查發現該以太坊漏洞主要是程序員在設計代碼的時候,對合約安全進行判斷出了差錯,致使攻擊者利用繞過判斷進行攻擊。算法
咱們看下合約代碼:截圖以下安全
從上面的合約代碼看出,代碼的主要功能是對轉幣的函數,以及虛擬幣帳戶的餘額,用戶受權操做,以及提幣操做函數的,在整個代碼中使用判斷來進行約束以太坊幣的交易狀態,從第188行裏還看到使用了一些場外交易中的外幣功能,使用該函數能夠將外幣統一塊兒來提幣到錢包地址進行轉帳操做。那漏洞是怎樣發生的呢?該如何安全防範?咱們接下來繼續講:函數
上面提到的函數是用戶在轉幣的過程當中,對傳入的參數值沒有進行金額的大小限制,無論多少金額均可以轉到用戶的錢包中去,若是轉幣的金額達到5以上就會自動的對虛擬幣金額進行設置,有一套以太坊本身的算法,將自身錢包餘額加上這個金額就等於目前錢包的全部金額,漏洞的發生也在這裏。區塊鏈
轉帳使用的是token機制,每一個用戶的token值都不同,咱們側重的看下轉帳功能函數,因爲轉帳函數處理算法中出現安全問題才致使了漏洞的發生。看以下圖:測試
上面的圖片代碼主要功能是轉帳,轉幣,咱們看下代碼裏寫的判斷條件,當轉幣人自身的金額大於轉幣的金額的時候,參數值會爲1,並有個附加條件就是要知足這個balances的值爲0.能知足這個條件的只有溢出參數了。咱們來測試看下圖:網站
達到這個條件就是 轉幣人的餘額要小於轉幣的金額。每次轉幣都會致使帳戶多出不少幣來,針對於這種以太坊漏洞合約的程序員真應該好好的檢查檢討本身的代碼邏輯判斷問題,因爲判斷條件寫的太過於疏忽才致使該虛擬幣漏洞的發生,很容易被攻擊者用來入侵,轉幣等危險的操做。設計
關於虛擬幣交易平臺安全防禦方面,建議程序員在設計代碼過程當中,屢次的測試,在上線以前找專業的網站安全公司進行安全滲透測試,對漏洞測試,漏洞挖掘,多層面的找漏洞,直到沒問題,再投入到平臺當中去,使整個虛擬貨幣更加的安全規範化,國內也就SINE安全,綠盟,啓明星辰等安全公司比較專業一些。blog