【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

区块链安全 2年前 (2023) admin
348 0 0
【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

免责申明:
本文仅用于技术讨论和学习,旨在提供相关信息和知识。任何使用者根据本文提供的信息所造成的直接或间接后果及损失,均由使用者本人负责,文章作者不承担任何责任。
文章表达方式可能会让有些人不适。
大家一定要点关注,关注巫巫哦。
在安全行业干了10年才知道,Tony老师总说发质不好,拔罐的总说湿气重,医生总说我有病,网络安全老师总说你不安全。
 
前言
有小伙伴人问巫巫,玩币圈挣钱吗。
我想啊,抛开币圈大佬的请巴菲特吃饭的钱,团队运营,私人游艇,保镖,酒吧里黑桃A。
感觉应该也没有挣多少钱,币圈大佬还是挺有责任感,虽然没有挣多少钱吧,但是还在全力拉动GDP,着实感人,巫巫的良心都疼了。
小伙伴同时还分享了自己被盗的经过,强调币能不能找回来不重要,重要想知道怎么被盗的。
 
我问:小伙伴被盗了多少?
他说:30W
我:年轻人,钱没了,可以再赚。朋友没了,可以再交。爱情没了,可以再找。记住,你不缺30W。你缺的是一份重新开始的勇气。
他说:   30W USDT。
我:对不起,是我肤浅了。

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

昧良心的钱,可以不挣,但是小伙伴的述求,咱不能不帮啊。

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

小伙伴需要什么,巫巫就生产什么内容,喜欢巫巫作品的朋友可以加入巫巫社群,链接在文尾。 

简介

本文详细介绍了黑客如何利用授权函数和盲签名等方式盗取数字钱包中的加密货币,并提供了一些防范措施。

在数字货币交易中,授权函数是一种常见的网络钓鱼攻击方式。

攻击者会创建一个看起来像正常转账的交易,但实际上这个交易会调用授权函数来转移用户的代币。

攻击者会将交易的数据设置为授权的数量,从而能够成功转移用户的代币。用户在看到这个交易时可能会认为这是一个普通的转账。

 

实际内容

 

巫巫的关注者中,有部分小白,为了让新手能完整明白整个过程,巫巫先将过程在WEB端模拟出来,

通过模拟,读者将知道整个过程,再通过代码自动化,内容是为大家科普原理,学习用途,小伙伴可千万不要这样盗别人的虚拟货币。

然后,大家明白整个过程,巫巫再讲整个过程中逻辑,与代码实现。

 

为了让大家更加直观的看懂合约的整个交易,我会手动将整个过程还原:

执行合约前需要准备:

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

现在开始:

这里使用MEW为大家模拟整个过程:

输入合约相关信息

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

这里会自动匹配合约ABI信息,不知道的可以在合约上面查找.

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

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

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

选择好钱包后,点击最后的 “Write”按钮。

 

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

点击“Write”后会看到以下弹框,

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

查看详情:

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

这里的data就是一个approve的头。

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

到这里就已经是完成了真个手动还原了整个过程,使用的是approve的函数。

———

基本写到这里,已经没有很多的技术点需要还原了。先将交易包数据进行说明。

 

有人会上当估计也是因为:大家可能习惯了授权(approve)钓鱼这种常规风险,但对于超出 approve 这类方式的提醒就不一定理解了,其实除了 increaseAllowance 还有permit 等等,更别提低级签名、盲签、多协议组合操作等签名方式了。

 

increaseAllowance 授权

 

这里给出increaseAllowance 方式的授权钓鱼手法:

请求包的示例内容:

请求URL: https://api.etherscan.io/api?module=proxy&action=eth_sendTransaction&apikey=YourApiKeyToken请求方法: POST请求头: Content-Type: application/json请求体:{"from": "0x1234567890abcdef1234567890abcdef12345678","to": "0xa9ce62c5eddad3755a86e027772b5d90661efd0b","value": "1000000000000000000","gas": "200000","gasPrice": "10000000000","data": "0xa9059cbb000000000000000000000000a9ce62c5eddad3755a86e027772b5d90661efd0b000000000000000000000000000000000000000000000000000de0b6b3a7640000"}
解释:
  • “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

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

这里可以追加成:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 无穷大。或无穷小

该交易数据意味着你向某个账户授权了 100000000000000000000(即 100 ETH)的代币数量,这也是在后续发生转账操作时,该账户可以转出的最大代币数量。

 

它是函数 increaseAllowance(address,uint256) 的第二个参数,即新的授权金额。它表示你想要将授权的金额设置为多少。

 

因为该参数在交易数据中的位置是在授权地址之后,所以该参数值是不受攻击者控制的。如果该参数被替换为其他值,就会导致授权金额不正确,从而可能对用户造成财务损失。

    /**     * 增加代币授权     */    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {        address owner = _msgSender();        _approve(owner, spender, allowance(owner, spender) + addedValue);        return true;    }

当前确定授权后, 攻击者就可以将你的USDT全部转走,只要你有U 他就能转走。

如果地址没有及时取消授权的话,将会带来跟多的损失,下面教大家如何检查钱包地址授权了哪些合约和地址,定期取消授权过期的合约


查看记录,余弦师傅谢过了:

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

还是那句话:如果你不确定你钱包弹框的含义,就别点确认按钮…

 

permit授权

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

permit(address,address,uint256,uint256,uint8,bytes32,bytes3
看到这里,如果看过巫巫之前的文章,巫巫使用的手法就是这种。
防范虚拟货币钱包盗窃:揭秘非Approve的新型盗U诈骗手段(终极版)
真个过程的复现大概是这个样子(巫巫改过公众号名字,这是之前巫巫写的):
【盗币科普】你可千万不能这样盗别人的虚拟货币钱包
【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

案例的分析这里有篇详细的过程:
https://twitter.com/korpi87/status/1560416631678910464
permit 函数是有风险的
详细的解释可以参见这个 Twitter 帖子:
https://twitter.com/korpi87/status/1560416631678910464。

还有哪些函数是有风险的:

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

详细解释:

https://twitter.com/korpi87/status/1560416631678910464

transfer 授权

 

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

 

“transferFrom” 钓鱼攻击是一种常见的网络钓鱼攻击。攻击者会创建一个看起来像正常转账的交易,但是实际上这个交易会调用 “transferFrom” 函数来转移用户的代币。

 

攻击者会将交易的数据设置为授权的数量,从而能够成功转移用户的代币。用户在看到这个交易时可能会认为这是一个普通的转账,然后通过签名的方式进行确认,从而被欺骗。

 

因此,用户在进行转账操作时,一定要仔细核对交易的信息,特别是授权的数量和地址信息。如果有任何不明确的地方,最好不要进行确认,以免遭受损失。

另一种针对ETH的盲签方式:

盲签转移资产:

ETH被盗,只可能是因为自己私钥泄露吗?签名也能导致eth被盗?!解析黑客如何利用盲签转移资产!

 

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

 

这里首先要介绍

Toggle eth_sign requests
使用:https://metamask.github.io/test-dapp/


在线模拟eth_sign

 

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

 

Toggle eth_sign requests” 是一个在以太坊钱包中的选项,用于允许或禁止在发送交易时进行签名。启用这个选项后,发送交易时,钱包将向用户请求签名,并将签名信息包含在交易中。如果不启用这个选项,则钱包将自动使用私钥对交易进行签名,不需要用户手动确认。

黑客通过利用 “Toggle eth_sign requests” 这个选项,实施了一种叫做 “盲签”(blind signing)的攻击方式。这种攻击方式的基本思路是,黑客向受害者发送一笔看似无害的交易请求,要求受害者通过签名来授权这笔交易。但实际上,这个交易请求中包含了恶意合约地址和恶意数据,受害者在签名授权之后,黑客就可以使用这个签名信息来发送一笔恶意交易,将受害者的资产转移到黑客的地址。

由于签名本身并不会触发任何风险提示,受害者很难意识到自己已经中了盲签的陷阱。因此,建议在使用以太坊钱包时,不要随意启用 “Toggle eth_sign requests”,尤其是在接收到未知来源的交易请求时要谨慎,最好进行多重确认或通过其他手段来验证交易的合法性。

eth_sign、personal_sign、signTypedData请注意,这种要求进行 eth_sign 盲签名的签名请求存在风险。

总结

本文介绍了其他一些可能存在风险的函数,如permit、transferFrom等,以及一些常见攻击方式。本文提供了详细的解释和案例分析,帮助用户更好地了解数字货币交易中的风险和安全措施。


私信的小伙伴太多,巫巫忙不过来。

如果你喜欢巫巫的原创文章,推荐加入巫巫的社群(可申请退款)。

社群福利:1对1咨询。内部群、自由交流、重要资料留存、私域内容直达、话题讨论

【盗币科普】你可千万不能这样盗别人的虚拟货币钱包


合抱之木,生于毫末。

九层之台,起于累土。

每一次努力和积累,都是在为网络安全领域的发展贡献自己的一份力量。

感谢您一直以来的支持和关注!

原文始发于微信公众号(安全女巫):【盗币科普】你可千万不能这样盗别人的虚拟货币钱包

版权声明:admin 发表于 2023年4月13日 下午5:40。
转载请注明:【盗币科普】你可千万不能这样盗别人的虚拟货币钱包 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...