自DeFi兴起以来,在短短9个月时间内迅速风靡全球。BSC凭借低廉的gas和高速壮大的生态应用建立起了日渐完整的生态系统,成功成为了领先的公链平台之一。
数据来源:https://bscscan.com/
如今每天,都有数百个项目在BSC上进行数千万的交易。
图片来自https://twitter.com/BinanceChain/status/1395060714390315008
但是链上交易的热度将另外一个隐患带到了我们面前——安全隐患。
目前可被黑客所利用的不同级别漏洞越来越多。
CertiK安全专家将这些漏洞分为四大类,下文将为各位读者带来DeFi相关安全风险讲解。
智能合约中,某些功能受到函数修改器(modifier)的保护——只有特定的操作者才能调用特定的功能。
在大多数情况下,这些功能是用于修改合约配置或管理智能合约中持有的资金。因此如果攻击者破坏了管理密钥,他们可以完全控制智能合约,调用该功能从而窃取用户资产。
?密钥泄露的原因
第一种可能性是计算机木马程序。?
攻击者可以使用木马程序来窃取存储在计算机上的私钥,或者进行网络钓鱼攻击,以诱用户将其私钥发送给攻击者。
IBM的安全专家预测:2022年,我们会看到区块链将会成为网络犯罪分子较常使用的“工具”:金色财经报道,经历了2021年全球范围内安全威胁的快速演变,2022年会发生哪些重大变化?IBM的安全专家做出了以下五大预测,1)混合云的安全优势凸显;2)区块链将成为网络犯罪的藏身之处。企业和消费者越来越依赖区块链进行供应链管理,我们会发现攻击者也开始合法使用区块链,以便隐藏更长时间而不被发现。 2022 年,我们会看到区块链将会成为网络犯罪分子较常使用的“工具”,以模糊其恶意流量,避开检测,让攻击者隐藏更长时间。这将使防御方越来越难察觉网络上的恶意活动。3)他人遭受的勒索软件攻击可能成为您的问题。?4)供应链攻击将成为备受关注的首要问题。5)对信任的零容忍将重新定义安全态势。?(美通社)[2022/1/24 9:08:51]
对DeFi合约来说,往往是几个人共享一个管理密钥。
这就意味着如果有内部人员心怀不轨,那么他可以调用管理功能将项目的代币转移到自己的钱包地址中。
这里有两个案例:2021年3月5日,PAIDNetwork因其私钥管理不当而遭受“铸币”攻击,经推测攻击者很可能是通过网络钓鱼攻击从管理员的计算机中窃取了密钥。
PAID代币合约位于可升级代理服务器之后,这意味着代币合约可以被代理服务器的所有者替换。
比特币安全专家:机构投资者和主流采用者在面临剧烈波动时进行抛售:比特币安全专家Andreas Antonopoulos今日发推称,机构投资者和主流采用者还没有准备好应对剧烈的价格变化,最终,他们选择抛售这块“烫手山芋”。由于加密货币市场是去中心化的且缺乏监管,完全有可能在一天内大幅下跌超过30%。但在传统金融市场,监管机构可能会因为担心股价进一步大幅下跌而迅速停止交易。(CryptoPotato)[2020/3/15]
这类恶意代码有铸币功能,攻击者销毁6000万个PAID代币,然后为自己铸造了5900万枚代币。
当时2,501,203美元的PAID代币在Uniswap上被出售,代币价格也从2.8美元暴跌为0.3美元。
2021年4月19日,EasyFi创始人声称该黑客为获取管理密钥对管理员进行了针对性的攻击。298万个EASY代币被从EasyFi官方钱包中转移到了几个未知钱包中。
因此安全存储私钥对于项目安全的重要性可见一斑,管理者切忌将未加密的管理员密钥存储在电脑设备上,或将其无防备的放置于Metamask热钱包中。
CertiK安全专家建议管理者使用硬件钱包创建账户。
如果多人团队的每位管理者均使用硬件钱包,一旦其中一位管理者试图进行特权交易,也需获取大部分成员的签署同意,这样可以防止攻击者仅获取一个密钥访问权时就可以调用所有特权功能。
动态 | 安全专家推出新工具帮助开发人员发现泄密文件 避免公共代码库用户私钥被盗:10月17日,程序员和安全专家Paul Price推出新工具Shhgit,可以帮助开发人员实时发现任何意外泄露的机密,给开发人员事件删除任何敏感信息,如GitHub代码库中用户私钥等,以免黑客窃取任何人的私人信息。(Cointelegraph)[2019/10/30]
代币合约应尽可能避免铸造新代币的功能。如果需要铸造新代币,应使用DAO合约或时间锁合约,而非EOA帐户。
编码错误
大家一提到DeFi漏洞,往往会认为漏洞必然是很复杂的,其实并非总是如此。
有时一个小小的编码错误,就可以导致数百上千万美元的资产一朝蒸发。
一些常见的编码错误示例:
1.函数权限,修改器(modifier)缺失
2.错别字
3.数字位数不正确
4.变量值分配缺失/不正确
有一个非常典型的例子就是UraniumFinance曾发生的受攻击事件:黑客攻击了UraniumFinance未受审计的合约,项目因此损失了5700万美元。
管理员在交换前后比较池中两个代币余额的乘积时使用了不一致的乘数,这使得攻击者可以仅用1Wei就从池中换出大量代币。
声音 | 比特币安全专家:加密货币可填补法币空白,也是消除中介机构的一个机会:据AMBcrypto消息,比特币安全专家Andreas Antonopoulos近期接受采访时向公众介绍了加密货币在填补法币空白方面的作用。对话围绕政府和金融机构实施的现有限制展开,Antonopoulos表示,这些限制会导致跨境支付相关的复杂性,并将这种想法与阿根廷、俄罗斯和委内瑞拉因“不良贷款”而面临的经济困境联系起来。 Antonopoulos补充称:“他们(政府官员)将这个负担留给了下一代…‘抢劫’银行的最好办法是持有银行执照,一旦拥有该执照,你就可以‘抢劫’整个银行或国家而不受惩罚。这将中介机构(银行)置于一个可以犯下影响数百万人的重大罪行的位置。”Antonopoulos将加密技术的发展视为消除中介机构的一个机会,并向观众发出警示称,如果政府机构认为有必要,可能会禁止用户使用加密货币。[2019/7/2]
Uraniumfinance的代码:
正确的代码:
另一个例子是ValueDeFi,被黑客攻击导致损失了1000万美元。
此次事件发生的原因在于ValueDeFi合约中的初始化函数缺少“initialized=true”,这意味着任何人都可以将资金池初始化并将自己设置为管理员。
360安全专家彭峙酿:EOS代码漏洞会被慢慢解决:在OracleChain(欧链)主办的“2018全球EOS开发者大会”上,360团队安全专家彭峙酿详细讲解了之前曝光的EOS安全漏洞,并通过视频展示了黑客如何利用安全漏洞远程控制节点。彭峙酿建议超级节点做好Sandbox防护,屏蔽不必要的插件,并且在节点间建立一个私密VPN,不要把主节点暴露给外界。彭峙酿表示,EOS代码目前的确有一些问题,但慢慢会被解决。[2018/6/10]
2021年5月5日,攻击者将资金池初始化,将自己设置为管理员,然后使用“governanceRecoverUnsupported()”函数耗尽了已抵押的代币。
ValueDeFi中的易受攻击的代码:
解决方法:
只需通过适当的同行评审、单元测试和安全审计,这一类型的代码错误往往极易避免。
闪电贷和价格操纵
闪电贷可以在无需提供任何抵押的情况下进行贷款,当然所有操作必须在一个交易区块内完成。
开发人员可以从Aave或dYdX等协议中借贷,条件是在交易结束之前将流动资金返还到资金池中。
如果资金未能及时返回,则交易将被撤回,从而确保储备池的安全。
闪电贷的一般运行步骤如下:
1.使用闪电贷借入大量代币A
2.在DEX上将代币A交换为代币B
3.攻击一个依赖A/B价格的DeFi项目
4.偿还闪电贷
上周PancakeBunny遭受了闪电贷攻击,攻击者窃取了11.4万BNB和69.7万Bunny。
攻击者利用闪电贷操纵PancakeSwapUSDT-BNBV1池的价格,导致大量的BNB流入BNB-Bunny池,这使得该合约能够以虚高的BNB/Bunny的价格铸造Bunny。
PancakeBunny使用了以下函数来计算Bunny的价格:
大量的BNB流入BNB-Bunny池造成变量“reserve0”变得更大,且价格计算公式存在缺陷,因此导致攻击者非法获取了69.7万Bunny。
闪电贷攻击的受害者很多,包括DeFi领域的一些知名项目:PancakeBunny,HarvestFinance,Yearn,ValueDeFi,AKROPOLIS,CheeseBank,XToken,bZx等等。
从这些实例中不难看出——项目方应着重预防价格被闪电贷恶意操纵。
为了防止这种情况的发生,CertiK安全专家建议①使用时间加权平均价格,因为攻击者只能在一个区块中操纵价格,因此平均价格并不会被影响,从而规避相关恶意操纵,②或使用可靠的链上价格预言系统,例如Chainlink。
用户并不与其他第三方协议进行交互。
在PancakeSwap中,用户可以通过提供流动性以获得奖励代币或将一个代币交换为另一个代币。
但其他项目的运作方式并不同。
比如YearnFinance是收集用户资金并将其放入第三方合约,通过投资用户代币以获取收益的。
第三种情况则是一些项目会从其他项目“借用”代码。
后两种情况下,如果第三方代码的来源安全风险较大,那么所有使用该代码的项目也会受到攻击。
假如项目的开发人员不熟悉他们使用的第三方代码,一旦代码存在漏洞,所导致的后果将是灾难性的。
2021年5月8日,ValueDeFivSwapAMM的非50/50池被攻击,损失总额约为1100万美元。
为了实现非50/50池,ValueDeFi从属于Bancor协议的“BancorFormula.sol”中复制了“power()”函数。
在power()函数的用法说明中,已写明该函数并不支持“_baseN<_baseD”的情况。
但ValueDeFi并未注意到此注释,因此攻击者成功利用此漏洞,通过往函数中传入特定的参数来用少量的代币A交换代币B。
ValueDeFi的代码:
DeFi领域中还有许多其他类似的情况。
2021年5月8日,一名攻击者通过利用集成在RariCapitalV2中的AlphaHomoraV1的ibETH池Bank合约的功能,从RariCapitalEthereumPool中消耗了大约2600个ETH。
BearnFinance使用BUSD的提款金额在其“BvaultsStrategy”合约中提取ibBUSD,从而让攻击者轻易转移了池中10,859,319枚BUSD。
这类问题较难检测,因此项目管理者应谨慎与任何第三方协议进行交互,更不应盲目地复制并部署开发人员不了解的代码。
CertiK安全专家建议:
1.开发人员在集成第三方协议并将部署到生产运行过程中之前,应充分了解其及其分支项目的运行情况。
2.开发人员应在项目上线前,先将其部署在测试网上进行测试并及时检查交易记录中的异常情况。
总体而言,尽管项目难以保证100%的安全,但是以下几点可以尽可能提高项目的安全性:
1.安全存储管理员密钥
2.避免简单的编码错误
3.参考可靠的链上价格
4.进行安全审计并做好审计前的准备
对于终端用户来说,在使用个人资产与项目进行交互之前,有时很难找到有关项目的详细信息。
为了方便用户获取项目的安全性信息,CertiK开发了全球首个公开透明展示区块链项目安全数据的安全排行榜。
通过查看公开的安全数据,终端用户可以实时了解项目安全情况。
https://www.certik.org
除以上防范方式以外,所有项目均应意识到安全审计的重要性。
那么审计前为了充分利用发挥安全审计的作用,应该如何准备资料和代码?
以下有几个小tips,详情可以访问:
1.定义审计的确切范围并设定审计目标
2.制作全面的审计代码文档
3.确保良好的代码质量
4.审计前测试代码
5.冻结代码并在审核之前指定代码的commithash
本文主要内容来自币安智能链联合CertiK安全专家共同主持的视频直播。
尊敬的用户: WBF将于2021年5月28日12:00开启CT-HotStar申购。目标抢购额度:5000枚,认购详情如下:? 认购说明: 1、申购时间为5月28日12:00-5月30日23:00,申购完为止;DeFi平台Struct.
1900/1/1 0:00:00链闻消息,数字资产代币销售和发行平台CoinList公布最新CoinListSeed项目名单,主要包括12个项目,具体为.
1900/1/1 0:00:00尊敬的用户: BiKi余币宝将于05月27日23:00开启第83期USDT机池理财,预期年化收益18%.
1900/1/1 0:00:00以太坊扩容在社区中的讨论如火如荼,多个解决方案正在加紧开发,并有望在今年全部上线主网。在整个以太坊Layer2方案爆发的前夕,imToken联合ETHPlanet、EthFans、ECN、上海前沿技术研讨会和HiBlock等多家优秀的.
1900/1/1 0:00:00金色财经报道,以太坊开发者TimBeiko在推特发文表示,希望有关注他的以太坊Ropsten测试网巨鲸发送1000至10000ETH到他的地址,用于测试EIP-1559协议。这是关于EIP-1559最近的一条进度消息.
1900/1/1 0:00:00今日证券时报刊文:数字人民币不会取代第三方支付。推出数字货币,代表的只是基础货币形式的变化,即从有形法定现币进入无形数字货币,从有现金社会进入无现金社会,但原有货币管理系统不会发生太大变动,同时货币的支付渠道和场景也不会出现变异,由此.
1900/1/1 0:00:00