|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。% J) N5 J; F; A+ D3 c9 K
$ Q* _2 `" W/ i% v* r1 _0 t9 S7 O& P9 Z5 A
............................................................................................................................................
4 q1 `* L2 e# o' z
$ @8 u2 }% \- q! y是谁控制了我们的浏览器?7 i# l$ o9 m" E6 A7 n3 H% R
1、现象是什么?! X5 }7 ?, F+ g
) ]$ T* ~4 n- R4 Y' i; p大约从今年年初开始,很多人就发现,在浏览一些网站的时候,+ A [; X$ n7 p4 K
地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。
* p1 z' y! o# j! L H: _) q很多人以为这是网站自己弹出的广告,也就没有在意。
& }9 L- X K% M" m1 J
7 o! S3 G/ ~0 o' k3 Z* c我是属于很在意的那些人之一。5 M0 B4 G" v t* }
. {9 |! k" a/ v1 V! q) e/ V5 f
2、这是怎么回事?
$ a D4 H' j/ O: Q- O5 E- } 2 \5 F2 w: Z; a, w/ R
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),7 v( y' I$ J. A6 w. R
与使用何种操作系统也无关(linux用户也有相关报告)。6 a; O% Y7 i: `1 P V; H7 s
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。
1 ~8 {% T: |5 V4 O" X, W. r
1 I; \/ X0 e# x+ K) N, t那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。3 U6 t; d H* ~( d2 P0 Z# n
* O) n# h, @4 A2 F/ a) Y" J
那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,# L* y5 H2 s' o' a% p! _5 G3 \
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。- X5 p4 ^3 M0 G" Y0 D( f0 z# W# g
2 P* C$ i3 B$ x0 \" h" y& N
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。. ], X/ N6 N) T' M& C* a. ^
/ w) }, A7 r9 ?: Q2 X
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。3 D$ q Y$ y) \4 i* ~* r
直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。
- V W8 b, ~2 ?2 A. T我写了一个脚本。不断访问这个IP,同时记录进出的数据包。
& S4 [0 Q8 g( h! J在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
1 B5 E% L8 O0 @% |3 ?; ]HTTP/1.1 404 Object Not Found$ I* ]* `* G- [5 g( E# w& |
Server: Microsoft-IIS/5.0
/ n; M1 \: @( DDate: Mon, 19 Jul 2004 12:57:37 GMT
6 w$ m! }) S8 I7 |, ?0 zConnection: close
' p# p" R ^9 a& m" ^Content-Type: text/html
( C1 m$ K! ~% b" \- a3 nContent-Length: 111
, F0 ^8 g, q: M$ ]2 A$ |〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉
2 _, k* X- X6 Q: ^1 F〈body〉No web site is configured at this address.〈/body〉〈/html〉" d; Y( q. `* I- [* ~) g- d
$ O$ p6 s, O, V- M7 J8 [$ h但是有两次,返回了这个:
) e9 n: f4 n' r6 C* i/ j/ ?HTTP/1.1 200 OK
- ^1 I' F5 L6 g kContent-type: text/html t' g) m' ^1 H9 U" L
〈html〉
3 j9 _7 R- x9 d( [" t& Y( z〈meta http-equiv='Pragma' content='no-cache'〉 P4 a5 |5 X& ~" y! ]
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉
9 U0 y }' M8 }- V, F! V0 d〈script〉
- N* M6 l# S, I" i4 Nwindow.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');6 ^4 Z2 N5 g$ w2 T( s7 h4 l: z
〈/script〉
, ^& _9 d) M2 Z0 k( ~& [9 v$ l〈head〉. ]# e& {4 @1 q, Y8 Q& P' i9 G* I. G
〈title〉〈/title〉* B' V4 K5 C1 F3 x
〈/head〉
8 B1 O9 h* U% v8 X( H) f7 \〈body〉
+ B8 {# U6 L, x" u〈/body〉
: ^ Z* k, `* \0 v: G〈/html〉$ B4 v# [! ?* @% G, z
" R9 |; m% g; k6 Q, b t* K+ W( h更进一步分析数据包,可知劫持流程如下:: [) ^" a- g$ d* O( ~; S" f8 l
8 O. S& k# H, u, I9 Y3 u
A、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。
4 b+ r# g. T# ~0 j这个设备按照某种规律,对于某些HTTP请求进行特殊处理。* `6 U5 ^! O3 v- D5 _( {# y; u6 F
; {$ m& k, a7 X [7 f" r
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。0 \; w9 P: C8 s( y
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。. n6 D- j. @5 {8 u3 s* `: c( k
而任何正常的服务器都不可能在这么短的时间内做出回应。
1 z4 X3 v; J4 V + q) x. n1 G0 Q* O8 }6 m) j
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
: ^' b0 Y' I; i9 N f- j ( Q# a) m# S$ |( f6 y, H
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,$ G" J6 Y/ G9 Y- T5 u
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。3 I% o9 l' U+ l
# A- w2 q, x4 D; |
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,( C: K+ {2 X- d) }- |
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。
& v1 Y: O' g0 E7 j1 `1 o2 H
. D, q9 i7 z. a, a0 m+ t真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
- J/ ` Z- w; B# ]* T3 {
( N# ]) q3 ~6 E- f5 |9 {3、现在怎么办?+ b" @% F2 m8 i7 I3 b
- |5 D7 B4 {3 b% ?" i' s) {# ~9 P在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
& L% o, s- T" B! d1 R& D4 {
/ O& V4 _! G5 Y( |; q' _" oA、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。4 I$ @0 p: X$ Q2 O8 {( \' N. j
& S! ]. \7 S- c; O3 l# OB、在你自己的个人防火墙上,完全封锁211.147.5.121。
' V$ i: Z( H; E* X
& q9 c% K" b1 x4 u: F# yC、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。" d% I" M: A6 I# N% h
9 \2 J) u1 C& S8 d& h6 Z
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。
/ x4 w, R: F; J% \2 h* v7 B+ e/ n' h今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?
8 X$ f( R: T5 l; j ]9 }4 Z$ T( O我们的HTTP通信完全控制在别人手里。. Z) L3 q: j% D/ \! l' o
1 ^& V+ [0 n9 Z; Z% k- m2 e1 F4、如何把坏家伙揪出来?
& M4 P3 o7 F1 o7 D. [% A4 B
/ H$ q1 g+ J, ^# C7 {9 V9 s5 U如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:9 ^% P! G* }; g ?# z& C' u+ U3 L
R2 i3 C. O0 ]/ ~' }) K
方法1:
0 }4 a' \, ~* r
) ?) I: B4 B7 l ~2 F6 i伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。
3 V1 \+ n9 @/ H) u' D0 M+ W以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
- V/ R7 X3 f Q8 v那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。
; H0 O: k; ]0 Z8 e1 Y) t7 o E( g只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
6 ~; x9 `1 u4 Y- \) p& B" o3 i2 H
* x8 k& H, R0 R" u8 _方法2:/ n7 w& [0 A) s5 e0 o
" A/ A7 P: L& Q假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
8 e$ Q, t' E; e3 H) B# U在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
6 n- d+ L: D+ C t; B编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,: c8 n B6 b5 G+ V4 Q: D' U
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
: U' s) [4 S- o: P5 n K 2 G! ~3 A$ t4 j( J" t* H) [$ z
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
0 L, K# M, A6 X& h4 _; F那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。3 m( @% C3 j* D. ~
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
9 @& \$ `5 `* k# r, e9 E/ A6 N7 uMyIP-12-13-14-15-65-[89]-15-57-A
/ S( X+ c4 |, I2 h2 d/ O. oMyIP-66-67-68-69-85-[89]-45-68-84-52-44-B" l! ?: |4 L4 F9 k Z* a0 |; [
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C" T3 [: b: Q- e0 f9 w
MyIP-22-25-29-32-65-45-[89]-58-D
: k- D/ D7 Q b0 ^( J' E 5 s6 o3 N) a7 I7 Q
显然,inject设备极大可能就在“89”所在的机房。/ M4 i. j7 i: q6 [- e
8 J0 v; x# r- w6 N
方法3:. n) }& x" ^- W. m
7 P# a4 E0 u" K2 K @ `( B. T% Q另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下: z$ z9 }2 ? `/ o
inetnum: 211.147.0.0 - 211.147.7.2551 ^# M! i G1 y% x
netname: DYNEGY-COMMUNICATION+ K' V& W) y, L7 g
descr: DYNEGY-COMMUNICATION
5 q4 [9 D& W6 S4 o$ g, y, odescr: CO.LTD9 }. ?( F6 L0 s5 @
descr: BEIJING
0 ?9 i6 d7 R( Wcountry: CN
5 k( x) Y! m1 u A: R) n' _admin-c: PP40-AP5 E$ ]+ l0 n9 u2 D6 {
tech-c: SD76-AP3 ]8 w# t/ y+ ?; g3 y% W
mnt-by: MAINT-CNNIC-AP9 S. J9 g O' d+ g9 }9 C. B2 s* I
changed: [email protected] 20011112
& P, `8 E% V6 e* c/ V" D2 c" `status: ALLOCATED PORTABLE
% v; c( s; y5 d, `" J( e1 S: a9 Gsource: APNIC
6 }/ i1 T# p# s; Tperson: Pang Patrick
& S2 v; h- m3 ~# J# `nic-hdl: PP40-AP
! D; d6 }& j) Q7 n2 O6 Ne-mail: [email protected]& X0 u! p& p: V+ f. A! J9 I
address: Fl./8, South Building, Bridge Mansion, No. 536 f. F- w! j' S
phone: +86-10-63181513# Z5 R, U+ }2 f9 o
fax-no: +86-10-63181597
* \$ A% E5 S% t `9 hcountry: CN* ~( D; N; {% O% s# T$ {; V
changed: [email protected] 20030304
6 f) C+ x2 @; }mnt-by: MAINT-CNNIC-AP- ~8 G7 p Y3 D" T( R( _+ v) a+ x
source: APNIC
7 e2 w7 l& n2 @: W* _person: ShouLan Du
5 N9 z( F; X) H, P; Q6 H* m8 _address: Fl./8, South Building, Bridge Mansion, No. 53
# B7 z. ]; n9 ~6 V+ \9 e2 R- |country: CN0 p& } Z8 P# ], e) j1 S i
phone: +86-010-831600009 d" B. \; f4 f4 P
fax-no: +86-010-831555288 j" r0 H T# g* d! { U
e-mail: [email protected]
h$ B0 E& j- Z" z/ tnic-hdl: SD76-AP% u/ t, q% {8 x1 i
mnt-by: MAINT-CNNIC-AP6 p8 d; o6 B2 E
changed: [email protected] 20020403
8 Q6 _/ P" n9 w% P* t2 u1 Esource: APNIC
S# [+ D" J8 b 7 n' [$ n2 b1 I: b( \
5、我为什么要写这篇文章?: i8 z2 ]3 ]* u
* r. |! y+ a: J9 d
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;" B7 N$ u( i( ]2 K
或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。
6 R) t: F: ~- {, S$ T5 z可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。
+ R2 X) i$ l6 [& j; w6 y5 C事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
8 d/ {1 N! @4 b5 K4 D& R( \但是现在你既然打搅了我的生活,我就不得不说几句了。
" O, `7 T6 [5 M8 v7 I) Q" R! \
1 j2 m; O* V# l1 n6、我是谁?
c5 ]2 B; \4 M) I3 V4 J # o% F, [) W% u' u
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
+ @: Z$ y% _8 |; }2 d' p#!/usr/bin/perl -w9 Q1 Z5 ~# m; O( b7 q% S. |' l
use Digest::MD5 qw(md5 md5_hex md5_base64);
* D' K# W! J; N2 y @& D! i$name = 'MyName';
3 E2 r8 P* x) i/ F! a, `/ x$ n! @0 @$count = MyCount;% ]! G i) E' L6 f; V
for ($i=0; $i〈$count; $i++)
0 l. P- V) t- T1 `, z* K9 e8 `{
, c3 J8 _3 J: \/ L+ o$name = md5_hex($name);
' t7 @: n, z/ L) s' }" h6 x3 T}
( D S; w- d* {0 a( jprint $name;
* V; `. j4 t- [2 L& C9 ` + S' p+ w2 D1 l1 x3 M/ s0 z8 R( R
以下签名,用于以后可能出现的关于此文的交流:! A0 _, f% M/ B! B" z
1 6631876c2aea042934a5c4aaeabb88e9
. x D* M! D/ i2 a6a607b3bcff63980164d793ff61d170
; y2 l# r: s) e; Z2 `9 M5 q3 6a58e8148eb75ce9c592236ef66a34487 k7 N( c$ W# l5 a% G4 T: Y, e5 Y
4 ded96d29f7b49d0dd3f9d17187356310
6 {% M% }* E, f/ C5 cc603145bb5901a0ec8ec815d83eea66 |