1、現象是什麼?
大約從今年年初開始,很多人就發現,在浏覽一些網站的時候,地址欄的url後面會被莫名其妙地加上“?curtime=xxxxxxxxxx”(x為數字),並且彈出廣告窗口。很多人以為這是網站自己彈出的廣告,也就沒有在意。
我是屬於很在意的那些人之一。
2、這是怎麼回事?
經過測試和分析,我們發現,上述現象與使用何種浏覽器無關(我們測試了各種流行的http客戶端),與使用何種操作系統也無關(linux用戶也有相關報告)。我對出現該現象的IE浏覽器進程進行了跟蹤調試,沒有發現任何異常。可以斷定,並不是系統被安裝了adware或者spyware。
那麼是不是那些網站自己做的呢?後來發現,訪問我們自己管理的網站時也出現了這種情況,排除了這個可能。
那麼剩下唯一的可能就是:有人在某個或某幾個關鍵網絡節點上安裝了inject設備,劫持了我們的HTTP會話——我實在是不願相信這個答案,這個無恥、龌龊的答案。
偉大的謝洛克·福爾摩斯說過:當其他可能都被排除之後,剩下的,即使再怎麼不可思議,也一定是答案。
為了驗證這個想法,我選擇了一個曾經出現過上述現象的網站附近網段的某個IP。直接訪問這個IP的HTTP服務,正常情況下是沒有頁面的,應該返回 404錯誤。我寫了一個腳本。不斷訪問這個IP,同時記錄進出的數據包。在訪問進行了120次的時候,結束請求,查看數據。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〉
但是有兩次,返回了這個:
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〉
更進一步分析數據包,可知劫持流程如下:
A、在某個骨干路由器的邊上,躺著一台旁路的設備,監聽所有流過的HTTP會話。這個設備按照某種規律,對於某些HTTP請求進行特殊處理。
B、當一個不幸的HTTP請求流過,這個設備根據該請求的seq和ack,把早已准備好的數據作為回應包,發送給客戶端。這個過程是非常快的。我們的 HTTP請求發出之後,僅過了0.008秒,就收到了上面的回應。而任何正常的服務器都不可能在這麼短的時間內做出回應。
C、因為seq和ack已經被偽造的回應用掉了,所以,真正的服務器端數據過來的時候,會被當作錯誤的報文而不被接受。
D、浏覽器會根據〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉這一行,重新對你要訪問的URL進行請求,這一次,得到了請求的真正頁面,並且調用window.open函數打開廣告窗口。
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”為關鍵字搜索,出現的基本上是國內網站,這表明,問題出在國內。用於inject的設備插在國內的某個或某幾個大節點上。
真相大白。我們被愚弄了,全中國的網民都成了某些人的賺錢工具。3、現在怎麼辦?
在壞家伙被捉出來之前,我們要想不受這個玩意的騷擾,可以考慮下面的方法:
A、請各單位的網絡管理員,在網絡的邊界設備上,完全封鎖211.147.5.121。
B、在你自己的個人防火牆上,完全封鎖211.147.5.121。
C、如果你的浏覽器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“*”丟到彈出窗口過濾列表中去。
絕不只是廣告那麼簡單,這涉及到我們的選擇,我們的自由,這比垃圾郵件更加骯髒和無恥。今天是廣告,明天就可能在你下載軟件的時候給你加個adware或者加個病毒進去,誰知道呢?我們的HTTP通信完全控制在別人手裡。
4、如何把壞家伙揪出來?
如果你是一個有權力調查和處理這件事的人,從技術上,可以考慮下面的手段:
方法1:
偽造的回應數據中並沒有處理TTL,也就是說,我們得到的回應數據中TTL是和inject設備位置相關的。以我收到的數據包為例,真實的服務器端回應 TTL是107,偽造的回應TTL是53。那麼,從我們這裡到被請求的服務器之間經過了21(128-107)個節點,從我們這裡到inject設備經過了11(64-53)個節點。只需要traceroute一下請求的服務器,得到路由回溯,往外數第11個節點就是安插inject設備的地方!
方法2:
假如壞家伙也看到了這篇文章,修改了TTL,我們仍然有辦法。在google上以下面這些關鍵字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量訪問時會被inject的網址。編寫腳本反復訪問這些網址,驗證從你的ip訪問過去是否會被 inject.將確實會被inject的結果搜集起來,在不同的網絡接入點上挨個用traceroute工具進行路由回溯。分析回溯的結果。
上面我們已經說明了,壞家伙是在某個或者某些重要節點上安插了inject設備,那麼這個節點必然在被inject的那些網址到我們的IP之間的某個位置上。例如有A、B、C、D四個被inject到的網站,從四個地方進行路由回溯的結果如下:
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:
另一方面,可以從存放廣告業面的211.147.5.121這個IP入手,whois查詢結果如下:
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: [email protected] 20011112
status: ALLOCATED PORTABLE
source: APNIC
person: Pang Patrick
nic-hdl: PP40-AP
e-mail: [email protected]
address: Fl./8, South Building, Bridge Mansion, No. 53
phone: 86-10-63181513
fax-no: 86-10-63181597
country: CN
changed: [email protected] 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: [email protected]
nic-hdl: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: [email protected] 20020403
source: APNIC
5、我為什麼要寫這篇文章?
新浪為我提供桃色新聞,我順便看看新浪的廣告,這是天經地義的;或者我安裝某某網站的廣告條,某某網站付給我錢,這也是天經地義的。可是這個 211.147.5.121既不給我提供桃色新聞,又不給錢,卻強迫我看廣告,這就嚴重傷害了我脆弱而幼小的心靈。事實上,你可以敲詐克林斯·潘,強奸克裡奧·佩德拉,咬死王陽明,挖成吉思汗墓,我都不會計較,但是現在你既然打攪了我的生活,我就不得不說幾句了。
6、我是誰?
如果你知道MyName,,又知道MyCount的話,那麼,用下面這段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;
以下簽名,用於以後可能出現的關於此文的交流:
1 6631876c2aea042934a5c4aaeabb88e9
2 a6a607b3bcff63980164d793ff61d170
3 6a58e8148eb75ce9c592236ef66a3448
4 ded96d29f7b49d0dd3f9d17187356310
5 cc603145bb5901a0ec8ec815d83eea66