ETHER:SMT/BEC 合约整数溢出解析——Solidity 合约中的整数安全问题_ASH

链闻ChainNews:

在传统的桌面windows攻防对抗领域,伴随着微软和合作伙伴对软件开发流程推行SDL规范,同时对安全投入的逐步加大,单一的封包超长和文件特定字段内容超长导致的溢出漏洞在一些大型软件里几乎绝迹。目前,零星剩下了一些整数类的漏洞。如去年的nginxcve-2017-7529。而区块链方向,比较早的整数溢出类漏洞可追溯到2010年的比特币大整数溢出,CVE-2010-5139,黑客通过整数溢出构造了大概92233720368

?//0-1=2**256-1functionunderflow()returns(uint256_underflow){uint256min=0;returnmin-1;}}

在线测试工具中编译运行结果如下。

可以看到uint256当取最大整数值,上溢之后直接回绕返回值为0,uint256当取0下溢之后直接回绕,返回值为2^256-1。这是solidity中整数溢出场景的常规情况。

动态 | 研究:隐私币与比特币基本保持同步:Longhash通过分析隐私币 Monero,Zcash 和 Dash 在 Coin Metrics与比特币价格之间的相关性发现,Monero 和 Dash 的价格与比特币的价格密切相关,相关性分别为0.86、0.78。Zcash 的价格也与比特币价格相关,尽管并不那么紧密。不过,值得注意的是,这三种代币在 2017 年和 2018 年都与比特币高度相关,但是在 2019 年迄今为止,Zcash 和 Dash 仅显示出与比特币的弱相关性。不过,2019年下半年(7 月 1 日至 12 月 9 日)这三种代币与比特币的相关性又再次变强了。这意味着,就目前而言,隐私币与比特币基本上是保持同步的。[2019/12/13]

1

functiondiv(uint256a,uint256b)internalconstantreturns(uint256){//assert(b>0);//Solidityautomaticallythrowswhendividingby0uint256c=a/b;//assert(a==b*ca%b);//Thereisnocaseinwhichthisdoesn'tholdreturnc;}

动态 | 欧洲刑警组织:暗网中隐私币的使用率有上升的趋势:据TNW消息,欧洲刑警组织(Europol)近日发布报告指出,比特币仍然是暗网使用率最高的加密货币。但该部门同时表示,暗网中隐私币的使用率有上升的趋势,譬如一些市场也开始接受类似Monero这样的隐私币,预计随着犯罪分子安全意识的增强,这种趋势将继续下去。[2019/10/14]

functionsub(uint256a,uint256b)internalconstantreturns(uint256){assert(b<=a);returna-b;}

functionadd(uint256a,uint256b)internalconstantreturns(uint256){uint256c=ab;assert(c>=a);returnc;}}

可以看到相关的可能产生溢出的操作都单独封装成函数,加入assert断言做判断避免溢出。调用SafeMath库的方法如下。

声音 | 权利组织EFF和ORG:和加密立法可能会伤害开源生态系统,反对监管隐私币:据The Register消息,非营利组织电子前沿基金会(EFF)和在线基层组织英国开放权利集团(ORG)回应了英国财政部关于欧盟第五次反指令(5MLD)的咨询,特别是关于发布开源软件是否应遵守客户尽职调查(CDD)要求的建议。 EFF和ORG表示,“我们以前见过这种对开源软件发布的攻击,这些监管提议不仅会对区块链生态系统的新兴技术产生巨大而不可预测的后果,也会对整个FLOSS(免费、自由和开源软件)软件生态系统产生巨大而不可预测的后果。” 两个组织认为,尽管监管加密软件的想法听起来很合理,但这可能会产生意想不到的后果。“此类法规将加重多个行业的负担,以确保它们的软件不会被视为加密计划基础设施的一部分。”它们建议,监管开源软件最好分开进行,而不是在5MLD立法范围内进行。 两个组织也反对监管隐私币,认为这些币是一件好事,“隐私币有潜力通过将公民离线享有的一些保护引入数字世界,从而增强人权。此外,任何区分隐私币和非隐私币的尝试都是有问题的。”[2019/6/12]

2.SMT合约中的整数安全问题简析

分析 | XMR、DASH、XVG、GRIN等隐私币市值已处于偏低状态? ?:据 TokenGazer量化模型显示,目前XMR、DASH、XVG、GRIN市值已处于偏低状态。日前,门罗完成了分叉升级,强化了隐私和安全方面的问题,但是从门罗的市场表现来看,市场对门罗的动态缺乏回应,包括此前热议的grin,在经历了一段时间的市场追捧之后,也重归平静。而随着数字货币的发展,隐私需求越来越强,隐私币的应用场景越来越丰富,其价值将逐渐凸显。所以,TokenGazer认为,隐私类区块链项目在未来数字货币领域将占据重要席位,投资者需关注相关项目发展进程。[2019/3/12]

与大型软件或者操作系统动辄十万行甚至千万行代码不同,智能合约的代码行数通常不多,功能也不是很复杂。一起来看下SMT合约的相关代码。

SMT的合约地址是https://etherscan.io/address/0x55f93985431fc9304077687a35a1ba103dc1e081#code问题存在于transferProxy()函数代码如下

声音 | BM在电报群中回复用户关于隐私币的疑问:BM在 EOS Privacy电报群中回复了用户有关隐私币的问题:1.能否经受住高度复杂的人工智能技术的攻击? BM:是有可能的。2.如果共享数据库,谁来存储所有数据呢? BM:分布式的,在成千上万的节点中。3.如果用户不销毁自己的私钥,创建者可以随时转移其他用户的资金吗? BM:不行,除非通货膨胀(之前提过,该隐私币不会有通货膨胀)。4.它会有流动性吗? BM:在交易所会有。5.是否需要接收方和发送方同时在线才能进行转账? BM:接收方需要生成唯一的一次性使用地址进行转账。提醒,目前所有关于该隐私币的讨论仍处于论证其可行性的状态。[2018/12/3]

在进行加法操作的时候没有采用Safemath库进行约束。_feeSmt参数和_value参数均可以被外界进行控制,_feeSmt和value均是uint256无符号整数,相加后最高位舍掉,结果为0。

直接溢出绕过代码检查导致可以构造巨大数量的smt代币并进行转账。

攻击者的恶意转账记录可以从如下链接进行看到。https://etherscan.io/tx/0x1abab4c8db9a30e703114528e31dee129a3a758f7f8abc3b6494aad3d304e43f

3.BEC合约中的整数安全问题简析

BEC的合约地址是0xC5d105E63711398aF9bbff092d4B6769C82F793D,合约代码可以访问etherscan的如下网址进行查看https://etherscan.io/address/0xc5d105e63711398af9bbff092d4b6769c82f793d#code。代码一共是299行。

问题函数如下图。

可以看到batchTransfer函数中,语句balances=balances.sub(amount)和balances]=balances].add(_value)中,调用Safemath库中的安全函数来完成加减操作,但是在第三行代码,uint256amount=uint256(cnt)*_value却直接使用乘法运算符。

其中变量cnt为转账的地址数量,可以通过外界的用户输入_receivers进行控制,_value为单地址转账数额,也可以直接进行控制。乘法运算溢出,产生了非预期amount数值,并且外界可以通过调整_receivers和_value的数值进行操控。紧接着下面有一句对amount进行条件检查的代码require(_value>0&&balances>=amount);其中balances代表当前用户的余额。amount代表要转的总币数。代码意思为确保当前用户拥有的代币余额大于等于转账的总币数才进行后续转账操作。因为通过调大单地址转账数额_value的数值,amount溢出后可以为一个很小的数字或者0,很容易绕过balances>=amount的检查代码。从而产生巨大_value数额的恶意转账。

攻击者的恶意转账记录,可以从如下链接看到https://etherscan.io/tx/0xad89ff16fd1ebe3a0a7cf4ed282302c06626c1af33221ebe0d3a470aba4a660f。

可以从代码totalSupply进行看到,bec代币总量共计才7000000000枚。

但是攻击者通过溢出amount绕过后续require中的判定条件分别向两个地址恶意转账了57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968枚bec代币。

4.合约整数漏洞事件总结

单纯从技术上来说,smt和bec的本次合约的漏洞成因和利用都不复杂,均是通过构造恶意的整数溢出绕过条件检查。相信以太坊生态下的其他数千种代币的合约也不同程度的存在类似的整数漏洞安全隐患,由于Solidity合约是直接跟钱打交道,合约的安全开发和审计值得ICO项目方和Solidity开发人员投入更多时间和精力,确保合约的安全性。

参考链接:https://ethereumdev.io/safemath-protect-overflows/https://zhuanlan.zhihu.com/p/35989258?utm_medium=social&utm_member=ZjZlYmQ1MGZkMjZjZmJkNTE4MGFmMmExZjA5NTM0NmE=&utm_source=wechat_session&wechatShare=1&from=timeline&isappinstalled=0

更多精彩内容,关注链闻ChainNews公众号,或者来微博@链闻ChainNews与我们互动!转载请注明版权和原文链接!

来源链接:www.8btc.com

本文来源于非小号媒体平台:

链闻研究院

现已在非小号资讯平台发布1篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/3626905.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

下一篇:

文摘|确保加密货币安全的十条戒律

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:15ms0-2:181ms