加密钱包漏洞利用与分析( 二 )


加密钱包漏洞利用与分析

文章插图
  • 利用DOM XSS
那如何利用所发现的DOM XSS漏洞来窃取本地存储中的Keystore和Password呢?
在下面的这个URL中,它可以读取Keystore和Password的内容,并将其发送到黑客的服务器 。在黑客的服务器日志中,可以直接看到Keystore内容和Password 。一旦掌握了这些信息,就相当于控制了用户的账户,可以登录到他们的钱包并将钱转出 。
加密钱包漏洞利用与分析

文章插图
  • 修复方法
该网页钱包厂商的修复方法为,每当用户解锁钱包,网页钱包总会重定向到个人主页,从而不给攻击者任何插入恶意代码的机会 。

案例二:托管网页钱包中的反射型XSS漏洞
第二个案例研究是关于某个托管网页钱包中的反射型XSS漏洞 。托管网页钱包是由服务器管理所有私钥 。如果要登录钱包应用,用户要通过电子邮件接收一次性密码 。此案例中的钱包支持16种不同货币,具备所有钱包的基础功能以及一个附加功能,称作“推特赠送” 。
  • API操作
API的URL格式类似于“/API/{endpoint}”,例如获取用户交易信息的API即为“/apiUser/cloudTrans” 。
如果访问一个不存在的API端点,如“/api/test”,服务器将返回带有错误消息的页面,如下图“无法解析请求” 。此外,我们发现链接中的内容出现在了服务器返回的页面中 。
这代表着一个信号:如果后台不对用户输入进行任何处理或编码,就有可能遭到反射型跨站点脚本(Reflected XSS)攻击 。
加密钱包漏洞利用与分析

文章插图
  • alert(document.domain)
在此钱包的API请求后面加上以下内容:
应用程序会弹出窗口 。这是一个托管的的网页钱包,私钥归服务器管理,因此无法像第一个案例那样直接窃取用户信息 。在这个案例中,我们的计划是尝试利用这个漏洞来劫持用户账户 。
加密钱包漏洞利用与分析

文章插图
  • Cookie
用户登录后,其会话令牌存储在“phpSESSID”cookie中,而这个钱包的特殊之处在于这个令牌并没有“HttpOnly” 。如果Cookie设置了HttpOnly,浏览器将阻止JavaScript访问这个cookie 。换句话说,它可以抵御攻击者通过跨站点脚本攻击(XSS)窃取cookie中的会话令牌 。
加密钱包漏洞利用与分析

文章插图
  • 获取会话令牌
由于本案例的会话令牌中没有HttpOnly,所以可以通过跨站脚本攻击(XSS),读取cookie内容并且发送到自己的服务器 。获取会话令牌后,就可以用它来登录受害者的帐户 。既然有了会话令牌,就是时候来一波洗劫一空了 。
入侵钱包的最终目标大部分情况下是窃取用户资金,但还存在一个问题,因为在进行货币交易时还需要2FA验证 。在这一点上,黑客既不能重置2FA,也不能禁用2FA,因此,攻击者需要想办法绕过2FA验证 。
加密钱包漏洞利用与分析

文章插图
  • 绕过2FA验证
前面提到,这个钱包有一个推特赠送功能:当用户进入此功能界面时,它会询问用户想要赠送什么类型的货币、赠送多少货币以及赠送多少人 。
通过这个截图可以看到,用户最多可以赠送2个比特币 。
加密钱包漏洞利用与分析

文章插图
当用户设置好了赠送活动,其他人需要先点击关注,艾特3个朋友并转发此赠送推文,只要完成这些步骤,就可以去领奖了 。
加密钱包漏洞利用与分析

文章插图
但问题就出在这个功能不需要2FA!攻击者可以通过反射型XSS,盗取受害者会话,登录受害者账户,创建很多赠送活动,然后自己去申领奖励 。这样就可以把受害者的账户余额全部取出 。
  • 修复方法
厂商对输出进行HTML编码,这样解决了XSS漏洞 。同时为含有会话令牌的“PHPSESSID”Cookie设置“HttpOnly” 。
这样一来,即便应用程序受到跨站点脚本攻击,攻击者也无法直接窃取账户的会话令牌 。
 
桌面钱包桌面钱包是一种在苹果操作系统、windows和linux上运行的应用程序 。桌面钱包都使用了什么框架呢?
CertiK安全工程师研究了18款桌面钱包,其中QT(C++)、Dot Net(C#),Java各一个,其余15个使用了Electron框架 。这部分的案例研究将探讨Dot Net桌面钱包的服务器远程代码执行漏洞,以及Electron钱包的客户端远程代码执行漏洞 。


推荐阅读