早在一年多以前,比特派安全实验室曾经写过一篇《 以太坊DeFi 生态当前最大的安全隐患》,其中提到了 当前 DeFi 项目方过度向用户索取合约约授权已是以太坊上最大的安全隐患。

一年多的时间过去了,过度合约授权的隐患不仅未消除,反而随着多个公链均兼容EVM后,危机四处蔓延。加之很多盗币者对授权机制的加以利用,合约授权已从安全隐患变成了每天都在发生的资产被盗形式。

什么是合约授权

顾名思义,就是将你资产的支配权授予给他人。合约授权的初衷是使项目方合约来“能更方便的操纵用户的资产”,因为你不授权他们确实不能不能碰你的资产分毫,也就无法进行DeFi里常见的 SWAP、STAKING等等一系列操作。

这里有点像生活类 APP 向你索要自动扣款支付权限,比如你打完车后钱自动扣走不需要你做任何操作。通常来说,自动扣款这项功能都会有一个额度限制,因此小额资产这样操作风险可控并且确实还挺方便的。但在区块链世界,几乎所有的 DeFi 项目方都在无节制地向用户索要授权,甚至索要无限授权。大多数用户其实还并不知道,这简化操作换来的是代价将资产的的所有权都已经共享给项目方了,所以无限合约授权也可以有个更直白的翻译,

“从现在开始,这个币的所有余额都归我管了,请问你是否同意?”

无限合约授权的风险

风险已显而易见,因为项目方有权限可以支配你的资产,所以一旦其作恶,你的资产就不再是你的资产,另外项目方的owner key 泄漏以及合约有漏洞被“黑客”攻击等等,你的资产也很难幸免于难。

可以说授权之后,你的资产安全依赖于项目方的技术水平与道德水准,我为鱼肉,人为刀俎。

怎样抵御合约授权的风险

对于以太坊这样的庞然大物,想在短期内通过代码彻底解决相关隐患不太现实;

我们也不能寄希望每个合约背后的项目方都是道德完美的人;

我们只能做好自己可以做的来抵御合约授权的风险,重点有以下几个方面:

第一招:不向陌生的项目合约进行授权

目前主流的 DeFi 项目通常代码开源并且经过了完备的代码审计,风险相对较低,而每一个陌生的合约都是风险巨大的,目前每天都有源源不的新合约是为骗取用户授权而创建。

第二招:区分地址来参与不同 DeFi 项目

如果是一个地址参与了多个DeFi项目并进行了授权,这相当于你的地址上有多个风险敞口,如果有任何一个项目有风险,那么你的资产也都会面临着丢失的风险。

用不同的地址来分别参与高风险、低风险、超高风险的项目并做好备注,这样即使某个项目出问题,也仅仅可以影响此地址上的资产,其他地址上的资产还是安全的,多地址是将风险隔离的有效手段。(听说有个比特派钱包单个钱包可以创建1000个地址,并且只需一组助记词保管)

第三招:按需授权,对项目进行有限授权。

降低授权额度也是降低风险敞口的有效手段。假如你需要将1000个USDT兑换成ETH,那么最好是只授权 1000 USDT的额度。

图片[1] - 比特派钱包防御 DeFi 授权风险,只需五招

第四招:定期进行授权检测并回收风险授权

比特派钱包与上线了5.0047版本上线了授权检测工具,用户可以在这里检测到自己授权的项目、币种、额度,可以实时地回收授权,目前已经支持ETH、BSC、HECO、OKT、MATIC、FTM、xDAI、AVAX链的授权检测与回收,小白用户也可以亲手捍卫自己的资产安全。

图片[2] - 比特派钱包防御 DeFi 授权风险,只需五招

在此感谢DEBANK对比特派授权检测功能的支持。

第五招:提前亏光

这招虽然不建议,但确实是很多人用来抵御盗币的主要手段。所以你没被盗不是因为你做的足够好,单纯就是你的钱比较少。

所以如果是有较多授权的地址,后续有大额资产(假设有)转入的话,最好在此之前完成一下授权的回收。