0717-7821348
关于我们

欢乐彩票进入网址

您现在的位置: 首页 > 关于我们 > 欢乐彩票进入网址
欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透
2019-09-27 22:11:10
欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透

外表下,现代Web只要经过不断增加的技能规范才干完结。规范旨在办理技能和数据的互操作性。Web规范是最广泛选用和快速开展的规范之一,其改变也常常引起阅读器供货商,Web开发人员和用户之间的剧烈争辩。

在这篇博文中,咱们将具体阐明盲目遵照清晰界说且遍及选用的Web规范所带来的损害。咱们将对一个闻名的数字钱银服务建议长途进犯,并”盗取其间一切的钱银“以此来证明咱们观念的牢靠性。

演示视频Localhost Services(本地服务)

许多现代应用程序开始运用localhost “api-servers”作为将程序逻辑与用户界面别离的规划形式。这些服务会在127.0.0.1(localhost)上静静监听,并将应用程序的中心逻辑作为一个与渠道无关的长途编程接口(RPC)进行无头封装。

C:\WINDOWS\system32>netstat -a -b Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:443 DESKTOP:0 LISTENING [vmware-hostd.exe] TCP 0.0.0.0:912 DESKTOP:0 LISTENING [vmware-authd.exe] TCP 0.0.0.0:5900 DESKTOP:0 LISTENING [siad.exe] TCP 0.0.0.0:49664 DESKTOP:0 LISTENING [Spotify.exe] TCP 0.0.0.0:57621 DESKTOP:0 LISTENING [Discord.exe] TCP 127.0.0.1:8307 DESKTOP:0 LISTENING [siad.exe] TCP 127.0.0.1:18171 DESKTOP:0 LISTENING [Battle.net.exe] TCP 127.0.0.1:27015 DESKTOP:0 LISTENING [AppleMobileDeviceProcess.exe] TCP 127.0.0.1:27060 DESKTOP:0 LISTENING [Steam.exe] TCP 127.0.0.1:52094 DESKTOP:0 LISTENING [NVIDIA Web Helper.exe]

在曩昔的几年里,对这些localhost API服务的研讨已发现了许多可长途运用的问题。其间来自Google Project Zero的的调查结果引人重视:

一切暴雪游戏(魔兽国际,守望前锋,暗黑破坏神III,星际争霸II等)都易遭到DNS重绑定缝隙的进犯,答应恣意网站运转恣意代码。

— Tavis Ormandy (@taviso)

一切暴雪游戏(魔兽国际,守望前锋,暗黑破坏神III,星际争霸II等)都易遭到DNS重绑定缝隙的进犯,答应欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透恣意网站运转恣意代码。

— Tavis Ormandy (@taviso)

以下是一系列uTorrent DNS重绑定缝隙(现已修正),从长途代码履行到查询和仿制下载文件等等。

— Tavis Ormandy (@taviso)

以下是一系列uTorrent DNS重绑定缝隙(现已修正),从长途代码履行到查询和仿制下载文件等等。

— Tavis Ormandy (@taviso)

提醒了盛行的视频会议应用程序中的一些可运用的问题

在加密钱银范畴,这种相同的“api-server”规划形式十分遍及。很多的区块链项目在他们的钱银看护进程中运用这种架构。这些看护进程担任办理用户的加密钱包,履行业务以及与区块链坚持同步。

一般,面向用户的GUI应用程序将衔接到此本地服务,并将“high-level”概念(例如创立业务)转换为看护进程经过其揭露的API供给的“low-level”区块链操作。此模型还答应高档用户或第三方开发人员轻松编写驱动,扩展或展现看护进程中心功用的代码。

Localhost 仅仅相对安全

将这些api-servers绑定且仅在127.0.0.1上运转,看上去似乎是一种安全且简略的办法来避免应用程序(例如钱银/钱包看护进程)露出于互联网和长途进犯。但惋惜的是,这并不总是一个安全的假定,特别是当与一般web阅读器共存时。

阅读网页时,你的阅读器会下载并运转很多“‘(不受信赖)”的数据,以便在屏幕上为你出现你喜欢的网站。经过扩展,在给定网站上发布的任何Java都由本地核算机上的Web阅读器履行。这意味着长途建议和歹意编写的Java或许会被用于在本地主机服务上进行勘探。

将目光转向 Siacoin

让咱们理论上的“预见”是,在阅读器内部履行的代码应该(原则上)可以与本地服务进行交互,而且只需运转它。在接下来的部分,咱们将进犯:一个闻名的加密钱银项目,旨在经过区块链技能供给廉价,高效和去中心化的文件存储。

咱们的首要方针是成功履行对Sia/wallet/seed端点的API调用。在加密钱银中,“wallet-seed(钱包种子)”是一个字符串,可用于重建与特定钱包相关联的私钥。假如你具有了这个私钥,那就具有资金。

咱们可以经过创立一个歹意网站来测验这一理论,该网站企图从他们的本地看护进程中恳求受害者的钱包种子:

可是咱们的恳求被阻挠了!发生了什么?

显着,想经过阅读器进犯本地主机服务并不简单。这是因为现代Web阅读器选用了一种称之为”Same-Origin-Policy(SOP)“的维护战略。

SOP(同源战略)介绍

SOP最早是在Netscape Navigator 2(约1995年)中引进的,旨在规范对文档方针模型(DOM)的拜访。跟着网站越来越面向用户,Java也越来越遍及,SOP清晰了特定网页上的资源代码可以与之交互或修正的鸿沟。

假如没有SOP,歹意网站或许会向其他网站宣布恳求,并从其呼应中读取潜在的灵敏信息。幻想一下下面的歹意伪java代码:

let req = await fetch("https://mail.google.com/") // Request data from current logged in gmail let mail_content = await req.text; // Decode the response data exfil(mail_content); // Exfil the emails to an attacker

在没有SOP之前,歹意网站或许会履行这样的恳求,以读取拜访其网站的任何人的电子邮件!SOP的首要思维是,因为拜访某个特定源站(如,attacker.com)而履行的脚本,不应与另一个源站(如,mail.google.com或localhost)上的数据进行交互。

为了强制履行此操作,阅读器会查看每个出站恳求以保证其符合要求。当阅读器确认某个网站正在向其他来历宣布恳求时(“跨来历恳求(cross origin request)”)时,它将首要查看该恳求是否包括有任何“不安全”的标头。假如有,则阅读器将彻底阻挠该恳求,如下所示:

相反,假如恳求并未包括任何不安全的标头,则阅读器会将其转发到方针站点。这个“方针站点”现在可以挑选告知阅读器是否答应其他来历读取呼应。此功用经过可由“方针站点”设置的跨域资源共享(CORS)标头完结。

一般,网站不启用CORS,或仅为特定域启用CORS。这意味着阅读器只会阻挠传递呼应。因而,恳求站点无法读取呼应数据。

假如某个特定恳求被标记为“safe(安全)”,则答应其传递到方针站点。虽然这些恳求被标记为“安全”,但关于给定的应用程序来说,这些恳求依然会带来很大的安全危险。以下面的恳求为例:

fetch('http://localhost:1337/wallet/make_transaction', { method:'POST', body:'to=attack_address&amount=100000' })

以下是发送到服务器的实践数据:

POST /wallet/make_transaction Host: localhost:1337 Origin: http://attacker.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Accept: */* Referer: http://attacker.com to=attack_address&amount=100000

在本例中,歹意脚本操控的仅有数据块是途径和恳求主体,这两部分在CORS下都被视为“安全的”。因而,虽然存在显着的实质性危险,但该恳求总体上被以为是“安全的”!假如服务器不履行任何其他验证,则恳求将成功触发业务。

已然咱们现已知道了SOP是怎么阻挠咱们的跨域恳求的,那么接下来咱们要做的便是想办法绕过SOP,让阅读器以为咱们的歹意恳求来自localhost(即同源)。咱们可以经过一种称之为的技能来做到这点。

DNS重绑定

DNS重绑定是一种现代技能,它会使阅读器误以为当时源站与实践不同的IP地址相关联。

这种类型的进犯可以经过操控特定的域名以及相关的DNS服务器来履行。当受害者拜访域时,DNS欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透服务器用实在的IP地址呼应,但运用十分短的生计时刻(TTL)来避免缓存。

之后,一旦TTL过期,就会向进犯者的域宣布另一个恳求(例如经过Java)。可是,这次D欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透NS服务器将以内部IP地址(如127.0.0.1)进行呼应。阅读器则以为它仍在与原始的attacker.com通讯,但现在恳求将转到方针服务!

在此示例中,可以看到全本小说attacker.com第一次被解析为12.34.56.78,但第2次却被解析为了127.0.0.1。

现在,当attacker.com向自己宣布恳求时,阅读器会向127.0.0.1宣布同源恳求。

维护 Localhost API 服务器

针对这些进犯最健壮的防护是在向API宣布恳求时,需求一个在磁盘上的secret token:进犯者或许无法从长途上下文中知道这一点。可是,这有时并不抱负,因为这会让API的运用变得更为困难,因而开发人员也常常为此寻觅代替处理方案。

另一种常见的技能是验证恳求头,以保证恳求来自合法的客户端应用程序。履行此操作的常见办法是,查看主机头是否设置为localhost或其他预期值。另一种办法是查看阅读器要发送的某些头文件,如Origin、User-Agent或Referer。可是,这种“头查看欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透”自身或许存在问题,因为哪些头可以被信赖,哪些头可以被歹意脚本修正并不清晰。

让咱们来看一下siacoin看护进程是怎么维护自己免受未经授权交互的……在项目生命初期,Sia的开发人员意识到来自阅读器的恳求或许会成为一个问题。为了减轻这种危险,它们包括了以下代码,以保证看护进程只承受具有值为“Sia-Agent”的User-Agent的恳求:

if !strings.Contains(req.UserAgent, "Sia-Agent") { writeError(w, "Browser access disabled due to security vulnerability. Use Sia-UI or siac.", http.StatusBadRequest) return }

要绕过此查看,咱们需求在履行跨域恳求时指定User-Agent标头。让咱们看看是否可行!

查看规范

要确认咱们可以在出站恳求中操控哪些标头,就需求咱们对Web规范有更为深化的了解。这些规范界说了两个标头列表。第一个称为no-CORS-safe:它可以安全地为Cross-Origin恳求设置标头(例如标头attacker.com可以发送到bank.com):

`Accept` `Accept-Language` `Content-Language` `Content-Type`

在履行跨域恳求时,Java可以设置这些标头,而且只能设置这些标头。假如设置了其他选项,阅读器将会阻挠该恳求。这便是为什么上面描绘的用户署理过滤办法看起来是安全的原因。User-Agent不在白名单中,因而无法设置为跨域恳求。

另一个列表是Forbidden列表:它清晰制止设置黑名单标头,不管其跨源状况怎么(即便关于同一源恳求,如bank.com发送到bank.com也不答应):

`Accept-Charset` | `Accept-Encoding` `Access-Control-Request-Headers` | `Access-Control-Request-Method` `Connection` | `Content-Length` `Cookie` | `Cookie2` `Date` | `DNT` `Expect` | `Host` `Keep-Alive` | `Origin` `Referer` | `TE` `Trailer` | `Transfer-Encoding` `Upgrade` | `Via`

有一些技巧可以阻挠其间一些标头中被发送,可是它们无法被诈骗:假如它们存在,那么接收者可以信赖它们。要注意,咱们看到Origin和Referer列表,但User-Agent没有。这意味着关于同源恳求,进犯者可以将User-Agent标头更改为他们想要的恣意值!

让咱们在Siacoin看护进程上测验一下吧!

完好的 Siacoin Exploit

咱们把之前的那些片段都整合在一起:

Siacoin Daemon经过验证User-Agent标头来验证恳求

答应Same-Origin恳求设置自界说User-Agents,因为User-Agent不在Forbidden列表中

DNS重绑定答应咱们将跨域恳求转换为同源恳求

Siacoin Daemon经过验证User-Agent标头来验证恳求

答应Same-Origin恳求设置自界说User-Agents,因为User-Agent不在Forbidden列表中

DNS重绑定答应咱们将跨域恳求转换为同源恳求

要真实运用这个问题,咱们需求针对设置DNS重绑定进犯。咱们可以经过运用做到这一点,这是在他的相关研讨中创立的一个实用程序。Rbndr供给了一个DNS服务器,可以在两个方针的IP之间进行切换,十分适用于这种进犯场景。

首要,咱们在7f000001..rbndr.us创立一个歹意站点,然后测验拜访/wallet/seeds。可是,咱们依然需求诈骗User-Agent标头。这是十分简单,你可以按如下方法进行操作:

咱们只需求等候DNS记载的更新。一旦更新完结,咱们将可以直接与Siacoin Daemon通讯,那么用户的seed将举手可得。

这将导致许多严峻的结果,最直接的便是假如钱包被“解锁(unlocked)”(假定用户正在运转Sia钱包应用程序的默许状况)那么咱们就可以盗取受害者的钱包种子。这些种子可在之后用于不行吊销地搬运受害者一切的资金。

从钱银盗取到长途履行代码

经过这种进犯,咱们不只可以盗取受害者的资金,乃至还可以经过乱用Sia看护进程的预期功用来完结长途代码履行。

如前所述,Siacoin首要是一个去中心化的体系,用于促进廉价和牢靠的文件存储。有权拜欢乐彩票app-Web规范安全性研讨:对某数字钱银服务的授权浸透访Sia钱包看护进程API的进犯者,可以运用它在去中心化存储网络和受害者核算机之间上传和下载恣意文件。因为可以在方针核算机上以恣意途径写入恣意文件,咱们可以以多种不同的方法演示代码履行。

受影响的阅读器

从咱们的测验来看,谷歌的Chrome是仅有一款可以在DNS从头绑定进犯时,阻挠设置用户署理字段的干流阅读器。

咱们发现Apple Safari和Mozilla Firefox用户都很简单遭到此帖中演示的进犯。 这是因为两个阅读器都正确遵从规范。 风趣的是,虽然Microsoft Edge阅读器也遵从该规范,但Microsoft Edge的用户却是安全的。这是因为Edge的app-container的内置网络阻隔,使得阅读器无法实践树立与localhost的衔接。

发表时刻

在2018年9月咱们向Nebulous Labs担任任的发表了该问题。他们对该缝隙的严峻性表明了认同,并经过强化其运用磁盘令牌的服务及时处理了这个问题。

2018.09.12 – 向Nebulous Labs发表

2018.09.25 – 修正合并到source tree

2018.10.16 – 修正版发布(Sia 1.3.6)

2018.09.12 – 向Nebulous Labs发表

2018.09.25 – 修正合并到source tree

2018.10.16 – 修正版发布(Sia 1.3.6)

*参阅来历:ret2,FB小编secist编译,转载请注明来自FreeBuf.COM