什么是web3钓鱼
Web3 Phishing 是一种针对加密货币用户的网络欺骗手段,通过创建伪装成正式网站的假网站来窃取用户的授权、签名和加密货币资产。随着 Web3.0 技术的发展,新型的 Web3 钓鱼骗局也在不断出现。以下,我们将介绍新型 web3 钓鱼攻击方式:Approval phishing、Uniswap permit 2 phishing、Claim phishing、Model phishing。并提供帮助用户识别和预防这些攻击的有效措施:针对 Approval 钓鱼的预防措施,识别 permit 2 中的签名,防止 Claim 钓鱼攻击,防止模态钓鱼攻击。
1. Approval 调用攻击
web3网络钓鱼攻击大多与approval、increaseAllowance 操作有关。攻击者通过伪造电子邮件或消息、伪造网站或应用程序、社交工程和恶意广告或弹窗等方式,骗取用户进行 approval 操作。因此,用户需要撤销不必要的授权。撤销授权也有可能被钓鱼者利用。 撤销授权钓鱼攻击时如何发生的? 攻击者部署了一个假的ERC-20 代币合约,修改了 approve 函数; 攻击者手动伪造了大批链上地址的授权,并提醒用户取消授权; 当用户收到该提醒并点击取消授权时,会触发发送交易的操作。这个交易将导致 token 被铸造到合约部署者的钱包内。 increaseAllowance 授权钓鱼交易链接 https://arbiscan.io/tx/0xd598336fac79123952319c9cd9cc62aa275162ce5f39d08ccac0c5e6ef0538e5 “撤销授权”钓鱼交易链接https://etherscan.io/tx/0xd4d606caddebf185dc6902ffcec78f3cc915826e1c0e37319d407d01681980ab Uniswap permit 2 允许跨不同应用共享和管理 token 授权。 用户只需在一次交易中完成授权和交易,减少交易的 gas 费用,简化交易操作流程。但是,Permit 2 则将用户的操作变为了链下签名,对于用户来说,链下签名是最容易放下防备的环节,而绝大多数人并不会仔细检查签名的内容也并不理解签名的内容。 Uniswap permit 2 签名钓鱼攻击是如何发生的? 用户将自己所持有 Token 的权限授权给 Permit 2 合约,这是至关重要的前提条件,这意味着你在授权时的签名已经暴露在钓鱼骗局的风险下了。 黑客拿到了用户的签名,基于此签名,黑客在 permit 2 合约中进行了 permit 和 transferFrom 两个操作,转走用户的资产。 黑客调用 permit 函数,在该函数中,主要调用了 verify 函数和_updateApproval 函数。verify 函数用来验证用户签名。验证通过后执行_updateApproval 函数。_updateApproval 函数用来更新授权值。 被授权方在授权额度范围内可以调用 transferFrom 函数将 token 转移到指定地址。 Permit 2 钓鱼交易链接 https://etherscan.io/tx/0x1d8fa25f8f16d52cd4c5716e0cefd9b1cdbbbc060901cea223bab9de79b17ea3 Claim 钓鱼攻击通过伪造可信实体的请求,欺骗用户提供个人信息、登录凭据或访问权限。这些 Claim 钓鱼合约通常伪装成零地址来骗取用户信任,以此来调取用户的加密资产。 Claim 钓鱼攻击是如何发生的? 钓鱼者部署 scam contract 和 hub contract,并创建 EOA 用来接收窃取用户的资金。scam contract 具有窃取用户的 ETH、ERC 20 token 和 NFT 的能力。scam contract 不开源,但从链上交易数据来看,该合约主要包含两个函数,Cliam 和 Multicall。 调用 Claim 函数时,受害者所持有的 token 将在 internal transaction 中被转移至 hub contract。 Multicall 函数用来转移受害者已批准的 token。 hub contract 用作从各个 scam contract 中窃取的资金的收集点。钓鱼者创建的 EOA 可以调用 hub contract 中的 withdraw 函数提取资金。 claim 钓鱼交易链接 https://etherscan.io/tx/0xfe70f1b0a92e719bff0d291b7a79987e6e93ed129d52be8e8918c2b9acb1f3b0 Web3.0 加密货币钱包的某些用户界面(UI)元素可以被攻击者控制用来进行网络钓鱼攻击,这种攻击方式被称为 Modal Phishing。Web3.0 货币钱包上的典型模态设计通常提供供用户检查签名等请求的必要信息,以及批准或拒绝请求的按钮。 我们以 Metamask 钱包为例,介绍模态钓鱼攻击是如何发生的? 钓鱼者部署钓鱼智能合约,有一个 SecurityUpdate 具备支付功能的函数,并允许受害者将资金转入该智能合约; 钓鱼者还使用 SignatureReg 将 SecurityUpdate 函数签名注册为人类可读的字符串“SecurityUpdate”。 受害者在 Metamask 钱包上连接以上钓鱼智能合约; Metamask 解析这个钓鱼智能合约,它使用函数签名字节查询相应的函数方法,即为“SecurityUpdate”。 “SecurityUpdate”被呈现在 Metamask Model 中,要求用户确认。用户点击“SecurityUpdate”按钮,钓鱼成功。此时,执行钓鱼者写好的钓鱼智能合约,将受害者的资金转入该智能合约。 如果我们理解授权操作的具体内容,并从正确的渠道查询我们的授权信息、取消授权,就会有效避免 approval、increaseAllowance、撤销授权的钓鱼骗局。 以下内容可以帮助用户理解授权操作的具体内容: 用户在 approval 时,需要考虑授权金额、授权币种和授权地址。通过指定授权金额和币种,用户可以限制被授权方能够从自己的账户中转移的资产数量,防止授权到与这次交互无关的币种。用户还需要仔细检查授权地址,多渠道验证该地址,确保将授权给正确的地址。 用户在正式授权之前,可以在相应代币合约中模拟授权交易,以获取授权信息。 找到 approval 或者 increaseAllowance、decreaseAllowance 等授权相关函数,填写以下信息模拟授权交易。 模拟授权之后,可以在 Phalcon 上看到这笔模拟交易的具体信息,从 Input Data 可以看出授权地址和授权金额。 如果以上结果是用户期望的,就可以进行正式授权了。 以下内容是追踪链上授权信息,撤销授权信息的具体步骤: 用户在完成授权之后,可以定期追踪 token approval 情况,也可撤销相关授权。Etherscan, BscScan and Polygonscan区块链浏览器中有 token approval checker Function。 输入地址,即可查看该地址的历史授权交易,每笔交易右侧的 Revole 按钮可撤销此授权。 在检索到的授权交易中,可查看授权币种、授权地址和授权金额。 如果我们能够理解、识别并仔细检查签名的具体内容,就可以有效避免 permit 2 钓鱼骗局。 签名格式通常包含 Owner、Spender、value、nonce 和 deadline 这几个关键字段,分别是指: Owner: 代表 token 持有者的地址,用于指定希望通过签名授权的地址。 Spender: 代表被授权使用 token 的地址,用于指定希望授权给的地址。 value: 代表希望授权的 token 数量,可以指定特定数量的 token 授权给 Spender。 nonce: 代表 token 持有者的交易计数器,用于确保每个授权交易都具有唯一的标识符。 deadline: 代表签名的有效截止日期,用于限制签名的有效期。在过期之后,签名将变得无效。 我们建议用户可以根据自己的需求设置特定的 value 和 deadline,而不是选择默认的最大值。 用户在调用 Uniswap permit 2 合约之前,可以模拟相关授权函数,了解授权细节。点击 Simulate 按钮。 选择 approve 函数,填写以下参数,模拟用户向 permit 2 合约授权。 为了避免落入 Claim 钓鱼陷阱,我们需要识别钓鱼合约地址,他们经常伪装成零地址来放松用户的警惕性。以下列举了一些用于 claim 钓鱼诈骗的 Scam contract。我们在交易时,需要注意地址前后是“ 0000 ”的地址。 https://etherscan.io/address/0x0000b514c923f55180fc12428e05695666620000 https://etherscan.io/address/0x0000438e0f00fc35dff19d0062608057a1d20000 https://etherscan.io/address/0x0000a4998724e52f0886edff693aca33f9900000 https://etherscan.io/address/0x000062accd1a9d62ef428ec86ca3dd4f45120000 https://etherscan.io/address/0x000038f1e0c4417a3650c3f9a9a920b2e52e0000 https://etherscan.io/address/0x000056c346441ef8065e56b0cddd43fdec100000 Claim 钓鱼攻击本质也是获取用户的 token 授权,所以,我们仍然需要时刻关注授权情况。 模态钓鱼攻击发生的根本原因是钱包应用程序没有彻底验证所呈现的 UI 元素的合法性。为了避免这种钓鱼攻击,钱包应用程序的开发者应该始终假设外部传入的数据是不可信的。用户也可按照上述方式检查自己的签名信息和授权信息。 综上所述,我们详细介绍了四种新型的Web3钓鱼攻击方式,并提供了相应的识别和预防措施。除了提高用户的警惕性外,我们还建议用户深入了解授权和签名的相关内容,并定期检查自己的授权情况,及时撤销不必要的授权。此外,我们强调了不随意签名的重要性,以防止攻击者获取我们的签名并滥用。如果您对Web3安全或智能合约审计有任何其他问题,欢迎随时与我们联系。我们将竭诚为您提供帮助。2. Uniswap permit 2 钓鱼攻击
3. Claim 钓鱼攻击
4. 模态钓鱼攻击
如何避免web3钓鱼攻击
1. 针对 approval 钓鱼的预防措施
2. 识别 permit 2 中的签名
3. 防止 Claim 钓鱼攻击
4. 防止模态钓鱼攻击
总结