溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行EDU及BAI任意轉走賬戶Token事件回顧分析

發布時間:2021-12-24 11:00:20 來源:億速云 閱讀:109 作者:柒染 欄目:安全技術

這期內容當中小編將會給大家帶來有關如何進行EDU及BAI任意轉走賬戶Token事件回顧分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

事件背景

2018年5月23日晚間,EDU(EduCoin)被爆出現合約漏洞,多達數十億代幣被盜。EduCoin是建立在區塊鏈和智能合約技術基礎上,面向在線教育內容分享和服務的去中心化教育平臺,而EDU是基于以太坊ERC-20協議發行的項目代幣,總量150億。

在曝出合約漏洞之前,EDU的交易K線就已出現了大量拋售的現象。從2018年5月20日午夜開始,大量EDU被人拋售,而持續的拋售帶來的則是市場的進一步恐慌,EDU的價格持續走低,直到EDU的交易對被迫關停,期間累計售出的EDU超過20億。

黑客之所以非常容易得竊取了代幣,正是因為EDU的智能合約,存在一個非常大的安全漏洞。

漏洞概述

針對EDU&BAI智能合約出現的問題,BUGX團隊做了一些簡單分析,僅供參考:

在 transferFrom 函數中,未校驗 `allowed[_from][msg.sender] >= _value` 并且函數內 `allowed[_from][msg.sender] -= _value`; 沒有使用 SafeMath,導致無法拋出異常并回滾交易。目前發現有大量洗劫行為,攻擊者不需要私鑰即可轉走你賬戶里所有的 EDU,并且由于合約沒有 Pause 設計,導致無法止損。 

本漏洞目前被發現在EDU及BAI合約中。 

合約轉賬情況: 

EDU: < https://etherscan.io/token/0xa0872ee815b8dd0f6937386fd77134720d953581> 

BAI:< https://etherscan.io/token/0x14d9779b6585f3a7d4f768383b3cb030705dad2e> 

漏洞原理

合約中漏洞代碼如下:    

// 批準轉賬上限(批準目標可以代我轉賬的上限)
    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }
 // 代我轉賬的流程
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        /// same as above
        require(_to != 0x0); // 檢測轉賬對象非空地址
        require(balances[_from] >= _value); // 檢測被轉賬者余額大于_value
        require(balances[_to] + _value > balances[_to]);
        uint previousBalances = balances[_from] + balances[_to];
        balances[_from] -= _value;
        balances[_to] += _value;
        // 減少從被轉賬者到本交易發起者的允許轉賬額度,但沒有做異常檢測,導致報錯后繼續執行
        allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        assert(balances[_from] + balances[_to] == previousBalances);
        return true;
    }

可以看出,這個流程并沒做 allowed[ _from][msg.sender] 和 _value 的判斷,比如函數開始應該判斷: 

require(allowed[ _from][msg.sender] >= _value);

如果 allowed[ _from][msg.sender] 不存在,那么值是 0,判斷缺失,也就等于之前的 approve 函數形同虛設。然后,這還出現了個有趣的溢出: 

allowed[ _from][msg.sender] -= _value;

當 allowed[ _from][msg.sender] 不存在,那么值是 0,減去 _value(大于 0 時),就溢出了(溢出并不會導致中斷回滾)。這就是為什么如果用了 SafeMath 就會沒問題,因為 SafeMath 會拋出錯誤,直接中斷回滾 transferFrom 函數。 

整體這樣看下來,EDU 和 BAI 等合約的 transferFrom 盜幣事件最核心的問題是權限問題,溢出在這僅僅是個小插曲而已。 

本地復現

使用Remix即可簡單復現。 

1 部署合約 

EDU:< https://etherscan.io/address/0xa0872ee815b8dd0f6937386fd77134720d953581#code> 

BAI:< https://etherscan.io/address/0x14d9779b6585f3a7d4f768383b3cb030705dad2e#code> 

2 執行攻擊 

被轉賬者(使用合約創建者地址即可):0xca35b7d915458ef540ade6068dfe2f44e8fa733c 

攻擊者:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c 

transferFrom里輸入內容并執行:"0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x14723a09acff6d2a60dcdf7aa4aff308fddc160c","3" 

可以看到攻擊者余額增加了,變為3。

如何進行EDU及BAI任意轉走賬戶Token事件回顧分析

上述就是小編為大家分享的如何進行EDU及BAI任意轉走賬戶Token事件回顧分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女