前言
前些日子发了一下对 DeFi 安全的感慨,发现反响挺大的。文中主要的观点在于,代码安全并不是真正的安全
,基于这个主题,今天我们延伸下,简单讲讲在 DeFi 中的第三方安全
第三方安全风险
DeFi 的世界是复杂的,不同的 DeFi 产品存在着不同的功能,但是为了实现这些需求,很多时候并不需要开发自有组件,而是直接使用一些第三方产品集成到自己的项目中,从而实现对应的功能,如预言机模块。又或者出于宣传或其他目的,DeFi 和 DeFi 之间通常会进行项目合作,这个时候也会进行一些项目之间的融合,那么,这些融合的项目之间则互为对方的第三方。那么这个时候,除了原有项目本身的代码安全性之外,第三方项目的安全性,同样会影响到原有项目的安全,这里的安全主要指的是资金安全,毕竟在 DeFi world 里,除了钱之外,已经是没什么东西是重要的了。下面,我简单列举下主要的几种第三方风险:
模块依赖类型
模块依赖类型主要为项目中的某个模块使用了其他项目中的某个组件,而不是使用自己开发的组件来实现相应的功能的场景。
如预言机模块,目前大部分的预言机都是使用的是 chainlink
的预言机报价或者直接使用 Uniswap
的 TWAP
。的目前这两种方案算是比较成熟且安全性比较高的方案,但这并不代表这是没有风险的方案。TWAP
的风险大家应该都比较清楚的,无非就是 V3
的深度太低会被打穿 和 V2
时间取太短导致操控成本太低。这里主要讲讲 chainlink
的方案。
chainlink
用的是链下数据提交到链上合约的架构,然后链上的合约就可以通过给定的 chainlink
合约去获取提交上来的价格。这种架构下,必然在 chainlink
的链上数据合约中存在一个 提交者
的角色,这个角色啥都不干就是提交链下数据。同时,由于 提交者
负责链下数据的提交,那么理论上,这些提交者是可以提交恶意数据的。那么,在 chainlink
的架构中,风险就是在这些 提交者
上,如果他们作恶,那么依赖这些数据的项目方合约,就会造成损失。
上层协议类型
上层协议型就是指的就是 DeFi 之间存在一些业务场景的交流,比方说 Cream Finance
的 Iron Bank
、Yearn
的各种策略、基于 Curve
的 Convex Finance
, 还有就是 BSC
上大名鼎鼎的 Alpaca Finance
这些协议都有一个共同点,就是协议的资金并不是存放在原有的项目方合约中,而是通过特定的策略合约,将用户资金转存到对应的目标项目中,进行集中的挖矿或存在某个组件,可以直接影响到项目方本身的资金。这类型的协议中,除了项目本身的代码安全,第三方的代码安全将同时是原有项目的短板。举几个例子
Cream Finance
的 Iron Bank
被黑的那次,是因为 Iron Bank
本身就是为了给白名单项目做免抵押借款的的权利,那么白名单中的地址是可以直接从 Cream Finance
中借取资金的。这种情况下,如果第三方的白名单项目出了什么问题,那么将会对 Cream Finance
造成直接的损失。而好巧不巧的就是,当时的白名单项目 Alpha Finance
的代码出问题了,导致攻击者直接通过 Alpha Finance
的漏洞直接从 Cream Finance
中取钱。明面上 Cream Finance
的用户是没有损失的,因为所有借给 Alpha
的钱都是有收据放在 Cream Finance
中的。但是光有收据有啥用呢,钱都没了,这不相当于你拿着空头支票吗。 😀
又比如说 pancake bunny
自己的项目 Qubit Finance
。这个项目是一个桥兼借贷项目(仿Compound),然后允许用户从以太坊跨链 ETH
到 BSC
生成对应的 qxETH
。然后 Qubit Finance
自己还允许了 qxETH
作为抵押品进行借款。结果最后桥出事了,导致 BSC
上的 qxETH
被无限增发,从而可以导致用增发的 qxETH
把 Qubit
借空了。和 Cream Finance
一样,攻击者借出的钱都是有收据的,但是,还有用吗?
兼容性风险
兼容性这个应该不用多说了,两个看起来没问题的合约经常会因为业务场景不兼容导致出现各种各样的问题,比方说 Hundered Finance
仿的 Aave
但是到了 xDAI
上,由于原生代币本身的缺陷(允许回调),导致在以太坊上运行好好的项目,换个地就水土不服了。类似的例子还有很多,这里就不一一列举了
总结
DeFi 是一个风险和收益不成正比的环境,真正实现了挣着白菜钱,操着白粉心的终极目标。同时,DeFi 安全也远不止一份安全报告,因为还有太多你看不到的东西。但是你要说是不是这样代码安全就没意义了,我只能说 too naive,该审计还是审计,代码安全都无法保证的话,以上这些就更不用谈了 😀
原文始发于微信公众号(蛋蛋的区块链笔记):浅谈 DeFi 的第三方安全