背景
11 月 14 日至 17 日,Solana Hacker House 在香港举办为期四天的线下活动,由 Solana Labs 核心工程师提供现场指导,同时还有来自其他生态系统团队的导师支持。慢雾安全团队的公链安全负责人 Johan 受邀在活动中做了一个主题为 “Advanced Security and Auditing Strategies for Solana Blockchain” 的演讲,从开发中的安全考量、Solana 中的安全事件、如何做智能合约安全审计三个方面为大家讲解 Solana 生态安全和审计策略。
开发中的安全考量
1. 账号的公私钥对
Solana 的 Public key 由 Ed25519 算法生成,该算法安全快速,有一定的抗量子计算的能力,且生成的签名具有确定性,可以更好地抵抗签名延展性攻击。
2. Solana 账号
Solana 的设计理念和 Linux 的文件有一定的相似性,账号可以用于存储数据,也有严格的所有权和读写权限控制。Linux 通过 Path 来指向要读写或执行的文件,而 Solana 通过 Public key 指向要读写或运行的账号,不同的是 Solana 账号需要为存储空间支付费用。
Solana 账号具有以下特性:
- 账号是用于存储数据的
- 账号的最大存储空间是 10 MB
- 存储空间需要支付租金
- 默认创建账号时的 owner 是 System Program
3.Programs
Programs 是存储在账号中的可执行程序,可由用户和其它 Programs 调用。Programs 是无状态的。
4. PDA 账号
PDA 账号的最大存储空间是 10 KB。
5. 程序账号 & 数据账号
由于 Solana 的 Programs 是无状态的,因此它在存储数据的时候就需要创建用于存储数据的账号,即 PDA 账号,PDA 账号的 owner 可以将数据以特定的结构序列化后存储在 Data Account 里。
6. 程序指令
下图是 Solana 智能合约的调用示意图,和以太坊的智能合约不同的是,Solana 一个 Transaction 里可以通过 Instruction 调用多个 Program。
[图片:Solana 智能合约调用示意图]
客户端调用 Program 时,首先需要传入几个关键参数 (Program ID, Accounts, Data) 来构造 Instruction,这个调用非常简单灵活,但也因此存在非常多的安全引患。账号的校验就是其中一个严重的安全隐患,智能合约需要非常严谨地设计账号的关联关系,否则可能会导致资金被盗或程序逻辑错误。
Solana 中的安全事件
近年来,Solana 生态也发生了一些安全事件,例如:
- 2022 年 1月,Wormhole 被黑客攻击,损失 3200 万美元。
- 2022 年 9 月,Solana 网络出现大规模宕机,导致交易无法进行。
这些事件暴露了 Solana 生态在安全方面存在的不足,也促使开发者和安全审计人员更加重视安全问题。
如何做智能合约安全审计
慢雾安全团队在 Solana 生态安全审计方面积累了丰富的经验,并开发了专门的审计工具和方法。主要包括以下几个方面:
- 代码审计: 对智能合约代码进行全面分析,识别潜在的安全漏洞,例如:
- 逻辑漏洞:代码逻辑错误,可能导致资金被盗或程序逻辑错误。
- 权限控制漏洞:权限控制不当,可能导致恶意用户获取权限,进行非法操作。
- 溢出漏洞:整数溢出或下溢,可能导致程序崩溃或资金被盗。
- 重入漏洞:重入攻击,可能导致资金被盗。
- 功能测试: 对智能合约的功能进行测试,确保其符合预期,例如:
- 交易流程测试:测试交易流程是否正常,是否存在漏洞。
- 资金安全测试:测试资金是否安全,是否存在被盗风险。
- 逻辑测试:测试合约逻辑是否正确,是否存在漏洞。
- 安全评估: 对智能合约的安全性进行评估,给出安全建议,例如:
- 漏洞修复建议:针对发现的漏洞,提出修复方案。
- 安全最佳实践:提供安全最佳实践,帮助开发者提高代码安全。
- 安全建议:针对合约的具体情况,给出安全建议。
结论
Solana 生态发展迅速,但也面临着安全挑战。开发者和安全审计人员需要共同努力,提高代码安全,防范安全风险。慢雾安全团队将继续致力于 Solana 生态安全研究,为开发者提供安全服务,共同构建安全、可靠的 Solana 生态。
参考文献
注意: 本文仅供参考,不构成投资建议。
Views: 0