在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。
! h, c; m. P, F# b! E! I. y4 q: B( O2 |* M4 R1 z5 J
$ i! ]4 e; X* |8 ^! N, m1 E
............................................................................................................................................7 r3 a9 y R% v5 M; `, q
8 `$ h5 \" Y4 \
是谁控制了我们的浏览器?
' w4 S! a; D8 d, B6 x1、现象是什么?3 X; q% c+ Y4 \3 t2 M- v: [+ H
, r1 O2 a) ^( ^, x. q大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
5 i# M" }. K& U- Z' q+ n地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。
) Z) _$ E& l" I1 M& j很多人以为这是网站自己弹出的广告,也就没有在意。
, J3 ^9 I& N y! x
8 y* Q5 l* y& g' B我是属于很在意的那些人之一。
9 ^- Z" z- s; Y: ~% d, j
( z+ v! y% B( g' W) S0 E$ I) y; d2、这是怎么回事?- M2 {9 D) B t; `2 [( W' u
9 I# D$ z# @& v
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),9 J' G9 o W( S- p6 V
与使用何种操作系统也无关(linux用户也有相关报告)。! W" T, x7 }( D9 f6 S1 n/ R3 B/ G
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。
" N* Y$ |4 F6 k. g0 u: L8 O k9 T/ S
/ D' [9 ?" Y% s) u# A那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。7 P7 _; E8 T$ C* x( r# t
/ ^3 z8 b7 }9 |* }" J4 N. b那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,
" {- ]( X1 Y' f2 T劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
8 t- F: _* U+ w* l" H( V
5 k }& ^& h" L# n伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。
; {6 T2 s9 C8 p; X
8 p; P2 h0 q* j7 A7 [3 J4 W为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。
0 _* Q7 A$ R1 M( h0 @) P4 b1 R直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。6 N% P6 u ~( t+ T1 e0 d2 U
我写了一个脚本。不断访问这个IP,同时记录进出的数据包。* ~( _7 e. y) ~9 b7 J8 r; G
在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
: a& H! `% |; g: IHTTP/1.1 404 Object Not Found; h, J) n* \) G8 L6 b
Server: Microsoft-IIS/5.0
9 Q" i5 u+ ~8 f! t: wDate: Mon, 19 Jul 2004 12:57:37 GMT
1 c: o1 h" j9 } b LConnection: close
3 A! B5 S7 b! d$ P: K( X8 HContent-Type: text/html. \' ^2 R- e! f K1 L( R1 H
Content-Length: 111
( m7 o7 }* X- |〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉
7 A7 Z* R" E- ^+ m4 T! R〈body〉No web site is configured at this address.〈/body〉〈/html〉5 |( V7 M/ \0 D, k( Y, D5 c% L
: P, _( _( O `4 z) ~ I但是有两次,返回了这个:
3 P: k0 j6 v) b4 p/ U9 Q8 v8 ?HTTP/1.1 200 OK
% e/ L0 \: P5 F, yContent-type: text/html2 l6 w+ q' G8 |5 m( c7 y0 C
〈html〉1 t( g. Y* o2 j% N1 ^
〈meta http-equiv='Pragma' content='no-cache'〉9 [. X5 c& e. V# a0 T( o1 K! j
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉 I9 F. v4 l. O! n/ w+ Y7 m; r
〈script〉
% v# A+ G3 x6 T8 K1 fwindow.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
0 j* i& G# v1 W" W6 w( M% K, l1 j〈/script〉
: m) ~; E! z4 u) c5 y〈head〉
& x( z9 P5 e3 c5 x4 Y( `0 r〈title〉〈/title〉
' v" A, `; }1 T: i8 \9 \. l' p( [〈/head〉" v/ ~4 p0 r# \$ q
〈body〉. y6 [4 d a+ v, j( c' ?
〈/body〉
# a$ M4 P7 {& ?. |% O% J/ Z〈/html〉
/ U! W. [5 [& T* M# {/ }) e
. y/ e: J8 @$ @更进一步分析数据包,可知劫持流程如下:9 H, r% E9 u" r8 t' c8 L
# J7 ^3 q" l7 D/ MA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。2 M7 z9 \# ^) C4 Y
这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
/ w5 p% z& k0 @7 k9 ?, X" I- a
: C8 J0 x% J$ L* f4 gB、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。
: a) A( W& g$ [3 I( _- j这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。
, h5 o: h& p0 {( @而任何正常的服务器都不可能在这么短的时间内做出回应。 V/ e! T! B2 n8 s% E) ?+ e8 g0 @2 P' k
( H& B5 ?2 L+ T1 T
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
. @, S2 i) X" B% C* ]# k) ] 0 b8 O9 @$ f2 M
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,4 y; u% ^- J# l+ b
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。
' D5 A# M" `. t6 w% I6 W% V 2 A- n, c5 W& i% K
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,
2 |- X/ P( a- S- D5 ]这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。
7 S" X& y$ P' b- ~7 t
4 D0 H* @, r/ @- x真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
% W1 }1 b: R" J+ u: T8 E. N 2 V' q, z8 x# O; g1 K5 s
3、现在怎么办?8 o( c% M% J- b: \% f( J
f* N# M: O- L: ~4 M) F: S在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
9 c5 R: t# z: P' d ) {" L" g9 z; @0 i0 X# I0 a. `
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。, L1 L3 Z5 u' j* Y1 V& k) A/ V
" Q4 H' {' s+ y4 A8 q6 l5 rB、在你自己的个人防火墙上,完全封锁211.147.5.121。
7 y; c1 u1 g- U
) E9 c8 k: O8 y8 _9 _3 \( `: ]C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
L8 ], W* M$ U8 \7 P$ _ ; g9 s* y, w' u! ?# }9 s3 \
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。 w/ s. j+ u. `5 V/ C6 s9 P
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?) G) w W- H% ^- g# ^; R' M
我们的HTTP通信完全控制在别人手里。
! V) r9 _; N+ Q0 A
" z' {+ C: ^' i, a( H4、如何把坏家伙揪出来?# j, Z; {& V/ U H
2 a. B E8 j" @9 X如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
3 k6 y& o+ \% h7 H4 ^) W( P0 U* _ : y z' C r- C7 o! @& ^: s+ W
方法1:+ K. E8 m, f" I8 r k& W O
3 }; b0 M1 u# v5 i
伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。
* g6 N8 q# l( r以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
5 [9 D8 P, Z/ Q( B那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。7 x- }1 t; Z2 Z8 `
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
1 O1 U3 u7 K0 k/ X ( X, D0 l! g4 d$ F. P, F" n; r, c- u, k
方法2:+ L# ]* Y" v0 A- c& Z2 C
; X+ h! O) Z! _& M假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
- c& K" `; t1 r' k# i在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。1 f* Q. r- ~1 s/ D8 u w
编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,4 u' T% R+ d$ D$ ]3 \( D6 P
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
+ J/ C3 V9 u3 N: C( g/ S/ K 6 N2 T3 G* C3 S; l
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
; n+ V# d3 M# c* q4 ?/ @8 l那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。; E6 x3 O/ E4 \) Q ]
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
1 k- ? M; s) Y) K1 JMyIP-12-13-14-15-65-[89]-15-57-A
* @) I4 y0 v" S5 s) ]% I6 X. Z/ _MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
3 t+ P+ [* O% u% d) t! [# MMyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C5 w- z6 a7 b- e; O
MyIP-22-25-29-32-65-45-[89]-58-D/ a' Z) N2 x5 Z( b* k
! M7 P$ _; {, ?- R
显然,inject设备极大可能就在“89”所在的机房。
$ t/ @, Z! G& l3 U ( e9 w- Y0 t D& I+ A+ G
方法3:
# ^4 g* |4 ]+ {) J+ B5 d$ T
' V F$ e9 D: a) k7 ]% m7 v" [另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
# s+ R+ J8 M! c1 ^# c7 Y) Ninetnum: 211.147.0.0 - 211.147.7.255) I! t f, l' d4 }8 c
netname: DYNEGY-COMMUNICATION
. O$ n! B" n- f8 ~4 p% Ndescr: DYNEGY-COMMUNICATION
5 O% W' |4 y f& l: c! \. zdescr: CO.LTD
]! g7 d0 L) X/ C- e7 s8 {descr: BEIJING2 [: k8 L7 f$ I2 N
country: CN A0 A; i* v( e( I8 c! \4 G$ t
admin-c: PP40-AP5 c" s; s$ o2 k- S
tech-c: SD76-AP( @8 H2 c/ G) {& _* Z8 d" ?
mnt-by: MAINT-CNNIC-AP
+ J p6 A/ J, C% Mchanged: [email protected] 200111127 U* y. [/ a* w7 L: P9 i6 g5 e
status: ALLOCATED PORTABLE
% F$ A: p! R( U. b7 T8 C0 Nsource: APNIC7 N6 f: Z9 L4 Q; y; K! s
person: Pang Patrick# I+ J6 _" q4 u. [6 Y2 {: {
nic-hdl: PP40-AP) @! L: J, P. v/ Q3 H/ b
e-mail: [email protected]
0 }5 z) J! m$ F7 p5 z4 \address: Fl./8, South Building, Bridge Mansion, No. 53& r9 B8 I- }7 R, g! J. A/ D# S
phone: +86-10-63181513
" S: z2 Y7 \' z: N6 Tfax-no: +86-10-63181597+ `; b. p1 ~( }8 ~5 }; ?2 c. x" v
country: CN
2 a! d. e+ O2 v0 h9 }6 y$ r4 l3 vchanged: [email protected] 20030304( F/ s( V" T0 o7 D
mnt-by: MAINT-CNNIC-AP
% r. E' V h, L# k# V' c4 Isource: APNIC
2 C: M- U% V7 yperson: ShouLan Du, d3 J0 G4 Z( t# Y$ g7 u
address: Fl./8, South Building, Bridge Mansion, No. 53
7 E& d8 v- z0 C, W& xcountry: CN
/ M% q, ?! Y9 w* @& F3 qphone: +86-010-83160000
6 o* ?3 O9 u, [) X% ]5 Wfax-no: +86-010-83155528/ p, j, m4 u/ e1 ]7 Q: h
e-mail: [email protected]$ s, b8 s' \% X% D- h& @: S3 w
nic-hdl: SD76-AP8 ?, d6 l8 H7 q1 g' c% }5 }
mnt-by: MAINT-CNNIC-AP
* \+ K# s9 a, R8 `changed: [email protected] 20020403* N Y. V0 h2 S/ z; Z9 |' o- E* {4 z
source: APNIC
r5 Y0 |4 a, N1 v2 s/ g9 ? ' T$ X9 U4 V; r5 W% k' L/ a
5、我为什么要写这篇文章?/ Z4 h, H8 b* k$ r4 e+ @6 t! ^
" p1 }5 ?" A- [
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的; T5 @: @" y3 T1 w
或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。9 o% c P. M K: j
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。
+ }4 F" O1 W. V事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,9 M# ^) `: b" y9 O& w- v- B( E2 u
但是现在你既然打搅了我的生活,我就不得不说几句了。" ?+ E4 d: ], b* ]+ @& ]
- s* [; i6 _+ Z/ U: O; {( F' z6、我是谁?
5 f0 @2 d' H6 i# N& M & P' D+ w3 E+ ~, Q. u9 \- k6 ~$ j1 m/ S
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。! x: h2 H+ n* e$ @4 \
#!/usr/bin/perl -w
6 G9 V: l% P, d- luse Digest::MD5 qw(md5 md5_hex md5_base64);6 q& ^8 |! h: y0 U! ^
$name = 'MyName';) y$ }4 G/ Q( _2 r8 @
$count = MyCount;2 A5 u3 B' a- G
for ($i=0; $i〈$count; $i++)$ Y' i6 C7 w% |/ m: H' ~3 ?- g
{+ z* [* z* [1 F3 f. @
$name = md5_hex($name);
2 m3 _6 X# [) W0 ^}
7 B1 j2 e! O5 F: w, b# m2 rprint $name;
) v+ A2 |9 I6 t2 \ ( D. A3 j9 \* m
以下签名,用于以后可能出现的关于此文的交流:
% r# V% n. U @. c1 6631876c2aea042934a5c4aaeabb88e9) v$ m# a) e7 ~
2 a6a607b3bcff63980164d793ff61d170$ P3 U# b0 x7 r \# @; T! ~* a; W9 e
3 6a58e8148eb75ce9c592236ef66a3448
, T' v X% r8 a, E/ H. n& I4 ded96d29f7b49d0dd3f9d17187356310
9 H4 V" V @; ]5 ?( @5 cc603145bb5901a0ec8ec815d83eea66 |