一文了解针对 Solana 生态用户的攻击手法

封面:Solana

Solana 作为一条高性能且可扩展的区块链协议,从去年起,其生态一直处于快速发展的状态。Lido 和 Jito 等流动性质押项目和各种 Meme 热潮让 Solana 的 TVL 和交易量增长迅猛,而 Solana 的 PayFi、DePIN 项目则让用户和投资者看到了区块链与现实世界结合的巨大潜力。

目前,越来越多的用户进入到 Solana 的生态。在此趋势下,很多黑客早已伺机而动,利用 Solana 的特性,实施欺诈行为,并且新型的攻击手法层出不穷。作为 Solana 生态的安全合作伙伴,Beosin 此前已为 Sonic SVM、Space Runners 等多个项目提供安全服务。针对此类安全风险,Beosin整理并解析了针对 Solana 生态的攻击手法,用户可从中了解并采取对应的预防措施,帮助大家更加安全地交互 Solana 生态项目。

Solana 账户与交易模型

在了解针对 Solana 生态的攻击手法之前,用户首先需要对 Solana 的账户与交易机制有一个基本的了解。

Solana 账户

在 Solana 的设计中,所有的信息都存储在账户(Account)对象中,而账户类型分为三类:

1.   数据账户,用于存储数据。数据账户又分为系统所有账户和程序派生账户(Program Derived Address)

2.   程序账户,用于存储可执行程序,即用户/Solana 官方开发并部署的智能合约。值得注意的是,Solana 的智能合约是可以被更新/销毁的。

3.   原生账户,指 Solana 上的原生程序,它们是由节点在部署时生成的智能合约,普通用户无法更新/销毁,但和其它智能合约一样,可以被合约/RPC 调用。

注:Solana 的程序(Program)本质上和其它区块链的智能合约(Contract)类似,下文的程序等同于智能合约。

普通用户通过钱包生成的账户属于数据账户中的系统所有账户,可以理解为用户通过系统程序生成了一个系统所有账户,这个账户存储了地址信息和加密资产等数据。

Solana 交易

首先,用户需要了解一个概念:指令 (instruction),指令定义了 Solana 交易中的操作,例如程序交互、代币转账等Solana 上的一笔交易可以包含多个指令,这表示用户在 Solana 链上进行交互时,可以在同一笔交易中执行多个不同的操作,例如用户可以将多笔转账指令打包到同一个交易中 (batch transfer),这些指令将按顺序执行。

用户可以在 Solana 的区块链浏览器中,选择一笔特定的交易,然后在 Instruction Details 里查看该交易包含的指令,从而获得相关指令调用的程序,以及涉及到的转账双方的地址等信息。以 Solscan 的某一笔交易为例:

该笔交易调用了系统程序和代币程序的 burn 函数,将一定数量的 $PONK 代币销毁。

针对 Solana 生态的攻击手法

随着 Solana 的热度上涨,钓鱼攻击与 Rug Pull 在其生态中也日渐猖獗。根据 Scam Sniffer 的报告,今年 9 月,大约 1 万名用户因钓鱼攻击而造成了总共超过 4600 万美元的损失,用户需要格外对钓鱼攻击提高警惕。以下是 Solana 生态主要存在的造成用户损失的攻击手法:

1. 空投诈骗

钓鱼攻击者在社交媒体上发布伪装成空投活动的钓鱼网站链接,或是向用户的钱包地址转入 NFT,诱骗用户访问钓鱼网站并签署交易,导致用户的资产被盗。

由于 Solana 允许将多笔转账打包成一个交易,因此用户只需一次签名即可将钱包中的所有资产一次性转移到钓鱼者的地址中,造成巨大的损失。在使用钱包签署交易时,用户必须谨慎确认每一次签名的结果,以免遭受损失。

2. 模拟交易的失效

由于 Phantom 等钱包提供模拟交易,用户可通过观察钱包的模拟交易结果来避免钓鱼。但模拟交易的结果并不是实际的交易结果,钓鱼攻击者可以合并交易恶意浏览器插件等方式伪造钱包的模拟交易结果,诱导用户签署恶意交易

今年 8 月,有 Solana 的用户下载一个名为 “Bull Checker” 的浏览器插件,其权限为可读取和改变你访问的所有网站的所有数据,导致了用户的 Solana 资产被盗。具体原因如下:

当钱包模拟用户发起的交易时,由于攻击者地址的 SOL 余额为 0,不会执行恶意转账的操作,可以顺利通过模拟交易的检查。在实际交易时,Bull Checker 这个插件会将 Wallet Adaptor 的 signTransaction() 替换为它的恶意实现,将未签名的交易发送到攻击者的服务器,附上一个钓鱼程序的调用。交易中用户会发送小额的 SOL 到攻击者地址,从而触发恶意的转账。

https://www.jupresear.ch/t/identification-of-malicious-extension/21584

如果一个浏览器插件同时具有 “读取” 和 “更改” 等广泛的权限,请确认该插件是否需要这些权限。比如 Bull Checker 的功能实际上只需要读取数据即可。用户也应格外注意模拟交易的结果并不能代表实际交易的结果,钓鱼者有多种手段去修改/阻止显示模拟交易的结果。

3. 权限转移

这种钓鱼手法与以太坊生态的手法类似,钓鱼者通过诱导用户签署交易,转移代币账户的所有权。用户在签署交易时,尽管许多钱包会发出警告,但许多用户仍然可能被诱导。

Solana 生态的每一个代币,都有一个单独的账户 (Token Account),每个代币账户中会有一个所有者 (Owner) 的属性。

https://solana.com/docs/core/tokens

在默认情况下代币账户的所有者会被指定为当前持有代币的地址,但这是可以通过调用 createSetAuthorityInstruction() 进行修改的。当用户被误导调用了该函数,其钱包某个代币账户的所有权会被转移到黑客地址,随后黑客可将用户的代币转移走。

4. 地址投毒

钓鱼者通过伪造与用户常用地址相似的钓鱼地址,使得用户将资产误转到钓鱼者伪造的地址。这种手法此前在以太坊和 Tron 链较为常见,近期也开始在 Solana 上大量出现。

5.  代币拓展

今年 9 月,有部分 Solana 用户发现自己在进行代币兑换/转账之后,代币被销毁了。Beosin 研究发现,代币被销毁的原因是该代币程序有一个名为 Permanent Delegate 拓展功能

https://x.com/SlorgoftheSlugs/status/1830769369049375204

Permanent Delegate 是 Solana 官方对代币功能的扩展,管理员在任何时候都有权转移或销毁代币。其目的是为了适用于特殊的应用场景,例如代币回收、稳定币的监管。在创建代币时,创建者需要利用 createInitializePermanentDelegateInstruction 指令来初始化 permanentDelegate。

由于 Permanent Delegate 的权限过大,一些黑客利用该拓展功能发行代币,吸引用户购买其代币后,通过销毁或转移获益。

除了 Permanent Delegate 这个拓展功能外,攻击者还可能利用Transfer hooksTransfer fees 等拓展功能对用户造成资产损失

总结

通过以上介绍,我们希望大家能够对 Solana 的账户、交易和攻击手法有更全面深入的了解。从选择安全性更高的钱包和插件、提高自身反诈骗意识,到了解新型的攻击手法,这些预防措施能够在很大程度上降低风险,确保用户的资产安全。Beosin 也将会在之后为大家带来更多骗局分析与安全指南。

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。