一个广告Banner,不需要任何交互就能让你的PC感染恶意程序,是不是感觉很牛掰?据说就目前为止,已经有上百万PC因为这样的原因被感染。而且很多大型网站似乎都中招了,其中就包括雅虎和MSN,如果你最近看到过下面这样的广告,就真的要小心了!注意,只是看到就要小心。
安全公司ESET的恶意软件研究专家在本周二发布了报告,将这个Exploit Kit称为Stegano。Stegano可以将恶意代码嵌入banner广告的像素中,而这些banner广告通常都在一些广为人知的大型网站上,每日访问量超百万。
按照ESET的说法,很多是新闻类媒体网站。
Stegano第一次出现可以追溯到2014年,但是从今年10月初开始演变成了如今这种利用banner广告在各大型网站传播的方式。
Stegano这个名字衍生于Steganography(隐写术)这个词,这门技术其实是通过一些技术手段将信息或内容隐藏在一些数字图像之中,因为肉眼不可见而实现所谓的隐形效果。
其实Stegano是将恶意代码隐藏在透明PNG图像的阿尔法通道(Alpha Channel)之中,学设计的同学应该知道,图像的Alpha通道可以通过更改每一个像素的透明度值来定义它们的透明程度。而恶意代码的传递竟然是通过Alpha通道的值来传递的,实在是相当高端。
接下来,就如大家所知道的那样,有人将这个包装后的恶意广告部署在了一些流量较大的主流网站上。
从左到右依次为初始版本;恶意版本和为了演示效果的恶意版本增强型
“由于这种修改十分细微,被恶意修改过的广告跟初始版本看起来基本没有什么差别。”
能看出来下面这两张图哪张是原图,哪张含恶意代码么~
专家还提到,这些恶意广告会显示名为Browser Defence或者Broxu的软件宣传内容,隐蔽性极强!最近浏览大型网站,如果你也看到这两个软件的广告了,那就得警惕起来了!
“这些banner广告位于URL为hxxps://browser-defence.com或hxxps://broxu.com的远程域。”
发起了这次攻击的组织叫做AdGholas,他们擅长使用一些有效的技术手段来通过广告传播恶意软件,即大家所知道的恶意广告。他们上次实施攻击就在7月,仅在一天内就利用恶意软件感染了超过一百万PC。
Malwarebytes恶意软件情报分析的负责人Jerome Segura提到,在短时间内阻止AdGholas的攻击还是可能实现的,但他们很快就可以利用在线广告的其他安全漏洞继续发起攻击。从Segura的观察来看,受灾的网站至少就包括了雅虎和MSN。
“这是我见过手段最先进的恶意广告攻击之一。” Segura说道。
一旦有用户访问了存在这种恶意广告的网站,这个嵌入在广告中的恶意脚本就可以在不跟用户交互的情况下将用户电脑的信息发送给攻击者的远程服务器。
这个恶意脚本针对的是用IE浏览器的用户,它会先利用IE的CVE-2016-0162漏洞来扫描用户电脑,看看自己是否在沙箱或者某些安全软件的虚拟环境之中。
在验证了用户浏览器之后,恶意脚本会通过TinyURL(短网址)服务将浏览器重定向到一个网址。
之后会加载一个Flash文件,这个文件能够根据用户使用的不同Flash Player版本来利用Flash Player的不同漏洞(CVE-2015-8651,、CVE-2016-1019、CVE-2016-4117),虽然这几个漏洞现在已经补上了。
“在执行成功之后,Stegano会再次检查自己是否被监控,它的执行Shell代码会收集一些安全产品安装或者执行的数据,这些行为就可以看出Stegano的开发者十分多疑。” ESET的安全专家在blog中提到,“如果攻击者发现检查的结果没什么问题,就会试图再次从这个服务器下载一个加密payload,然后把它伪装成gif图片。”
过程中会下载伪装的的“GIF图片”,再解密其中的payload,然后通过regsvr32.exe或rundll32.exe执行。恶意payloads的类型可能包括后门、间谍软件、银行木马、文件窃取等。
下面这张ESET的图表可能能让你更直观的了解Stegano的攻击过程:
以上所有操作都是自动的,仅发生在2到3秒之间,期间未与用户产生任何交互。
截止目前,Stegano exploit kit已经被广泛利用,包括著名的Ursnif银行木马和Ramnit恶意软件。
Stegano在2014年使用时,目标是荷兰用户;2015年春天开始针对捷克;到了最近,殃及范围扩大到加拿大、英国、澳大利亚、西班牙和意大利这5个国家。
而且这次攻击中,Stegano每个攻击国家采用特定的exploit包,以达到最大范围的转播。
由于AdGholas对攻击目标电脑的安全环境进行多次审查,致使在研究他们攻击方式的时候也遇到了不少麻烦。
最后他是用了一台家用电脑并下载了Wireshark,这个不会被监测到的网络抓包工具才让他有幸观察到了一次完整的攻击。
Segura先是在11月27日发现了针对雅虎的攻击,没想到两天后恶意广告又出现了。AdGholas在这次攻击中仅仅是改变了域,连域所在的IP地址都没变。
“如果没看出来的话我们就遇到大麻烦了。” Segura说道,“这些攻击在没有人意识到的情况下就已经发生了。”
就算通过各种方式扫描恶意广告,但像AdGholas这样的入侵者还是防不胜防。“只要在线广告存在一天,问题同样存在。”Segura说,“当然,也不能够以偏概全,合法的在线广告还是占了大多数的。”
ESET的报告中并没有提到受灾的具体包含哪些大型网站。对普通用户来说,最好的防御办法就是保证你的电脑运行最新版的软件和App,同时使用能监测到这种恶意广告的杀毒软件吧。
如前文所述,Stegona实际上2014年就已经出现了,不过当前的版本经过了极大加强。据ESET所说,和Stegona比起来,其他一些比较有名的Exploit Kits,比如说Angler和Neutrino实在是小巫见大巫了。
在绝大部分感染场景中,存在问题的广告都会展示一个名叫Browser Defence的产品,最近还有在展示Broxu软件的。以下的分析仅针对Browser Defence。
恶意广告本身位于browser-defence.com这个域名下,URI构造类似于下面这样(注意还是用的https):
hxxps://browser-defence.com/ads/s/index.html?w=160&h=600
这里的index.html会加载countly.min.js,为脚本提供提供初始参数。这里的countly可不是随便从GitHub复制一段代码,其中的代码进行了大量混淆和自定义修改。
这些代码主要负责的是初始环境检查。随后初始环境信息会发回服务器(当成1×1 gif文件的XOR加密过的参数发回),形如下面这样:
systemLocale^screenResolution^GMT offset^Date^userAgent^pixelRatio
据研究人员Segura所说,恶意程序收集的信息还比较多样,包括计算机的时区、某些显卡驱动是否安装,还有设备的性能参数。反复确认被攻击对象之后,后面的步骤才会执行,所以安全人员都认为Exploit Kit作者有强迫症。
随后脚本就会请求广告Banner了。根据前面初始环境检查结果,返回恶意广告,或者也可能是不存在恶意的广告。
脚本接下来就会加载Banner,然后读取RGBA结构(有兴趣的可以去了解RGBA color space色彩空间,即红绿蓝三个通道+Alpha通道)。如果说加载的是恶意banner,就会从图片的Alpha通道中解码一部分JS。
至于具体怎么解码Alpha通道中的代码,这里面具体是有一套算法的,是不是感觉很有意思?详情参见ESET的原文。
某些像素的Alpha通道包含了一些值,所以我们从图片中看起来,图片会呈现出一些噪点,主要就是因为这些存在恶意的值。现在知道上面这两张图的差别了吗?实际上,这也的确很难检测到。
在成功解码之后,JS代码还会跟图片最后编码的哈希值来校验其完整性,最终再执行。这些代码才正式对计算机环境和浏览器本身进行检查,利用的是IE漏洞CVE-2016-0162。
检查的主要是抓包、沙盒还有虚拟化软件是否存在,当然还有环境中是否存在安全软件;主要会检查下面这些东东是否存在:
C:\Windows\System32\drivers\vmci.sys C:\Program Files\VMware\VMware Tools\vmtoolsd.exeC:\Program Files (x86)\VMware\VMware Tools\vmtoolsd.exeC:\Windows\System32\drivers\vboxdrv.sysC:\Windows\System32\vboxservice.exeC:\Program Files\Oracle\VirtualBox Guest Additions\VBoxTray.exeC:\Program Files (x86)\Oracle\VirtualBox Guest Additions\VBoxTray.exeC:\Windows\System32\drivers\prl_fs.sysC:\Program Files\Parallels\Parallels Tools\prl_cc.exeC:\Program Files (x86)\Parallels\Parallels Tools\prl_cc.exeC:\Windows\System32\VMUSrvc.exeC:\Windows\System32\VMSrvc.exeC:\Program Files\Fiddler\Fiddler.exeC:\Program Files (x86)\Fiddler\Fiddler.exeC:\Program Files\Fiddler2\Fiddler.exeC:\Program Files (x86)\Fiddler2\Fiddler.exeC:\Program Files\Fiddler4\Fiddler.exeC:\Program Files (x86)\Fiddler4\Fiddler.exeC:\Program Files\FiddlerCoreAPI\FiddlerCore.dllC:\Program Files (x86)\FiddlerCoreAPI\FiddlerCore.dllC:\Program Files\Charles\Charles.exeC:\Program Files (x86)\Charles\Charles.exeC:\Program Files\Wireshark\wireshark.exeC:\Program Files (x86)\Wireshark\wireshark.exeC:\Program Files\Sandboxie\SbieDll.dll C:\Program Files (x86)\Sandboxie\SbieDll.dll
检查下来,如果一切顺利就会建立仅1个像素的iframe,设定window.name属性,通过HTTPS重定向至TinyURL。然后TinyURL再通过HTTP重定向至漏洞利用landing页面。
在成功重定向之后,landing页面会检查浏览器userAgent(IE),加载一个Flash文件,然后通过一个加密的JSON文件来设定FlashVars参数。
在此,landing页面是作为中间人的角色存在的,提供基本的加密解密功能。
FLash文件内实际上还嵌入了另一个Flash文件(和Neutrino类似),根据Flash版本采用3种不同的exploits。
第二阶段,Flash文件会对FlashVars解密。其中包含了一个JSON文件(URI)、针对ExternalInterface的JS函数名、回调函数名和部分其他数据:
{“a”:”\/e.gif?ts=1743526585&r=10&data=”,”b”:”dUt”,”c”:”hML”,”d”:true,”x”:”\/x.gif?ts=1743526585&r=70&data=”}
接下来,就会通过ExtelnalInterface.call()来调用一个JS,检查Flash版本,然后通过landing页面发往服务器。这个过程是通过针对GIF文件请求的加密URI参数完成的。加密算法比较简单,用到了广告中的window.name。
而服务器给出的响应就是个GIF图片,这个图片前面的部分字节会被丢弃,针对剩下的部分进行解密,然后回传给Flash。
实际上这里的响应就是个JSON,其中包含了利用三个漏洞(CVE-2015-8651、CVE-2016-1019或者是CVE-2016-4117)的指示字符,还有相应exploit的密码,以及为下一阶段payload做准备的shell code URI。
利用阶段的最后,shell代码解密,下载加密后的payload——整个过程还是伪装成GIF图片。在这个阶段,还是会再度执行一次检查,看看自己有没有被察觉。
针对文件名包含下面这些字符的软件,它会格外在意。一旦发现有什么可疑的,就不会再下载payload:
vmtoolsd.exe VBoxService.exe prl_tools_service.exeVBoxHook.dllSBIEDLL.DLLfiddler.execharles.exewireshark.exeproxifier.exeprocexp.exeollydbg.exe windbg.exeeset*, kasper*, avast*, alwil*, panda*, nano a*, bitdef*, bullgu*, arcabi*, f-secu*, g data*, escan*, trustp*, avg*, sophos*, trend m*, mcafee*, lavaso*, immune*, clamav*, emsiso*, superanti*, avira*, vba32*, sunbel*, gfi so*, vipre*, microsoft sec*, microsoft ant*, norman*, ikarus*, fortin*, filsec*, k7 com*, ahnlab*, malwareby*, comodo*, symant*, norton*, agnitu*, drweb*, 360*, quick h
接收到Payload之后,也就是上面说的GIF图片!GIF图片的前42个字节会被丢弃,对剩下的进行解密,通过下面的某一种方式将其保存到文件中:
1.CreateFile, WriteFile 2.CreateUrlCacheEntryA(*” http://google.com/”,,,,), CreateFileA, CreateFileMappingA, MapViewOfFile, {loop of moving bytes}, FlushViewOfFile, UnmapViewOfFile
随后再通过regsvr32.exe或者rundll32.exe来执行payload。ESET的分析发现了下面这些payload会被下载,应该还有其他的payload。
Win32/TrojanDownloader.Agent.CFH Win32/TrojanDownloader.Dagozill.B Win32/GenKryptik.KUM Win32/Kryptik.DLIF
从整个过程来看,这个恶意广告的作者还是花了相当多的心思来确保隐蔽性。不过鉴于利用的漏洞都已经被修复,所以将软件升级到最新版,这个看起来非常有趣和恐怖的攻击过程就无法得逞了。
另外,广告网络虽然一直都越来越注重扫描广告中的恶意代码,不过对于AdGholas这种具有隐蔽性的技术仍旧束手无策。
技术分析中就已经提到,这个黑客团队会推两个不同版本的广告,其中一版是普通版,就是为了给广告网络扫描之用的。但在“精心挑选”被攻击对象之后,才推恶意广告。
这样一来,恶意广告就逃脱了广告网络的扫描,恶意广告也就出现在了大型网站上,导致大量设备被攻击。如Segura所说,互联网广告行业现如今注重的主要是速度,而非安全性,威胁的出现是值得那些广告网络注意的。
* 参考来源:ESET,inforisktoday,孙毛毛&欧阳洋葱编译,转载请注明来自FreeBuf.COM