|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。
% f) Z/ }# ~ [2 n& G% Y- m% q6 T! g5 g5 ~* V" c& E6 }
6 p8 L' o) r" V) b$ L; p............................................................................................................................................& Y9 w5 ]0 ]2 D/ G
* d q; Z4 F5 u5 I( U是谁控制了我们的浏览器?
$ A3 D! D9 ]- L5 j) q5 k1、现象是什么? w" n; T* a- L! i" a
4 u( h5 H+ y m% {6 Q9 H4 `大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
) } D/ ^* @3 |/ C( S: M6 w地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。, T1 q$ Z4 o8 p- ]9 X+ d, }
很多人以为这是网站自己弹出的广告,也就没有在意。4 O$ T8 ?3 T9 @8 T
" d( q: ~9 V5 T5 w7 a3 y% ^! Q
我是属于很在意的那些人之一。9 W5 |% N6 }9 z9 ?/ l# j }' Q0 Y8 M
+ q2 @- e2 c# i8 g
2、这是怎么回事?4 K1 l) A* E% Q( ?9 o" j ?3 H8 @
$ |- A. i, r) y6 W6 T# q# p2 P经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),- [ L9 F( {4 W4 e" _( Q# C
与使用何种操作系统也无关(linux用户也有相关报告)。
, S$ z* O% f; k3 W3 {( o Q/ |我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。
9 @! ^: I* o# n5 `, y* t1 D ) w* q8 O2 k; y9 J3 {+ o
那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。# f4 v: Y# X' x6 q/ o! W4 O
" s9 x8 {5 g0 s- p( c" f- V那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,0 o" W$ U5 v4 @9 N
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。, s3 x _6 E& P) g2 s9 j! \6 j
3 \4 H C1 q6 @伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。
3 ~6 @% N& n: _6 y+ [8 X 7 K! s& d* X# }5 n6 J
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。
4 ^" [6 e& ?+ I% T直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。
0 w+ a; | w8 ]$ f/ z7 ?3 [+ ~( R( x我写了一个脚本。不断访问这个IP,同时记录进出的数据包。
9 U/ K9 c; }! z* } N在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:2 \; i6 y. G- g3 t7 p# j
HTTP/1.1 404 Object Not Found
5 p7 ]( j1 B0 ~- w5 a& uServer: Microsoft-IIS/5.0
" `5 S2 b4 R7 R' R/ B; iDate: Mon, 19 Jul 2004 12:57:37 GMT
- F' z$ P/ |* y4 d5 |2 G* DConnection: close2 f" N4 o' p, H
Content-Type: text/html" s3 f9 Y) A/ r v. ~
Content-Length: 111
* w ]3 j0 W! O〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉8 M3 t9 ^* Y' A/ Z5 E C* R8 S
〈body〉No web site is configured at this address.〈/body〉〈/html〉7 v$ W H6 p& g# d7 Z
! x9 A# j5 c* b. a" A* ]
但是有两次,返回了这个:/ h/ s5 Q& z4 g3 U$ A
HTTP/1.1 200 OK
s3 e% q9 h V9 LContent-type: text/html4 w+ l/ Y* U9 G" l& ]+ H
〈html〉5 t& z6 p6 n. z' n6 L* F; S
〈meta http-equiv='Pragma' content='no-cache'〉
6 n j# b& T% A1 j2 W- Q〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉
2 a* H: s& _9 C; M( F1 W〈script〉2 B; f6 T5 r, c, }& g0 D
window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');, P: M% g4 t1 b
〈/script〉* H: F2 ]/ O1 k1 i; L
〈head〉! u1 J8 H) D5 d" g
〈title〉〈/title〉$ G, L1 f. `2 u! Y9 m: z4 u6 d
〈/head〉
* O3 ]% z( i5 d: Z* ^* b〈body〉/ l* B K d5 ]# ^$ W% \4 G+ ^
〈/body〉
3 C2 G7 j* e R3 P5 M6 V4 Z- K〈/html〉
$ q# l/ ^6 c! m6 J/ |' e- y& x : M9 D7 {! |/ D/ Z
更进一步分析数据包,可知劫持流程如下:
2 {0 ~( ^2 t& u/ W
- f& d( H& n1 }0 E- O3 |& qA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。
8 H4 L% S5 k; F# V这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
1 f& r3 [7 C& o8 q ; r3 O! ~; c, `+ Y: F+ i
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。. G1 `+ l! n0 m0 b3 q. u' [
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。! e! U9 A: K; H4 J2 n# p8 p
而任何正常的服务器都不可能在这么短的时间内做出回应。
3 u4 Y# N q ]* M * r8 A1 O0 ~0 D; ?+ p
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。2 x9 Y( }/ T$ [. ~2 Q) k- D8 S5 q
0 }3 h1 _0 N+ S+ O# Q
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,; Q8 w7 K& U4 o+ X/ h1 j
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。" q* W& {- n' N" L' C
1 f9 |" O: a/ h1 u o% Z# | m. l: Y
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站," |% Q' i1 |) F. g# `8 s: E8 E2 ]
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。$ U: \) x% ]% f. ~* \( j Y2 d$ X
) T. e- `# g" u) R" A2 T/ L8 [
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。& ~, H3 E7 e2 ?) F
* U% q0 l6 }( @1 Q
3、现在怎么办?
. Z+ J. Z$ r. ?$ g3 c
" Y6 a" `! ^ B9 u2 @在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:% n) Y$ E& Q) P/ m6 X, k B, p
7 Z. P) |0 F# C$ `; ^! p
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
" y2 U; d# N8 H5 q( K) u 4 I: G$ V$ |* m7 x9 X/ ]7 S- r
B、在你自己的个人防火墙上,完全封锁211.147.5.121。# }7 ?! c5 C# T
) M1 W! X# ~6 r$ a1 G/ G
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
/ ?' c) s4 f& w' E2 N ( U# W% B4 r. \; A/ |# h8 A9 Q
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。5 J) J$ ~( H0 q) A
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?( O1 ?- m6 a' _- M+ p3 b0 q
我们的HTTP通信完全控制在别人手里。
. ~- N. T4 G8 Q) j1 _8 g
8 M) s6 Q- j& {0 N! N4、如何把坏家伙揪出来?
6 w1 Z: Y: A( F' }
' P. U! W- I: L! i m: S6 V7 Y如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:8 X" X+ i, g3 X! d! ~6 R& v
C% q! P- e& p/ J2 l% J& x+ m方法1:
9 A6 ^' _2 t5 t( u
2 B: S% G" V# W伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。
" E2 d) C$ ~6 b7 k: U/ t以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
$ d6 J# l! Z# n: v' S那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。3 S) P6 `/ V" Y ? A4 Q4 X
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!8 x6 B! `; |, f$ T
: t }6 U- y+ l5 E8 y* h方法2:
0 r- N; _% @6 R* X" v3 F( G$ _
{* k/ A6 U2 V' \) b假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
' J. v; p W2 z在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
; s3 a- h* U* A. Q7 |" y3 z( @. v编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,0 M7 g6 D( i, ~! Z1 ^! h' ~0 S/ f
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
1 h' x9 k& V2 }- f+ A0 E: z
8 n& _2 s5 N% ?( [4 R# v4 }上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
" H$ w& C2 P& i0 n$ e7 K% w" B那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。
4 H6 ]' X* {% |. f' h6 M例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
& h, g9 ^: Q( n$ k9 J& XMyIP-12-13-14-15-65-[89]-15-57-A
/ w! E, U+ [, ~4 `8 o: L3 f$ V4 `: ZMyIP-66-67-68-69-85-[89]-45-68-84-52-44-B+ ~' |7 H$ |, G% |: ?
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C: |& |; F1 N8 N: Z) Q/ k) T
MyIP-22-25-29-32-65-45-[89]-58-D
8 R" t- I9 W1 l. ~5 w0 S0 t % W$ \" \' H3 d( q: F
显然,inject设备极大可能就在“89”所在的机房。
% X% h5 p x( X7 n ) n* H! Z1 q7 F
方法3:1 \ j, C7 f2 i6 p. P
6 p( f1 n: s' i$ k3 D另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
& a7 x( n5 v& Y" Oinetnum: 211.147.0.0 - 211.147.7.2554 u2 M8 k2 _% w
netname: DYNEGY-COMMUNICATION- v6 V+ ]# p& F2 S
descr: DYNEGY-COMMUNICATION
. j" d" h' Z/ [! u7 c6 u$ udescr: CO.LTD
; R6 X6 d( n# f; l* ]descr: BEIJING
5 F, H3 B9 I4 r; l! Tcountry: CN7 w% s9 ]% g! j) {/ Q" p
admin-c: PP40-AP
1 q& u W7 d& Y5 `8 P) Q- {/ ~tech-c: SD76-AP
+ E( ^# e5 a! {1 t6 P' Smnt-by: MAINT-CNNIC-AP, s6 y- N5 \! [, _
changed: [email protected] 20011112: k/ u* y5 X( _
status: ALLOCATED PORTABLE
+ y& @; l3 Q/ R* Y. msource: APNIC, D0 J9 S& J y8 l; b9 b
person: Pang Patrick
- N: X- F" A0 znic-hdl: PP40-AP( w8 d s" q) ~4 {* V
e-mail: [email protected]
6 `' L, T$ g2 h# B: C( [- taddress: Fl./8, South Building, Bridge Mansion, No. 53
. \1 F0 \, C8 x: F sphone: +86-10-63181513
5 a+ t9 t2 D+ ffax-no: +86-10-63181597) e+ ]2 |! C8 x- j
country: CN
3 R9 D' }: W/ E& T8 {+ c0 G$ Wchanged: [email protected] 20030304
* e. ~ e \: p1 e: p" q: k/ ~mnt-by: MAINT-CNNIC-AP3 u3 K+ O9 r+ T8 O5 y
source: APNIC
3 U# D3 z8 e0 F1 p: x. dperson: ShouLan Du8 x- H8 }$ R/ |7 p
address: Fl./8, South Building, Bridge Mansion, No. 531 a8 X5 ^+ [+ G h. r
country: CN- I: t; F4 x \# O" f I
phone: +86-010-83160000: E7 D- @% G& X4 W' {
fax-no: +86-010-83155528/ Z. |: ?; L# v, b% @
e-mail: [email protected]( C( M! j' l7 P2 G* e) H$ Z
nic-hdl: SD76-AP" x% _. ?* I) z Q9 j' p3 ]: T
mnt-by: MAINT-CNNIC-AP+ d: e5 T# d# e/ t8 K! M0 X: w
changed: [email protected] 20020403
: _) t7 _/ b9 m0 S' {" \& xsource: APNIC8 O/ h3 p5 C! ~! e9 A
' g4 ~, |8 F5 p* |. L, f8 T
5、我为什么要写这篇文章?0 w$ ~$ u0 `2 |9 u5 v0 l# f1 r
0 {* X7 g6 {, @( d( T; l
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
7 [# T/ Q# n; n' d或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。. h. }7 M5 U* ~/ M3 U- G U
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。
6 u: |& e" \' O2 c事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
1 u7 ~+ H- F1 m& ~% F! _, u. q但是现在你既然打搅了我的生活,我就不得不说几句了。8 n5 s+ L- n; U. ^$ S
: L r9 ^ p- I* E( b6 Y6、我是谁?
5 v, S* q$ A6 o
3 D9 F# O; j$ e3 l3 k' K' q' b如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
6 t+ e6 A3 a# j#!/usr/bin/perl -w
1 Z# L( l; w0 t- `use Digest::MD5 qw(md5 md5_hex md5_base64);! G3 A: d F' v. F$ ~
$name = 'MyName';
+ n7 h, s( N/ J7 g8 H1 G$count = MyCount;4 t" e: Y$ h9 }/ _6 g+ ?
for ($i=0; $i〈$count; $i++)
. A! ^+ l& j5 ^/ s5 q{
; ?: r7 {9 ~; ?5 K$ m) Y4 P, I$name = md5_hex($name);# |3 b, L" I' {6 ? \$ |# y
}
5 ~# Q# K- b$ Mprint $name;7 k* K) I0 v4 G2 Q/ W
7 x3 U8 h1 T' [1 m以下签名,用于以后可能出现的关于此文的交流:( A4 q1 x! i% ?# o
1 6631876c2aea042934a5c4aaeabb88e9 R) R5 Q3 w+ N9 e+ l1 g* z" ?
2 a6a607b3bcff63980164d793ff61d170
. F2 K% ]% x- ]) K) X% o3 6a58e8148eb75ce9c592236ef66a3448
! c* N" z& V6 I4 ded96d29f7b49d0dd3f9d17187356310$ p+ I8 X) \* g4 ^+ ~ }
5 cc603145bb5901a0ec8ec815d83eea66 |