警惕智能合约缝隙:区块链上的“空气”币
颁布功夫 2018-07-13
布景
区块链是近年来最具革命性的新兴技术之一,,,,,以其去中心化、不成篡改等特点,,,,,颠覆了金融等诸多行业的原有规定。。。。。。。区块链现已进入3.0阶段,,,,,“代币合约”作为区块链智能合约中利用最宽泛的一类,,,,,也成为攻击者们的沉要攻击对象。。。。。。。
由于技术发展时忽略了安全先行的理想,,,,,导致多多技术存在大量安全问题,,,,,与传统法式一样,,,,,代币合约无法预防线存在安全缝隙。。。。。。。攻击者能够利用缝隙得心应手地节造市场上的钱币总量或肆意账户的钱币量,,,,,这样使正本就无锚的钱币彻底失去信誉,,,,,成为“空气”币。。。。。。。
智能合约审计
8827太阳集团ADLab近年来持续关注区块链技术安全问题,,,,,通过对以太坊主链[1]智能合约进行钻研,,,,,发现了400多个CVE缝隙。。。。。。。
智能合约缝隙会带来诸多恶性了局,,,,,ADLab结合现实的安全事务,,,,,以及自主发现的缝隙,,,,,对其中的三个类此外缝隙给各人做了分解。。。。。。。
沉入缝隙
2016年6月,,,,,DAO攻击事务在区块链汗青上留下了沉沉的一笔,,,,,黑客利用沉入缝隙,,,,,直接导致以太坊的硬分叉。。。。。。。8827太阳集团ADLab经过钻研发现,,,,,以太坊的智能合约里面依然存在沉入缝隙。。。。。。。下面以BANK_SAFE合约为例进行举例注明。。。。。。。
● 缝隙示例
BANK_SAFE合约中存在典型的代码沉入缝隙,,,,,当通常用户账户挪用Collect函数时,,,,,Collect函数的逻辑没有任何问题,,,,,用户能够顺利的执行取款操作;;;;;但是当另一个智能合约挪用BANK_SAFE合约的Collect函数时,,,,,会产生严沉的安全隐患。。。。。。。
● 预防技术[2]
1. 使用内置的transfer()函数进行转账。。。。。。。由于tranfer()函数只发送2300gas,,,,,因而不及以合约之间的循环挪用。。。。。。。
2. 选取check-effects-interactions模式的编码。。。。。。。在BANK_SAFE合约中,,,,,[49]行的资金扣除操作应该放到[47]行之前。。。。。。。
3. 引入互锁机造。。。。。。。增长一个状态变量锁定合约,,,,,预防沉入挪用。。。。。。。
超额铸币
2018年2月初,,,,,基于以太坊的Monero Gold(XMRG) Token在买卖所的价值先猛涨787%,,,,,后迅速暴跌至崩盘,,,,,造成大量用户经济损失,,,,,其背后就是治理团队利用预留的整数溢露马脚进行超额铸币,,,,,并在买卖所抛售造成恶性通货膨胀,,,,,最后价值险些归零。。。。。。。ADLab使用自动化审计工具发现大量智能合约依然存在同类缝隙。。。。。。。下面以Genesis Vision合约进行举例注明。。。。。。。
● 缝隙示例:CVE-2018-11335
Genesis Vision智能合约固然引入了OpenZepplin的SafeMath数学运算库,,,,,但其刊行钱币的函数mint()却没有使用安全运算函数,,,,,而是直接使用数学运算符。。。。。。。若是精心机关输入参数value,,,,,在[188]行产生整数溢出,,,,,溢出后运算了局幼于TOKEN_LIMIT,,,,,就能够绕过token刊行上限,,,,,实现超额铸币,,,,,最终导致恶性通货膨胀。。。。。。。这类铸币函数的执行通常必要治理员权限,,,,,因而能够看作是一种后门缝隙。。。。。。。
● 预防技术
不容使用数学运算符,,,,,使用SafeMath运算库[3]。。。。。。。
批量转账
2018年4月,,,,,黑客利用BEC智能合约缝隙攻击美链BEC(美蜜币),,,,,成功向两个地址转出了天量级此外 BEC代币,,,,,导致海量BEC被抛售,,,,,使切当日BEC的价值险些归零,,,,,64亿人民币瞬间蒸发。。。。。。。2018年7月,,,,,AMR合约中的缝隙被黑客恶意利用,,,,,导致AMR大量增发。。。。。。。这两次攻击事务都是由于批量转账函数中存在整数溢露马脚,,,,,经ADLab钻研发现,,,,,下表中的智能合约依然存在同类缝隙。。。。。。。
● 缝隙示例:CVE-2018-13836
Rocket Coin (XRC)合约中的multiTransfer函数存在整数溢露马脚,,,,,由于该函数的属性是public,,,,,肆意用户能够挪用该函数进行批量转币操作,,,,,不必要治理员权限。。。。。。。
从Rocket Coin代币的TokenHolders列表能够看出黑客攻击成功的痕迹。。。。。。。
从etherscan.io能够查看黑客攻击时买卖纪录:
https://etherscan.io/tx/0x606316fc06922ae34e6be865e64b23598d74a5e94712447dca37a7ac4c8b30a8#decodetab
从Input Data能够看出攻击者精心机关了_amounts数组,,,,,数组中蕴含两个元素,,,,,元素值皆为极大值,,,,,当执行到[72]行时将产生整数溢出。。。。。。。因而攻击者只破费了极少的token,,,,,便实现批量大额转账。。。。。。。
● 预防措施
不容使用数学运算符,,,,,使用SafeMath运算库[3]。。。。。。。
总结
由于智能合约是一次性颁布上链的,,,,,一旦出现缝隙将难以直接建补。。。。。。。
对于开发者而言,,,,,发现缝隙后只能颁布新的智能合约而后做手动映射,,,,,在功夫、人力、财力上会支出很大的价值。。。。。。。
对于投资者而言,,,,,智能合约上的缝隙很可能会使相应的代币造成“空气”币,,,,,带来更为直接的财富损失。。。。。。。
温馨提醒:
1、区块链是新兴技术,,,,,还需加强对其安全审计和监管能力的器沉。。。。。。。
2、炒币有风险,,,,,入市需审慎,,,,,相识对行情,,,,,回绝做“韭菜”。。。。。。。
3、器沉国度司法律规,,,,,合理投资,,,,,健柯讽财。。。。。。。
参考链接
[1]
https://etherscan.io/contractsVerified
[2]
https://blog.sigmaprime.io/solidity-security.html
[3]
https://github.com/OpenZeppelin/zeppelin-solidity
布景
区块链是近年来最具革命性的新兴技术之一,,,,,以其去中心化、不成篡改等特点,,,,,颠覆了金融等诸多行业的原有规定。。。。。。。区块链现已进入3.0阶段,,,,,“代币合约”作为区块链智能合约中利用最宽泛的一类,,,,,也成为攻击者们的沉要攻击对象。。。。。。。
由于技术发展时忽略了安全先行的理想,,,,,导致多多技术存在大量安全问题,,,,,与传统法式一样,,,,,代币合约无法预防线存在安全缝隙。。。。。。。攻击者能够利用缝隙得心应手地节造市场上的钱币总量或肆意账户的钱币量,,,,,这样使正本就无锚的钱币彻底失去信誉,,,,,成为“空气”币。。。。。。。
智能合约审计
8827太阳集团ADLab近年来持续关注区块链技术安全问题,,,,,通过对以太坊主链[1]智能合约进行钻研,,,,,发现了400多个CVE缝隙。。。。。。。
智能合约缝隙会带来诸多恶性了局,,,,,ADLab结合现实的安全事务,,,,,以及自主发现的缝隙,,,,,对其中的三个类此外缝隙给各人做了分解。。。。。。。
沉入缝隙
2016年6月,,,,,DAO攻击事务在区块链汗青上留下了沉沉的一笔,,,,,黑客利用沉入缝隙,,,,,直接导致以太坊的硬分叉。。。。。。。8827太阳集团ADLab经过钻研发现,,,,,以太坊的智能合约里面依然存在沉入缝隙。。。。。。。下面以BANK_SAFE合约为例进行举例注明。。。。。。。
● 缝隙示例
BANK_SAFE合约中存在典型的代码沉入缝隙,,,,,当通常用户账户挪用Collect函数时,,,,,Collect函数的逻辑没有任何问题,,,,,用户能够顺利的执行取款操作;;;;;但是当另一个智能合约挪用BANK_SAFE合约的Collect函数时,,,,,会产生严沉的安全隐患。。。。。。。
● 预防技术[2]
1. 使用内置的transfer()函数进行转账。。。。。。。由于tranfer()函数只发送2300gas,,,,,因而不及以合约之间的循环挪用。。。。。。。
2. 选取check-effects-interactions模式的编码。。。。。。。在BANK_SAFE合约中,,,,,[49]行的资金扣除操作应该放到[47]行之前。。。。。。。
3. 引入互锁机造。。。。。。。增长一个状态变量锁定合约,,,,,预防沉入挪用。。。。。。。
超额铸币
2018年2月初,,,,,基于以太坊的Monero Gold(XMRG) Token在买卖所的价值先猛涨787%,,,,,后迅速暴跌至崩盘,,,,,造成大量用户经济损失,,,,,其背后就是治理团队利用预留的整数溢露马脚进行超额铸币,,,,,并在买卖所抛售造成恶性通货膨胀,,,,,最后价值险些归零。。。。。。。ADLab使用自动化审计工具发现大量智能合约依然存在同类缝隙。。。。。。。下面以Genesis Vision合约进行举例注明。。。。。。。
● 缝隙示例:CVE-2018-11335
Genesis Vision智能合约固然引入了OpenZepplin的SafeMath数学运算库,,,,,但其刊行钱币的函数mint()却没有使用安全运算函数,,,,,而是直接使用数学运算符。。。。。。。若是精心机关输入参数value,,,,,在[188]行产生整数溢出,,,,,溢出后运算了局幼于TOKEN_LIMIT,,,,,就能够绕过token刊行上限,,,,,实现超额铸币,,,,,最终导致恶性通货膨胀。。。。。。。这类铸币函数的执行通常必要治理员权限,,,,,因而能够看作是一种后门缝隙。。。。。。。
● 预防技术
不容使用数学运算符,,,,,使用SafeMath运算库[3]。。。。。。。
批量转账
2018年4月,,,,,黑客利用BEC智能合约缝隙攻击美链BEC(美蜜币),,,,,成功向两个地址转出了天量级此外 BEC代币,,,,,导致海量BEC被抛售,,,,,使切当日BEC的价值险些归零,,,,,64亿人民币瞬间蒸发。。。。。。。2018年7月,,,,,AMR合约中的缝隙被黑客恶意利用,,,,,导致AMR大量增发。。。。。。。这两次攻击事务都是由于批量转账函数中存在整数溢露马脚,,,,,经ADLab钻研发现,,,,,下表中的智能合约依然存在同类缝隙。。。。。。。
● 缝隙示例:CVE-2018-13836
Rocket Coin (XRC)合约中的multiTransfer函数存在整数溢露马脚,,,,,由于该函数的属性是public,,,,,肆意用户能够挪用该函数进行批量转币操作,,,,,不必要治理员权限。。。。。。。
从Rocket Coin代币的TokenHolders列表能够看出黑客攻击成功的痕迹。。。。。。。
从etherscan.io能够查看黑客攻击时买卖纪录:
https://etherscan.io/tx/0x606316fc06922ae34e6be865e64b23598d74a5e94712447dca37a7ac4c8b30a8#decodetab
从Input Data能够看出攻击者精心机关了_amounts数组,,,,,数组中蕴含两个元素,,,,,元素值皆为极大值,,,,,当执行到[72]行时将产生整数溢出。。。。。。。因而攻击者只破费了极少的token,,,,,便实现批量大额转账。。。。。。。
● 预防措施
不容使用数学运算符,,,,,使用SafeMath运算库[3]。。。。。。。
总结
由于智能合约是一次性颁布上链的,,,,,一旦出现缝隙将难以直接建补。。。。。。。
对于开发者而言,,,,,发现缝隙后只能颁布新的智能合约而后做手动映射,,,,,在功夫、人力、财力上会支出很大的价值。。。。。。。
对于投资者而言,,,,,智能合约上的缝隙很可能会使相应的代币造成“空气”币,,,,,带来更为直接的财富损失。。。。。。。
温馨提醒:
1、区块链是新兴技术,,,,,还需加强对其安全审计和监管能力的器沉。。。。。。。
2、炒币有风险,,,,,入市需审慎,,,,,相识对行情,,,,,回绝做“韭菜”。。。。。。。
3、器沉国度司法律规,,,,,合理投资,,,,,健柯讽财。。。。。。。
参考链接
[1]
https://etherscan.io/contractsVerified
[2]
https://blog.sigmaprime.io/solidity-security.html
[3]
https://github.com/OpenZeppelin/zeppelin-solidity


京公网安备11010802024551号