实际上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总共有如下几个操作类型:
- 转账
如果网站唤醒的是截图上的转账请求,你需要注意转账的目标地址是不是你希望转出的地址,以及转账的金额是否正确。
对于转账来说比较简单,只要确定收款地址和金额就好了。
- 签名
一般来说获取签名的目的是为了证明你拥有该钱包地址,例如Discord里有个叫Collabland的机器人,它就是通过签名来验证你拥有该钱包地址,并且该钱包地址上拥有该NFT,验证通过后就会给你一个Holder身份认证。
如果大家看到的签名内容是这种明文可读的就没有什么问题了,你能看明白这段话是什么意思。但注意胡乱签名也是会导致资产损失。
但如果大家看到的签名内容如上面这个截图,看不明白是什么,就别操作了。因为上面这个弹窗的签名内容是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 Bot时索取服务器的权限,CollabLand Bot要求授权的是“管理员”这个最高权限。CollabLand Bot的作用是给通过认证了的holder授予了某个角色,实际上CollabLand Bot只需要索取管理Member和Role的权限就足够了,但不知道为何索要了最高权限?也希望知道的朋友告知一下。
所以对于Discord的管理者来说,Discord的安全主要在于:
- 管理者账号的安全
- 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用户数量多的时候。
- Bot按需索取权限
千万别无脑索取Discord服务器的“管理员”权限,确认你的Bot需要用到哪些功能,再去索取相应的权限。这样即便你的Bot被黑,那么受损程度也被控制在一定范围之内。
对于开发者的总体原则就是保证Bot Token的安全,以及最小索取你的Bot权限。