1、現象是什么?
大約從今年年初開(kāi)始,很多人就發(fā)現,在瀏覽一些網(wǎng)站的時(shí)候,地址欄的url后面會(huì )被莫名其妙地加上“?curtime=xxxxxxxxxx”(x為數字),并且彈出廣告窗口。很多人以為這是網(wǎng)站自己彈出的廣告,也就沒(méi)有在意。
我是屬于很在意的那些人之一。
2、這是怎么回事?
經(jīng)過(guò)測試和分析,我們發(fā)現,上述現象與使用何種瀏覽器無(wú)關(guān)(我們測試了各種流行的http客戶(hù)端),與使用何種操作系統也無(wú)關(guān)(linux用戶(hù)也有相關(guān)報告)。我對出現該現象的IE瀏覽器進(jìn)程進(jìn)行了跟蹤調試,沒(méi)有發(fā)現任何異常??梢詳喽?,并不是系統被安裝了adware或者spyware。
那么是不是那些網(wǎng)站自己做的呢?后來(lái)發(fā)現,訪(fǎng)問(wèn)我們自己管理的網(wǎng)站時(shí)也出現了這種情況,排除了這個(gè)可能。
那么剩下唯一的可能就是:有人在某個(gè)或某幾個(gè)關(guān)鍵網(wǎng)絡(luò )節點(diǎn)上安裝了inject設備,劫持了我們的HTTP會(huì )話(huà)——我實(shí)在是不愿相信這個(gè)答案,這個(gè)無(wú)恥、齷齪的答案。
偉大的謝洛克·福爾摩斯說(shuō)過(guò):當其他可能都被排除之后,剩下的,即使再怎么不可思議,也一定是答案。
為了驗證這個(gè)想法,我選擇了一個(gè)曾經(jīng)出現過(guò)上述現象的網(wǎng)站附近網(wǎng)段的某個(gè)IP。直接訪(fǎng)問(wèn)這個(gè)IP的HTTP服務(wù),正常情況下是沒(méi)有頁(yè)面的,應該返回404錯誤。我寫(xiě)了一個(gè)腳本,不斷訪(fǎng)問(wèn)這個(gè)IP,同時(shí)記錄進(jìn)出的數據包。在訪(fǎng)問(wèn)進(jìn)行了120次的時(shí)候,結束請求,查看數據。120次請求中,118次返回的都是正常的404錯誤:
HTTP/1.1 404 Object Not Found
Server: Microsoft-IIS/5.0
Date: Mon, 19 Jul 2004 12:57:37 GMT
Connection: close
Content-Type: text/html
Content-Length: 111
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉
〈body〉No web site is configured at this address.〈/body〉〈/html〉
但是有兩次,返回了這個(gè):
HTTP/1.1 200 OK
Content-type: text/html
〈html〉
〈meta http-equiv=‘Pragma‘ content=‘no-cache‘〉
〈meta http-equiv=‘Refresh‘ content=‘0;URL=?curtime=1091231851‘〉
〈script〉
window.open(‘http://211.147.5.121/DXT06-005.htm‘, ‘‘, ‘width=400,height=330‘);
〈/script〉
〈head〉
〈title〉〈/title〉
〈/head〉
〈body〉
〈/body〉
〈/html〉
更進(jìn)一步分析數據包,可知劫持流程如下:
A、在某個(gè)骨干路由器的邊上,躺著(zhù)一臺旁路的設備,監聽(tīng)所有流過(guò)的HTTP會(huì )話(huà)。這個(gè)設備按照某種規律,對于某些HTTP請求進(jìn)行特殊處理。
B、當一個(gè)不幸的HTTP請求流過(guò),這個(gè)設備根據該請求的seq和ack,把早已準備好的數據作為回應包,發(fā)送給客戶(hù)端。這個(gè)過(guò)程是非??斓?,我們的HTTP請求發(fā)出之后,僅過(guò)了0.008秒,就收到了上面的回應。而任何正常的服務(wù)器都不可能在這么短的時(shí)間內做出回應。
C、因為seq和ack已經(jīng)被偽造的回應用掉了,所以,真正的服務(wù)器端數據過(guò)來(lái)的時(shí)候,會(huì )被當作錯誤的報文而不被接受。
D、瀏覽器會(huì )根據〈meta http-equiv=‘Refresh‘ content=‘0;URL=?curtime=1091231851‘〉這一行,重新對你要訪(fǎng)問(wèn)的URL進(jìn)行請求,這一次,得到了請求的真正頁(yè)面,并且調用window.open函數打開(kāi)廣告窗口。
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”為關(guān)鍵字搜索,出現的基本上是國內網(wǎng)站,這表明,問(wèn)題出在國內。用于inject的設備插在國內的某個(gè)或某幾個(gè)大節點(diǎn)上。
真相大白。我們被愚弄了,全中國的網(wǎng)民都成了某些人的賺錢(qián)工具。
3、現在怎么辦?
在壞家伙被捉出來(lái)之前,我們要想不受這個(gè)玩意的騷擾,可以考慮下面的方法:
A、請各單位的網(wǎng)絡(luò )管理員,在網(wǎng)絡(luò )的邊界設備上,完全封鎖211.147.5.121。
B、在你自己的個(gè)人防火墻上,完全封鎖211.147.5.121。
C、如果你的瀏覽器是FireFox、Opera、GreenBrowser、或者M(jìn)yIE,可以把“http://211.147.5.121/*”丟到彈出窗口過(guò)濾列表中去。
絕不只是廣告那么簡(jiǎn)單,這涉及到我們的選擇,我們的自由,這比垃圾郵件更加骯臟和無(wú)恥。今天是廣告,明天就可能在你下載軟件的時(shí)候給你加個(gè)adware或者加個(gè)病毒進(jìn)去,誰(shuí)知道呢?我們的HTTP通信完全控制在別人手里。
4、如何把壞家伙揪出來(lái)?
如果你是一個(gè)有權力調查和處理這件事的人,從技術(shù)上,可以考慮下面的手段:
方法1、
偽造的回應數據中并沒(méi)有處理TTL,也就是說(shuō),我們得到的回應數據中TTL是和inject設備位置相關(guān)的。以我收到的數據包為例,真實(shí)的服務(wù)器端回應TTL是107,偽造的回應TTL是53。那么,從我們這里到被請求的服務(wù)器之間經(jīng)過(guò)了21(128-107)個(gè)節點(diǎn),從我們這里到inject設備經(jīng)過(guò)了11(64-53)個(gè)節點(diǎn)。只需要traceroute一下請求的服務(wù)器,得到路由回溯,往外數第11個(gè)節點(diǎn)就是安插inject設備的地方!
方法2:
假如壞家伙也看到了這篇文章,修改了TTL,我們仍然有辦法。在google上以下面這些關(guān)鍵字搜索:php?curtime,htm?curtime,asp?curtime,可以得到大量訪(fǎng)問(wèn)時(shí)會(huì )被inject的網(wǎng)址。編寫(xiě)腳本反復訪(fǎng)問(wèn)這些網(wǎng)址,驗證從你的ip訪(fǎng)問(wèn)過(guò)去是否會(huì )被inject。將確實(shí)會(huì )被inject的結果搜集起來(lái),在不同的網(wǎng)絡(luò )接入點(diǎn)上挨個(gè)用traceroute工具進(jìn)行路由回溯。分析回溯的結果。
上面我們已經(jīng)說(shuō)明了,壞家伙是在某個(gè)或者某些重要節點(diǎn)上安插了inject設備,那么這個(gè)節點(diǎn)必然在被inject的那些網(wǎng)址到我們的IP之間的某個(gè)位置上。例如有A、B、C、D四個(gè)被inject到的網(wǎng)站,從四個(gè)地方進(jìn)行路由回溯的結果如下:
MyIP-12-13-14-15-65-[89]-15-57-A
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
MyIP-22-25-29-32-65-45-[89]-58-D
顯然,inject設備極大可能就在“89”所在的機房。
方法3:
另一方面,可以從存放廣告業(yè)面的211.147.5.121這個(gè)IP入手,whois查詢(xún)結果如下:
inetnum: 211.147.0.0 - 211.147.7.255
netname: DYNEGY-COMMUNICATION
descr: DYNEGY-COMMUNICATION
descr: CO.LTD
descr: BEIJING
country: CN
admin-c: PP40-AP
tech-c: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: hui_zh@sina.com 20011112
status: ALLOCATED PORTABLE
source: APNIC
person: Pang Patrick
nic-hdl: PP40-AP
e-mail: bill.pang@bj.datadragon.net
address: Fl./8, South Building, Bridge Mansion, No. 53
phone: +86-10-63181513
fax-no: +86-10-63181597
country: CN
changed: ipas@cnnic.net.cn 20030304
mnt-by: MAINT-CNNIC-AP
source: APNIC
person: ShouLan Du
address: Fl./8, South Building, Bridge Mansion, No. 53
country: CN
phone: +86-010-83160000
fax-no: +86-010-83155528
e-mail: dsl327@btamail.net.cn
nic-hdl: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: dsl327@btamail.net.cn 20020403
source: APNIC
5、我為什么要寫(xiě)這篇文章?
新浪為我提供桃色新聞,我順便看看新浪的廣告,這是天經(jīng)地義的;或者我安裝某某網(wǎng)站的廣告條,某某網(wǎng)站付給我錢(qián),這也是天經(jīng)地義的??墒沁@個(gè)211.147.5.121既不給我提供桃色新聞,又不給錢(qián),卻強迫我看廣告,這就嚴重傷害了我脆弱而幼小的心靈。事實(shí)上,你可以敲詐克林斯·潘,強奸克里奧·佩德拉,咬死王陽(yáng)明,挖成吉思汗墓,我都不會(huì )計較,但是現在你既然打攪了我的生活,我就不得不說(shuō)幾句了。
6、我是誰(shuí)?
如果你知道MyName,又知道MyCount的話(huà),那么,用下面這段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
#!/usr/bin/perl -w
use Digest::MD5 qw(md5 md5_hex md5_base64);
$name = ‘MyName‘;
$count = MyCount;
for ($i=0; $i〈$count; $i++)
{
$name = md5_hex($name);
}
print $name;
以下簽名,用于以后可能出現的關(guān)于此文的交流:
1 6631876c2aea042934a5c4aaeabb88e9
2 a6a607b3bcff63980164d793ff61d170
3 6a58e8148eb75ce9c592236ef66a3448
4 ded96d29f7b49d0dd3f9d17187356310
5 cc603145bb5901a0ec8ec815d83eea66
注:本文為轉載,作者不詳,發(fā)布日期為:2004.7.20。

