Web标准安全性研究:对某数字货币服务的授权渗透

2019-09-29 00:20未知

  表面下,现代Web只有通过不断增长的技术标准才能实现。标准旨在管理技术和数据的互操作性。Web标准是最广泛采用和快速发展的标准之一,其变化也经常引起浏览器供应商,Web开发人员和用户之间的激烈争论。

  在这篇博文中,我们将详细说明盲目遵从明确定义且普遍采用的Web标准所带来的危害。我们将对一个知名的数字货币服务发动远程攻击,并”窃取其中所有的货币“以此来证明我们观点的可靠性。

  许多现代应用程序开始使用localhost“api-servers”作为将程序逻辑与用户界面分离的设计模式。这些服务会在127.0.0.1(localhost)上静静监听,并将应用程序的核心逻辑作为一个与平台无关的远程编程接口(RPC)进行无头封装。

  在过去的几年里,对这些localhost API服务的研究已发现了许多可远程利用的问题。其中来自Google Project Zero的Tavis Ormandy的调查结果引人关注:

  所有暴雪游戏(魔兽世界,守望先锋,暗黑破坏神III,星际争霸II等)都易受到DNS重绑定漏洞的攻击,允许任意网站运行任意代码。

  以下是一系列uTorrent DNS重绑定漏洞(现已修复),从远程代码执行到查询和复制下载文件等等。

  在加密货币领域,这种相同的“api-server”设计模式非常普遍。大量的区块链项目在他们的货币守护进程中使用这种架构。这些守护进程负责管理用户的加密钱包,执行事务以及与区块链保持同步。

  通常,面向用户的GUI应用程序将连接到此本地服务,并将“high-level”概念(例如创建事务)转换为守护进程通过其公开的API提供的“low-level”区块链操作。此模型还允许高级用户或第三方开发人员轻松编写驱动,扩展或展示守护进程核心功能的代码。

  将这些api-servers绑定且仅在127.0.0.1上运行,看上去似乎是一种安全且简单的方法来防止应用程序(例如货币/钱包守护进程)暴露于互联网和远程攻击。但遗憾的是,这并不总是一个安全的假设,特别是当与普通web浏览器共存时。

  浏览网页时,你的浏览器会下载并运行大量“‘untrusted(不受信任)”的数据,以便在屏幕上为你呈现你喜爱的网站。通过扩展,在给定网站上发布的任何JavaScript都由本地计算机上的Web浏览器执行。这意味着远程发起和恶意编写的JavaScript可能会被用于在本地主机服务上进行探测。

  让我们理论上的“预感”是,在浏览器内部执行的代码应该(原则上)能够与本地服务进行交互,并且只需运行它。在接下来的部分,我们将攻击Siacoin:一个知名的加密货币项目,旨在通过区块链技术提供廉价,高效和去中心化的文件存储。

  我们的主要目标是成功执行对Sia/wallet/seed端点的API调用。在加密货币中,“wallet-seed(钱包种子)”是一个字符串,可用于重建与特定钱包相关联的私钥。如果你拥有了这个私钥,那就拥有资金。

  我们可以通过创建一个恶意网站来测试这一理论,该网站试图从他们的本地守护进程中请求受害者的钱包种子:

  显然,想通过浏览器攻击本地主机服务并不容易。这是因为现代Web浏览器采用了一种称之为”Same-Origin-Policy(SOP)“的保护策略。

  SOP最早是在Netscape Navigator 2(约1995年)中引入的,旨在规范对文档对象模型(DOM)的访问。随着网站越来越面向用户,JavaScript也越来越普遍,SOP明确了特定网页上的资源代码可以与之交互或修改的边界。

图文推荐
版权所有@股票配资,股票配资平台,股票配资开户、股票配资公司