6.18期间正愁”千手观音“还不够剁,如果一觉醒来,突然发现爸妈的账户可以随便用了,前男友的钱因为权限设置错误而面对你以及他所有前女友开放了。不是天上掉馅饼,而是老天可能漏了个洞。 我的是我的,你的还是我的。 这种漏洞恰好于6月18日发生在了Bancor部署的智能合约上。 Bancor 在6月16号部署了他们的 BancorNetwork v0.6的智能合约, 紧接着两天后合约被发现存在严重的安全漏洞。攻击者可利用此漏洞转走合约里的钱。 智能合约可能产生的漏洞有很多种,而本次Bancor智能合约所产生的漏洞与函数有关。 先科普一下,在智能合约里,函数有4种访问权限: Public - 可被所有人调用 External - 只可被外部所调用 Internal - 只可被合约本身以及继承合约调用 Private - 只可被合约本身调用 这里强调一下,当函数权限被设置为public时,任何人都可以调用这个函数,从而把合约里的钱转走。也就是说,当你的前男友不小心把他的钱包权限设置成了公开,那么包括他的现任、前任、前前任在内的世界上的任何人,都可以轻而易举地把他的钱转移走。此刻他一定非常心塞。 下面我们来看一下此次Bancor漏洞的代码: 在漏洞合约的第45行我们看到safeTransferFrom函数,这个函数的功能是从一个地址往另一个地址转账,注意到此函数的权限被设置为public。 有趣的是,CertiK团队通过进一步的调查发现,在有漏洞的合约部署的两天后,Bancor团队用了以下两个钱包地址去通过漏洞提取合约中的资金,来清空合约里的资金,防止被黑客盗取,也算是弥补漏洞的精明之举:
几乎同时,两个第三方人员也开始利用这个漏洞提取资金,其中一位利用漏洞进行了16次取款交易,总共取出了131,889.34美元。这个第三方人员的ETH地址和邮箱分别是:
此人称这个地址的背后是一个自动运行的交易系统,可能会无意利用人为的失误和合约的漏洞获取资金。如果能够证明这个地址通过漏洞得到了钱,他可以把钱归还。 而另一位的地址是以下两个:
他总共进行了四笔取款交易,共提取了3340美元。(折合人民币2万3千元左右,可以足足吃上2000多顿小龙虾。) Bancor对此事件进行了官方回应(详情请见文末“其他参考链接”第一条): 其中有一段提到他们利用这个漏洞把合约里的$455,349的余额转移到另一个钱包里了。 另一段称已与两位第三方人员取得联系,请求他们退回利用合约漏洞而转走的资金。 Bancor随后更新了有漏洞的合约。 可以明显看出public被改为了internal。 造成此严重漏洞的原因是开发人员在设置函数权限的时候犯了错误。在智能合约里,仅仅一个参数使用错误,就可导致合约里所有人的钱都处于危险之中。 值得庆幸的是,此次漏洞并没有被黑客利用,不然用户的钱将永远无法追溯。 智能合约类似于函数调用错误的漏洞还包括但不限于DOS、逻辑错误、越权访问、重入及整数溢出等一千种可能。这一千种可能里面任意的一种可能,都会给公司及用户带来巨大的财产损失,而且合约具有一旦部署就不可更改的属性。 因此,保证智能合约没有漏洞,是非常重要的。合约在部署前,交给专业的安全公司进行安全审计是不可或缺的环节。 CertiK会使用形式化通过数学层面的验证去证明智能合约的正确性。以上则是CertiK安全审计的部分内容。 程序测试可以证明漏洞的存在,但永远不能说明漏洞不存在。 而CertiK的存在,就是为了让漏洞不存在。 我们绝不仅仅是寻找漏洞,而是要消除哪怕只有0.00000001%被攻击的可能性。 文中所提及智能合约及地址链接如下: 存在漏洞的智能合约: https://github.com/bancorprotocol/contracts-solidity/blob/4394c0e1d1785a71044101b1d6df57e332b73ba9/solidity/contracts/utility/TokenHandler.sol 漏洞合约部署的地址: 0x8dFEB86C7C962577deD19AB2050AC78654feA9F7 0x5f58058C0eC971492166763c8C22632B583F667f 0x923cAb01E6a4639664aa64B76396Eec0ea7d3a5f 修改后的智能合约: https://github.com/bancorprotocol/contracts-solidity/blob/master/solidity/contracts/utility/TokenHandler.sol 其他参考链接: https://blog.bancor.network/bancors-response-to-today-s-smart-contract-vulnerability-dc888c589fe4 https://github.com/bancorprotocol/contracts-solidity/blob/4394c0e1d1785a71044101b1d6df57e332b73ba9/solidity/contracts/utility/TokenHandler.sol#L45 https://explore.duneanalytics.com/public/dashboards/mEUEd9rQCPjeMkryEIgbtC0YUZwOXESQPTkkqdPX https://explore.duneanalytics.com/public/dashboards/mEUEd9rQCPjeMkryEIgbtC0YUZwOXESQPTkkqdPX 了解更多 General?Information:[email protected] Audit?&?Partnerships:[email protected] Website:?certik.org Twitter:[email protected] Telegram:?t.me/certik.org Medium:medium.com/certik 币乎:bihu.com/people/1093109 —- 编译者/作者:CertiK中文社区 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
漏洞分析|一千种死法之智能合约函数调用错误
2020-06-24 CertiK中文社区 来源:区块链网络
- 上一篇:美国参议院将审查货币的未来
- 下一篇:中国飞机租赁获批50亿人民币储架式ABS
LOADING...
相关阅读:
- NFT赛道究竟去往何方跟随CHIF财富方向2020-10-29
- 文森话币:全面解读近期比特币为何暴涨暴跌合约操作策略布局2020-10-29
- KKRChain打造新一代价值流通的信任网络2020-10-29
- 涉案77亿!“Wotoken钱包”二审宣判!!!2020-10-29
- CORSWAP分红池首次注入来自于CORALDEX的SUSD手续费分红2020-10-29