10.6.1 恶意签名攻击原理

什么是签名?

在一些网站(如Opensea)在登陆时、Snapshot网站进行投票治理时,往往要求用户对一些文本进行签名,这个签名行为是不上链的,没有Gas成本,目的是为了证明你是该地址的拥有者。

很多用户在购买了冷钱包,之后,认为自己的资产就万物一失了。这种认识往往会导致疏忽造成资产损失,因为我们还存在签名攻击这一途径。

10.6.2 恶意签名攻击的类型

特殊签名类型Eth_Sign

Eth_Sign是以太坊设计之初遗留的一个极具风险的签名方式,它的目的是允许钱包拥有者发起一笔交易,但由他人进行提交,代为支付Gas费用。但在实践中确成为诈骗的重灾区,因为Eth_Sign是对任意哈希进行签名,用户在签名时只能看到一串哈希值,而并不能看到哈希值对应的原始交易内容为何物。签名之后就使得对应的交易成为被钱包主人签名过的“合法交易”,黑客广播之后就能使交易生效。

Untitled

引用 慢雾:空白支票 eth_sign 钓鱼分析

<aside> 👉 MetaMask现在会对Eth_Sign提出安全警告,当你看到红色提醒时,哪怕这次弹窗不需要支付Gas,也需要警惕,很可能遇到了Eth_Sign骗局

</aside>

**有特定效用的文本:**针对Opensea、Blur等NFT交易合约

当你在Opensea等NFT交易平台挂单了自己的NFT,就可能暴露在这种风险之下。在挂单之前的Set Approve For All,其实是授权Opensea合约对你的某一系列NFT拥有完全的使用权。这种行为意味着你完全信任Opensea的合约不会作恶。 但实践中为了节省Gas,这些NFT交易合约往往都支持“元交易”,也就相当于你在链下给对方签了一张买卖合同,买方可以拿着这张合同在链上与Opensea的交易合约交互确认,如果签名合法,Opensea交易合约就会将你的NFT转给买方。

Untitled

黑客正式利用了这种正常的交易流程,由于Opensea允许给特定地址设置特定价格的合同,这意味着黑客可以写一份合同,将买方设置为自己的钱包,然后独享一个超低价格买下NFT。如果受害人一不注意签名了这份合同,那黑客就能在“合法框架”之内将NFT“买”走。

下图就是月鸟NFT创始人,也被这种方式攻击过,损失惨重。