谁动了我的新浪
一.发现问题
最近几个月,我所在的团队一直在开发趋势科技防毒墙--Web安全版(IWSS)。这是一款企业级的防毒产品,简单地讲,企业在网关处部署了这个产品后,整个企业内部的人访问internet都能受到它
的保护。经过几个月的辛勤努力,终于在几天前,我们的产品进入了internal Beta阶段。
按照公司的策略,在把比较重要的产品推向市场之前,都会在我们公司内部网络环境进行实战检验。一来这样可以发现一些平时在试验室环境无法发现的新问题,同时也可以收集一些同事对我们产品的改进建议。通过和公司的IT商量过后,我们决定把IWSS部署在一条网通的出口处,同时把我们楼层的一部分流量导到这个出口上网。经过一番准备,我们很快就把环境准备好了,接下来就是检验我们产品的时候了。通常这个时候都比较轻松,因为我们可以一直到各大门户网站闲逛,还可以美其名曰在测试产品。我一边喝着咖啡,一边悠闲地上着网。这时我打开了一个新浪的主页,看着庞大的新浪网页飞快的显示在浏览器时,暗自感叹,上网速度还真不错,只能用两个字来形容――狂飚。咱在这个项目花的那些心血真是没有白费。可是,就在这时,一件奇怪的事情发生了。刚才完整地显示在浏览器中地新浪主页莫名其妙地换成了一句英文警告:“Error.
Page cannot be displayed. Please contact service provider for more
details”. 我又重新打开浏览器,再试了一次,结果和上次一样出现相同的结果:

图1: 浏览器访问新浪出现奇怪现象
二.寻找问题
我的神经一下子绷紧了,是什么原因新浪网页会出现这种情况。是我们产品自己的问题吗?还是新浪的网站被人攻破并植入malicious
code (A.K.A compromised)?还是真的如提示所说的,service
provider暂时出现了故障?首先,我还是冷静下来分析了一下我们自己的产品。从浏览器的地址栏来看,当前页面是来自一个叫www.adxtn.com的网站。通常,IWSS
只是把客户浏览器请求URL的网页内容从服务器取下来,经过一些安全检查后,返回给浏览器显示。如果新浪网站不能访问,IWSS
应该返回HTTP 503错误,而且浏览器也不会先显示一下完整的页面。IWSS
没有理由返回一个不相干的网站www.adxtn.com。排除了是IWSS的问题后,我觉得极有可能是新浪网站被黑客植入了类似于iFrame的Javascript代码。这个iFrame里面嵌入了一个到www.adxtn.com的链接,当浏览器加载这个iFrame时,它会加载相应的网站上的内容。于是我用编辑器查看新浪网页的源代码,但是无法查找到www.adxtn.com这个字符串。这时,IT也收到了一些同事的反馈,很多同事也遇到了我看到的这个问题,而且不止是新浪网这样,其他的一些门户网站例如雅虎也出现了类似情况。难道这些网站同时被黑客攻击了吗?这种可能性比较小。不管怎么样,先在客户端用抓包工具抓个包来分析一下。这个很简单,很快就重现了问题并把网络包给抓下来了。经过简单的分析,我们发现了浏览器怪异行为的直接原因。新浪首页内嵌了一个链接beacon.sina.com.cn/a.gif,通常情况下,这是一个GIF
图片,但是这次服务器返回了重定向(HTTP 302 rediection)代码。当浏览器收到这个指令,它会重新去访问Location
头(如下图红框所示)中定义的链接。而这个链接恰恰就是我们在浏览器地址栏看到的URL。

图二: 网络抓包显示问题直接原因
那现在问题是为什么新浪的服务器会让我们的浏览器去访问一个行为怪异的其他网站呢?通常的原因有两种:一是beacon.sina.com.cn被黑客劫持了,对一些访问请求返回重定向响应;二是我们代理服务器的DNS服务器有问题。我们很快就排除了第一种可能性,因为据IT部门反映,只有通过网通出口上网的同事遇到这个问题,而使用电信出口上网的同事没有反映过有问题。接下来所有的疑点都集中到了代理服务器所使用的DNS服务器上了。那还迟疑什么,我们赶紧到代理服务器上去把所有的DNS数据包抓下来。正当大家把抓包软件准备好,等着重现问题的时候,我们失望了,因为我们重试了很多次都没有出现问题。于是我发动大家全民上网,希望能重现问题。非常可惜的是,大家虽然都努力地上网,可还是一直没有重现了。于是我只好暂时放弃,但并没有把抓包工具停下来,希望哪天重现的时候能通过这个证实前面的猜测。
三.分析问题
说到这里,可能有人对这个问题的原委还不是很清楚,我干脆画了个图来说明一下,我省略了一些与问题无关的网络设备,例如路由器和防火墙。

图三:重现问题的流程图
下面是问题重现的工作流程
1.
客户端访问beacon.sina.com.cn (这是个嵌在新浪首页的链接)。
2.
IWSS查询DNS服务器,把beacon.sina.com.cn映射到一个IP地址,但是由于DNS问题,IWSS得到一个错误的IP地址,这个地址不是真实的beacon.sina.com.cn服务器地址。
3.
IWSS向一个伪造的服务器发送HTTP请求,并得到响应。可是这是个重定向消息。
4.
IWSS把这个重定向消息转发给客户端浏览器。
5.
浏览器解析这个重定向消息,并按照指令去访问www.adxtn.com。
6.
IWSS转发浏览器的请求到www.adxtn.com,
取回服务器响应后发给浏览器。最终的结果是从www.adxtn.com发回的一串消息把原本正常的新浪首页给替换掉了。在整个过程中,一直没有去连接真正的beacon.sina.com.cn。
四.后记
虽然我们后来一直没有重现这个问题,但这绝对不是一个偶然的事件。通过网络搜索关键字www.adxtn.com
和它返回的那段错误消息,不难发现有很多人曾经遇到过这个问题。除了我们上面发现的DNS问题导致的,还可能是客户端的机器中毒了。网上有人说这个网站就是用这种重定向技术来增加网站的点击率,等点击率上升到比较高的时候再把这个域名以不错的价格卖给不知情的人。但我觉得这是一个交友钓鱼网站,因为它可以根据重定向URL的参数来确定返回错误消息还是直接显示网站内容。在有些情况下,用户访问网站A,有可能会收到www.adxtn.com的内容,如果他对网站A并不了解,他会一直以为他看到的就是网站A。当用户点击这个网页上的每个链接,都可能会为它带来广告收入。
最后,我要感谢我的老婆和刚满三个月的儿子,是她们能让我在踏进家门就把工作的疲劳忘的一干二净。当然,还有感谢整个IWSS
team的所有同事,他们让我觉得工作也是件享受的事情。
----SZ
加载中,请稍候......