關於部落格
月光的BLOG
  • 67053

    累積人氣

  • 0

    今日人氣

    0

    追蹤人氣

誰控制了我們的瀏覽器?

  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,可以把“http://211.147.5.121/*”丟到彈出窗口過濾列表中去。   絕不衹是廣告那麽簡單,這涉及到我們的選擇,我們的自由,這比垃圾郵件更加骯臟和無恥。今天是廣告,明天就可能在你下載軟件的時候給你加個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: 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、我為什麽要寫這篇文章?   新浪為我提供桃色新聞,我順便看看新浪的廣告,這是天經地義的;或者我安裝某某網站的廣告條,某某網站付給我錢,這也是天經地義的。可是這個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   注:本文為轉載,作者不詳,發布日期為:2004.7.20。
相簿設定
標籤設定
相簿狀態