作者:熊炜,imToken 后端工程师
在经历 lendf.me 被盗事件后,我们知道 ERC777 代币合约和普通借贷池合约组合会产生漏洞,正如 imToken Simon 所说:「酒没错,头孢也没错,放在一起,要了命」。这次事件最终导致了 2500 万美元(折合人民币 1.7 亿)被盗,虽然最后如数追回,却在我们心里刻下一次深刻的印记,让我们不得不重新审视智能合约安全问题。
币乎创始人亲述 DeFi 踩雷经历与教训已经全面的分析了使用去中心化金融所带来的风险。回过头再来看我们其他的去中心化项目,它们还存在其他的问题吗?
在调查中,我们发现以太坊的去中心化金融场景中,大量项目集成了 USDC。而 USDC 在其代币实现中,加入了一个前置代理合约。简单的说就是我们使用 USDC 合约进行转账时,访问的是 USDC 的代理,该代理再通过内部设置的地址,访问到 USDC 的目标合约上。
代理合约拥有一个管理员权限可以更改其代理的目标,当合约需要升级时就可以使用管理权限替换目标合约地址。这是一种可升级、可更替智能合约的设计模式,解决了合约升级这一难题,但同时也产生了巨大的风险。
如果代理合约的管理权限泄露,意味着攻击者可以将代理的目标地址指向任何地址。攻击者可以很轻易的伪造一个可以任意发行代币的攻击合约,再将代理合约指向这个攻击合约。因此,USDC 代理合约一旦攻破,Compound(借贷池)也会像 lendf.me 一样被全部抽空。甚至现今最大的稳定币平台 MakerDAO,也能通过对 USDC 代理合约攻击而错误的生成稳定币。任何平台只要是集成了 USDC,皆存在该风险。而 USDC 正在去中心化应用中大规模的使用着。
当更多的代币使用代理模式时,每一个代币都会成为攻击向量,如果去中心化项目持续集成类似的项目,会使其安全性大打折扣。相比之下不使用代理合约,销毁管理员密钥的方式看来会更加健壮。
去中心化对信任的要求比传统应用更高。由于智能合约要自动化的处理所有过程,在建立代码的过程中就要求所有代码之间之完全信任。像 USDC 这样的代币项目,本身具有一定的中心化属性,大规模的应用在所有项目中时,就会把这些项目所有的信任全部集中在一个中心化的单点上。这个单点的控制权对于整个去中心化生态而言,相当于上帝模式。此时一个单点代理合约的密钥泄露,就可能引起整个去中心化生态的崩溃,造成无数项目被黑,无数代币丢失。反观,一个虽然未被黑的中心化单点,也具有控制整个去中心化生态权限,代币管理机构可以使用同样的手段对任何集成它的项目进行破坏或关闭。
可见,USDC 在大规模的应用过程中,使整个去中心化生态的风险全部集中在了 USDC 中心化控制的代理合约上,该合约为 USDC 的管理机构提供了整个生态的上帝模式。或许我们所谓的去中心化,反而比传统项目还更加中心化?
如若说去中心化还是早期阶段,那在这蛮荒的开垦过程中,USDC 可谓是荒野之王。
原文链接:
本文来自,仅作分享,存在异议请联系平台删除。本文观点不代表刺猬财经 - 刺猬区块链资讯站立场。