专辑简介:

技术派是 PANews 推出的与技术相关的文章的集合地,如果你是研究技术的个人或团队,内容包括但不限于与智能合约相关的,与各大公链技术相关的,与安全相关的,欢迎 点击此处下载PANews 注册投稿,在这里让你技术文章让更多人受益,在这里你也能交到同好互相交流。


作者:Fairyproof

前两天,Solana区块链上出现了安全预警,有章指出个名为

https://officialsolanarares.net/mint/⻥⽹站在户批准之后,可以将户的原代币转。在该中提到了点:

恶意合约在户批准(Approve)后,可以转⾛⽤户的原资产(SOL),这点在以太坊上是不可能的,以太坊的授权钓钓不以太坊的原资产(ETH),但可以钓其上的Token。于是这就存在“常识违背”现象,导致户容易掉以轻

其实该章这的说法是不甚准确的,混淆了批准交易和SolidityERC-20代币授权这两个不同的概念。

真实情况是通过Solana的签名扩散机制,恶意合约直接盗取了户的SOL资产,和通常意义上的授权并没有什么关联。

1. 以太坊中的授权

在以太坊中,通常意义上授权是指户调代币合约,向其它地址(合约)授权定处理额度,这样我们在和其它合约交易时,可以便的ERC-20代币。

在这,授权是必须的,否则第三合约权处理户的代币资产。同时,这种机制也伴量的授权攻击,只要你授权了恶意合约,恶意合约就可以转你的ERC-20代币。

2. Solana中的授权

Solana中,代币般为官提供的spl-token合约,它模拟了ERC-20代币的为,因此也存在类似的ERC-20授权概念。同样授权第三合约后第三合约可以处理户的代币(注意不是原SOL)。这点同以太坊是致的,并没有什么反常识。

3. Approve的涵义

不管在以太坊中还是在Solana中,我们习惯将Approve当作授权(ERC-20协议approve函数),因此然的会认为是代币授权。当我们使MetaMask钱包时,如果是代币授权交易会明确提示授权,并且所有交易弹出的个确认按钮。然SolanaPhantom钱包,弹出的是Approve(批准)按钮,让很容易以为是授

权交易。但真实情况是批准次交易并不是进代币授权。所以安全预警中出现的被盗为,是户批准了个未知交易,不是户进SOL的授权操作,当然也就不能说是授权偷了原币。

4. 交易直接转货币

交易转批准者的原货币,例如SOLETH,是常简单的。在以太坊上的Solidity中,只要调⽤⼀payabletransfe的函数就可以转交易户的ETH;在Solana中,相应的,只要调系统合约的户的SOL资产,这和我们平常讲的代币授权概念是没有任何关系的。

函数也能转移交易不同的是,在Solidity中,ETH转移发在合约调的时候,因此钱包可以提前知道要转移的ETH数量并显示出来,Solana中,转移是发在合约内部的,因此钱包法提前知晓你会被转多少SOL,当然也会法显示。只要你签名认同了这笔恶意交易,你就相当于签名认同了这次SOL转移,这正是这次Solana上钓盗取的问题所在。

段类似如下的代码就可以在合约内部转移user SOL


5. Solana中的签名扩散机制

Solana中,有个签名扩散机制。户调合约A,此时合约A户是签名批准的。当合约A内部调合约B 时,户的签名会随着跨合约调⽤⼀起扩散到合约B。因此,在合约B中,户也是签名批准的。所以这存在个安全险,当签名个恶意合约时,恶意合约就获取了我们这个签名,然它可以拿我们这个签名做任何事情!!!!!!!

在上述的偷盗事件中,户同恶意合约3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v 交易,该合约直接调系统合约转移户的SOL,因为签名随着调⽤⼀起扩散到了系统合约,因此系统合约认为该笔交易也是批准过的,是正常的,所以就转户的资产。

6. 具体被盗交易

其中笔被盗交易:

https://explorer.solana.com/tx/4j33JSGRS6rD5irzW1cA9wjQAvAgVDAnBTrGRjqtqBBWXspTzU5HpEFwTeCC2uD9hH9eA2Pw5ddHyd5JyG6h6cNq

我们可以看到该交易涉及的输账号:


这其中:

户账号:4XF4wyjein7ZN4RPM6YK2mC2mC6T41cZAoKjJqpP19fR

SOL转移账号:BepccLHDcXqqHi6MfpTDo9Sfc5tmRjmSC1XY48Tb8HuY

恶意合约地址:3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v

从上可以看出,户账号调合约后转移了1.2545 SOL到转移账号。同时我们可以看到并没有涉及到spl-token代币合约,出产没有通常意义上的授权这么回事。

其交易打印出的志为:


志中也可以判断,恶意合约仅是简单的调了系统合约转户的SOL,因此户签名批准了对恶意合约的交易,这个签名也扩散到了系统合约,因此判定有效。

7. 结论

在Solana中,不要轻易确认或者批准任何来历不明的交易,因为它可以拿你的签名代表你做任何事情。