区块链/等级 X · 回到原点/10.2 路线/课程 1
第一步:清点库存
在搬动任何一块砖之前房屋的地图
材料一个包含链名、资产类型、钱包地址、审批状态及托管方式等列的电子表格。Etherscan 代币审批检查工具,或适用于每条正在使用的 EVM 区块的同类工具Solana 钱包文档中关于程序权限审核的参考内容
好奇
- 被遗忘的权限签名如何能在不泄露私钥的情况下让攻击者获取资产访问权?
- 既然在撤销未使用的代币授权过程中实际上并没有任何代币被转移,为何仍需支付网络费用?
- 在某个链上持有封装后的资产与持有支撑该资产的原生代币,两者有什么区别?
探索
- 在整合资产之前,所有存放有价值的账户都需要有相应的记录。这些记录包括集中式交易所账户、自我托管钱包应用、不同区块链上的代币、正在使用的质押仓位、流动性池中的份额、待领取的空投奖励,以及所有正在使用的种子短语。一份完整的清单不仅能显示资产余额,还能展示资产的控制结构——即哪些密钥掌控着哪些资产,以及这些密钥存储在何处。如果没有这样的清单,后续操作可能会导致资产无法被使用或面临不必要的风险。
- 在以太坊风格的链上,代币授权是一个重要的安全风险点。在与去中心化应用交互时,用户会签署 ERC-20 授权交易,从而允许智能合约代表他们使用特定的代币。这些授权会一直有效,直到被明确撤销为止。如果用户在初次交互时授权了某个合约,却再也没有回去撤销该授权,那么该合约就可以对这些资产进行无限或大量的支出操作。一旦合约被攻破或出于恶意目的被利用,就无需用户进一步操作即可耗尽其账户中的资金。
- 诸如 Etherscan 的代币授权工具之类的审批检查工具,允许用户连接自己的钱包并查看所有有效的授权信息。撤销未被使用的授权虽然会产生Gas费,但可以消除潜在的攻击风险。其中的权衡很明确:现在支付少量费用,就能避免日后遭受重大损失的风险。那些仍被正在使用的账户所依赖的授权是有用的,而那些因应用被废弃而留下的无效授权则毫无用处。
- 封装资产与桥接资产增加了复杂性,因为它们是对他人托管的资产或桥接基础设施的权益主张,而非原生代币。以太坊上的封装代币代表对由托管方持有的比特币的权益;而在其他链上的桥接资产则代表对锁存在合约中的原始资产的权益。这类封装机制依赖于中间方的偿付能力与诚信度。在资产清单中,明确哪些是原生资产、哪些是衍生性权益至关重要,因为它们的安全性与直接持有底层代币有着显著差异。
- 在 Solana 上,SPL 代币账户可以指定一名受托人,授权其支出一定金额的代币,且该授权会一直有效,直到账户所有者撤销为止;某些钱包和浏览器工具可以列出这些受托人信息,并允许用户撤销授权。Solana 上的恶意程序常常诱使用户签署交易,从而转移代币或完全让渡代币账户的控制权(见第 7.1.3 节),因此了解哪些钱包为哪些应用签署了授权非常重要。
- 此库存管理阶段的最后一步是进行具体核查:为每个有效地址打开审批检查工具,并逐一扫描列表。任何目前未被用于质押、借贷或交易的合约都应被标记出来以便撤销。这一流程能将被动持有的资产转化为需要主动管理的资产。其成本为每次撤销操作所需的燃气费;而好处则是堵住那些无需用户进一步操作即可被利用的漏洞。
关键事实
- 通过 ERC-20 代币的授权,智能合约可持续使用用户的资产,直至被明确撤销授权为止。
- 撤销令牌授权需要签名并发布交易,这会在网络上产生Gas费用。
- 封装代币是对托管方或桥接服务所持有的原生币的债权,与直接持有原生资产有所不同。
- Etherscan 提供了一个代币授权检查工具,可以列出与某个钱包地址相关的所有有效授权信息。
- 那些来自已被废弃的去中心化应用程序的过期审批仍然有效;如果合约遭到入侵或被恶意利用,这些审批就可能会被滥用。
- 在 Solana 上,SPL 代币账户的委托者会一直拥有支出权限,直到账户所有者撤销该权限为止。
练习 九、六、三、一
9收集列出在合并之前,一个完整的加密货币资产清单中应包含的9种不同类型的资产或权限状态。
6归类根据主要风险类型,将这9个项目分为6类:本地托管、封装/桥接式代币、活跃的DeFi头寸、过期的权限、交易所持有的余额以及未收到的空投代币。
3提炼将这6个原因简化为3个核心原因,解释为何库存不完整会导致安全问题或价值损失。
1凝结为撤销过期的授权而支付燃气费,与承担代币被非法转移的风险之间存在着权衡。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。
- Etherscan Token Approval Checker Documentation
- Solana Program Library, Token program documentation (Approve and Revoke instructions)
- ERC-20 Standard Specification: approve() and allowance() functions
- BitGo WBTC Documentation: Wrapped Bitcoin Custody Model