与内容安全策略一起战斗加密和做好事物

2021-04-01 20:09:42

如果您' ve降落在此页面,因为您在完全不同的网站上看到了一个奇怪的消息,那么遵循了一个链接到这里,向网站所有者丢弃一个注释,让他们知道发生了什么。如果,另一方面,你'在这个页面上,因为你'遗嘱感兴趣地阅读关于受到受损网站的非法使用的隐秘以及通过偶然情况如何,我现在自己的coinhive.com和我做了一些有用的事情用它,阅读。

你知道人们如何不喜欢广告?是的,我要么(至少不是垃圾追踪那些侵入你的隐私和带宽的垃圾迹象),但我也喜欢网上的免费内容,其中谎言;内容生产商如何在页面上展示广告时,这些产品商如何自然,你"将您的业务与您的用户&#39货币化。 CPU功率"哪个是斗士' s modus操作公司。那个' s archive.org上最后一个快照版本的链接,因为如果你今天去了Coinhive.com,你' ll没看。网站已经死了。然而,它现在拥有我和#39;它只是坐在那里,除了提供一点点javascript之外,还没有什么。我很快就回到那样,让'回到斗鸡的商业模式:

所以,而不是服务广告你在你的温度上放置了一个基于JavaScript的Cryptominer ...抱歉 - 访客 - 浏览器,然后坐在那里阅读你的内容,你'重新收获Monero硬币。他们为CPU周期付费将钱放入口袋里 - 巧妙!但是,这有两个大量问题,第一个可能是显而易见的:它' s一个(通常在不知不觉中)利用人们的个人利益,为网站运营商的个人收益剥削的人和#39;它。它可能只利用它们一点点(浏览器中的电力有多能力JS Cryptominer真的绘制?),但它仍然感到超级阴暗。第二个问题是,由于加密货币的匿名性质,每个黑客和他们的狗都希望在任何他们能够运行自己的任意JavaScript上的网站上投入硬币。

I' LL给你一个完美的例子,最后一点:2018年2月,我写了关于JavaScript供应链悖论:SRI,CSP和第三方库中的信任,其中有人在BrowseLeque服务上损失了JS文件并注入了投入脚本。在该博客文章中,我包括代码斯科特·赫尔默已经脱掉了,它显示了一个非常简单的JavaScript,真的只是从Coinhive.com中包含了.js文件和32字节键的设置。并且所有攻击者所需的攻击者 - 包括Coinhive JS,添加他们的钥匙,如果他们希望,请切换一些配置。那个'它完成了工作,即时加密!

然后斗鸡已经消失了。 (也 - "该公司每月估计为250,000美元" - crikey!)该网站消失了,域名停止解决。每个有携带的站点都在它上运行,无论是通过网站所有者的设计还是在加密jacker的突发事件中,停止挖掘monero。但是,它仍然为域名提出要求,但没有名称在任何地方解析,副唱片的唯一迹象已经消失在浏览器中的错误' S开发人员工具。

在5月2020年5月,我获得了主要的Coinhive.com域和一些与服务相关的其他辅助人员,例如用于其链接缩短的CNHV.co(也导致浏览器到Monero)。我不确定让我提供的人有多少钱想要分享,所以唯一的事情是我现在的说法是他们为我提供的,以便自由地为我提供。 2020年有点忙,只有最近我终于能够回到斗鸡。我讲了一个网站并刚刚记录的请求。每个请求导致404,但每个请求也进入标准Azure App Service Log。那个'在哪里有很多有趣的地方。

首先,高级统计数据和我通过CloudFlare路由时,它首先超级易于查看请求量:

这是一个大量的请求;在一天的3.63米处为3.63米的服务达到39米,该服务甚至不再存在。但对我留下的数字(如果"印象"这里是正确的访问者吗?)是每天的独特游客的数量:

Daaaamn! 2年以上的斗士队已经消失了,矿工仍然嵌入足够的地方,每天提供超过100万辆的游客。哇。我想知道他们在哪里'重新来自哪里?

只是为了上下文,我被Pwned(每天约有200k访客)的地理分布如下:

我厌恶关于黑客与俄罗斯和中国的协会的陈规定型结论,但在这里有点不可避免。后来,当我分析了注射了斗鸡的各种网址时,(轶事)俄罗斯和中国网站的强劲存在。

继续前进,在这里捕获了一个典型的日志条目,一旦我站起来的空网站:

#fields:日期时间s-siteName cs-method cs-uri-stew cs-uri-query s-port cs-usernamame c-ip cs(用户 - cookie)cs(cookie)cs(推荐)cs-host sc-status sc-substus sc-win32-status sc-bytes cs-bytes时间拍摄2010:59:32硬币get / llib/coinhive.min.js x-arr-log-id = 061e55e4-6380-4e8- A7F6-D4EA53071B71 443 - 172.69.166.8 Mozilla / 5.0 +(Linux; + Android + 8.0.0; + ATU-LX3)+ AppleWebkit / 537.36 +(Khtml,+ + Gecko)+ Chrome / 88.0.4324.181 + Mobile + Safari / 537.36 ArraffinitySamesite = 0e2a05ba3fa8945356c52a5d6a03f6078571b96359db7d489b1580040A9FDEC HTPS://Lookedon.com/Coinhive.com 404 0 2 470 1424 15

所要求的JS文件是Coinhive通常嵌入在网站中。 IP是CloudFlare' s(记住,他们'重新代理,所以它'他们的IP网站收到)和响应代码是404,因为没有资源返回。推荐人是一个有趣的人,因为这告诉我们脚本从哪里请求,在这种情况下,在此案例中是Lookedon.com的网站。在写作和YEAH时,在那个网站上快速浏览它,即HTML源中的一个加密术:

在我们进一步进入Cryptominers的进一步阐述之前,我强烈建议在多年前从Delft技术大学从Delft技术大学观看这个视频,这是在Usenix安全研讨会上的几年前。它只有21分钟,它直截了当:

其中'来自Hugo和同事的更多综合文件,题为无意中制作网络犯罪分子的富裕:互联网规模上的Cryptojacking竞选全面研究。如果你想走得更深,那就读到了这一点。 (顺便提及,我与Hugo和We' Re讨论了如何最好地使用数据I' M记录研究和防御目的。)

我从2021-03-27开始的几天日志拉下了几天的日志,并将它们进入DB,在其中我可以更容易地分析事物(总共8.9米行)。我首先看看正在请求的内容(所有后续数据排除CNHV.Co链接缩短域,除非另有说明):

JavaScript矿工的流行毫无疑问,Delft Guys谈到了Webassembly(.wasm)的作用。在原来的硬币剧本中有了WASM的引用,但当然没有人已经加载了这一段时间,所以我只能假设它嵌入其他方式。 Logs Don' t在任何母舰条目上都有一个推荐人,如此,它不清楚请求源自:

2021-03-27 02:59:42硬币get /llib/cryptonight.wasm x-arr-log-id = 3aebf86b-116e-4ce6-a8a5-2c3d9911a2c4 443 - 162.158.167.112 Mozilla / 5.0 +(Windows + NT + 10.0 ; + win64; + x64)+ applewebkit / 537.36 +(khtml,+ like + gecko)+ apollohobo / 1.0.0 + chrome / 58.0.3029.110 +电子/ 1.7.9 + safari / 537.36 - - coinhive.com 404 0 2 470 1205 15.

从原始硬币服务器下载Coinhive.min.js脚本时,它分析了目标系统,确定可用的CPU线程数,然后下载了WASM文件以在许多网络中分发(通常是线程数量的线程可用的)。那是母鹿文件是在发生实际挖掘的地方,因为WebasseMbly可以像本机代码一样快地执行。该特定WASM文件的名称在过去更改了几次,这解释了为什么需要符合WASM文件的变化。一些网站从自己的服务器(为防止检测)服务于Coinhive.min.js脚本,但是网络工作者仍将请求来自原始硬币域的WASM文件,因为JS脚本几乎没有更改。

接下来是推荐人,但由于在服务矿工的同一站点上存在许多不同的路径,我由主机分组并报告:

我在推荐人标题中发现了超过41k个独特的域。那个'是成千上万的网站仍然试图嵌入硬币。看看WebTruyenonline.com(在推荐人中大量特色的网站根源),该网站位于越南语,但访问它时,我无法找到任何签名的唱片。不在页面源中,未从下游依赖请求,也不是引用者中的其他更深层次链接。仔细观察日志条目,与用户代理商出现的模式,因此我过滤了那些out并分组它们:

他们所有移动设备都是&#39。我改变了我发送到上面第一个的ua字符串并重新发出请求,但HTML响应仍然没有硬币。是否根据请求IP的位置来定制响应?我将Nordvpn连接到越南并再次尝试。没有什么。我甚至通过小提琴手将自己的iPhone代替VPN' D到越南,仍然是什么。这是一个在iOS 14.4.1上的Safari完全标准的UA,所以没有任何线索如何导致这些请求。雨果也有一些想法:

在我们对CryptoJacking的后续研究期间,我们发现1.4M Mikrotik路由器在您在巴西和印度尼西亚进行地理上专注的地理上专注时提供了Cryptojacking脚本。可能是越南Mikrotik路由器仍然被感染,以某种方式设法将脚本注入特定(流行)的网站。

我' ll借此机会快速回复这里'为什么你的静态网站需要https。确保运输层ISN' T JUTHING PASTIONITIVE INFORMATION,IT'也关于保护内容的完整性并假设HUGO就在这里,这是一个美丽的展示HTTPS到处的必要性。更多关于这篇文章的纸张标题为冰山一角:互联网级开发用于加密的路由器。

然而,Aahora.org的下一个主机名是一个完全不同的故事,并肯定有足够的,在那里' s coinhive:

我不打算继续通过顶部命中,这一点是,日志中的请求的存在并不是在推荐人的网站上干净地映射到投资者网站上的硬币。我可以想到各种原因,但足以说仍然有一堆网站试图在浏览器中嵌入密码。

还有一件事对我感兴趣的东西 - 我们可以根据数据讲述协调着加密活动吗?我的意思是这些日志条目中有多少来自运行相同的硬币键的网站,这些键将指示每个站点后面的相同演员?所以,我用一个小履带脚本打造了一个小爬网脚本,并开始刮掉每个独特的网站寻找斗鸡的存在。它' s一个基本的(它只是查找HTML源中的一个硬币键,所以留在另一个JS文件或IFRAME中的密钥),但它' s就足够了我的要求。我基于日志中最普遍的第一个375k URIS爬出,返回键并录制了它们出现的唯一URI和主机名的数量。我发现了超过3k独特的钥匙,这里是前10名:

为钥匙做了一些谷歌曲,我发现了2个有趣的东西,第一个有涉及第二个钥匙(" fgw ..."):

好吧,支持雨果'早期的论文。由于该密钥可能出现在103个唯一主机上,它可以只是一个被感染的路由。进一步支持Mikrotik理论是,在HTTP上没有提供每一个URL:

在这种特殊情况下,"撒哈拉州和#34的沉重偏见;域名。这些与Subarta Roy有关,一个名字我在最近观看Netflix系列坏男孩亿万富翁只知道,其中他显然是一个。腐败亿万富翁组织内有人在运行被感染的路由器中,并在加密的所有非安全请求中加密'我怀疑它只是数据集中的许多好奇的谜团中的一个。

第三个关键 - " w9w ..." - Google击中链接直接返回荷兰研究论文:

它难以得出任何结论,而不是仍然存在大量受损的网站,即使是托管唱片,甚至现在斗鸡已经死了。他们当然不再挖掘加密加密,但是这些网站仍然将JavaScript嵌入了我控制的域中的...

模态直接嵌入了我站在网站服务的脚本中。该链接通往此博客文章,信息可以轻松地被只想浏览该网站的人员解除。我仔细考虑了这种方法;我真的想修改其他人&#39的网站吗?我希望网站拥有者知道那里的高可能性,他们遭到了损害,问题是当我们谈论数万个网站时,你会如何做到这一点。我已经完成了足够的否则足够的披露,以知道甚至这样做曾经是痛苦的,但如果我是写一点点的javascript ......

哦 - 虽然我们'在这里让' s只是让那个沉没一会儿:我现在可以运行我想要的众多网站上的任何javascript。那么,我可以用javascript做什么?我可以更改Forms Post的位置,添加一个密钥记录器,修改DOM,使外部请求进行重定向到恶意文件和各种其他非常讨厌的事物。当你在自己的网站上嵌入别人时,你交出的力量'''为什么我们有子资源完整性。我在SRI上介绍了我的帖子,因为它与水电事件有关,这种情况就像为什么验证外部资产的完整性是如此重要的。

那么,什么'修复了?好吧,这取决于,并回答我们需要回到Delft Uni Guys的PRESO,特别是这款幻灯片:

如果矿工是所有者 - 然后首先启动,那么羞辱它们,其次,只需删除它。如果是他们有意识地决定嵌入矿工首先,他们可以将自己的自由意志删除。但比这是恶意活动的更普遍,实际上它占了绝大多数实例,一旦考虑到第三方软件妥协和主要网站本身的妥协:

这里的答案是双重的,第一部分显然是为了删除受损代码或第三方库,然后,当然,修复底层漏洞(即更改允许它在第一个站点上放置在网站上的弱势管理员凭据地方)。但是,我们还拥有该技术,以确保加密代码首先可以在网站上运行,这让我回到CSP。

让'在Lookedon.com中拍摄我的日志中最常见的网站之一。此服务使您能够"找到有趣的图片"而且像最现代的网站一样,它通过设计嵌入了不同地方的各种内容类型。例如,有一堆以下内容:

还有其他内容类型从其他位置加载,但为了简单起见,让'■现在与此列表一起使用。使用内容安全策略,我可以定义允许浏览器的内容类型和位置对浏览器的请求以及偏离该已知良好状态的任何内容被阻止。这里的4分的政策看起来像:

然后,CSP作为网站上任何页面返回为响应标题。通过FIDDLerscript将其注入站点然后检查Chrome' s dev工具中的响应,我可以模拟此行为

从任何地方允许任何东西加载(默认的-SRC'无')然后只允许从明确定义的位置加载显式定义的内容类型。因此,在这里'浏览器被要求嵌入Coinhive脚本时会发生什么:

它'拒绝了。 '只有一个地方这个网站可以嵌入脚本和#39; s connect.facebook.net。我们在这里做什么是创建一个"允许列表"我们作为网站开发人员知道的所有事情都知道是好的,然后允许浏览器阻止其他一切。有人通过上面提到的任何方法在您的网站上放下加密矿工!什么都没有发生♥

但等等,那里'越来越多:WORN'它很高兴知道这一切何时发生?在从早期的浏览情况下,我一开始就知道第三方服务或图书馆,我依赖于开始做出意外的事情。和我特别喜欢知道有人是否将恶意脚本丢弃到我自己的网站上,所以让' s调整CSP一点:

在这里添加了所有的I&#39是export-uri指令在最后指令,这让我推荐...举报URI!

完整披露:报告URI是一个服务斯科特,我一起跑到和#39;这是一堆免费和商业的东西。但是话虽如此,我' m即将进入的东西是同样适用的是你是否使用我们的服务或站起来的报告端点;这是关于浏览器技术而不是产品间距。 (是的,我们知道Report-URI被推荐出来,但它' s广泛不同于报告 - 仍然是差别的,但无论如何都拥有域名🙂)

在内容安全策略中使用Report-URI功能时,策略中的违规可以自动发送到所选的端点。在上面的例子中,我在report- uri.com上有我自己的子域和i' ve配置了那个主机作为我的访问者的位置和#39;浏览器应发送任何违规报告。随后,当我们在lookedon.com上测试它时,我们会看到浏览器发送的以下报告:

想象一下,您作为负责本网站的人收到上面的违规报告;它告诉您文档URI(lookedon.com的根)试图嵌入阻塞URI(Coinhive JS文件),它违反了" script-src-elem&#34的有效指令;。换句话说,有人试图在你的网站上把硬币放在你的网站上,但浏览器阻止了它和你'刚才这份报告个人交付给你。整洁的!将CSP放在您的网站上并报告违规,''是一系列典型的典型网络攻击的最佳防御之一。

最后一件事:现在在Coinhive.com上运行的代码可在Github和I&#39上提供.M很高兴地提出请求。我喜欢它如果人们可以解决一些方法来响应WASM请求和I' m肯定会对任何建议进行努力清理那个js或做任何有用的东西来帮助帮助两个人来帮助帮助网站所有者一样。不,不要告诉我刚把自己的加密器放在那里♥

编辑:发布此后的一半不到一半,我收到了一个完整的WASM实现的拉出请求,该实施将显示与直接调用.wasm文件的任何浏览器相同的消息。 由于乍得·巴克斯特为此而大规模