萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> 是誰控制了我們的浏覽器?

是誰控制了我們的浏覽器?

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

copyright © 萬盛學電腦網 all rights reserved