本文总结了常见的 Solana 的钓鱼攻击手法,帮助用户有效避免相关钓鱼事件,减少资产损失。
撰文:Go+ Security
近期 Solana 的市值水涨船高,一度超越 BNB 排名全球前三,巨大的财富效应吸引了大量的活跃玩家,更吸引到了大量 Wallet Drainer(钱包钓鱼)团伙从 EVM 的链转入 Solana,针对 Solana 的钓鱼网站、空投诈骗开始被大规模的部署,已造成大量用户损失惨重。近日 GoPlus 安全团队分析了多笔 Solana 的钓鱼事件,发现诈骗团伙利用 Solana 目前部分钱包的安全基础设施不完善的情况,快速升级空投诱骗、实施社交账号窃取,对此 GoPlus 总结如下常见的 Solana 的钓鱼攻击手法,帮助用户有效避免相关钓鱼事件,减少资产损失。
在近期的几起钓鱼事件中,GoPlus 发现钓鱼团伙大多是以「诱骗领取空投」、「假项目网站」、「免费抽奖」、「通过 NFT 空投引导进入」等,这些方式和 EVM 常见的几种钓鱼引导方式几乎一致,主要区别是骗子利用 Solana 与 EVM 的机制不同,从而以不同的「代币或授权转移」的方式进行钓鱼活动。以下是几种我们观察到的不同的转移攻击方式。
这种类型的攻击方式是最简单的,诈骗团队在用户链接完钱包后会在前端计算出当前所有 $SOL 的余额,并且利用SystemProgram.transfer的功能直接完成代币的转移,以某个钓鱼网站举例,该网站显示了一个 Swap 的界面 UI,用户往往以为是以低价可以购买到某种代币

但实际上执行的只是单纯的 $SOL 的转移

除了盗取原生代币 $SOL 之外,骗子可以在同一笔交易签名中同时盗取所有当前钱包持有的 Token 资产。在 Solana 上的每一笔交易都可以由多个 Instruction 组成,每一个 instruction 可以完成一个单独的逻辑,比如转账、程序的交互以及 Account 的创建等等。这就意味着,钓鱼团伙完全有能力可以在同一笔交易中塞入多个操作指令,举例来讲,如果用户持有三个不同的 Token,那么钓鱼网站只需要在代码中往同一笔交易中塞入三个 Token 的分别的转账指令即可。这样一来就不需要单独骗取某一个资产,而是可以利用这个特性完成一次性的钱包洗劫。和第一种诱导一样,黑客也是通过各种手段蒙骗用户点击按钮进行交易,我们可以看到,该类型交易将会一次性转走所有资产,不仅包含原生 $SOL 代币,同时包括 NFT 类型资产,也包含代币类型资产。这里诈骗团队主要利用了 Solana SPL Token 的createTransferCheckedInstruction完成对非原生资产的转移 instruction 构造。

Phantom 交易模拟
Backpack 交易模拟
除了直接代币外,GoPlus 还发现了部分的钓鱼网站采用了createSetAuthorityInstruction的操作将 instruction 打包进交易中,该操作的本质是将账户上代币的所有权进行转移,Solana 的账户模型和 EVM 有所不同,每一个账户地址对于每一个代币,都会有一个专门的Token Account对应,Token Account 会有一个 owner,该 owner 就是当前的账户,Token Account同时记录了对应 Token 的余额和相关信息。而createSetAuthorityInstruction操作可以直接将当前代币的所有权转给另外一个账户,实际最终的效果等同于将当前的代币全部转给了该账户。我们分别在Phantom和Backpack上进行了该操作实验,庆幸的是,这两个钱包都进行了特别的提醒和警告。

即使用户点击了Ignore and proceed anyway的选项,依旧可以通过交易模拟显示出余额的变化
以上三种类型的攻击手段目前大部分的主流 Solana 都已经通过交易模拟能够实现对于结果的预测,用户能够很清晰的看到点击后的余额变化,因此只要用户耐心仔细的查看每一次的交易变化结果,就可以相对来说规避部分钓鱼风险,这是因为 Solana 的官方 JSON RPC 的接口中就能够提供「交易模拟」的能力。但是,随着钓鱼诈骗技术的升级,我们也发现了一些非常不易察觉的钓鱼手法。
对于熟悉 EVM 的用户而言,代币授权是一个常见的操作,但在 Solana 上,这一操作有所不同。在 Solana 网络中,骗子会利用用户对 EVM 授权机制的误解来实施诈骗。钓鱼网站通过诱导用户进行看似正常的交互操作,实际上却在背后通过 createApproveCheckedInstruction 执行了授权交易 Delegate。这种手法的关键在于,它不直接转移资产,而是通过赋予攻击者控制用户资产的权限。这类攻击通常隐藏在诱人的交互界面后,如假装进行投票、质押等,实际上却在悄无声息地更改账户的授权设置。
一旦攻击者获得了对用户资产的控制权限,他们便可以随时操纵这些资产,包括转移或交易。这种类型的攻击往往不易被及时发现,因为它并没有立即产生资产转移。这类的攻击也往往影响面最广,因为攻击者会等到上当用户足够多、金额足够大的时候才开始实施代币转移。用户需要特别注意,任何请求更改授权设置的操作都应引起警惕,尤其是在不熟悉的网站或应用上。通过交易模拟能够看到授权变化,因此不仅需要关注直接的代币余额变化,也要小心授权的变化导致的钓鱼风险。


Durable Nonce 是 Solana 区块链中的一个功能,它允许创建一个特殊的账户来存储一个持久的、不会过期的 nonce 值。在 Solana 中,每个交易都需要一个最近的区块哈希(recent blockhash)作为一部分,这用于确保交易的时效性和唯一性。通常,这个区块哈希会在大约 150 个区块之后过期,使得交易无法被处理。Durable Nonce 机制通过提供一个不会过期的 nonce 值,允许创建可以在更长时间内有效的交易。
在钓鱼诈骗中,骗子可能会滥用 Durable Nonce 机制,诱导用户签署看似正常但实际上包含恶意操作的交易。由于使用了 Durable Nonce,这些交易不会因为区块哈希过期而失效,给骗子更长的时间窗口来执行交易。例如,骗子可能会设计一个伪装成合法操作的交易,如参与空投或活动,但实际上交易中包含了将用户资产转移给骗子的指令。用户在不知情的情况下签署了这样的交易,但用户会发现在区块上根本没有该交易的发生,因为攻击者只是拿到了该交易的签名,交易本身并没有被发送到区块链上,他们可以在之后的时间里随时将交易广播上链。但是,无论交易是否发生,我们发现这种类型的签名并不会影响交易模拟的结果判断,几个主流钱包依旧能够将交易本身进行模拟和解析并且告知结果,因此我们之前对于交易模拟结果的判断还是有效的方法论。
但是,我们依旧发现了一种极其隐蔽并且复杂的攻击方法,能够「瞒天过海」
这个方法就是结合了 Durable Nonce 以及 Solana 合约特有的特性 — — 可升级,这种攻击手段的潜在危险性因为可升级合约的特性被进一步的加大,Durable Nonce 机制通过创建一个持有长期有效 nonce 值的账户,允许交易在更长的时间窗口内保持有效。这意味着即使用户在签署交易的时候不立即发送到区块链上,交易仍然可以在未来任何时候被广播和执行。攻击者可以利用这一点,首先让用户签署一个看似正常的合约交易,这个交易在签名时看起来完全无害,即使是主流的钱包和交易模拟工具也难以在签名时提前警告用户。然而,在用户签署交易后,攻击者成功拿到了 Durable Nonce 的签名。此时,他们并不着急将交易广播上链,而是利用 Solana 的合约升级功能,将原本正常的合约变更为一个恶意的版本。这种恶意合约能够执行例如资产转移等操作。在进行升级后,攻击者再将签好的交易发到区块链上,来执行该恶意操作,达到自己的目的。这种类型的攻击特别隐蔽,对用户来说构成了极大的隐患,因为即使是经验丰富的用户在签署交易时也可能无法识别出潜在的风险。为了防范这种攻击,用户需要对合约的信誉和历史进行仔细审查,对任何不寻常的交易行为保持怀疑态度,避免与不明来源或新成立的合约进行交互。同时也希望所有 Solana 的钱包能够注意该攻击手段,及时的在钱包侧能够形成有效的提醒和对用户资产的保护。
在面对 Solana 网络中的钓鱼攻击时,以下是一些综合性的防范措施,可以帮助最大限度地减少风险:
同时,GoPlus 安全团队呼吁 Solana 公链及其生态深度关切用户安全,加快提升用户安全的基础设施建设,给用户提供更安全的交易环境,从而实现生态的稳定和繁荣。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
