小心你的 DApp 授权!
使用加密货币钱包、交易所等产品,最重要的事情莫过于保护资产安全。“CoinEx Wallet 安全必知”将从多角度分享常见诈骗套路、如何安全使用加密货币产品、区块链安全机制等科普知识,帮助您全面了解并加强资产安全保护措施。
DeFi、NFT 的普及和发展,为加密货币市场注入了新的活力。除了直接交易加密货币之外,用户还可以体验借贷、合成资产、游戏等去中心化应用(DApp)。而这些DApp往往涉及到合约交互,用户也将面临着新的潜在风险,例如 DApp 授权风险。
DApp 过度授权
用户在使用加密钱包与 DApp 进行合约交互时,首先需要对 DApp 进行授权。
假如用户 A 想要在 AAVE 上存款 USDT 进行加密货币理财,那么用户 A 就需要将 USDT 授权给 AAVE 借贷合约,让 AAVE 借贷合约拥有转移 USDT 资产的能力,以便可以完成相应的操作。
这个授权流程有点类似于授权你的供电商每月从你的银行账户上扣除电费,授权 AAVE 智能合约后,AAVE 就能转走一定数量的 USDT 资产。
大多 DApp 开发者为了避免用户反复授权,一般会默认设置授权最大数量的代币给相应的智能合约,这样方便后续的相关操作,避免了每次使用前都要进行授权的麻烦,以及每次授权造成的 GAS 消耗,是可以有效提高 DeFi 使用体验的一种方式。但这样的操作也存在着明显的风险,如果智能合约出现漏洞或合约管理员作恶,那么用户的加密货币就存在着丢失的风险,这就是 「DApp 过度授权」带来的问题。
常见的授权风险
1、意外错误导致的ERC20授权风险
开发者在开发 DApp 的过程中,难免会出现一些漏洞,例如著名的 Bancor 就曾出现过程序漏洞,从而让用户资产面临一定的风险。
在 Bancor 的相关合约中,ERC20transferFrom() 函数被意外地定义为public而不是private,这使任何人都可以执行它并耗尽用户钱包中的加密货币资产。
2、对ERC20授权的恶意攻击
除了由于开发者的失误导致的授权风险之外,还存在着一些恶意利用。例如有些 DeFi 类应用以发放空投代币为噱头鼓励人们进行授权,用户需要存储一定数量的代币才能领取空投代币,但如果要存代币领空投,就必须无限制地给予授权。
例如曾经有一款 DApp 鼓励用户存储 UNI 从而换取自己项目的代币。用户为了领取空投代币,并没有详细查看授权范围,一不留意就开启了无限授权,从而让钱包中的加密货币资产面临巨大的风险,骗子不仅拿走了存入 DApp 中的 UNI 代币,而且还拿走了用户钱包里所有的 UNI 代币。
怎样防范授权风险
1、分账号使用
即使是再靠谱的项目,也存在被攻击的可能,因此,当我们需要与 DApp 交互时,尽量分开账户使用,例如开启一个新地址,把合约交互需要的资产转入到新地址中,使用新地址进行交互,这样即使新账号地址因为授权问题被盗,也不影响其他账号中的加密货币资产。
2、避免向DApp过度授权,定期清理授权
用户与某个 DApp 进行交互时,第一次使用会需要授权,进行授权后方便了用户与合约的后续交互操作,但也存在着一定的安全隐患,如果该 DApp 遭到攻击或管理员作恶,将导致用户资产的损失。因此,我们需要定期清理不常使用的 DApp 授权或者设置代币转移量的上限。
我们可以使用相应的授权查询工具,定期查询授权的合约列表,及时取消可疑项目的授权,从而排除潜在的安全隐患。
3、尽量避免使用未经安全公司审计代码的DApp
一般来说,项目方在上线前会把项目代码交给专业的安全公司进行代码审计,而且会由多家安全公司进行审计,以最大化降低合约代码漏洞风险。虽然经过安全公司审计的合约代码,也并不能保障 100% 安全,但至少经过安全公司审计的 DApp 相对更安全些。
对于用户来说,要尽量避免使用未经安全公司审计代码的 DApp,特别是宣传高 APY 的 DApp,千万不要为了一点收益而把资产本金置于高风险中。
4、选择安全的数字钱包
我们使用加密钱包与 DApp 进行交互时,钱包其实充当了第一道安全屏障。用户与 DApp 进行交互时,钱包会提醒用户相应的授权风险。因此,当我们在与 DApp 进行交互时,要选择使用CoinEx Wallet这样安全的加密钱包。
总之,我们一定要养成良好的钱包使用习惯,定期取消不需要的授权,不要访问存在高风险或可疑的 DApp,以保障资产的安全。