- 区块链安全入门与实战
- 刘林炫 邓永凯 万钧 张继龙
- 1403字
- 2021-01-25 14:37:56
2.7.2 案例分析
1.KYC信息泄露
在前面2.3节“业务逻辑”中曾经讲过KYC认证缺陷,指的是用虚假的非法的信息来绕过交易所的KYC认证。而对于使用真实KYC信息认证的用户,KYC信息本身的安全性显得尤为重要。
2.忘记密码
某交易所在处理用户忘记密码操作时未对响应包进行处理,当输入邮箱或者电话号码进行找回密码操作时,服务器将用户的uid、mobile、name、nickname、email、qq、wexin、identitycardnon(身份证号)以及googlesecret一并返回,造成了极其严重的KYC信息泄露,如图2.36所示。

图 2.36
3.邀请列表
某交易所在用户查看邀请人列表时没有对服务器响应包内容进行处理,导致查看邀请列表时会泄露所有被邀请人的KYC信息,包括uid、mobile、name、nickname、email、qq、wexin、identitycardnon(身份证号)以及googlesecret等。利用存在的越权漏洞,可以遍历收集所有被邀请用户的KYC信息,如图2.37所示。

图 2.37
注意:为避免涉及敏感信息,此处不提供手机结果以及具体细节。
4.OTC查看商家/订单
某交易所在用户查看OTC订单处存在信息泄露,服务器的响应包里将商家的id、qq、alipay、whatsApp、nickname、mobile、wechat、telegram、username、realname、skype和email全部返回,只要遍历订单就可以获得所有商家的个人信息,如图2.38所示。

图 2.38
5.信息泄露攻击链
我们团队在对某交易所进行安全测试时发现,该交易所在用户查看OTC商家的信息时,遍历userid便可以获得所有商家用户的phone、username和nickname。然后,经过测试又发现在处理用户忘记密码操作处发现信息泄露,只要输入手机号就可以获得商家的userid以及email。通过两个信息泄露漏洞构成的攻击链同时进行收集,最终收集到所有商家用户的真实姓名、电话号码、邮箱地址以及昵称。
图2.39所示为通过遍历userid获取所有商家的phone和username。

图 2.39
图2.40所示为通过收集到的手机号码来获取商家的email以及userid。
也许某个点的信息泄露看起来微不足道,一旦点与点之间连成线,对于攻击者来说,这两个点确定的可不只是一条有始有终的线段,当这条攻击链被利用起来的时候,便是一条有始无终,直至目标的射线。
6.源码信息泄露
在开发过程中,开发与测试人员为了能够更加轻松地了解以及调试代码,通常在开发与测试阶段在代码中留下大量注释信息,其中不乏测试用IP地址、测试端口、测试用账户、测试用token和测试用API等。

图 2.40
编写注释对于广大开发与测试人员来说可以提高代码的易读性以及开发效率,可一旦这些注释经过开发环境、测试环境到达了生产环境,在公网上暴露出来,方便的可就不只是兢兢业业的开发者与测试者,还有在黑暗中隐藏行踪,时刻紧盯着目标的攻击者。
在经过对大量交易所的测试后我们发现,开发与测试人员可能是世界上最具有开源精神的一批人,有的人喜欢将自家网站的内网拓扑以及测试接口开源出来供大家欣赏。例如,某交易所源代码中存有大量含有测试用接口、IP地址的注释,如图2.41所示。

图 2.41
有些人喜欢将自家的加密密钥开源出来供大家使用。例如,某交易所源代码中含有AES加密的硬编码密钥,导致数据加密被破解,如图2.42所示。

图 2.42
而有些人不仅直接将自家测试用token放到源码里,还向账户里进行充值,可谓“弱水三千,任君自取”,不过取的是不是一瓢就很难得知了。例如,某交易所源码中含有测试用JWT,修改后可成功登录账户,控制资产,如图2.43所示。

图 2.43
使用测试用JWT登录账户,控制资产,如图2.44所示。

图 2.44
诚然,详细而又全面的注释是开发与测试人员良好的代码编写习惯,不过要记得在经过开发环境与测试环境后,进入生产环境之前,应将所有可能会暴露到外界的含有敏感信息的注释删除,以防敏感信息泄露。在GitHub上开源是好事,但也要记得在上传之前仔细检查,不要将自家的数据库地址与密码一同开源出去。