Web钱包和桌面钱包的漏洞开发与分析

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

在加密领域,数字钱包与资金密切相关。越来越多的人意识到数字钱包安全的重要性。

被誉为“全球黑客狂欢派对”的第28届DefCon大会近日圆满结束。

2020年8月9日,certik、Peiyu Wang和Minzhi he的安全工程师在def con区块链安全大会上发表了主题为“开发安全加密钱包”的演讲。

本文将带您回到certik的安全工程师对加密钱包安全性的看法。

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

有不同类的加密钱包,如软件钱包和硬件钱包。本次演讲的重点是网络钱包和桌面钱包。

现场演讲回顾:加密钱包简介

网络钱包

这是一个典的网络钱包界面,这是我们的certik deepwallet钱包。用户可以在这个界面看到账户余额和发送货币的选项。因为这是一个基于cosmos的钱包,所以它具有授权功能。

网页钱包和桌面钱包漏洞利用与分析

在讨论web应用程序的安全性时,我们想到了开放式web应用程序安全项目(OWASP)的十大安全漏洞。

以下是由certik安全工程师调查的27个网络钱包中10大安全漏洞的一些统计数据。Certik安全工程师在三个钱包中发现了跨站点脚本攻击(XSS)。本文选取两个案例进行案例研究。

网页钱包和桌面钱包漏洞利用与分析

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

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

许多web钱包缺少安全标头,例如内容安全策略(CSP)和“X帧选项”标头,这使得钱包容易受到点击劫持攻击。

一些钱包仍在使用过时的JavaScript库和nginx/Apache服务器和CVE,这是无法直接利用的。

Certik安全工程师没有发现任何处理XML格式数据的钱包,也没有任何钱包进行任何反序列化操作,因此他们没有发现任何xxE和反序列相关的漏洞。没有关于日志记录和监视的更多信息。

案例1:分散式web钱包的DOM XSS漏洞

这是一个分散式web钱包的domxss漏洞案例。该钱包支持单一协议,具有网络钱包的所有基本功能。

具有漏洞的功能

此应用程序将保存上次访问位置:在用户用密码解锁钱包后,它将跳回解锁前的页面。下图显示了实现此功能的代码。如果您有测试web应用程序的经验,您就知道这种情况很可能存在domxss漏洞,本例就是这种情况。

网页钱包和桌面钱包漏洞利用与分析

DOM XSS

domxss需要源和接收器。Source是应用程序接收不可信数据(用户输入)并将其传递给sink的地方。当用户访问此链接时“窗口.位置.搜索“将返回quot;?Returnto=/validatorsquot;,则“”将包含quot;/validatorsquot;。

网页钱包和桌面钱包漏洞利用与分析

Sink是处理来自源的不可信数据的位置,因此Sink位于此处:“window.location.href如果用户输入“returnto=/validators.”。钱包会回到“/validators”,也就是说,它会转到verifiers页面。如果输入“returnto=J”avascript:警报(1) 浏览器中将弹出警报窗口。

网页钱包和桌面钱包漏洞利用与分析

密钥存储和密码

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

网页钱包和桌面钱包漏洞利用与分析

使用JavaScript读取本地存储

JavaScript可以从本地存储读取信息。在这种情况下,键值数据显示为存储在本地存储器中的“Hello world”。可以执行JavaScriptLocalStorage.getItem(“hello”)得到“world”。

网页钱包和桌面钱包漏洞利用与分析

使用domxss

如何利用domxss漏洞窃取本地存储中的密钥库和密码?

在下面的URL中,它可以读取keystore和password的内容并将它们发送到黑客的服务器。在黑客的服务器日志中,可以直接看到密钥库的内容和密码。一旦你有了这些信息,你就可以控制用户的帐户,你可以登录到他们的钱包并把钱转出。

网页钱包和桌面钱包漏洞利用与分析

修理方法

网络钱包厂商的修复方法是,每次用户解锁钱包时,都会将网络钱包重定向到个人主页,以免给攻击者任何插入恶意代码的机会。

网页钱包和桌面钱包漏洞利用与分析

案例2:托管web钱包中的反射XSS漏洞

第二个案例研究是关于托管web钱包中的反射XSS漏洞。托管web钱包由服务器管理所有私钥。如果您想登录钱包应用程序,用户将通过电子邮件收到一次性密码。“这款钱包还支持其他功能,即钱包的所有功能。”。

API操作

API的URL格式类似于/API/,例如获取用户事务信息的API是/apiuser/cloudtrans。

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

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

网页钱包和桌面钱包漏洞利用与分析

警报(文档.domain)

将以下内容添加到此钱包的API请求中:lt;SVG+onload=alert(文档.domain)gt;”

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

网页钱包和桌面钱包漏洞利用与分析

曲奇

用户登录后,其会话令牌存储在“phpsessid”cookie中。这个钱包的特点是代币没有“httponly”。如果cookie设置为httponly,浏览器将阻止JavaScript访问cookie。换句话说,它可以防止攻击者通过跨站点脚本攻击(XSS)窃取cookie中的会话令牌。

网页钱包和桌面钱包漏洞利用与分析

获取会话令牌

由于在本例中会话令牌中没有httponly,所以可以通过跨站点脚本攻击(XSS)读取cookie的内容并将其发送到您自己的服务器。一旦获得会话令牌,就可以使用它登录受害者的帐户。现在你有了会话令牌,是时候开始抢劫了。

网页钱包和桌面钱包漏洞利用与分析

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

网页钱包和桌面钱包漏洞利用与分析

旁路2fa验证

如前所述,钱包有一个twitter礼品功能:当用户进入这个功能界面时,它会询问用户想要赠送什么类的货币,想要赠送多少钱,想要赠送多少人。

从这个截图可以看出,用户最多可以赠送2个比特币

网页钱包和桌面钱包漏洞利用与分析

当用户设置了送礼活动后,其他人需要点击follow,Aite的三个好友并转发此免费微博。只要你完成了这些步骤,你就可以去领奖了。

网页钱包和桌面钱包漏洞利用与分析

但问题是这个函数不需要2fa!攻击者可以窃取受害者的会话,登录受害者的帐户,创建大量免费活动,然后自己领取奖励。这样,受害人的账户余额就可以全部提取。

修理方法

制造商对输出的HTML进行编码,从而解决了XSS漏洞。还要为包含会话令牌的“phpsessid”cookie设置“httponly”。

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

桌面钱包

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

Certik安全工程师研究了18个桌面钱包,包括QT(c++)、dot-net(cා)、Java,其余15个使用电子框架。本部分案例研究将探讨.net桌面钱包的服务器端远程代码执行漏洞和电子钱包的客户端远程代码执行漏洞。

网页钱包和桌面钱包漏洞利用与分析

案例一:点网桌面钱包服务器远程代码执行漏洞

以下是对桌面钱包中发现的远程代码执行漏洞的分析。

我们先介绍一下背景:这个钱包是一个分散的单协议钱包,用Cා编写,使用.net框架。它包括许多常见的钱包功能,如账户管理、交易转移和智能合约的部署/调用。

允许用户上传文件到服务器也很有趣。这个功能在钱包中并不常见,所以我们决定进一步探索。如前所述,这个钱包是基于.net的,如果代码没有混淆,很容易通过反编译获得源代码。钱包就是这样,所以我们可以恢复它的源代码,以便进一步分析。

静态源代码分析

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

网页钱包和桌面钱包漏洞利用与分析

电子钱包向服务器发送HTTP post请求并返回文件上载URL“上传.php“是服务器处理文件上传的代码。现在我们知道PHP是在服务器后台使用的,所以如果我们可以上传一个PHP webshell到服务器并在浏览器中打开它,我们就可以在服务器上远程执行代码了。

文件上传

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

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

网页钱包和桌面钱包漏洞利用与分析

修理方法

修复很简单,开发者直接删除文件上传功能,所以不必担心这个安全问题。这是个好主意,因为加密钱包应该尽可能简洁,以避免安全问题。接下来,我们来谈谈电子钱包的安全性。

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

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

Electron是一个开源软件框架,允许开发人员使用HTML、CSS和javascrip构建跨平台的桌面应用程序。

使用electron的好处是开发人员可以重用web应用程序代码来构建桌面应用程序,也就是说,他们不需要寻找另一个代码库或学习新的编程语言。

在调试电子应用程序时,使用Google的devtools很容易。electron应用程序可以直接在操作系统上运行,因为可以访问它节点.js模块,因此您可以构建比web应用程序更强大的桌面应用程序。

今年6月,certik安全团队在symbol桌面钱包中发现一个远程执行代码漏洞,并将该漏洞提交给symbol漏洞奖励计划。Symbol高度重视certik提交的报告,立即采取安全措施,及时更新代码。这个问题已经在v0.9.11版本中修复了。

总结

无论是内部安全团队还是第三方公司进行安全审计和渗透测试都是保证系统安全的关键。专业安全人员会试图从“恶意黑客”的角度破坏系统,帮助识别和修复漏洞,以免真正的黑客利用这些漏洞。

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

我们不仅仅是在寻找漏洞,还排除了0.0万01%被攻击的可能性。

发布者:吉祥,转请注明出处:https://www.btchangqing.cn/92608.html

发表评论

登录后才能评论
商务微信
商务微信
客服QQ
分享本页
返回顶部