旅店里的无线网络中的恶意脚本注入

贾斯汀·瓦特(Justin Watt)在旅店里通过旅店提供的无线服务查看自己的博客网站,他发现有个异常的东西,一个黑颜色的横条出现在了页面的顶部,正常情况是应该没有的。有趣,贾斯汀想可能是最近的Firefox更新改变了CSS的影响渲染效果。 

红颜色圈住的是那条奇怪的横条

红颜色圈住的是那条奇怪的横条

贾斯汀想这并不是什么大事,除非是网页被黑客篡改了(有人获取了网站主机的帐号,在每个PHP文件里都加入一段base64加密过的代码),于是他立即决定查看一下页面源代码。事实证明,在 <head>标记间出现了一些陌生的CSS和Javascript代码:

<style type="text/css">#rxgheader{  visibility:hidden;  color:#111;  background:#ffffff;  text-align:center;  border-bottom:1px solid #666;  z-index:10000;  position:fixed;  width:100%;  top:0;}#rxgleftbar{  visibility:hidden;  color:#111;  background:#fff;  border-right:1px solid #666;  z-index:10000;  position:fixed;  height:100%;  left:0;}#rxgrightbar{  visibility:hidden;  color:#111;  background:#fff;  border-left:1px solid #666;  z-index:10000;  position:fixed;  height:100%;  right:0;}#rxgfooter{  visibility:hidden;  color:#111;  background:#ffffff;  text-align:center;  border-top:1px solid #666;  z-index:10000;  position:fixed;  width:100%;  bottom:0;}#rxgcontent{}</style><script language="JavaScript" type="text/javascript">function checkVisible() {    var footer, header, leftbar, rightbar, content;    if (document.all) {        footer = document.all.rxgfooter;        header = document.all.rxgheader;        leftbar = document.all.rxgleftbar;        rightbar = document.all.rxgrightbar;        content = document.all.rxgcontent;    } else if (document.getElementById) {        footer = document.getElementById('rxgfooter');        header = document.getElementById('rxgheader');        leftbar = document.getElementById('rxgleftbar');        rightbar = document.getElementById('rxgrightbar');        content = document.getElementById('rxgcontent');    }    if (footer) {        if (footer.offsetWidth > 600) {            footer.style.visibility = 'visible';            content.style.paddingBottom = (footer.offsetHeight + 4) + "px";        }    }    if (header) {        if (header.offsetWidth > 600) {            header.style.visibility = 'visible';            content.style.paddingTop = (header.offsetHeight + 4) + "px";        }    }    if (leftbar) {        if (leftbar.offsetHeight > 400) {            leftbar.style.visibility = 'visible';            content.style.paddingLeft = (leftbar.offsetWidth + 4) + "px";        }    }    if (rightbar) {        if (rightbar.offsetHeight > 400) {            rightbar.style.visibility = 'visible';            content.style.paddingRight = (rightbar.offsetWidth + 4) + "px";        }    }}</script>

并在<body>标记后有下面的Javascript代码:

<div id="rxgheader"><script type='text/javascript'>var advnIsAdProviders = true;var advnIsPersistCookie = false;var mCustomerId = 44;var advnIsHideImmediately = false;var mDelayLoad = 1000;var advnAdRotationDelay = 30000;var jsUrl = 'http://adsmws.cloudapp.net/user/advnads20.js';function addScript(jsUrl) {    var AdvnScript = document.createElement('script');    AdvnScript.setAttribute('src', jsUrl);    AdvnScript.setAttribute('type', 'text/javascript');    document.body.appendChild(AdvnScript);}setTimeout('addScript(jsUrl)', 50);</script><div id = "rxgcontent"><script language = "JavaScript" type = "text/javascript">checkVisible();</script>

给不懂编程的读者提示一下,上面代码中最需要注意的是CSS里有“rxg”前缀的语句,还有这个指向外部的非常可以的Javasript文件:http://adsmws.cloudapp.net/user/advnads20.js。他怀疑“RXG”应该是某种病毒的名称,但通过谷歌搜索后,一无所获。

他立即用sshed登陆到博客服务器上用 svn diff 检查一些重要的PHP文件。没有任何改动的迹象。这就奇怪了,源文件是没有问题的。他于是进入了 Stephanie的博客,发现他的博客也存在同样的问题。但他们两个的博客是在同一帐户下的。他又检查了 Andre的博客——这个博客是放在TypePad服务器上的,同样,没有幸免。他想到,应该是在他的计算机跟网络连接的过程中,有人在网络传输的每个页面里注入了JavaScript。

他研究了一下那个advnads20.js,发现这个脚本功能只是在页面上插入一些广告。

难道旅店的wifi网络被人黑了?或者是旅店的网络提供商特意为之?这个问题贾斯汀没有想明白,于是写了一篇博客描述此事情。

很快,贾斯汀就在他的这篇博客的评论中找到了答案,有人读者告诉他,“RXG”是Revenue eXtraction Gateway的缩写,这是一种 RG Nets公司生产的无线热点网关产品。

rxg网关

原来如此,这家旅店的无线网络通过这种路由器给每个旅客所浏览的网页中都嵌入了这种JavaScript。而提供这家旅店网络服务的公司叫做Hotel Internet Services,很有可能,贾斯汀想,这家旅店也未必知道发生了什么时,他只是觉得不平,一晚368美元的房价,还受到这种待遇。

在这种路由器的厂商的官方主页上有个演示视频:

 

 

视频中催人入睡的机器人般的声音说的是:

这个视频演示的是RG Nets公司的Revenue eXtraction网关产品的HTML网页加载重写功能。用户在浏览网页时使用浏览器通过Revenue eXtraction网关连接到互联网。用户使用的是一个干净的IE7,没有装任何插件或其它软件。所有的网页重写都是通过RXG网关即时完成的。RXG网关被配置成重写所有通过此网关的web网页,在每个页面上都嵌入一个宝马S1000RR的广告条。这个宝马S1000RR广告条可以放置到页面的顶部,底部,左边,右边。除此之外,多个广告还可以组合到一起轮换着出现,当然,这些广告可以链向任何一个你想要的网站。就像你看到的,所有的网页上都嵌入了广告,保证了这些广告的冲击力。RG Nets公司的RXG产品的网页加载重写特征是一个强大的工具,能够广泛的运用到互联网市场推广的各种应用中。

贾斯汀的这篇博格在网上受到了热烈的讨论,这家旅馆的负责人也注意到了,他向贾斯汀来信表示,他们已经就此事做了调查,并向他们的网络服务商提出了抗议,网络服务商同意不再向这家旅店的网络服务中注入广告。但旅店负责人也说明,这种广告行为在所有的网络服务商中相当的普遍。

补充
本人最近宽带到期,又重新申请了一个长城宽带,没想到,上网时,不论访问什么网站,右下角经常会蹦出一个广告,起初以为中了什么病毒软件,后来发现,原来是宽带服务商在作恶,它们把你的访问的网站用一个Iframe包起来,在外层的框架内放置它们的广告,这种事情真让人恶心。在网上查了一下,发现很多人有相同的遭遇,有人建议把dns换了,或把宽带商发布广告的ip给封掉。这些方法总归治标不治本。最好的方法是弃用这家公司的宽带。可是再一查,发现其它的宽带服务商也干这种勾当。真让老百姓没法活了。