作者:zxx友善@360 0KEE Team
來源:https://www.jianshu.com/p/c5363ffad6a7
最近通過對智能合約的審計,發現了一些智能合約相關的安全問題。
其中我們發現智能合約Hexagon存在溢出攻擊,可產生無數的token,導致整個代幣都沒有意義。 Token地址:https://etherscan.io/address/0xB5335e24d0aB29C190AB8C2B459238Da1153cEBA
該代幣可能要上交易所,我們已第一時間向官方通知該問題。

目前發現受影響合約地址:

成因分析
問題出現在_transfer函數當中,當調用transfer轉幣時,會調用_transfer函數:
/* Send tokens */
function transfer(address _to, uint256 _value) public returns (bool success) {
_transfer(msg.sender, _to, _value);
return true;
}
_value可控,burnPerTransaction為常量,當_value + burnPerTransaction溢出時為0,可以導致繞過驗證。
/* INTERNAL */
function _transfer(address _from, address _to, uint _value) internal {
/* Prevent transfer to 0x0 address. Use burn() instead */
require (_to != 0x0);
/* Check if the sender has enough */
require (balanceOf[_from] >= _value + burnPerTransaction);
/* Check for overflows */
require (balanceOf[_to] + _value > balanceOf[_to]);
/* Subtract from the sender */
balanceOf[_from] -= _value + burnPerTransaction;
/* Add the same to the recipient */
balanceOf[_to] += _value;
/* Apply transaction fee */
balanceOf[0x0] += burnPerTransaction;
/* Update current supply */
currentSupply -= burnPerTransaction;
/* Notify network */
Burn(_from, burnPerTransaction);
/* Notify network */
Transfer(_from, _to, _value);
}
string public constant name = "Hexagon";
string public constant symbol = "HXG";
uint8 public constant decimals = 4;
uint8 public constant burnPerTransaction = 2;
漏洞利用
合約中 burnPerTransaction = 2 ,
所以當轉賬_value為0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe時,
_value + burnPerTransaction =0 ,即可成功攻擊,為balanceOf[_to]增加大量代幣。
require (balanceOf[_from] >= _value + burnPerTransaction);
// require (balanceOf[_from] >= 0);
[....]
require (balanceOf[_to] + _value > balanceOf[_to]);
balanceOf[_from] -= _value + burnPerTransaction;
// balanceOf[_from]-=0
balanceOf[_to] += _value;
//balanceOf[_to]+=fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
可參考下圖Transcations,目前生成的代幣已銷毀:

總結
建議使用 SafeMath 來處理計算操作,避免溢出。
同時,以太坊智能合約有很多開源合約,使用參考開源合約前,應對代碼進行安全審計。
關于我們
0KEE Team隸屬于360信息安全部,360信息安全部致力于保護內部安全和業務安全,抵御外部惡意網絡攻擊,并逐步形成了一套自己的安全防御體系,積累了豐富的安全運營和對突發安全事件應急處理經驗,建立起了完善的安全應急響應系統,對安全威脅做到早發現,早解決,為安全保駕護航。技術能力處于業內領先水平,培養出了較多明星安全團隊及研究員,研究成果多次受國內外廠商官方致謝,如微軟、谷歌、蘋果等,多次受邀參加國內外安全大會議題演講。目前主要研究方向有區塊鏈安全、WEB安全、移動安全(Android、iOS)、網絡安全、云安全、IOT安全等多個方向,基本覆蓋互聯網安全主要領域。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/604/
暫無評論