Xing

Posted on May 19, 2022Read on Mirror.xyz

全面解析Discord安全问题

最近看到Discord的安全问题频发,近期本人也从Discord的普通用户,转变到Discord社区的运营者,同时也成为了Discord生态上的开发者,所以本文就以Discord的安全作为主题给大家分享一下Discord上有关安全的问题。

实际上Discord的安全问题被诟病已久,但这也不能完全责怪Discord,因为Discord实在是太开放了,就像最初的Android一样,任何一个APP都可以拿到几乎系统的所有权限,所以任何一个APP有安全风险,那么整个系统都会有安全风险。上面说到Discord的三个角色(普通用户、运营者、开发者),任何一方未对安全引起重视也都会导致安全问题。

安全无小事,希望这篇文章能够帮助到以上三个角色的读者们。

对于普通用户

Discord上的用户遭受损失主要是因为Discord上的钓鱼网站信息太多了,所以对于普通用户来说,为了避免被钓鱼,需要注意以下几点:

关闭私信

关闭私聊

该选项如果打开的话,Discord的成员可以直接向你发起私聊,而这些成员的头像以及账号也许会与你在Discord里看到的管理员一模一样,这时你也许就会放松警惕而轻信这个账号,所以当他们发送某个链接给你的时候也许你就被钓鱼成功了。

另外好友请求也需要注意,最近我在OpenSea的Discord里问了个问题,结果也是头像和账号和Discord管理员一模一样的账号来请求加好友,这种情况直接忽略就好。

不要点击任何未知链接

冒充官方公告的钓鱼消息

这个截图是OpenSea官方的Discord中的消息,大意是说OpenSea要和YouTube合作发行NFT,只有100个免费名额。小白用户看到这个消息可能立马FOMO了,点击截图中的链接后,看到的网站大概长这样。

钓鱼网站

看到域名和网站都没问题,想到只有100个名额,也许就赶紧点Claim抢Mint了,但执行了该交易之后你的NFT也就丢了。

所以看到这种消息千万需要提高警惕,一般来说各个项目方发行NFT的话都会提前发布消息,这种突然告诉你要发布NFT的消息一般都是假的。

如何判断钓鱼网站

有时候在Discord里看到无论是谁发来的链接(可能是群友、管理员、机器人发的链接),在点击之前首先需要看访问的域名是不是项目官方的域名,如果不是的话点击进入后就需要十分警惕:

如果该网站唤起MetaMask的弹窗只是要求查看你的钱包地址,是安全的,例如下图:

获取查看你钱包地址的权限

该操作只是授权该网站查看你的钱包地址,不会对你的资产有其他操作。

当你继续在该网站上浏览,需要进行钱包相关操作的时候就需要特别留意了,一般网站唤起你的MetaMask总共有如下几个操作类型:

  • 转账

转账时MetaMask弹窗

如果网站唤醒的是截图上的转账请求,你需要注意转账的目标地址是不是你希望转出的地址,以及转账的金额是否正确。

对于转账来说比较简单,只要确定收款地址和金额就好了。

  • 签名

一般来说获取签名的目的是为了证明你拥有该钱包地址,例如Discord里有个叫Collabland的机器人,它就是通过签名来验证你拥有该钱包地址,并且该钱包地址上拥有该NFT,验证通过后就会给你一个Holder身份认证。

CollabLand验证身份时的签名内容

如果大家看到的签名内容是这种明文可读的就没有什么问题了,你能看明白这段话是什么意思。但注意胡乱签名也是会导致资产损失。

OpenSea挂卖单时的签名内容

但如果大家看到的签名内容如上面这个截图,看不明白是什么,就别操作了。因为上面这个弹窗的签名内容是OpenSea的卖单签名,但卖单的价格可能被攻击者设置为0.001E,如果你不小心在钓鱼网站对此签名了,你的NFT可能就会被低价卖给钓鱼者。

所以对于签名消息有一个大致原则,看得懂就签,看不懂就别签。

  • 合约调用

大家在很多网站上遇到更多的情况是合约调用,例如mint NFT之类的操作等。

如果是合约调用,首先需要确定的是调用的“合约地址”是不是官方公布的合约地址,确定合约地址没问题之后再看调用该合约的“功能类型”,如果“调用功能”类型显示approve、setApprovalForAll、transfer、safeTransferFrom之类的字样就需要警惕了,因为这是给出授权让别人可以转移走你的资产,这也是最常见的钓鱼方式。

前文所说的OpenSea的Discord被攻击发出的钓鱼网址,以及本人下面推特分享的案例都是这种方式。

https://twitter.com/nelsonie/status/1506819101163126784

所以对于合约调用的总体原则就是:确认合约地址正确,确认操作类型不是approve、setApprovalForAll、transfer、safeTransferFrom等字样。

对于运营者

对于大部分场景做到以上,普通用户就可以避坑了,但是作为Discord的运营者,我们需要比普通用户更尽责地保护社区成员的安全,避免因为运营者的安全疏忽导致用户的损失。对于Discord的运营者,也有以下几点需要注意的:

开启2FA

没有开启2FA的话,一旦账号密码泄漏,那么攻击者就可以利用管理者的账号发布钓鱼信息。

别点陌生链接

目前发现有针对于Discord管理者钓鱼的网站,管理者进入网站被引导后会让攻击者得到管理者的Discord session,攻击者利用session就可以绕开2FA及登陆验证,直接以管理员的身份接管Discord社区了。下面推文有详细分析,感兴趣的朋友可以看看。

https://twitter.com/Serpent/status/1485002643370037254

尽量少引入Bot

为社区每增加一个Bot,就会带来多一分的安全风险,任何一个Bot被攻击者利用了,都能够对社区的Discord发起SCAM攻击。

Crepto社区只引入了一个外部Bot,CollabLand,用于验证holder的身份,毕竟已经是Discord标配了。其他Bot如果不是必须使用的话,Crepto社区也就不再引入了。

引入Bot权限过大

Discord管理员引入Bot的时候,需要注意Bot索取的服务器权限,秉持最小授权原则,如果发现一个功能简单的Bot要求管理员权限的话,最好不要引入。因为这个Bot的项目方如果被攻击,轻则只是给您的Discord社区发送垃圾消息,重则它可以剔出所有用户,删除所有频道和记录。

CollabLand索取的服务器权限

上面是引入CollabLand Bot时索取服务器的权限,CollabLand Bot要求授权的是“管理员”这个最高权限。CollabLand Bot的作用是给通过认证了的holder授予了某个角色,实际上CollabLand Bot只需要索取管理Member和Role的权限就足够了,但不知道为何索要了最高权限?也希望知道的朋友告知一下。

所以对于Discord的管理者来说,Discord的安全主要在于:

  1. 管理者账号的安全
  2. Bot的安全

管理者账号的安全可以由团队提升安全意识来保证,但Bot的安全对于管理者来说却无能为力,所以管理者只能是秉持能少用Bot就少用,能少给授权就少给的原则来处理即可。

对于开发者

Crepto社区已经开发了两款Discord Bot,也算是对Discord的开发有所了解。所以对于在Discord上进行开发的朋友们,也给出了以下几点安全建议:

  • Bot的Token一定要保证安全

Discord的开发者都知道,Bot的生命线就掌握在Token上,Token被攻击者拿到之后,攻击者可以利用你的Bot干他想干的任何事情,所以千万需要像重视钱包私钥安全那样去重视Bot的Token。

  • 运行Bot的服务器安全

服务器安全的话题可以无限展开,但这里就提醒一点,Bot Token的安全十分重要,Bot是在服务器上运行的,所以服务器被攻破意味着Token也泄漏了,当然还有Bot所获取Discord上的所有数据也全泄漏了。

  • 养成定期更换Token的习惯

就跟一些网站定期要求用户更换密码一样,虽然Discord没有强制要求开发者定期更换Bot的Token,但我认为养成定期更换Token是必不可少的,特别是你的Bot用户数量多的时候。

通过Reset来定期更换Bot Token

  • Bot按需索取权限

千万别无脑索取Discord服务器的“管理员”权限,确认你的Bot需要用到哪些功能,再去索取相应的权限。这样即便你的Bot被黑,那么受损程度也被控制在一定范围之内。

对于开发者的总体原则就是保证Bot Token的安全,以及最小索取你的Bot权限。

最后植入硬广

Crepto社区做了两个Bot,一个Bot是个性化订阅NFT数据推送,另外一个就是HongBao Bot。大家可以像微信群发红包那样,在Discord群里发红包(支持所有ERC-20兼容代币,支持ETH,Polygon和BSC三条公链)。

https://twitter.com/nelsonie/status/1526815337785659392

用HongBao Bot可以活跃社区气氛,也可以作为管理员收集用户钱包地址的工具,还可以作为社区白名单的抽奖工具(比如抢到数量最多的10名用户中奖)。

最小索取权限原则

HongBao Bot所需要的权限仅仅是读取和发送消息,由管理员自行决定并授权可以在哪个channel里使用HongBao Bot,即便HongBao Bot被黑掉了,社区遭受的损失也能最小化。当然我们会保证上述情况不会发生。

虽然上文说到为了Discord安全考虑,尽量少引入Bot,但是我们也希望大家可以添加HongBao Bot到您的Discord里玩玩,因为真的很活跃气氛!HongBao的各个主网合约地址也可以在项目主页上找到,希望大家喜欢!

最后欢迎想在Web3行业做builder的朋友加入Crepto这个大家庭。