在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。
: ^" t5 Z4 D+ t1 z0 N; l2 K
- ]. D+ h( r( h7 h% Q9 V. D
+ d2 v0 J/ i6 @3 f3 x; o5 X............................................................................................................................................
- V# m+ E5 K2 ?, d% F$ c- @: Z5 @7 l" o
是谁控制了我们的浏览器?
5 O, Q$ F) ]6 r1、现象是什么?7 T9 z7 p1 n: q# a# t" V
* e; O$ E5 U& n6 p大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
7 l$ g3 ^* W( h u/ `6 a3 w地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。$ o" i5 w$ z1 U* M
很多人以为这是网站自己弹出的广告,也就没有在意。
2 i: g5 ~, d" F) O+ |. e# f 7 Z. x* o8 y1 v5 j n
我是属于很在意的那些人之一。
. ], E* Q! X7 e; ?/ @/ |! Y
3 I6 q6 b( b1 @$ F' ?2、这是怎么回事?
+ K) x$ L# V8 R; d
# U3 X8 X- x" P0 l. E% X经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),
, a6 V& X, c+ T( R' f. z, @! E与使用何种操作系统也无关(linux用户也有相关报告)。4 d! ^. d" m5 L
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。8 ]+ |: q# }1 \
% I) B6 i2 P: S/ r) f1 W那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。. p" b7 B F/ u4 y* F
+ b4 r0 q- U" h4 f) I( u那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,& e' U. Q R! p9 @3 \ k
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。# F! }0 A; [8 t M
! p# S; t4 D Q
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。% y2 S% Q" E" j# n. _
& J- q& v8 t, @
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。( e* K# c* G0 R3 j w
直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。! Z! D* a1 v/ c9 Z+ p3 r/ K! b0 l$ L
我写了一个脚本。不断访问这个IP,同时记录进出的数据包。1 H- Q9 t r! b1 w+ E& q
在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
- t# ]% V1 Y+ j2 vHTTP/1.1 404 Object Not Found$ X3 M* U4 F1 I* r) ^6 A
Server: Microsoft-IIS/5.0
# C8 d8 t4 f7 h4 GDate: Mon, 19 Jul 2004 12:57:37 GMT
r. _9 z+ e$ ^( f- \Connection: close
& \: b" L9 X7 P* ]5 q* `Content-Type: text/html
) ^$ K0 w8 N' F# q2 h4 C- DContent-Length: 111! O) X3 Y( G/ k
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉3 r- Y0 c0 L7 A$ p4 K8 s9 P
〈body〉No web site is configured at this address.〈/body〉〈/html〉
) w: k/ g3 M5 I V) y3 D
$ Q7 H" f$ a% Y/ Z# [. v7 g* j' H但是有两次,返回了这个:4 O- Q M, }5 L$ ^% y) N
HTTP/1.1 200 OK% \+ x t1 i; h. I! s% V' Z) G
Content-type: text/html
8 `6 P( h' ~9 x〈html〉
V# e: C7 i! Y, q I- ^〈meta http-equiv='Pragma' content='no-cache'〉/ ^+ W- |4 |- @% ^6 w. ~
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉% K6 @5 Y p+ @' S# N5 F& i
〈script〉8 a( p) G1 U5 H* \5 ^' l
window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');! Z2 o1 M; I/ _* @: N8 U
〈/script〉9 b A. _; ]! [/ i% ^6 Y5 z
〈head〉
+ s! K9 W2 l% f( g) g ?〈title〉〈/title〉
7 a6 Y( n# p* ~〈/head〉. K! R+ h# L( | U
〈body〉' i2 P3 e% z1 |0 @, c7 m
〈/body〉, ^' e; o( h3 k& K6 [
〈/html〉
: c2 `& q9 c6 F8 H 3 e8 g- h( b9 x2 N+ X4 ^ Q
更进一步分析数据包,可知劫持流程如下:
0 f+ q5 T+ z9 J# E( s: h3 J
( s$ c/ K2 [5 \% G5 b& e nA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。% p6 T7 p! t) N" ?: d
这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
: z% b! L: A9 t7 v
0 `( Y( `5 ]7 E8 l3 x8 KB、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。* q) ]) R2 t+ n$ r8 W- u
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。2 B# ?3 d" A5 U; d3 G+ U3 B+ e
而任何正常的服务器都不可能在这么短的时间内做出回应。
( u$ l) @; G/ ]: ] % I) y$ d: H6 |6 R% @
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。, s1 I# c' C% R
+ ]) t2 a$ t, E% q5 AD、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,
: L6 s# B3 y5 \+ T+ c5 g重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。2 I$ s9 Q7 c) X& ^; G# E
/ r; a7 `3 [$ `
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,/ K# E/ k" T: X$ Q7 m' L
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。- E x4 ^$ W7 _3 v
& S4 a) B1 j- n真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
/ L+ a9 i9 X8 Y# D u- c8 h; p 3 X- r( N" R( y1 y* z
3、现在怎么办?. Q* h& i& H4 E$ X$ Q! y
0 D/ {# T. C; {# N$ N5 p9 d/ ?
在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
' j! J3 a- T/ M7 V ?( B7 O* s1 Q' K& n * q- b! w: H5 g3 r. s
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。# H" ]$ l3 e+ q* @
/ F* K% Y/ X0 Q5 w% _6 c, s
B、在你自己的个人防火墙上,完全封锁211.147.5.121。
- ~3 h6 v! @8 p q8 e0 X
3 i# ~3 n1 c. b& sC、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
m$ ]5 S! z" \" {2 l
$ U! t5 D, g8 H& [3 ^4 d绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。- r9 ?& a2 G* L& ~
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?
; L0 w0 A$ {" J/ o' W Z1 \我们的HTTP通信完全控制在别人手里。8 w( v7 l. f- W# }4 j: q# S+ V
: g4 y9 i4 @0 U t8 S3 X. ~( ]
4、如何把坏家伙揪出来?
" B. C4 R( H: j. o
- c1 t7 h5 K$ b' `% e如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:) {) W! u% Z) O% g6 X K
; z( e, r. X: e4 M8 d% H) ?
方法1:* h. E$ I3 Y% G
) `+ G; a! t4 x- B伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。
' {3 [" P8 s, ^$ l1 o4 z; {以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
0 M; s# e3 H. q P2 D* d7 r那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。" z7 ~, l) E ` M
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
1 q9 z) [0 [. q1 J - I. ~- B1 R9 A2 E
方法2:" m! j5 ]( U4 I1 f' c
u* C) x. g5 l+ K8 @# p假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
; w% t, C8 ?! b' ~- T9 H" [在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
1 B" o" B) F: ^3 O编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,
* N% E) O+ c& m3 F5 e& {在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。9 ?6 b) j& O' A' T; d/ w7 g
* @; x. R2 C3 Z1 Q; a" @1 ^2 ?上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
9 t- \( M7 j7 @9 z那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。
: \! k$ J% ?. x5 U4 B例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
* _! u: B/ j; iMyIP-12-13-14-15-65-[89]-15-57-A
( r W7 T4 W% A0 p6 \( L( a1 cMyIP-66-67-68-69-85-[89]-45-68-84-52-44-B/ Z: J# I. J0 r* w' q
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
: ^4 m) s8 h1 {+ D# H4 aMyIP-22-25-29-32-65-45-[89]-58-D
; U0 c6 j5 S) J4 L# { ; w: M+ \- E5 B: _7 h8 A8 f
显然,inject设备极大可能就在“89”所在的机房。8 I$ ]2 Z/ ^# |" i. R
- B2 H. f& e5 p2 \
方法3:( L" K. n+ L4 |$ j2 \2 ?
4 E; S- C, b$ E4 j/ J0 {另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:- i4 S8 G/ H! c
inetnum: 211.147.0.0 - 211.147.7.255
# A* ^ K6 | r/ [$ [8 Pnetname: DYNEGY-COMMUNICATION
6 [3 H! O* ] Ldescr: DYNEGY-COMMUNICATION W/ |2 H! C( u% J' B
descr: CO.LTD
2 a* }2 _9 A* g0 S, H/ Y3 `" B' Vdescr: BEIJING
' y1 i e4 Q" f* s* dcountry: CN8 Q8 y- d% T0 Q: C5 x
admin-c: PP40-AP4 j- X0 {5 s* {. U
tech-c: SD76-AP
( H8 T/ V/ x" Nmnt-by: MAINT-CNNIC-AP( t5 Z9 Y4 F" G2 ~5 w( e
changed: [email protected] 20011112
0 N5 S6 r* V3 y, Z: ?status: ALLOCATED PORTABLE
) i/ `0 z6 s+ {6 d) S. d) Msource: APNIC7 G( T6 D$ G ?: Z, C
person: Pang Patrick. D! h$ b! A+ W7 _1 n( @3 b6 ~% |
nic-hdl: PP40-AP2 }$ ~, S0 E( F; b( t: F5 H
e-mail: [email protected]
; u6 r- g. H" m/ C' c$ ?3 P& Baddress: Fl./8, South Building, Bridge Mansion, No. 53
. w) g* y! P# ?/ o+ F2 u% tphone: +86-10-631815135 b: X% z) j% K) H) z- @" h, ^% s
fax-no: +86-10-63181597! _# ~$ c6 g6 O8 p
country: CN+ {8 C- g- T) |" D( ]0 G. F
changed: [email protected] 20030304
; r" a" a" }, Y& v; _: W; Hmnt-by: MAINT-CNNIC-AP
6 `1 x" D3 l! {source: APNIC
/ a$ v- S F* ~' fperson: ShouLan Du7 H( m6 {9 O' B& x, C& J u
address: Fl./8, South Building, Bridge Mansion, No. 53! w# |0 ^% ^& o1 [$ s$ H/ [
country: CN* T" F- A6 r) o, P! c, t Y
phone: +86-010-83160000( p& U" x) x+ |
fax-no: +86-010-83155528/ ]. l& f8 J; K7 I+ {9 O6 o
e-mail: [email protected]5 a; u, d7 t6 S& [* [9 u4 ^; i
nic-hdl: SD76-AP7 \' l I6 e) L, c, l1 P
mnt-by: MAINT-CNNIC-AP, ~. f) ~; D3 f& N3 W
changed: [email protected] 200204031 f! V5 |* s! a& F- `1 s
source: APNIC0 E4 C2 V2 H5 w
% u" f; N5 Z' z5、我为什么要写这篇文章?9 f4 b3 G7 l8 y6 W8 l/ V
k; M/ r: D' d& m9 z' N新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
* ]8 X/ D, i# L; `或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。 ^/ h/ u+ t; S0 E8 _( o' u
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。
2 O. J6 [+ v/ x6 l5 H2 J事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,9 f, I% C% ~! y& | ]1 n
但是现在你既然打搅了我的生活,我就不得不说几句了。
% Y) k! o4 N$ o) M# A) `
0 `/ n2 e) e1 T' O7 C7 k6、我是谁?
a2 l; F2 f3 B ( B# I% I9 J( }( [. a8 F
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。* C2 q9 i) A( _- \! s% Z0 k! ^- C
#!/usr/bin/perl -w. J/ \2 a$ J- ^9 k- s( M
use Digest::MD5 qw(md5 md5_hex md5_base64);
6 m& V7 x1 |3 m- M' S+ S$name = 'MyName';
- d! L$ g \% v% |7 f8 A7 d1 c+ d$count = MyCount;! Y' \5 g5 T9 I M8 [
for ($i=0; $i〈$count; $i++)
0 v+ U* V) a& a, p) Z{
8 ]: W3 D4 l6 F6 \$name = md5_hex($name);
- n8 m7 e" E) b- p, t: |}
" I& d1 t+ ^4 h& \1 n0 i- `print $name;+ C4 a) Z, y1 N+ R
( Q% N4 s2 m) B8 m; M1 |) K
以下签名,用于以后可能出现的关于此文的交流:
1 ]1 t" \6 ~8 z4 M' E4 E1 6631876c2aea042934a5c4aaeabb88e93 ~1 ]: M- }; x2 u" H8 o6 N* d
2 a6a607b3bcff63980164d793ff61d170' c/ s& l1 @# o! k2 C% i
3 6a58e8148eb75ce9c592236ef66a34488 X0 Z$ {; | _% i! u8 o5 @
4 ded96d29f7b49d0dd3f9d17187356310- f) X$ C2 P' Q3 q* j
5 cc603145bb5901a0ec8ec815d83eea66 |