加密钱包漏洞利用与分析

2020-08-15 10:59 栏目:经验之谈 来源:网络整理 查看()

随着区块链技术的快速发展,加密资产逐渐成为一种流行的投资方式。全球加密资产的快速增长使钱包成为每个加密资产所有者不可或缺的资产管理工具。

在加密领域,数字钱包与货币息息相关,越来越多的人意识到数字钱包安全性的至关重要性。

被称为“全球黑客狂欢节”的第28届DEF CON大会近日圆满落幕。

2020年8月9日,和CertiK的安全工程师何在DEF CON Blockchain安全会议上做了主题为“利用不安全的加密钱包”的主旨发言。

这篇文章将带你回到CertiK的安全工程师对加密钱包安全性的看法。

加密钱包是一种存储私钥和/或公钥的设备、程序或服务。因为密码货币是虚拟的,所以密码钱包不能用来存储真钱。但是当我们交易时,加密的钱包可以使用用户的私钥来签署交易并在区块链广播。

有不同种类的加密钱包,如软件钱包和硬件钱包。这个讲座将集中在网络钱包和桌面钱包。

网络钱包

这是一个典型的网络钱包界面,这是我们CertiK的Deepwallet钱包。用户可以在这个界面看到账户余额和发送货币的选项,因为它是一个基于COSMOS的钱包,所以它有委托的功能。

加密钱包漏洞利用与分析

当谈到网络应用安全时,我们首先想到的是开放网络应用安全项目的十大安全漏洞。

以下是CertiK安全工程师调查的27个网络钱包中“OWASP十大”的十大安全漏洞的一些统计数据。CertiK安全工程师在三个钱包中发现了跨站点脚本攻击(XSS),并选择了两个案例进行案例研究。

加密钱包漏洞利用与分析

我们在分散钱包中发现了SqI注入漏洞。但是,它的数据库只包含事务数据。由于区块链的交易数据已经公开,通过Sql注入窃取数据是没有意义的。由于没有办法通过SqI注入实现后台代码执行,在这种情况下,SqI注入攻击几乎没有实际影响。

此外,在这个分散钱包中的应用编程接口的访问权限存在漏洞,未经授权的用户可以篡改他人的2FA设置,但他们不能利用这个漏洞窃取他人帐户中的资产。

许多网络钱包缺乏安全报头,例如内容安全策略和“X-Frame-Options”的报头,这使得钱包容易受到点击劫持攻击。

一些钱包仍然使用过时的JavaScript库和带有CVE的Nginx/Apache服务器,这些漏洞不能被直接利用。

CertiK安全工程师没有发现任何用于处理XML格式数据的钱包,也没有发现任何用于反序列化的钱包,因此他们没有发现任何与XXE和反序列相关的漏洞。没有关于日志记录和监控的更多信息。

1.案例1:分散网络钱包的DOM XSS漏洞

这是一个分散网络钱包的DOM XSS漏洞案例。这款钱包支持单一协议,具备网络钱包的所有基本功能。

易受攻击的功能

该应用程序将保存最后的访问位置:在用密码解锁钱包后,用户将在解锁前跳回页面。下图是实现该功能的代码。如果您有测试web应用程序的经验,您将会知道在这种情况下存在一个DOM XSS漏洞,就像这种情况一样。

加密钱包漏洞利用与分析

唐XSS

DOM XSS需要源和汇。源是应用程序接收不可信数据(用户输入)并将其传递给接收器的位置。当用户访问此链接时,“窗口.位置.搜索”将返回?ReturnTo=/validators ',则“{returnTo}”将包含“/validators”。

加密钱包漏洞利用与分析

接收器是处理来自源的不可信数据的地方,所以如果用户输入“返回到=/验证器”,这里的接收器就是“窗口”。钱包返回到“/验证器”,也就是说,它转到验证器页面。如果您输入“return to=JavaScript : alert(1)”,浏览器中将弹出一个警报窗口。

加密钱包漏洞利用与分析

密钥库和密码

这个钱包是一个分散的网络钱包。用户创建帐户或导入帐户后,密钥库和密码存储在本地存储中。

加密钱包漏洞利用与分析

使用JavaScript读取本地存储

JavaScript可以读取本地存储中的信息。在这种情况下,键值数据显示为存储在本地存储器中的“Hello World”。JavaScript可以执行LocalStorage.getItem(“你好”)来获得“世界”。

加密钱包漏洞利用与分析

使用唐XSS

那么如何利用发现的DOM XSS漏洞来窃取本地存储中的密钥库和密码呢?

在下面的网址中,它可以读取密钥库和密码的内容,并将它们发送到黑客的服务器。在黑客的服务器日志中,您可以直接看到密钥库内容和密码。一旦你掌握了这些信息,就相当于控制了用户的账户,你就可以登录到他们的钱包里转账了。

加密钱包漏洞利用与分析

*恢复方法

网络钱包制造商的修复方法是,每当用户解锁钱包时,网络钱包总是被重定向到个人主页,从而使攻击者没有机会插入恶意代码。

加密钱包漏洞利用与分析

2.案例2:托管网络钱包中的反射XSS漏洞

第二个案例研究是关于受管网络钱包中的反射性XSS漏洞。托管web钱包是由服务器管理的所有私钥。如果您想登录钱包应用程序,用户将通过电子邮件收到一次性密码。本例中的钱包支持16种不同的货币,并且具有钱包的所有基本功能和一个名为“推特礼物”的附加功能。

原料药操作

应用编程接口的网址格式类似于“/应用编程接口/{端点}”,例如,获取用户交易信息的应用编程接口为“/apiUser/cloudTrans”。

如果您访问一个不存在的应用编程接口端点,如“/api/test”,服务器将返回一个带有错误消息的页面,如下图所示:“无法解析请求”。此外,我们发现链接中的内容出现在服务器返回的页面中。

这表示一个信号,如果用户输入没有在后台处理或编码,它可能会受到反射XSS的攻击。

加密钱包漏洞利用与分析

警报(document.domain)

在此电子钱包的应用编程接口请求后添加以下内容:SVG onload=alert(文档.域) "

应用程序将弹出一个窗口。这是一个托管的网络钱包,私钥由服务器管理,因此不可能像第一种情况那样直接窃取用户信息。在这种情况下,我们的计划是试图利用此漏洞劫持用户帐户。

加密钱包漏洞利用与分析

饼干

用户登录后,他的会话令牌存储在“PHPSESID”cookie中,但是这个钱包的特殊功能是这个令牌没有“HttpOnly”。如果cookie设置为HttpOnly,浏览器将阻止JavaScript访问Cookie。换句话说,它可以抵抗攻击者通过跨站点脚本攻击窃取cookie中的会话令牌(XSS)。

加密钱包漏洞利用与分析

获取会话令牌

在这种情况下,会话令牌中没有HttpOnly,因此您可以读取cookie内容,并通过跨站点脚本攻击将其发送到您自己的服务器(XSS)。获得会话令牌后,您可以使用它登录受害者的帐户。现在你已经有了会话令牌,是时候去掠夺它了。

加密钱包漏洞利用与分析

入侵钱包的最终目的是在大多数情况下窃取用户的资金,但仍然存在一个问题,因为进行货币交易时需要2FA认证。此时,黑客既不能重置2FA,也不能禁用2FA,因此攻击者需要找到绕过2FA身份验证的方法。

加密钱包漏洞利用与分析

绕过2FA身份验证

如前所述,这个钱包有一个推特礼物功能:当用户进入这个功能界面时,它会问用户他想给多少钱,他想给多少人。

正如你在这个截图中看到的,用户最多可以放弃2个比特币。

加密钱包漏洞利用与分析

当用户设置好礼物活动后,其他人需要首先点击关注,Aite的三个朋友转发这个礼物推文,只要这些步骤完成,他们就可以获得奖励。

加密钱包漏洞利用与分析

但是问题是这个函数不需要2FA!攻击者可以窃取受害者的会话,登录到受害者的帐户,通过反射XSS创建许多捐赠活动,然后自己申请奖励。这样,受害者账户的所有余额都可以提取。

*恢复方法

制造商用超文本标记语言对输出进行编码,从而解决了XSS漏洞。同时,用会话令牌将“PHPSESID”Cookie设置为“HttpOnly”。

这样,即使应用程序受到跨站点脚本攻击,攻击者也不能直接窃取帐户的会话令牌。

桌面钱包

桌面钱包是一个运行在苹果操作系统、视窗和Linux上的应用程序。桌面钱包使用什么框架?

CertiK安全工程师研究了18个桌面钱包,包括QT(C)、点网(C#)和Java,另外15个使用了电子框架。案例研究的这一部分将讨论网络桌面钱包的服务器远程代码执行漏洞和电子钱包的客户端远程代码执行漏洞。

加密钱包漏洞利用与分析

案例1:网络桌面钱包的服务器远程代码执行漏洞

下面的文章分析了在桌面钱包中发现的远程代码执行漏洞。

首先,介绍背景:该钱包是一个分散的单协议钱包,用C#语言编写,使用点网框架。它包含许多常见的钱包功能,如帐户管理、交易转移和智能合同的部署/调用。

有趣的是,它还允许用户向服务器上传文件。这个功能在钱包中并不常见,所以我们决定进一步研究这个功能。如前所述,这个钱包是基于网络的,通过反编译很容易得到源代码而不会混淆代码。这是案例钱包,所以我们可以恢复其源代码,以供进一步分析。

静态源代码分析

在反编译可执行文件后,我们找到了上传文件的源代码,如下面的代码片段所示。

加密钱包漏洞利用与分析

钱包向服务器发送一个超文本传输协议请求,并返回文件上传的网址。“upload.php”是服务器上处理文件上传的代码。现在我们知道PHP是在服务器的后台使用的,所以如果我们可以上传一个PHP Webshell到服务器上,并在浏览器中打开它,我们就可以在服务器上远程执行代码。

上传文件

在成功上传了一个带有钱包的PHP webshell文件后,CertiK安全工程师尝试在浏览器中访问上传的文件。已成功访问上传的Webshell,并可以在Webshell中执行命令。

同时,我们发现钱包的服务器在“管理员”用户下运行,因此它可以用“管理员”权限执行命令。在这种情况下,攻击者可以完全控制服务器并操纵其他用户上传的文件。但是,由于这是一个分散的钱包,服务器不会存储任何用户私钥,因此不能利用此漏洞直接损害用户帐户。

加密钱包漏洞利用与分析

*恢复方法

修复非常简单,而且开发人员直接删除了文件上传功能,所以没有必要担心这个安全问题。这是一个好办法,因为加密钱包应该保持其功能尽可能简单,从而避免安全问题。接下来,我们来谈谈电子钱包的安全性。

案例2:桌面钱包客户端的远程代码执行漏洞

什么是电子?为什么使用电子?

电子是一个开源软件框架,它使开发人员能够使用超文本标记语言、CSS和JavaScrip来构建跨平台的桌面应用程序。

使用Electronic的优点是开发人员可以重用网络应用程序代码来构建桌面应用程序,这意味着他们不需要找到另一个代码库或学习新的编程语言。

在调试电子应用程序时,很容易使用谷歌浏览器的开发工具。电子应用程序可以直接在操作系统上运行,因为它可以访问Node.js模块,所以它可以构建一个比web应用程序更强大的桌面应用程序。

今年6月,CertiK安全团队在Symbol桌面钱包中发现一个远程代码执行漏洞,并将该漏洞提交给Symbol漏洞奖励计划。Symbol非常重视CertiK提交的报告,并立即采取了安全措施,及时更新了代码。目前,这个问题已经在版本0.9.11中得到解决。

摘要

无论是内部安全团队还是第三方公司进行安全审计和渗透测试,确保系统的安全性都是非常重要的。专业安全人员将试图从“恶意黑客”的角度摧毁系统,帮助在真正的黑客利用漏洞之前识别和补救漏洞。

对于专业的安全服务提供商来说,提高安全测试水平的唯一途径是不断学习。CertiK的安全工程师一直在通过覆盖不同的目标来提高他们的渗透测试技能,从而为客户提供最好的渗透测试服务。

我们不仅仅是在寻找漏洞,而是消除了哪怕只有0.00000001%会被攻击的可能性。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发