ORD:慢雾:揭露浏览器恶意书签如何盗取你的 Discord Token

背景

区块链的世界遵循黑暗森林法则,在这个世界我们随时可能遭受到来自不明的外部攻击,作为普通用户不进行作恶,但是了解黑客的作恶的方式是十分必要的。

慢雾安全团队此前发布了区块链黑暗森林自救手册

,其中提到了不少关于针对NFT项目方的Discord进行攻击的手法,为了帮助读者对相关钓鱼方式有更清晰的认知,本文将揭露其中一种钓鱼方法,即通过恶意的书签来盗取项目方Discord账号的Token,用来发布虚假信息等诱导用户访问钓鱼网站,从而盗取用户的数字资产。

钓鱼事件

先来回顾一起Discord钓鱼事件:2022年3月14日,一则推特称NFT项目WizardPass的Discord社区被者入侵,目前已造成BAYC、Doodles、CloneX等NFT被盗,详情如下:

牵出其中一个解读:

慢雾:NimbusPlatform遭遇闪电贷攻击,损失278枚BNB:据慢雾安全团队情报,2022 年 12 月 14 日, BSC 链上的NimbusPlatform项目遭到攻击,攻击者获利约278枚BNB。慢雾安全团队以简讯的形式分享如下:

1. 攻击者首先在 8 天前执行了一笔交易(0x7d2d8d),把 20 枚 BNB 换成 NBU_WBNB 再换成 GNIMB 代币,然后把 GNIMB 代币转入 Staking 合约作质押,为攻击作准备;

2. 在 8 天后正式发起攻击交易(0x42f56d3),首先通过闪电贷借出 75477 枚 BNB 并换成 NBU_WBNB,然后再用这些 NBU_WBNB 代币将池子里的绝大部分 NIMB 代币兑换出;

3. 接着调用 Staking 合约的 getReward 函数进行奖励的提取,奖励的计算是和 rate 的值正相关的,而 rate 的值则取决于池子中 NIMB 代币和 GNIMB 代币的价格,由于 NIMB 代币的价格是根据上一步闪电贷中被操控的池子中的代币数量来计算的,导致其由于闪电贷兑换出大量的代币而变高,最后计算的奖励也会更多;

4. 攻击者最后将最后获得的 GNIMB 代币和拥有的 NIMB 代币换成 NBU_WBNB 代币后再换成 BNB,归还闪电贷获利;

此次攻击的主要原因在于计算奖励的时候仅取决于池子中的代币数量导致被闪电贷操控,从而获取比预期更多的奖励。慢雾安全团队建议在进行代币奖计算时应确保价格来源的安全性。[2022/12/14 21:44:29]

该解读里说的bookmark就是浏览器书签,这个书签里的内容可以是一段JavaScript恶意代码,当Discord用户点击时,恶意JavaScript代码就会在用户所在的Discord域内执行,盗取DiscordToken,攻击者获得项目方的DiscordToken后就可以直接自动化接管项目方的Discord账户相关权限。

慢雾:GenomesDAO被黑简析:据慢雾区hacktivist消息,MATIC上@GenomesDAO项目遭受黑客攻击,导致其LPSTAKING合约中资金被非预期的取出。慢雾安全团队进行分析有以下原因:

1.由于GenomesDAO的LPSTAKING合约的initialized函数公开可调用且无权限与不可能重复初始化限制,攻击者利用initialized函数将合约的stakingToken设置为攻击者创建的虚假LP代币。

2.随后攻击者通过stake函数进行虚假LP代币的抵押操作,以获得大量的LPSTAKING抵押凭证。

3.获得凭证后再次通过initialized函数将合约的stakingToken设置为原先真是的LP代币,随后通过withdraw函数销毁LPSTAKING凭证获取合约中真实的LP抵押物。

4.最后将LP发送至DEX中移除流动性获利。

本次事件是因为GenomesDAO的LPSTAKING合约可被任意重复初始化设置关键参数而导致合约中的抵押物被恶意耗尽。[2022/8/7 12:07:06]

背景知识

要理解该事件需要读者有一定的背景知识,现在的浏览器都有自带的书签管理器,在提供便利的同时却也容易被攻击者利用。通过精心构造恶意的钓鱼页面可以让你收藏的书签中插入一段JavaScript代码,当受害者点击书签时会以当前浏览器标签页的域进行执行。

慢雾:ERC721R示例合约存在缺陷,本质上是由于owner权限过大问题:4月12日消息,据@BenWAGMI消息,ERC721R示例合约存在缺陷可导致项目方利用此问题进行RugPull。据慢雾安全团队初步分析,此缺陷本质上是由于owner权限过大问题,在ERC721R示例合约中owner可以通过setRefund Address函数任意设置接收用户退回的NFT地址。

当此退回地址持有目标NFT时,其可以通过调用refund函数不断的进行退款操作从而耗尽用户在合约中锁定的购买资金。且示例合约中存在owner Mint函数,owner可在NFT mint未达总供应量的情况下进行mint。因此ERC721R的实现仍是防君子不防小人。慢雾安全团队建议用户在参与NFTmint时不管项目方是否使用ERC721R都需做好风险评估。[2022/4/12 14:19:58]

以上图为例,受害者打开了discord.com官网,并在这个页面点击了之前收藏的恶意的书签“Hello,World!”从而执行了一个弹窗语句,可以发现执行的源显示的是discord.com。

慢雾:PancakeBunny被黑是一次典型利用闪电贷操作价格的攻击:币安智能链上DeFi收益聚合器PancakeBunny项目遭遇闪电贷攻击,慢雾安全团队解析:这是一次典型的利用闪电贷操作价格的攻击,其关键点在于WBNB-BUNNYLP的价格计算存在缺陷,而BunnyMinterV2合约铸造的BUNNY数量依赖于此存在缺陷的LP价格计算方式,最终导致攻击者利用闪电贷操控了WBNB-BUNNY池子从而拉高了LP的价格,使得BunnyMinterV2合约铸造了大量的BUNNY代币给攻击者。慢雾安全团队建议,在涉及到此类LP价格计算时可以使用可信的延时喂价预言机进行计算或者参考此前AlphaFinance团队。[2021/5/20 22:24:55]

这里有一个域的概念,浏览器是有同源策略等防护策略的,按理不属于discord.com做出的操作不应该在discord.com域的页面有响应,但书签却绕过了这个限制。

可以预见书签这么个小功能隐含的安全问题,正常添加书签的方式会明显看到书签网址:

慢雾:PAID Network攻击者直接调用mint函数铸币:慢雾科技发文对于PAID Network遭攻击事件进行分析。文章中指出,在对未开源合约进行在反编译后发现合约的 mint 函数是存在鉴权的,而这个地址,正是攻击者地址(0x187...65be)。由于合约未开源,无法查看更具体的逻辑,只能基于现有的情况分析。慢雾科技分析可能是地址(0x187...65be)私钥被盗,或者是其他原因,导致攻击者直接调用 mint 函数进行任意铸币。

此前报道,PAID Network今天0点左右遭到攻击,增发将近6000万枚PAID代币,按照当时的价格约为1.6亿美元,黑客从中获利2000ETH。[2021/3/6 18:21:08]

稍微有安全意识的读者应该会直接看到网址信息明显存在问题。

当然如果是一个构造好诱导你拖拽收藏到书签栏到页面呢?可以看到twitter链接中的演示视频就是构造了这么个诱导页面:”Dragthistoyourbookmarked”。

也就是拖着某个链接即可添加到书签栏,只要钓鱼剧本写得足够真实,就很容易让安全意识不足的用户中招。

要实现拖拽即可添加到书签栏只需要构造一个a标签,下面是示例代码:

书签在点击时可以像在开发者工具控制台中的代码一样执行,并且会绕过CSP(ContentSecurityPolicy)策略。

读者可能会有疑问,类似“javascript:()”这样的链接,在添加进入到浏览器书签栏,浏览器竟然会没有任何的提醒?

笔者这里以谷歌和火狐两款浏览器来进行对比。

使用谷歌浏览器,拖拽添加正常的URL链接不会有任何的编辑提醒。

使用谷歌浏览器,拖拽添加恶意链接同样不会有任何的编辑提醒。

使用火狐浏览器如果添加正常链接不会有提醒。

使用火狐浏览器,如果添加恶意链接则会出现一个窗口提醒编辑确认保存。

由此可见在书签添加这方面火狐浏览器的处理安全性更高。

场景演示

演示采用的谷歌浏览器,在用户登录Web端Discord的前提下,假设受害者在钓鱼页面的指引下添加了恶意书签,在Discord?Web端登录时,点击了该书签,触发恶意代码,受害者的Token等个人信息便会通过攻击者设置好的Discordwebhook发送到攻击者的频道上。

下面是演示受害者点击了钓鱼的书签:

下面是演示攻击者编写的JavaScript代码获取Token等个人信息后,通过DiscordServer的webhook接收到。

笔者补充几点可能会产生疑问的攻击细节:

1.为什么受害者点了一下就获取了?

通过背景知识我们知道,书签可以插入一段JavaScript脚本,有了这个几乎可以做任何事情,包括通过Discord封装好的webpackChunkdiscord_app前端包进行信息获取,但是为了防止作恶的发生,详细的攻击代码笔者不会给出。

2.?为什么攻击者会选择Discordwebhook进行接收?

因为Discordwebhook的格式为

“https://discord.com/api/webhooks/xxxxxx”,直接是Discord的主域名,绕过了同源策略等问题,读者可以自行新建一个Discordwebhook进行测试。

3.拿到了Token又能怎么样?

拿到了Token等同于登录了Discord账号,可以做登录Discord的任何同等操作,比如建立一个Discordwebhook机器人,在频道里发布公告等虚假消息进行钓鱼。

总结

攻击时刻在发生,针对已经遭受到恶意攻击的用户,建议立刻采取如下行动进行补救:

1.立刻重置Discord账号密码。

2.重置密码后重新登录该Discord账号来刷新Token,才能让攻击者拿到的Token失效。

3.删除并更换原有的webhook链接,因为原有的webhook已经泄露。

4.提高安全意识,检查并删除已添加的恶意书签。

作为用户,重要的是要注意任何添加操作和代码都可能是恶意的,Web上会有很多的扩展看起来非常友好和灵活。书签不能阻止网络请求,在用户手动触发执行的那一刻,还是需要保持一颗怀疑的心。

本文到这边就结束了,慢雾安全团队将会揭露更多关于黑暗森林的攻击事件,希望能够帮助到更多加密世界的人。

By:耀@慢雾安全团队

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:15ms0-1:382ms