Solana 生态:安全与审计攻略

Solana 生态的安全与审计策略

背景

嘿,数字资产投资者们!今天我要跟大家聊一聊Solana(真好用的区块链啊!)和智能合约的安全审计策略。哈哈哈!别担心,我会用幽默的方式解释这些概念,让你们开心地学习。

首先,我要给大家介绍一下Solana Hacker House,在香港举办的四天线下活动。这个活动由Solana Labs核心工程师提供现场指导,同时还有其他生态系统团队的导师支持。我们的好朋友Johan,就是慢雾安全团队的公链安全负责人,在活动中给大家做了一个超级酷炫的演讲,题目是“Solana区块链的高级安全和审计策略”。这个演讲从开发、安全事件和智能合约的安全审计三个方面,给大家详细讲解了Solana生态的安全性和审计策略。

讲解之前,先给大家看一张有趣的图,可以让你们更好地理解Solana的账号和程序之间的关系。咔嚓!图片就在这里:

图片

开发中的安全考量

我们先来谈谈Solana账号的公私钥对。Solana的公钥是由Ed25519算法生成的,这个算法可是又安全又快速的哦!而且,它生成的签名具有确定性,可以更好地抵抗签名延展性攻击。简直就是人见人爱、花见花开的公私钥对。

Solana的设计理念和Linux的文件有点相似,账号不仅可以用于存储数据,还有严格的所有权和读写权限控制。就像Linux通过LianGuaith来指向要读写或执行的文件一样,Solana通过Public key来指向要读写或执行的账号。不过,Solana账号和Linux的文件也有一点不同,就是Solana账号需要为存储空间支付费用。

Solana账号有好几个特性噢:

  • 账号是用于存储数据的。
  • 账号的最大存储空间是10MB。
  • 存储空间是需要支付租金的,不能免费啦!
  • 默认创建账号时的owner是System Program。
  • Programs是存储在账号中的可执行程序。
  • Programs可以由用户和其他Programs调用。
  • Programs是无状态的,就像无感猫一样没心没肺。
  • PDA账号的最大存储空间是10KB。

程序账号和数据账号也是Solana中的重要概念。由于Solana的Programs是无状态的,所以在存储数据时,就需要创建用于存储数据的账号,也就是PDA账号。PDA账号的owner可以将数据以特定的结构序列化后存储在Data Account里。程序账号和数据账号就像伙伴关系一样,总是紧密相连的。

嘿,等等!我还没提到程序指令呢!Solana的智能合约和以太坊不太一样哦。在Solana中,一个Transaction里可以通过Instruction调用多个Program。客户端调用Program时,只需传入几个关键参数,就能构造出一个指令。不过,正因为这个调用过程太灵活了,所以也存在非常多的安全问题。账号校验就是其中一个严重的安全隐患。智能合约必须非常严谨地设计账号的关联关系。我们来看一张图,就能一目了然啦!账号有很多东西要校验,比如key、lamports、data、owner、签名、账号是否可写等等。看到这些,我都有点儿手忙脚乱了。

图片

噢对了,还有一个叫重入保护的东西。重入保护就是runtime对智能合约的调用做的另一个限制。以太坊早些年发生过一起重入攻击事件,导致很多投资人的资金被盗走了。Solana吸取了这个教训,因此禁止了合约的重入。Solana不仅安全,还很负责任!

为了更好地保护账号安全,还需要注意以下几点:

  • Key校验:检测传入的账户是否是预期的账户,例如Sysvar账户。
  • Owner校验:验证数据编写者是否具有适当的授权。
  • Signer校验:认证发起请求的调用者的身份。
  • Program ID校验:确认执行环境是否符合预期条件。
  • PDA校验:验证数据完整性,以确认其来自可信任的来源。
  • Lamports校验:检测用于存储数据的租金是否足够。
  • Data校验:分析数据格式,以确保符合预期结构,比如验证SPL-Token规范。

还有一点!Solana上还有一种很酷的资产,就是代币!看这张图,你就会明白:

图片

由于Solana的Programs是无状态的,所以代币不能只存在单个账号里。代币主要由三个部分组成:token-program、mint-account和token-account。简而言之,发行一个代币,就是创建了一个mint-account;接收一个新的代币,就是创建了一个token-account。

mint-account中存储了基本的代币信息,比如mint-authority、supply、decimals、is_initialized和freeze-authority。

token-account中记录了用户持有的代币信息,比如mint、owner和amount等,还有账号的授权信息,比如delegate和delegate_amount等。

继续看下面这张图,可以更清楚地了解代币之间的关系和结构。token-program可以无限地创建代币,用户也可以无限拥有token-account。它们的owner都是token-program。

图片

顺带一提,NFT也是一种SPL-Token,目前默认使用metaplex创建的标准。与同质化代币不同,NFT的supply为1,decimals为0,代表NFT独一无二且不可分割。

还有一个要注意的是,token的授权模型中一次只允许授权给一个账号,这与ERC-20标准不同。这种方式大大降低了代币被盗的风险。保护账号安全,Solana真是想得很周到!

在编写程序时,还要注意以下几点:

  • Token Program ID校验:确认代币是由官方项目发行的。
  • Mint校验:确保收到的是正确的代币。
  • Mint Authority校验:保护代币铸造权利,利用多重签名等方法以防止私钥滥用。
  • Decimal校验:验证代币的小数精度,以确保准确的交易。
  • Amount校验:实施范围验证,以防止溢出并保持计算准确性。
  • Freeze Authority校验:确保NFT的发行权限被不可逆地终止。

Solana中的安全事件

听得心惊胆战了吗?Solana生态中可是发生了不少黑客攻击事件啊!据慢雾区块链被黑档案库统计,截至目前,Solana生态中的损失已经超过5亿美元。哇哦,这可是一笔可观的数额!

接下来,我给大家简单介绍一下Solana中发生过的几起黑客攻击事件,让你们更加了解黑客是如何攻击Solana应用的。大家要做好心理准备哦!

  1. Wormhole跨链桥被攻击:这起事故的主要原因是传入的一个系统账号没有校验。黑客使用伪造的账号,并精心构造了数据填充账号,使智能合约错误地给黑客增发了代币。这次事件造成了12万个ETH的损失。哇塞,这个黑客真是心狠手辣啊!

  2. Nirvana遭闪电贷攻击:这个项目没有开源,只能从浏览器进行分析。我们可以看到,黑客从solend里借出了大量的USDC,并操控了代币的价格,从中获利300多万美元。看到这,大家是不是也想点一盘宵夜了?

图片
  1. 大规模盗取私钥的事件:2022年8月,我们发现Solana社区有大量的用户被盗取私钥。奇怪的是,这些用户使用的不是同一个钱包,使用习惯也不相同。所以,我们到现在还没确定这个事件的原因。然而,我们发现有一些钱包使用了sentry组件,导致私钥被上传到服务端。如果你们对这个事件感兴趣,可以看看慢雾安全团队写的关于Solana公链的分析文章。

  2. 代币假充值攻击:这是一个链下的安全问题。攻击者创建一个token-account,往这个账号里转移代币,然后再转出,最后把这个token-account的owner转移到交易所的充值地址。交易所在检测token-account的链上记录时,会误认为这个账号有真实的充值,于是为这个恶意用户进行充值。这种攻击真是聪明又狡猾啊!看这两张图,你就更明白了:

图片
图片

如何做智能合约安全审计

哈哈哈!看到这里,你们是不是已经虎躯一震,觉得Solana的安全性实在太重要了?不要紧张!我要告诉你们做好智能合约安全审计有哪三个重要因素:安全预算、持续的审计和高管直接负责安全工作。嘿,明白了吗?

智能合约安全审计是一个严谨的过程,这需要掌握很多知识和技能啊!好在慢雾安全团队在Github上开放了智能合约安全审计技能树和Solana智能合约安全最佳实践,你们可以去Github上学习哦!我保证,这些内容一定让你们又学到了一些新知识。

结语

嘿,Solana Hacker House真是太棒了!感谢他们的邀请,让我们更好地了解了Solana的生态安全和审计策略。慢雾安全团队在智能合约安全审计领域里可是耕耘多年了。我们的商业系统Badwhale,已服务数十个平台多年,避免了几十亿美元资产的假充值风险。我们还支持Solana的假充值检测。如果你们有审计方面的需求,欢迎与我们联系。我们随时准备为你们提供优质的服务。

最后,我想和你们打个招呼:嗨,数字资产投资者们!希望通过今天的分享,你们更加了解了Solana的生态安全和审计策略。有什么关于Solana的问题和想法,都可以告诉我。我会竭尽全力给你们提供帮助哦!

We will continue to update 算娘; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

区块链

Vitalik Buterin对DAO批准股权池操作者表示担忧

在最近的一篇博客文章中,以太坊的联合创始人维塔利克·布特林警告称,当流动性池采用DAO方法时可能存在攻击漏洞

资讯

Fireblocks与UniPass Wallet共同解决以太坊ERC-4337账户抽象漏洞

Fireblocks识别并协助修补UniPass ERC-4337智能合约钱包中的以太坊账户抽象漏洞

区块链

ZK行业的最新动向是什么?Rollups、多链桥和风险投资

作为一项新兴技术,零知识证明如何能够解决加密货币领域中的许多问题?

政策

美国证监会推迟对黑石现货以太坊ETF的决定

美国证交会已将BlackRock的以太ETF申请的审查期延长至3月10日,允许对提议的规则变更进行彻底审查这额外的时间显示了该申请对...

资讯

使用零知識證明和GPU加速區塊鏈

备受期待的网络3数据服务Space and Time近期发布了一款领先的GPU加速框架,现已作为开源工具面世这一创新框架专门针对ZK证明...

DeFi

🚀 dYdX的基于Cosmos的市场在交易量方面取得了领先地位 📈

根据跟踪平台CoinMarketCap的数据显示,利用跨链协议Cosmos的dYdX v4版本在24小时内实现了接近7.57亿美元的令人印象深刻的交易量