|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。7 W6 b) j/ J. y, L4 s/ |
) D+ K( }0 {6 E$ n- X, h: o: M
; d1 g) i# h( Q& m. c3 m3 ~............................................................................................................................................1 s% [: ^3 x' W0 S$ U
9 f& u, V7 a* Y1 j: C
是谁控制了我们的浏览器?- }9 z& k! r; d- \( N5 q; T
1、现象是什么?
( c/ p, R, t" h' D* W* V4 { 1 P( y3 R( M; Q
大约从今年年初开始,很多人就发现,在浏览一些网站的时候,. U) A( P% u/ @( _9 J
地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。8 p+ G. b9 z( T$ @7 K8 @
很多人以为这是网站自己弹出的广告,也就没有在意。4 `; d! ^* z( @* \5 W2 U+ N$ C& @
( e& A( F1 b$ e6 m
我是属于很在意的那些人之一。
& J7 r, `" J* U% K & Z* b u! f$ X
2、这是怎么回事?
+ ^. D/ Y6 d1 g. @6 c3 R # ~# |$ R* d- l0 y
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),
8 Z$ M3 ?( a# ^; Q% d8 ]3 Y) Z与使用何种操作系统也无关(linux用户也有相关报告)。- c7 r+ }) i S0 w* r* w! S1 H
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。
6 Y I! c& c9 q1 v& y: r# F & r; k2 J! d8 k/ d) Z P: D5 |
那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。1 U/ L: I& r% q( l0 |+ x
; P; j- l( E y0 J6 e4 b那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,- z& @ t* `3 |& s0 z
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
3 [, y/ [) b3 }5 V& z0 m7 P# \) H1 L - h9 T* A) g: L
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。* q7 ~0 Y& s/ F7 `( A
9 i& E( T( l2 q e% [: T
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。
5 o$ v1 y6 r$ V U4 O8 b3 E5 M直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。
5 f0 h4 ~$ x5 `2 x我写了一个脚本。不断访问这个IP,同时记录进出的数据包。
4 b$ U, } s- v' J: s, S" A2 A( X在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
5 i5 V. ?9 m9 q. p( X1 L! AHTTP/1.1 404 Object Not Found
r) {; A, H3 F7 `9 |4 e. ZServer: Microsoft-IIS/5.0( a1 V8 P5 m6 v( u
Date: Mon, 19 Jul 2004 12:57:37 GMT( O0 a1 ~1 ~9 k/ D0 r9 {: J
Connection: close( a! I, n* s: N1 t0 n! n' M
Content-Type: text/html. U: f$ y. G% ]4 Z% S
Content-Length: 1115 w) W& I1 v; L) p' h8 S
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉9 X& w* B* @! i9 B9 w
〈body〉No web site is configured at this address.〈/body〉〈/html〉( E/ h8 X+ o& w3 W- Z- U; { v5 U
* G0 ^; M7 B0 X8 y0 A% A3 Z8 |
但是有两次,返回了这个:
) l4 ?$ m( }9 MHTTP/1.1 200 OK9 @& F& o+ f4 }2 k/ \* A6 c) u3 f/ m
Content-type: text/html
4 ?3 L8 c4 D; D3 v# F9 L- d; E〈html〉 D5 N: }3 R9 {/ h2 M
〈meta http-equiv='Pragma' content='no-cache'〉: Z2 |4 X- R# {. p2 R m
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉- v5 x* j b+ M) t% E" r
〈script〉
' E) ]) ?2 j+ j- d) v5 Q2 ^4 jwindow.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');) n+ `' w( P6 K8 c; R. i
〈/script〉
- g; X- U, w7 @, r$ l9 I2 O% t0 T〈head〉
0 X! d" \6 ?0 H% X/ b〈title〉〈/title〉4 X5 f. j5 g6 _8 \# ?
〈/head〉
l6 r; m& f) E$ P〈body〉. P \: x; y& V
〈/body〉( [' C; \; n1 ]0 V3 m0 ?+ s! j
〈/html〉
! V9 _" h. e: Q5 G% b, i) r
1 x2 w# Q0 _# j7 R* Q* h更进一步分析数据包,可知劫持流程如下:1 U% p# }* w/ [" l5 G
: b: Q' F7 E; ^: X
A、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。, \8 R- C1 _( [" X. s* H$ F
这个设备按照某种规律,对于某些HTTP请求进行特殊处理。7 w! q" i x' Y! H: j/ P
/ Y0 W0 f+ `6 s; [& T }
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。/ M6 _6 {2 @0 t
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。
* O& K; T, o- b g! g5 ~1 @' O而任何正常的服务器都不可能在这么短的时间内做出回应。
" m2 p* ?, P% t' j
* y {: q$ y# P9 P0 S( l% u! A: P! {C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
8 f/ v: S- c( N 9 H, i3 ~1 d- |8 s+ w
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,* l h" B! G' y& x
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。; I/ h8 B+ j8 P% ]5 T% \
7 i$ K b. b, R9 Z" P0 M" v在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,$ R4 r q7 C; D: P/ j) ]# m& B* D
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。0 Z! n' D8 w& n- |
' {; |4 C' J( h7 Z9 w6 ]
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。 R3 D: K* @ n0 x
. q( P% O- }2 C: u9 C! [8 S3、现在怎么办?
6 n; h. o; g0 U6 K/ L5 T, k # ^% R& s! l( K0 G2 m! S3 F
在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
% }" N! b* T# [" f1 {5 r7 a$ e% [$ Y 7 E" |/ Q9 S) m5 j1 f4 [
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
. v' I0 }" o5 s1 C 5 d! h- c% ]0 y) K
B、在你自己的个人防火墙上,完全封锁211.147.5.121。
7 u- c9 ]* z; q3 U5 t9 W! u
( V- F7 |- [3 ^) X0 E% sC、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。6 K1 }0 N. Z( U* s1 ^; |& c
+ q0 g& i: U1 [0 g( t! ]( n/ {/ C绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。
% O; v, w( ~' T2 A" k今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?( s( U8 ?4 q Z' B% q$ x' L: U2 g
我们的HTTP通信完全控制在别人手里。
' p1 ?! F; {: A/ L , k k' R7 X B2 D# v3 X) ~' H
4、如何把坏家伙揪出来? k$ w5 m6 U2 Z9 h9 l- W% L$ C
" K8 v# z' c) n( a. ]如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
% @; ^/ h; M! p8 l. n
- ?1 R a/ a' J6 P3 n方法1:- B$ v3 O- T" O9 S- o
/ U5 a6 p/ V* D$ u; U; h9 n- n伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。$ p. g1 n) P! M* g: B/ O0 M
以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
7 Y1 U! ?2 M5 y+ @ O5 V. I那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。) v$ O# _$ v' x8 e
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
' a, C0 U7 F% }$ Q4 E + _- Y' u" g2 [2 r
方法2:4 P$ P6 T/ T9 S) h+ F
) N8 r: d9 V2 T假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。9 {+ X0 ]! K j* _0 v" A5 b7 D! A
在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
) d& f3 U5 Y# u编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,
1 ]7 }& F& O' `5 L在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
+ g4 j) {# y5 H2 t) R w
/ [, ~" m1 Y$ X5 I5 B) \上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,4 q% F9 H5 `! ?. Y8 h
那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。( _3 v7 T9 M! z) y1 ?* r
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
% w/ t8 f! d9 I+ D4 a$ qMyIP-12-13-14-15-65-[89]-15-57-A
" o' w, e: w! k& V2 i0 p# XMyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
r5 R- ?2 y7 k) n$ [MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
3 i2 Z1 M' u6 G( p6 _0 pMyIP-22-25-29-32-65-45-[89]-58-D* {' I& w! G# @0 f
3 @- \+ w4 G* S9 l, ~/ J
显然,inject设备极大可能就在“89”所在的机房。" h& D: T9 [# G- e" W
" ^% U! m" J3 n# R方法3:
: V6 P7 p; C" b) z9 B
" @* e O* t5 C另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
8 h! T( X% C* @$ N5 {) v. minetnum: 211.147.0.0 - 211.147.7.255
, d% G: G. a' e8 A0 Z- D! X; Bnetname: DYNEGY-COMMUNICATION
, H4 `8 P( `4 ndescr: DYNEGY-COMMUNICATION5 V' t, V% M8 @* c
descr: CO.LTD
; H- E: H4 S# u. i( p( k0 @descr: BEIJING
" `6 \! [' K1 V l5 f' |9 jcountry: CN" X! \; M. q! B0 ]/ B2 \7 D
admin-c: PP40-AP7 F3 Z% S% o3 e: b6 @
tech-c: SD76-AP
' i' s" y7 H; ^5 K+ i2 a5 C1 Z2 S' ^mnt-by: MAINT-CNNIC-AP6 C: C( a9 W. A o+ v
changed: [email protected] 20011112
8 K0 t( F2 z, {0 I9 _status: ALLOCATED PORTABLE
$ ]. j% p \8 m' b9 Psource: APNIC
b8 x% B5 q! V7 G% t, Bperson: Pang Patrick
\( `$ D. x4 D+ \9 l! [nic-hdl: PP40-AP
' D- [+ M7 {7 r9 C% Ze-mail: [email protected]0 g9 H$ _$ P, ]& Z
address: Fl./8, South Building, Bridge Mansion, No. 53$ d. K* u& i/ u& G+ n$ \
phone: +86-10-63181513
$ ^3 |" C2 B8 f& m+ I. N. pfax-no: +86-10-63181597# |( y( Q. ?( S# W* Y: \9 {
country: CN7 _" \3 x; g, m0 G% Y3 U6 V
changed: [email protected] 200303046 q8 e" ~) F5 G/ A4 }; M; M
mnt-by: MAINT-CNNIC-AP% v; ?6 B, l: d( O8 z% Q# \% F
source: APNIC) n/ s" U X' u* @* g. X0 @) m1 l( d
person: ShouLan Du# G! B" L: I, X2 K+ m9 `( G
address: Fl./8, South Building, Bridge Mansion, No. 53 b2 n# ^/ o" J, A8 A, h
country: CN
) E( q) ]2 y6 m- k8 Y5 {. s7 N- gphone: +86-010-83160000
; e, Q0 \$ V- E8 x% {3 pfax-no: +86-010-83155528
+ { _& n% d0 j, B9 Ie-mail: [email protected]
+ s4 O: F {7 A/ J3 ] ?1 {nic-hdl: SD76-AP" L9 Q/ O# I( `
mnt-by: MAINT-CNNIC-AP; V, a% F% o$ D* E9 Q8 W4 Z
changed: [email protected] 200204035 C- v1 }' O4 l- t. x: C F O- N0 {
source: APNIC
/ W |5 u# k# y# N
7 D! Z/ `" i+ r; r7 n% }5、我为什么要写这篇文章?4 A! u) G9 O3 A: H9 }) d* q# j3 T
8 H& i8 f' V$ L' @
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
' V! A/ H3 g$ e2 T" y, T或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。
# {5 f H8 Q3 E( z$ Y7 u可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。' O7 _: N: g* y" ]0 {4 ~
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,& k& W7 x7 a5 _
但是现在你既然打搅了我的生活,我就不得不说几句了。
# n/ B- P% @4 t$ L. t% W * K5 `* A- A7 i; q: X
6、我是谁?
, G, j' \6 m0 P. e, |8 I" d1 O " t2 v. g& n% o
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
* N& t2 z% @6 g$ z; q \/ a#!/usr/bin/perl -w
2 o/ h( [9 x2 z. C* V. M+ t, b% euse Digest::MD5 qw(md5 md5_hex md5_base64);
* u8 r6 d" S. @9 Z1 s- u( t$name = 'MyName';
3 a: N4 t4 A7 X0 D+ B: m& ?$count = MyCount;
! z; ~& ` F" O$ V1 y% bfor ($i=0; $i〈$count; $i++)( d0 C" D" W2 w8 K
{
, S; Q: e; f( v" I3 [: V! a6 V$name = md5_hex($name);
# x+ Y$ P$ `; S# f; W7 T1 s, _( v}, R5 _9 L4 Q( f0 D) ]+ v
print $name;
9 @' i* H7 q; z, t/ I
3 o8 t/ c' h0 y" j- j以下签名,用于以后可能出现的关于此文的交流:6 k8 r% w0 ]" Y n
1 6631876c2aea042934a5c4aaeabb88e9
/ \ H! q/ J" j0 I" h3 I2 a6a607b3bcff63980164d793ff61d1706 ^! B7 Y# I Q; c( A9 B; P
3 6a58e8148eb75ce9c592236ef66a3448
' W; j& W* G! {7 i6 C4 ded96d29f7b49d0dd3f9d17187356310. @: Y- o8 a, m$ a4 Z
5 cc603145bb5901a0ec8ec815d83eea66 |