为什么以太坊钱包的耗尽与Cardano钱包不同

Why is simple to drain the Ethereum wallet, unlike the Cardano wallet? | Cardano Explorer (cexplorer.io)

不幸的是,在去中心化应用程序(DApp)领域,用户可能会成为恶意行为者的牺牲品。 这些不良行为者可能会欺骗用户签署交易,从而导致钱包中的资产被耗尽。 这个问题在以太坊生态系统中尤为普遍,这不仅仅是因为其规模较大。 在以太坊中,用户通常会预先授权 DApp 在未来某个时间从他们的钱包中转移任意数量的资产。 虽然此功能看起来很方便,但它经常被恶意实体(通常称为“以太坊耗尽者”)利用。 此类事件在卡尔达诺生态系统中并不常见。 在本文中,我们将解释为什么会这样。

未来资产转让的预先批准是危险的
理想情况下,智能合约不应该有所有者或任何允许所有者将资产从智能合约转移到外部地址的机制。 这一属性赋予智能合约一定程度的信任。 用户可以放心地将其资产委托给智能合约(信任代码,而不是人),并且知道没有第三方可以操纵这些资产。 因此,用户无需信任部署智能合约的团队。

尽管如此,可以将转移功能合并到智能合约中,这使得所有者能够将代币从智能合约转移到另一个地址。

这种功能通常与恶意智能合约相关。

以太坊 Drainer 包含“transferFrom”功能,用于将数字资产从用户的钱包转移到智能合约。 然后使用“转账”功能将资产转移到攻击者的地址。

“transferFrom”函数通常由 DApp 使用,是 ERC-20 代币标准的一部分。 它允许智能合约将一定数量的代币从一个地址转移到另一个地址,前提是源地址已批准智能合约这样做。 稍后会详细介绍批准情况。

一旦资产被智能合约控制(拥有),就可以使用“转移”功能将它们从智能合约转移到另一个地址。

“转账”功能也是 ERC-20 代币标准的一部分。 它用于将代币直接从函数调用者的地址转移到另一个地址。

在智能合约的上下文中,如果存在允许合约所有者将代币从合约转移到任何外部地址的转移函数,则可能是恶意合约的迹象。 该地址可能被攻击者控制。

以太坊钱包消耗者滥用“批准”功能。

当与以太坊生态系统中的智能合约交互时,用户通常必须批准合约才能从钱包中花费一定数量的代币。 这称为“令牌批准”交易。

通常,对于非恶意用例,这很有用。 用户可以批准DApp以目标价格购买资产,而无需提前将资产移出钱包。 转移将在适当的时间进行。

一旦“批准”交易被签署,智能合约可以随时调用“transferFrom”函数,而不需要用户进行任何进一步的批准或操作。 “transferFrom”功能是链上交易,需要 GAS 费用,该费用从用户的钱包自动支付。

“approve”和“transferFrom”交易都需要 GAS 费用。

攻击者经常诱骗用户调用恶意合约的批准函数,使其稍后可以使用transferFrom从用户钱包中提取代币。 如果合约被设计为接受和持有代币,则可以类似地使用转移函数。

如何逐步耗尽钱包
攻击从社会工程开始。 攻击者必须创建一个令人信服的钓鱼网站或恶意 DApp。 他们经常向谷歌付费,以向用户展示他们的欺诈网站作为第一个链接。 有很多方法可以欺骗用户并引诱他们落入陷阱。

恶意 DApp 可以是流行 DeFi 服务(DEX 或借贷平台)的假冒版本,也可以是承诺高回报的新 DApp。 铸造 NFT 系列、为流动性挖矿抵押代币或参与代币销售也很有吸引力。

用户访问恶意网站或 DApp 并决定与其交互。

要与 DApp 交互,用户需要连接他们的以太坊钱包。 连接钱包后,DApp 会要求用户签署“批准”交易。 用户被要求批准花费大量的代币,通常是最大可能的金额。

用户可能不会觉得它可疑,因为他们通常会在非恶意 DApp 的情况下签署“批准”交易。 他们可能不会注意重要的细节。

用户在钱包中确认交易,但没有意识到他已授予恶意智能合约使用其所有代币的权限。

一旦交易被确认,恶意智能合约ct可以随时调用transfer(或transferFrom)函数,从用户钱包中耗尽所有已批准的代币。

可以撤销对以太坊智能合约的批准。 此过程通常称为撤销代币配额或撤销代币批准。 撤销批准是链上交易,因此用户需要支付 GAS 费用。 由于相关费用,一些用户可能会犹豫是否撤销代币批准。

然而,在大多数情况下,攻击者行动迅速,因此用户没有时间意识到自己犯了错误。

为什么卡尔达诺钱包的资金不可能如此轻易地被耗尽?
在卡尔达诺和以太坊生态系统中,攻击者可能会欺骗您签署一笔交易,从而转移比您预期更多的资产。

与以太坊不同,卡尔达诺的智能合约没有等效的批准机制。 这意味着智能合约不能被授予无限制地访问用户钱包的权限。 因此,如果用户没有为每次转账明确签署交易,恶意智能合约就无法耗尽用户的钱包。

卡尔达诺中的智能合约本质上是验证器脚本。 当验证试图从脚本地址转移资金的交易时,每个卡尔达诺节点都会自动执行这些脚本。

当涉及到耗尽钱包的可能性时,卡尔达诺的 UTxO 模型和以太坊基于账户的模型之间的差异是显着的。

Cardano 使用 UTxO 模型,其中资产存储在未使用的输出中,而不是作为账户余额。 在此模型中,交易具有输入和输出,其中输入是先前交易的未花费输出。 每个 UTxO 只能作为一个整体被消耗一次。 因此,Cardano 的 UTxO 模型中没有相当于以太坊的批准功能。

通常,一笔交易仅涉及用户钱包中拥有的有限数量的 UTxO。 任何未作为输入包含在交易中的 UTxO 都不会受到交易签名的影响。

从安全角度来看,该模型可以被视为更能抵抗耗尽钱包攻击。

从图中可以看到,Alice 必须对每笔花费 UTxO 的交易进行签名。 智能合约不可能任意转移Alice拥有的UTxO。

由单个地址代表的以太坊账户可以持有多种不同类型代币的余额,包括各种 ERC-20 代币。 批准功能通常不会批准整个帐户的支出。 相反,它授予特定智能合约批准从用户帐户中花费一定数量的特定 ERC-20 代币。

然而,恶意智能合约可能会无意中被批准使用用户整个账户中的代币。 恶意智能合约可以利用批准机制从用户的钱包中提取代币,而无需用户进行任何进一步的批准或操作。

在图中,您可以看到Alice只签署了“批准”交易。 这使得恶意智能合约可以从她的账户中转移所有代币。

为了防止账户中的所有资产丢失,用户应确保仅向可靠且值得信赖的智能合约授予支出批准。

结论
以太坊的批准功能为开发人员提供了类似于允许第三方定期从您的银行帐户中提取指定金额的功能。 虽然这是一个有用的功能,但它要求用户相信第三方不会超出其提款限额。 另一方面,卡尔达诺没有向开发者提供类似的功能。 用户需要明确签署从钱包中花费 UTxO 的每笔交易。

两种方法都有其优点。 在制定智能合约时,各个团队必须在确保安全性和为开发人员提供广泛的选择之间取得平衡。 虽然 Cardano 的脚本旨在验证是否满足支出 UTxO 的条件,但以太坊的智能合约可以获得对用户帐户的控制权。