主页 > 安卓版下载imtoken官网 > 国家区块链漏洞库:DeFi生态安全威胁风险等级高

国家区块链漏洞库:DeFi生态安全威胁风险等级高

安卓版下载imtoken官网 2023-06-26 06:48:01

近期,DeFi安全事件频发。 国家区块链漏洞库收录的安全事件包括shroom.finance项目无限发行代币、Unicats项目被授权攻击、Balancer项目被攻击、Akropolis和OUSD被黑客重入攻击等。 DeFi生态安全威胁风险等级高。

一、DeFi目前的整体发展

2017年12月,全球首个DeFi项目Maker正式上线。 今年以来usdt检测,DeFi 发展迅猛,尤其是 6 月至 11 月,DeFi 锁定资产价值从 10 亿美元增长到约 180 亿美元,增长了 1700%。 高峰期项目数量超过500个。目前DeFi的主要产品类型包括借贷市场、去中心化交易所(DEX)、衍生品、支付网络、代币化资产等。此外,根据用途和代币特性,DeFi还有基础设施、数据服务、钱包、稳定币等类别。

usdt检测_cex usdt_usdt风险

图1 主要DeFi项目类型的总锁定价值(TVL)占比

随着DeFi项目的快速发展,围绕DeFi的各种安全事件也开始频频发生。

2. DeFi安全现状

(一)DeFi在各链平台的安全状况

根据国家区块链漏洞库今年DeFi安全事件统计,82.61%的安全事件发生在以太坊上。 TRON区块链占比6.52%,EOS区块链占比4.35%,其他区块链占比6.52%。

cex usdt_usdt检测_usdt风险

图2 各区块链DeFi安全事件占比

(2) DeFi项目的安全问题

cex usdt_usdt风险_usdt检测

1.无限发行的问题

无限发行是指智能合约存在漏洞,可以非法调用发行函数,让攻击者可以随意进行发行币的操作过程。

DeFi 项目方可以通过增加铸币者权限来增发代币。 此外,还有将本应具有铸币权限的治理合约地址替换为项目方持有的外部地址,从而使项目方可以无限铸币的情况。 还有一些项目方没有写时间锁,导致没有时间限制无限增币。 例如,DeFi 项目 shroom.finance 没有时间锁定,导致代币无限发行。

2.授权攻击问题

授权攻击是指攻击者利用合约逻辑漏洞,获取其他用户授权的合约权限,随意转移用户的代币。

投资者在参与DeFi项目时,为了方便起见,通常需要将所有代币授权给合约地址,避免用户在后续操作中重复授权。 在这种情况下,每次合约转让都需要用户签名。 如果一开始就给合约地址授权1000万,可以避免不必要的重复操作。 但是,如果有恶意者利用合约权限调用ERC20代币中存在的transferFrom函数来实现代理转账。 那么用户钱包中的所有代币都可以被攻击者随意操纵。 在欺诈项目Unicats中,项目方留下了可以绕过判断条件的权限,相当于地址白名单,可以利用合约身份发起交易,任意窃取用户资产。

usdt检测_usdt风险_cex usdt

图3 攻击代码部分截图

从目前的情况来看,几乎所有的项目方都会在前端或者其他地方默认设置最大用户授权量(2^256)。 而有些合约(A)在调用其他合约(B)时,也需要对合约(B)进行授权,但它们往往采用尽可能多地使用授权的方式。 因此,作为投资者,在涉及到DeFi项目的授权时,一定要保持高度的警惕,以免落入攻击者的“陷阱”。

3.套利问题

usdt检测_cex usdt_usdt风险

套利是通过同时买卖同一种虚拟数字货币资产来获取利润的一种方式。 它利用了同一种虚拟数字货币资产在不同交易所的不同定价现象,尤其是在虚拟数字货币资产发行初期。 不同交易所之间的流动性差异很大,导致有很多机会利用交易所之间的价差进行套利和赚取收益。

此类问题主要发生在业务复杂度较高的DeFi项目中。 比如Balancer项目的攻击事件。 攻击者结合“闪贷”和通缩币种的特点,以及Balancer代币池的“常数乘积”规则,利用通缩代币STA和“闪贷”构造了只有1个STA的特殊情况。 当池中只有 1 单位 STA 和其他代币时,只有 1 单位 STA 可以兑换其他价值更高的代币。 此外,STA具有通缩特性,即在转账时会销毁部分代币(一般为转账金额的1/100),但由于1单位STA是最小值,因此在转账1单位STA时, 1 个 STA 也将被销毁。 这使池中的 STA 数量保持不变。 通过反复这样做,攻击者可以耗尽资金池。 如下所示:

cex usdt_usdt检测_usdt风险

图4 攻击过程

4.重入攻击

重入攻击是指合约代码在执行回调函数时被攻击者劫持,导致本应调用的回调函数被替换为恶意合约地址,从而使攻击者可以再次调用该函数。 调用两次,这允许攻击者获得两个好处。

近期 DeFi 协议 Akropolis 遭遇黑客重入攻击。 经分析,本次攻击主要是由于合约参数校验不足,未能防止重入攻击造成的。

攻击者首先将自己的恶意合约地址作为参数传入函数deposit(),传入的position为代币地址的参数position。 这将导致该函数在执行令牌的 safetransferFrom() 函数时调用攻击者的恶意合约。 攻击过程分为以下几个步骤:

1. deposit()函数首先执行的是depositToProtocol()函数,而depositToProtocol()函数中存在被恶意劫持的safeTransferFrom()函数,所以这一步会执行攻击合约。

2. 在攻击合约中,攻击者再次调用了deposit()函数,这次传入的参数是正常的token地址。 这一次,攻击者为正常的存款操作存入了真实的 DAI。

usdt风险_usdt检测_cex usdt

3、从代码中可以看出,mint函数之前进行了一次余额差值计算,根据这个差值计算出minting,而这次存入真实的DAI会增加余额,所以这次攻击者会得到与存款金额相同。 输入 DAI 等效 poolTokens。

4. 恶意合约执行后,正常合约会继续执行depositToProtocol()函数后的代码。

5. 由于攻击者之前确实存入过DAI,所以攻击者本次将再次获得与存入的DAI等值的poolTokens,资产翻倍。

攻击者通过这一系列手段对合约发起多次攻击,最终获利超过200万个DAI。

usdt风险_cex usdt_usdt检测

图5 攻击过程

另一个例子是最近对 OUSD 的重入攻击。 攻击者使用重入攻击和弹性供应调整来实现他们的目标。

在本次攻击中,攻击者通过dYdX闪贷借出7万个ETH,并用ETH兑换相应的USDT和DAI。

1、攻击者先转入750万USDT到金库,使自己在金库中的价值达到50%以上。

2.调用合约中的mintMultiple()函数进行铸币,传入2050万个DAI和恶意合约伪造的另一种token作为参数。 该函数正常接收2050万个DAI,并接收另一个token 其实调用的是攻击者的恶意合约,攻击者再次在攻击合约中存入2000 USDT进行铸币,目的是触发rebase( ) 称呼。

cex usdt_usdt风险_usdt检测

3、正常合约转账后,会进行资产结算,更新资产总值,然后通过rebase()进行分配,但是此时合约被劫持了,合约还没有包含Vault 资产总价值中有 2050 万个 DAI,因此在执行 rebase() 时,会将这 2050 万个 DAI 全部分配为收益。

4. 由于攻击者在Vault中的价值超过50%,攻击者将被分配超过1025万个DAI而无需任何支付usdt检测,然后合约将正常执行,攻击者将获得由oUSD.mint铸造的OUSD代币,其值等于存入的 DAI。

最终,攻击者所有收获的总价值约为 3327 万 OUSD。 最后,攻击者赎回之前存入的代币,并将获得的代币返还给闪电贷。

(三)DeFi安全事件成因

国家区块链漏洞库分析了DeFi安全事件的主要原因,包括业务逻辑实现漏洞、业务设计缺陷、项目方跑路、重入攻击、钓鱼诈骗等,详细原因分类如图以下。

usdt风险_usdt检测_cex usdt

图 6 DeFi 安全事件成因

此外,DeFi安全事件频发的另一个原因是市场上迅速涌现出一大批“仿盘”项目。 这些项目普遍存在技术基础薄弱、业务设计不合理等问题,有的甚至涉嫌欺诈项目。 下面我们分析其中的典型问题如下:

1.业务逻辑实现错误

所谓业务逻辑实现错误,是指在编写程序实现需求时,由于错误的代码编写方法而存在漏洞。 在CherryFi项目的USDT锁仓事件中,其转账逻辑调用safeTransfer函数进行具体的转账操作。 但是USDT的转账逻辑没有返回值,导致safeTransfer调用永远不会成功,导致资金被锁定,用户无法将USDT转入转出。 据了解,CherryFi代码并未经过审计。

cex usdt_usdt风险_usdt检测

2.业务设计缺陷

业务设计缺陷是指业务设计过程中考虑不完善、考虑不严,而不是代码编写问题导致的业务缺陷。 在DeFi项目中,此类问题主要体现在交易相关逻辑或弹性供应机制上,容易导致恶意套利问题。 在Curve项目中,如果变量A变化前后的转换比例不一致,就会存在套利机会。

usdt风险_usdt检测_cex usdt

图 7 代币联合曲线

如上图所示,Curve代币池中不同代币的余额必须满足曲线。 为了进一步说明这个套利空间的形成过程,可以假设Token X是USDT,Token Y是另一种代币。 当A=1(蓝色曲线)时,用户将持有的USDT和Token Y全部兑换成Token Y。假设兑换前池中有150个USDT和50个Token Y,如图中红点所示,它在蓝色曲线上。 同时维持150比50(1.5:0.5)的比例,用户持有50 USDT。 根据此时的曲线,如果用户使用50 USDT兑换Token Y,池中将​​有200 USDT。 为了保证比例在蓝色曲线上,红点会向黄点移动,对应比例为200:30(2:0.3),所以50USDT可以兑换20Token Y。

假设,当A=10(红色曲线)时,当前池中余额为200USDT和30Token Y,此时使用持有的20Token Y兑换USDT。 此时池中有50个Token Y。 为了满足红色曲线的比例,黄色点将移动到绿色点。 池中余额应为140USDT和50Token Y,即使用20Token Y可以兑换60 USDT,从而获得10 USDT的利润。 这是变化前后A形成的套利空间。

3.代码错误

代码错误通常是在写代码的时候出现的,因为程序员疏忽大意,导致代码写错。 这个问题可能会给项目带来毁灭性的打击。 例如,YAM项目在计算弹性供给的过程中,由于代码编写错误,忘记除以精度,如下图,导致合约保留了过多的代币。 治理需要投票。 发起提案需要提案发起人质押总代币的 1% 才能使提案成功。 如果代币总数过多,提案所需的代币数量就会比较大,导致没有人能负担得起提案所需的代币。 最终,项目方不得不宣布项目终止。

cex usdt_usdt风险_usdt检测

图8 部分错误代码截图

最后,随着DeFi行业的快速发展,越来越多的组合创新被应用到DeFi项目中。 然而,人们往往很难在安全测试或安全审计过程中发现组合风险。 比如Lendf.me攻击中,项目的业务逻辑和ERC777本身没有问题,但是结合后存在重入漏洞。 组合风险的问题仍然需要区块链安全行业的各个厂商来解决。

3.结论

目前的DeFi项目还处于早期发展阶段,各个项目方水平参差不齐,技术条件差异较大。 一些DeFi项目,第一,没有经过专业的代码安全审计; 二是忽视了区块链的技术特点,仅仅基于传统金融中心化系统的经验进行构建; 三是部分区块链应用未经真实性验证。 不法分子利用数字资产投资理财等噱头实施诈骗的风险。 部分项目方也存在将大量数字资产转移至地址的行为,急需相关方引起重视。 综上所述,DeFi生态安全威胁风险等级较高。