|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。
" @. e& j& E2 G- W3 ^0 K, E/ c( b% i" t+ A. a$ r* j3 q5 F
8 r( ~+ f) ]' }* L) B............................................................................................................................................
" w1 X5 m3 P' W; D' {0 z, J* |3 H% x6 ^: E* |
是谁控制了我们的浏览器?$ i/ y2 a% h1 p4 w) z( |
1、现象是什么?$ z9 n D' ~6 X
' R) G/ b5 W7 a! r大约从今年年初开始,很多人就发现,在浏览一些网站的时候,: C. ?& o' }/ Q. i( {
地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。4 h+ \8 m3 H, \# B1 F: x
很多人以为这是网站自己弹出的广告,也就没有在意。
! m& W2 t; a2 D) z% q* x' | ( m5 R; q% k, |+ G! K0 x5 s) \& ^
我是属于很在意的那些人之一。
/ u5 G$ X' ?) {/ U; N t( ]8 ?7 w* {$ g% S2 T; c
2、这是怎么回事?4 V8 T) S7 O1 v9 a0 Z9 u
2 o4 w: P: p/ q8 S
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),
6 _" V9 A" E* @' `1 ]与使用何种操作系统也无关(linux用户也有相关报告)。
, S, z; B9 ?, {! f# r, O# G我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。
6 T2 L C8 t( s* _& X3 ` 0 A: y1 P6 G5 ]3 ?9 r) X
那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。
# ~+ _ K& U# e6 M& s ( S' n" [ x( J! I
那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,
; z- T& C( o' H. f4 B劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。* g' o( I) H' u: Y/ C
3 d% W3 Q+ J7 ]! r
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。, ]2 `8 X9 N7 z5 M
) y; B3 F$ t% t
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。
6 O+ E) S2 B7 [直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。- n- F& a% y+ C& ?4 Y U
我写了一个脚本。不断访问这个IP,同时记录进出的数据包。4 u0 J) [/ B' r7 C ^
在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
# [ I) T1 g+ S5 b9 q7 \; f& zHTTP/1.1 404 Object Not Found( s9 F n( E) J0 b; Q0 z# _, N
Server: Microsoft-IIS/5.0* m3 x5 ?" ?9 t9 d
Date: Mon, 19 Jul 2004 12:57:37 GMT, O+ D1 F ]) Q( ?" O, Y# V
Connection: close& U/ ~9 T2 i" K
Content-Type: text/html1 J: U4 m0 r& u, j+ `0 o+ W# Y( W
Content-Length: 111$ c7 f5 B! T6 S9 F3 O6 [! w3 N4 O
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉' o+ X4 {. W" `8 G2 W/ b
〈body〉No web site is configured at this address.〈/body〉〈/html〉8 {3 w4 ], M" _" {/ n3 s2 G! `
7 ?- ~4 ]- g% U j5 I) ^
但是有两次,返回了这个:
3 J+ R+ j# ^1 V$ AHTTP/1.1 200 OK
. Q' K/ l( \8 F) WContent-type: text/html
- D' O: y! q* E. f& ^〈html〉- E F) k( x2 w8 {8 G
〈meta http-equiv='Pragma' content='no-cache'〉
3 |& U1 ^: a& ~〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉1 j% K; R% m, S2 T2 j
〈script〉- a8 N$ f) i- I0 l
window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
$ ^. m8 V1 v$ |〈/script〉
% _. G3 [7 N1 L& K〈head〉
- b9 H4 ?0 y0 p* P& z' M〈title〉〈/title〉4 N4 f# s5 ^, O5 H
〈/head〉
! k& w! o1 N3 t4 f〈body〉
2 t1 k3 t. n2 F- a ]) w' Q〈/body〉$ V3 X9 O5 _" O
〈/html〉- r3 o* s1 t" D$ S- e7 N1 u
3 L! P6 l/ w' u3 t, g+ M: Q; x5 W更进一步分析数据包,可知劫持流程如下:
# g+ q8 x9 z/ T4 y w1 T 9 }5 E c+ n/ w8 D2 ]
A、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。
% i0 R- O7 O! l6 }* L这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
0 B) U, W/ R- c7 y6 j* D% Z4 H6 h/ k
$ T1 k# C5 M8 ?5 ~6 D) GB、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。0 U6 d9 u. K4 j; n* e8 D
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。! R1 b' H: _& W3 d
而任何正常的服务器都不可能在这么短的时间内做出回应。! i8 j' M% S" f: S
" \- t6 E2 }) c9 l
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
5 ~/ B9 B5 j6 K2 e( b* S
P3 s/ h+ V. X( I/ N" |D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,3 o ?& Q( h3 X
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。' M4 g2 e- x3 h# F! y! Z
& q2 V2 t+ T& _! q- g+ q
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,( r0 }0 m2 N. u$ @
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。
- P; R2 M: z K * V9 w7 M' q- ]$ z+ h
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。3 y/ n0 Z% |7 x9 Y& \8 `: g
" \% x% t% p, ~5 N3、现在怎么办?+ y6 A' p& r0 f( f6 R3 D- T
4 V) c) Q# O1 x" P* l3 P* a( o在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:) R6 c' u% x# u' J, I% X1 ^
* M, i% f3 w+ ~6 D
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
3 Z9 q _/ Q: U/ ]: _; b/ A/ S
I% v; Y9 R5 B: \$ y% Z- L) AB、在你自己的个人防火墙上,完全封锁211.147.5.121。
$ P" a) _2 J6 U8 N( ?" W/ P8 t } , x/ l/ v* g P' Y P. l; o
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
8 P' p) K) o/ E6 f/ a! h
* y U. @/ c. q" i; Q绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。8 Q) V/ x# B% ^+ v
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?
2 H3 f# D h* R; ], W' u; ^我们的HTTP通信完全控制在别人手里。
( q) }- y5 ~7 `
/ Z; A" {& ]. v) n& f4、如何把坏家伙揪出来?
: X4 [& W/ ?: b3 Y 5 d' M; [( l( S( }. {, Q
如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
, `$ y# H& _5 J) ~$ E s
, f2 ~" T p. _- E7 n2 S* u方法1:
+ [6 v9 Z/ r6 P& b5 Q) W2 m 7 @7 D1 N8 [0 q5 Z3 l
伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。
5 f" m7 f' r! ]以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。9 a X( ^- D$ Y# Y E
那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。+ w) g- J; s. u' l
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!& w, a0 f% _1 A/ X/ q# n/ m
: J8 V4 ^4 k" [9 t. d" B( l. y3 v方法2: w6 C& R0 H& o( l
- w: \1 g; D& ^; }- a
假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
' X% _8 o2 f- i/ |: C在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
9 R, C! z" O' n编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,3 q2 t$ [, s6 `1 S3 p
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
) K5 U. A; d6 E8 ?7 @: V4 T
/ y( v( [1 Y- M% r; V上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
$ O1 }2 \2 ~1 a" U那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。
; Y" P! P$ M/ l/ `0 h! n) w1 v例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
7 k, h0 V; e5 U4 h A9 O5 rMyIP-12-13-14-15-65-[89]-15-57-A3 N& g: X2 C: u& Z5 \
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B5 \0 o3 T3 Q+ R
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C0 c* p# Q; |$ j7 ?! n
MyIP-22-25-29-32-65-45-[89]-58-D( J! O9 i6 L: |
1 J- ^: o& ~; I显然,inject设备极大可能就在“89”所在的机房。
* v, t& m+ |: c* l
' Y% O3 O0 \- Q i* b- }- I% [方法3:8 x$ J/ E+ X) u* p3 x0 h; V
# U: {: B% E9 h6 E+ N* B
另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:/ |* k) {9 U7 l3 O, t
inetnum: 211.147.0.0 - 211.147.7.255; r$ F) Y* i7 u" ^8 D B
netname: DYNEGY-COMMUNICATION3 i5 n! h- z4 Z3 h# f, N. Y
descr: DYNEGY-COMMUNICATION8 L2 E: n. Z. h6 ~ F1 e
descr: CO.LTD: u# @5 _6 O% S$ L5 u2 y6 y, p4 {
descr: BEIJING$ i$ @# q& N7 g+ S3 _# W
country: CN
& D) D8 y7 X# }% kadmin-c: PP40-AP
$ q" m# t, m7 ]$ b, X. p3 E( d: ktech-c: SD76-AP7 ]2 C# |0 K! z4 F! I7 C
mnt-by: MAINT-CNNIC-AP; p% E6 M7 i1 } R1 U
changed: [email protected] 20011112( E: C1 I s- Q0 k
status: ALLOCATED PORTABLE
; x. x w( X' u* c' csource: APNIC
$ {( b T9 U# Q6 y' jperson: Pang Patrick0 O' P2 J* ?6 r2 }. O7 A5 U
nic-hdl: PP40-AP4 D+ d7 p/ @) m+ a
e-mail: [email protected]2 v. `2 D' K/ V! N
address: Fl./8, South Building, Bridge Mansion, No. 53
1 Y% _8 @$ T+ m% q4 y! }" h9 Aphone: +86-10-63181513
: W w1 q& E, L4 T4 s1 Dfax-no: +86-10-63181597
% o* ~. k5 Y, L( f5 }country: CN
4 H& K- y4 ]6 }& e. K! rchanged: [email protected] 200303045 C2 G# o2 V1 O. k3 j+ {
mnt-by: MAINT-CNNIC-AP
' {7 A6 t* i3 h; ~' H$ y! psource: APNIC8 o' Q2 p9 [* D! V$ n% ^
person: ShouLan Du4 z# p& [% Y, m! q e# R ~
address: Fl./8, South Building, Bridge Mansion, No. 539 {9 P% b* u X
country: CN
6 ?8 o [: h: ]phone: +86-010-83160000
9 o6 k: B9 F6 N% r! w( X: Ffax-no: +86-010-83155528
0 y3 p+ c: C$ e. b6 q! te-mail: [email protected]
$ j) k& O2 w) ?" l6 T5 s+ Y, i) Hnic-hdl: SD76-AP
4 q$ M' @, Q& J, B3 e+ vmnt-by: MAINT-CNNIC-AP4 V4 f; D" |. p6 m) [: U
changed: [email protected] 200204033 K8 t$ u' e. ^0 Q, N& S, p
source: APNIC" u: d. h4 I0 g' o7 c+ L
( U6 ~7 h/ A' [" z! Q5、我为什么要写这篇文章?
5 p0 ?7 i+ y T" c/ a. _( b
6 t# N( k8 C8 r' U/ r8 r新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;* K; C6 J! x: _; K
或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。' G3 }. o8 f) r" P7 t
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。) H1 ?$ {4 W- w6 u( N0 M7 z
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
' n! _5 _/ W1 W$ Q. K3 h0 v g但是现在你既然打搅了我的生活,我就不得不说几句了。9 h6 F, V$ Z8 a4 m7 q* `& S
/ @9 M5 `! [$ r$ Y# F6、我是谁?
, f: i7 v5 n0 k+ E% ?+ ? % z: ]5 P5 H: K! t' G; A# V3 ]
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。$ g! y8 Y, N( K! m3 T, c
#!/usr/bin/perl -w
) w9 Q i9 X8 \6 W( e/ euse Digest::MD5 qw(md5 md5_hex md5_base64);
. u/ J u; P3 j$name = 'MyName';
- N4 T0 f7 w5 Y% O$count = MyCount;# }0 @: {; N1 W4 A* f- v" ?8 N
for ($i=0; $i〈$count; $i++)
x; D3 {) H: _% g: |2 q' V) b+ t{
8 N* t0 {4 q$ z$name = md5_hex($name);
' F; a- X2 f; O}
! q7 u( x. @+ @2 C: Z2 [! jprint $name;
! l2 j- J# d3 w ! F( S% b; I3 Q. P
以下签名,用于以后可能出现的关于此文的交流:! x1 r7 f; L; l
1 6631876c2aea042934a5c4aaeabb88e9 i6 e- G4 z, Q$ k6 D
2 a6a607b3bcff63980164d793ff61d170+ f. ~' Y7 `: B" H: O* O+ @
3 6a58e8148eb75ce9c592236ef66a3448. G: n7 ?5 Q. W6 H' e
4 ded96d29f7b49d0dd3f9d17187356310
5 ?) b+ f5 P+ E# ?' V/ D- T( Z5 cc603145bb5901a0ec8ec815d83eea66 |