Solana 的 6 个常见加密项目漏洞
免责声明:观点来自原文作者,与本人无关,文章仅供参考学习,请自行辨别真伪,切勿跟风,风险自担。
翻译原文:https://medium.com/coinmonks/6-solana-common-crypto-project-vulnerabilities-7db0044135f8
Solana 是当今最受欢迎的区块链之一。许多流行的模因币和更复杂的项目都是用它制作的。 Solana 提供高交易速度和足够低的佣金,但它也经常需要更高的技术技能 - Solana 项目开发可能通常需要建立或租用节点或设计可靠的后端部分。
在安全性方面,Solana 有其自身的特点,在该网络上开发项目时应考虑到这些特点。这就是为什么基于 Solana 的项目的安全审计不同于以太坊等项目的智能合约审计。本文将讨论 Solana 的一些最常见的安全问题。
0. 后端漏洞
本文不会描述这组漏洞,因为它与 Solana 本身没有直接关系,但我们发现这种漏洞类型非常重要。
在Solana上开发项目时,许多项目通常会构建一个额外的后端部分。根据我们的经验,很大一部分漏洞可能并不隐藏在智能合约的代码中(准确地说,智能合约在Solana中被称为程序),而是隐藏在后端部分。值得注意的是,如果你在Solana项目中使用或计划使用后端功能(通常这适用于任何网络上的任何区块链/加密项目),你需要额外注意项目后端的安全检查。
1. 缺少所有权检查
Solana 帐户的所有者根据定义是智能合约(程序)。所有者数据(公钥)包含在帐户元数据 ( AccountInfo::owner ) 的所有者字段中。如果智能合约包含可供某些特定帐户列表使用的功能,则有必要提供帐户所有者的验证。如果没有所有者验证,攻击者可以添加他们的欺骗帐户而不是预期帐户。
2、账户混乱
Solana 程序(智能合约)可能有多个帐户,其中包含用于不同目的的不同类型的数据。验证帐户数据是否属于程序期望从帐户获得的类型非常重要,因为攻击者可能会利用缺乏验证来达到自己的目的。
3. 缺少签名者检查
一般来说,在智能合约设计中,通常需要指定调用一组特定实体的指令(例如,仅允许管理员调用)。在 Solana 智能合约中,经常会忽略检查特定帐户是否具有调用相应指令所需的权限(Rust 中的此检查是通过AccountInfo::is_signer执行的)。
4. 上溢/下溢
Solana 智能合约中常见的疏忽之一是整数溢出。发生这种情况的原因可能是 Rust 在调试模式下会捕获溢出/下溢错误,这可能会导致开发人员粗心,因为他们可能期望在发布模式下也会捕获此类错误。然而,在发布模式下,Rust 所做的是二进制补码包装,而不会引起程序恐慌。因此,必须密切关注并计算必要的变量大小,以便它们能够正确容纳给定变量的所有可能值。
5、精度损失
此类漏洞在 Solana 智能合约中经常发生。避免这种情况的最佳方法是如果可能的话在程序开发期间使用定点实现。
6. 任意跨程序调用(CPI)
当一个智能合约被另一个智能合约调用,并且调用智能合约不检查调用的智能合约是否与预期的智能合约匹配时,就会发生任意跨程序调用。在调用目标智能合约之前需要添加对目标智能合约的验证。如果没有这样的验证,攻击者可以用自己的智能合约来代替调用。
综上所述
Solana 是一个稳步发展的区块链,有其自身的特点,在该网络上开发项目时应考虑到这些特点。了解与 Solana 合作的特定功能可以创建不仅在加密社区中流行的项目,而且对用户的资产来说也更安全。