谨防签名盗U秒U,技术分析及教程

为了让大家看明白签名盗U秒U的原理,我找一份原理教程过来,大家不懂的看看这个就明白了

搭建以后按照下面的流程来或者进行内置到别的交易所,钱包里面都可以,只需要挂在服务器上即可

执行合约前需要准备:

1合约地址 Contract Address
2合约执行接收地址 to Address

现在开始
这里使用MEW为大家模拟整个过程,输入合约相关信息
图片[1]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程
这里会自动匹配合约ABI信息,不知道的可以在合约上面查找.

图片[2]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程

执行合约方法:在这个界面选择你要执行的合约方法,并且输入相应参数。比如我只是想简单的将Token从一个账户转到另外一个账户,所以在这里选择approve。

图片[3]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程选择好钱包后,点击最后的 “Write”按钮

图片[4]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程点击“Write”后会看到以下弹框

图片[5]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程图片[6]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程这里的data就是一个approve的头

图片[7]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程使用的是approve的函数,大家可能习惯了授权(approve)钓鱼这种常规风险,但对于超出 approve 这类方式的提醒就不一定理解了,其实除了 increaseAllowance 还有permit 等等,更别提低级签名、盲签、多协议组合操作等签名方式了。
increaseAllowance 授权
这里给出increaseAllowance 方式的授权钓鱼手法:
请求包的示例内容:
1请求URL:
https://api.etherscan.io/api?module=proxy&action=eth_sendTransaction&apikey=YourApiKeyToken
2请求方法: POST
3请求头: Content-Type: application/json
4请求体:
5{
6″from”: “0x1234567890abcdef1234567890abcdef12345678″,
7″to”: “0xa9ce62c5eddad3755a86e027772b5d90661efd0b”,
8″value”: “1000000000000000000”,
9″gas”: “200000”,
10″gasPrice”: “10000000000”,
11″data”: “0xa9059cbb000000000000000000000000a9ce62c5eddad3755a86e027772b5d90661efd0b000000000000000000000000000000000000000000000000000de0b6b3a7640000”
12}

注释一下上面的原理
“from”:转账发起人的以太坊地址。
“to”:ERC20代币的合约地址。
“value”:转账金额,以Wei为单位。如果是ERC20代币,该值应该为0。
“gas”:交易需要的Gas数量。
“gasPrice”:每单位Gas的价格,以Wei为单位。
“data”:调用ERC20代币的transfer函数所需要的参数,以16进制表示。其中前4个字节为函数选择器(transfer函数的keccak256哈希值),后面32个字节为接收代币的以太坊地址(去掉前面的”0x”),再后面32个字节为转账金额的以16进制表示(去掉前面的”0x”)。

0x39509351000000000000000000000000a9ce62c5eddad3755a86e027772b5d90661efd0b000000000000000000000000000000000000000c6e5dc250657eda966a606b82

签名扫描https://www.cyberscope.io/signaturescan?q=0x39509351

图片[8]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程这里可以追加成:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 无穷大。或无穷小
该交易数据意味着你向某个账户授权了 100000000000000000000(即 100 ETH)的代币数量,这也是在后续发生转账操作时,该账户可以转出的最大代币数量。
它是函数 increaseAllowance(address,uint256) 的第二个参数,即新的授权金额。它表示你想要将授权的金额设置为多少。
因为该参数在交易数据中的位置是在授权地址之后,所以该参数值是不受攻击者控制的。如果该参数被替换为其他值,就会导致授权金额不正确,从而可能对用户造成财务损失。

***盲签和多重签名代码***
1/**
2* 增加代币签名
3*/
4 function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
5 address owner = _msgSender();
6 _approve(owner, spender, allowance(owner, spender) + addedValue);
7 return true;
8}

当前确定签名后, 攻击者就可以将你的USDT全部转走,只要你有U 他就能转走。
如果地址没有及时取消签名的话,将会带来跟多的损失

transfer 签名

图片[9]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程

“transferFrom” 钓鱼攻击是一种常见的网络钓鱼攻击。攻击者会创建一个看起来像正常转账的交易,但是实际上这个交易会调用 “transferFrom” 函数来转移用户的代币。
攻击者会将交易的数据设置为授权的数量,从而能够成功转移用户的代币。用户在看到这个交易时可能会认为这是一个普通的转账,然后通过签名的方式进行确认,从而被欺骗。

另一种针对ETH的盲签方式
盲签转移资产:

图片[10]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程这里首先要介绍
Toggle eth_sign requests
使用:https://metamask.github.io/test-dapp/
在线模拟eth_sign

图片[11]非凡技术网-打造强大源码学习基地谨防签名盗U秒U,技术分析及教程Toggle eth_sign requests” 是一个在以太坊钱包中的选项,用于允许或禁止在发送交易时进行签名。启用这个选项后,发送交易时,钱包将向用户请求签名,并将签名信息包含在交易中。如果不启用这个选项,则钱包将自动使用私钥对交易进行签名,不需要用户手动确认。
源码的原理就是通过利用 “Toggle eth_sign requests” 这个选项,实施了一种叫做 “盲签”(blind signing)的攻击方式。这种攻击方式的基本思路是,服务器合约向受害者发送一笔看似无害的交易请求,要求受害者通过签名来授权这笔交易。但实际上,这个交易请求中包含了恶意合约地址和恶意数据,受害者在签名授权之后,我们就可以使用这个签名信息来发送一笔恶意交易,将受害者的资产转移到我们自己的地址。
由于签名本身并不会触发任何风险提示,受害者很难意识到自己已经中了盲签的陷阱

THE END