*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
前言
近日,Punisher安全团队联合HELM区块链安全实验室根据蜜罐捕捉到了一枚交易所的0day。据分析,此0day是由于某开发方代码于地下黑市源码泄露而导致的一些漏洞被发掘。Punisher安全团队捕捉到的是一枚逻辑漏洞,黑客可以通过漏洞修改交易所任意账户的密码,并绕过Google安全验证码和短信验证码。此外,还有一枚可以直接获取webshell权限的漏洞仍在地下黑市流传。
使用此代码的交易所超过100家,目前存在漏洞的超过20家(此处为了保护交易所安全不公布受影响范围)。Punisher安全团队深入调查,发现在半年前有更多使用此源码的交易所,有一部分在黑客的摧残下倒闭。Punisher安全团队对其交易量进行统计,预计交易额达到50多亿(以其官网的数据为参考),已确认统计有44亿。
漏洞解析
为了保证更多交易所的资金安全,督促其及时及修复漏洞,Punisher安全团队对此漏洞以及黑客的攻击手法进行分析披露,并提供修复方式,希望各大交易所防患于未然。
此漏洞存在于找回密码处,此套源码的整站验证逻辑均存在问题。
黑客只需注册自己的账户,当接收到的邮件时,黑客可以更换成要改用户的邮箱进行密码重置。同样的,利用手机验证码找回也是如此。
那么只有重置的漏洞还达不到大规模的攻击条件,造成的损失也是有限的。
但是黑客可以有如下手段达到大规模的盗取用户数字资产:
1. 加入官方QQ群、电报群、收集用户的账户信息;
2. 通过各种渠道,如通过社工、邮件钓鱼获取用户密码;
3. 生成号码段以批量爆破账户。
这里介绍第一种方式:
加入QQ群、电报群后,登录其群管理,从接口处写脚本抓取成员信息。
这时候再结合此套系统的特性:当用户存在且密码错误时提示“密码错误”,当用户不存在时提示“用户名或者或者密码错误”。
筛选出存在的用户之后就可以用burpsuite批量修改用户密码,据统计,此方式获取到的用户名存活率达到70%以上。
而进行二次验证的手机验证码或者Google安全码则由于逻辑设计不严失去了作用。
因为二次验证只于前端验证,只要服务器返回的包json为true则前端发起请求登录成功。
这里我们不管手机验证码和Google验证码为多少,也不用发送,只需要直接修改返回的json内容。
根据HELM安全实验室威胁情报系统提供的情报,发现有几家交易所大量的账户被修改而引发了暂停访问或者维护,但被盗去数字货币的的仅仅是是账户资金比较大的用户。而后punisher安全团队进一步分析推断黑客的攻击手法并尝试复原。
此时,黑客修改密码后无法确定哪一个账户上有大量资金,但是这时候可以写脚本批量登录,获取用户各个币种的数量。
然后批量登录绑定地址提币,此时提币流程与正常无异。
对此黑客提币的大致流程分析完成。
深入分析
我们进一步进行了跟踪此次0day造成的攻击事件,发现如果交易所修复不完善则可能使被攻击过的用户再次遭受攻击,因为遭受过攻击的用户若被黑客绑定Google验证码之后用户无法正常解绑。
后续跟踪交易所的动态,发现有些交易所因此受到用户的怀疑,并且平台币有大幅度波动。
对此,HELM区块链安全实验室根据对多家交易所安全审计的经验对风控要求提出如下建议:
1. 修改密码超过24小时才能提币。
2. 提币使用新地址需要电话、邮件或社交方式确认。
3. 修改密码的时候每次加一串随即的token存于session中。
4. Google验证码、短信验证码验证不应该置于前端验证。
5. 提币时ip有异常应当警报。
*本文作者:Punisher安全团队,转载请注明来自FreeBuf.COM
来源:freebuf.com 2018-08-17 10:00:24 by: Punisher安全团队
请登录后发表评论
注册