这个漏洞恰好发生在6月18日Bancor部署的智能合约上。
Bancor在6月16日部署了他们的BancorNetworkv0.6智能合约,然后两天后发现合约存在严重的安全漏洞。攻击者可以利用这个漏洞转走合约里的钱。
智能合约可能会有很多漏洞,而这次Bancor智能合约的漏洞与函数权限有关。
在智能合约中,函数有4种访问权限,分别是Public(可被所有人调用)、External(只可被外部调用)、Internal(只可被合约本身及继承合约调用)和Private(只可被合约本身调用)。
需要强调的是,当函数权限设置为public时,任何人都可以调用这个函数,将合约中的钱转走。也就是说,如果你的前男友不小心将他的钱包权限设置为公开,那么包括他的现任、前任和前前任在内的任何人,都可以轻易地把他的钱转走。这对他来说肯定很郁闷。
接下来我们来看一下Bancor漏洞的代码。
在漏洞合约的第45行,我们看到了safeTransferFrom函数,它的功能是将钱从一个地址转到另一个地址,注意到该函数的权限被设置为public。
有趣的是,CertiK团队通过进一步调查发现,在有漏洞的合约部署两天后,Bancor团队用两个钱包地址来提取合约中的资金,以防止被黑客盗取。同时,两个第三方人员也开始利用这个漏洞提取资金。其中一位利用漏洞进行了16次取款交易,总共取出了131,889.34美元。这个第三方人员的ETH地址和邮箱分别是0x052ede4c2a04670be329db369c4563283391a3ea和[email protected]。他声称这个地址背后是一个自动运行的交易系统,可能会无意利用人为失误和合约的漏洞获取资金。如果能够证明这个地址通过漏洞获取了钱,他可以将资金归还。而另一位的地址是0x854B21385544c44121f912AEdF4419335004F8ec和0x1ad1099487b11879e6116ca1ceee486d1efa7b00,他总共进行了四笔取款交易,共提取了3340美元。
Bancor对此事件进行了官方回应,其中提到他们使用漏洞将合约中的455,349美元转移到另一个钱包。他们还联系了两位第三方人员,请求他们退还利用合约漏洞转走的资金。随后,Bancor更新了有漏洞的合约,将public修改为internal。
这次严重漏洞发生的原因是开发人员在设置函数权限时犯了错误。在智能合约中,只要一个参数使用错误,就会导致合约中所有人的资金处于危险中。
幸运的是,这次漏洞没有被黑客利用,否则用户的资金将永远无法追回。
智能合约可能存在许多漏洞,包括但不限于DOS、逻辑错误、越权访问、重入和整数溢出等。这些漏洞中的任何一个都会给公司和用户带来巨大的财产损失,而且合约一旦部署就无法更改。
因此,确保智能合约没有漏洞非常重要。在部署合约之前,将其交给专业的安全公司进行安全审计是必不可少的环节。
CertiK通过数学验证在形式层面上证明智能合约的正确性,他们的目标是消除即使是0.00000001%被攻击的可能性。他们不仅仅寻找漏洞,而是要让漏洞不存在。
以上是CertiK安全审计的部分内容。
需要注意的是,程序测试只能证明漏洞的存在,而不能证明漏洞不存在。
文中提到的智能合约和地址链接可以在以下链接找到:
存在漏洞的智能合约: 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
一、什么叫智能合约 智能合约是时下趋之若鹜的区块链专有名词,其火爆水平与其说定义的模糊不清水平相伴相生。PeterTodd就曾坦言:“没人了解智能合约到底是啥,大家应当必须推测机去执行它。”要了解智能合...
如今我们的日常生活基本上离不了合同书,往大说,工作中是与企业签署的劳动合同书,购房是与房地产公司签署买房合同,购买保险是与车险公司签署保险合同;往变小说,网上购物、定外卖送餐、打的、购买彩票全是与有关的服务项目给予...
比特币有智能合约吗?当然。通用术语中的智能合约是一种数字化协议,在满足预定标准时自动执行。比特币是支持多种智能合约以支持多笔交易的领先货币之一。比特币经过重大升级,使加密货币能够轻松处理更复杂的交易。这些智能合约为加密货...
通过 zkSNARKs 证明机器学习 (ML) 模型推理有望成为这十年智能合约最重要的进步之一。这一发展开辟了一个令人兴奋的大设计空间,允许应用程序和基础设施发展成为更复杂和智能的系统。 通过添加 ML 功能,智能...