在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。' X% J- ^4 Q. A, L7 O3 o
; e$ }) N" S5 S$ j. T
& z0 |, o Z* S0 P4 g$ R............................................................................................................................................$ Z4 `0 v, a( e7 W6 a
$ }$ ]! {( V3 p! H0 [, w" }
是谁控制了我们的浏览器?
& y% \/ [2 a! `: d' z) _2 q2 r3 L1、现象是什么?
J, k6 X) c; k, F7 L & o6 l1 I e2 r# _; v& U
大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
0 w' s" A5 v) P$ e: O- T# W/ O地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。
$ |+ ]) Y: }; h: t6 d; W很多人以为这是网站自己弹出的广告,也就没有在意。
7 C9 h: w( G& a& Z3 s! H+ I
( L6 J9 V$ j5 ?2 N我是属于很在意的那些人之一。
" N$ c7 B6 N! v9 j1 L 1 O0 [2 p2 H; y" ^
2、这是怎么回事?# R2 _+ }# f/ @ g% }
* O0 V: ~% M9 I4 q2 T4 G m" D
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),
- m! j8 w" T% u1 @% ~与使用何种操作系统也无关(linux用户也有相关报告)。
& z+ [. |. b. P) C2 r1 n3 R我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。/ w6 N" P+ N# O8 O
' q( ~- F: R9 \% T, ~+ ~& h那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。( V" Z7 Z% Z/ ?% ?5 H `/ m6 N
) u# F1 O. p7 b! R那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,
, e1 w4 N9 r8 b* q9 S0 \劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
" {/ x' x+ ^. ?' ^1 l 8 W% r' p1 G9 R8 X( d$ c
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。# h2 \4 X0 M* m' q
8 s! ]* a" z9 l
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。
! g: u" c' n% M9 \( F9 \% D/ T直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。
& \3 H/ x% o) ~; D我写了一个脚本。不断访问这个IP,同时记录进出的数据包。
& y4 K1 s1 X9 s& V& @5 t0 H7 R9 H在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:5 \; ]& u. O( I* D7 ^" G
HTTP/1.1 404 Object Not Found
1 t- u' p/ v3 O4 q! x7 BServer: Microsoft-IIS/5.0
. N: U' v( h7 Q( FDate: Mon, 19 Jul 2004 12:57:37 GMT7 i1 G1 f* @* w2 i3 J
Connection: close4 C% T8 R7 f ~2 p) y
Content-Type: text/html9 B0 F7 Y5 d S
Content-Length: 111
5 C" U+ S) ^3 z, P/ F+ U〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉4 R6 X9 G8 t! N5 y
〈body〉No web site is configured at this address.〈/body〉〈/html〉
) j. N; A! ?) |5 ` 8 I9 \4 e# Y) t* E
但是有两次,返回了这个:
" `6 z" `" c3 w) [0 aHTTP/1.1 200 OK
' S( {" g0 Z0 E. Q B' W, UContent-type: text/html5 f3 \: s& Y3 _ R2 N B
〈html〉5 p. ~) q3 Q& {# ?6 _: s
〈meta http-equiv='Pragma' content='no-cache'〉, o/ T8 a5 B1 H& {, F2 \
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉9 W' o, x$ E- I# v# J1 l6 T" F
〈script〉- u L. [! B. N) Y
window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
& E- @" P9 n! n〈/script〉
5 e+ ~0 j, U* K/ B2 y7 k8 J: B" h. X〈head〉
P% N' a z2 o〈title〉〈/title〉, m" h7 \/ R% E( v! j
〈/head〉" Y& l- ?! r h- H& k6 s
〈body〉1 O" h5 s; K: b$ |+ ~& N
〈/body〉* Y0 ^$ Z( X7 `# w! e' ~' F+ {
〈/html〉, k; F% l% X; w$ C) a& R
+ Q$ s: b9 v8 s) C- C更进一步分析数据包,可知劫持流程如下:
% U4 q# @- `7 t6 H" T$ v
& A# V3 o9 O0 `, i) GA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。2 }+ y6 @- c! o
这个设备按照某种规律,对于某些HTTP请求进行特殊处理。# E* F8 L, z: t
: H% |. r6 s+ F- ~/ B
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。/ v. }% Q: O- H" F' ^$ Q7 Q9 ^
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。0 E' u% \+ v q2 N
而任何正常的服务器都不可能在这么短的时间内做出回应。* z3 U+ J$ a5 i# N! V; }! p
( [' b$ g% ?( F9 ^C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
/ x2 |3 O6 b: f! w0 c p2 S
6 P: E# e* R) o$ H( O2 H: Z4 X! ]D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,
! K6 T3 w4 ~ b9 d& u+ p) n9 O重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。
1 J- ?% f- k$ r2 R3 o& `! A! c 7 I0 k# V3 O& _: {1 n+ m
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,
! R) R, `. J0 P( ]4 Q6 ~8 U这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。
4 C" m, {( @) Z
% H4 x) Z B; [ x3 |2 y真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。" _* t, J( R3 O. ?; N+ a4 D1 k
* D. ]' g8 w- A+ t) w/ ?3、现在怎么办?
; V0 |; ~! n* I
6 |. a& F: ^8 f) }+ V( E% V* \在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
' O9 }- Y5 q. F2 X
1 m, Q" _; b; {- K$ B9 a6 c% W) ]% d0 QA、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
1 m6 H8 [- w# P' y , z" V) T- `3 o. O
B、在你自己的个人防火墙上,完全封锁211.147.5.121。% _) v* Z& K- g
( ~0 y$ P0 Y* FC、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
" X, D3 S4 Z( f9 ~ 1 B8 N; Q6 j5 d$ w
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。- H) Z) H4 ], Q$ v
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?. |9 L: z/ o6 j7 I
我们的HTTP通信完全控制在别人手里。3 ~2 J: S/ E* |8 i/ S$ M
+ ~3 ^4 {$ G7 c! I) j; e4、如何把坏家伙揪出来?/ U8 g; b6 U) }8 B6 m
0 t. w; \4 c+ V' }
如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:/ P1 B4 t* V6 n6 G- o, J
6 B. o' i6 \: j* q# i1 q
方法1:
+ |- t: Q' v7 U# T9 i0 i9 K7 V
0 d6 W6 Y8 N7 j/ ^1 z' s" b# f伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。- t( L% a k0 G, `4 z/ @4 V
以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。5 L/ L, X" l1 D/ l' p& J# h
那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。$ O# P# I7 H E& r' r% C$ |9 a
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
& Q% T0 h, T* _ 0 x5 L! F/ n+ B- q& X
方法2:0 ~9 W4 b$ Z/ P% y
7 {5 l0 \7 {8 @: D4 k3 n
假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。 Z. l2 X6 t( ]3 X# q6 V
在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。& a9 d. N. u5 `) j& @
编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,
" }) M, Y6 Y. K. O! u7 Y0 D在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
* p: {, X2 Z; } . h2 T& p* Y& P1 Z3 Z& }+ x% S3 _+ \
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,# b l! I7 N! m) O0 [6 ?
那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。' E; S3 ` r- B: X' y! O
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下: U, P5 o# E/ H V4 ^) R
MyIP-12-13-14-15-65-[89]-15-57-A
/ ?8 W8 F) T/ l: i2 q) Q+ ]' [MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
V% ?% ^. n- I/ P& t% iMyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
9 p. P# n+ _ O AMyIP-22-25-29-32-65-45-[89]-58-D
! t) K- u# a' p) n
0 F, S# Z0 }% P5 K" @显然,inject设备极大可能就在“89”所在的机房。
8 c! | c6 [; e$ C& B j5 Z3 j
D6 j" k. \7 n8 S0 {9 e! W6 T方法3:' n) |9 y9 s) ~9 r W: e
& j9 Z: Y7 A5 {+ T1 v
另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
) q( P7 r/ n; m1 b" zinetnum: 211.147.0.0 - 211.147.7.255, b* G* V; n- x. b/ V( y: h+ P
netname: DYNEGY-COMMUNICATION
: M: y/ d" @" i2 C3 z; \7 L$ Odescr: DYNEGY-COMMUNICATION
+ u1 a. G1 z8 E2 X- `! Tdescr: CO.LTD+ x% H) o7 R3 J% K2 n
descr: BEIJING
/ d# v( S' E p- g$ o8 X. J& Icountry: CN1 K# o. s i# @5 M- b0 ~
admin-c: PP40-AP
4 j( Q3 g$ h) G! G! N5 y' ~tech-c: SD76-AP2 {0 o( d" [" l
mnt-by: MAINT-CNNIC-AP$ ]4 l% e# q" v
changed: [email protected] 20011112
7 S9 [4 Q, ~6 u( H1 k9 m+ Kstatus: ALLOCATED PORTABLE
! [0 g' }$ n! V B/ e& wsource: APNIC2 d( V, I5 j& |& c4 S# R
person: Pang Patrick
; |$ F; k8 A2 knic-hdl: PP40-AP' B! T- L5 c2 u3 @
e-mail: [email protected]+ D+ Y3 c7 U6 Y5 j9 d
address: Fl./8, South Building, Bridge Mansion, No. 53
+ [8 t) o) O7 c3 {phone: +86-10-63181513
4 B, n2 v# R$ p3 t, u% C2 Efax-no: +86-10-631815977 {- z% s" R" V* Z5 i2 F- j; _
country: CN
: e0 f% ]: g" i0 s! x ychanged: [email protected] 200303042 O7 S7 n$ T+ t# A
mnt-by: MAINT-CNNIC-AP
; p& X2 `% a' Q* M R! r Zsource: APNIC
# g$ _% S+ X/ s& {1 @: n) D1 jperson: ShouLan Du
4 D% J' K+ P4 r! I. N8 caddress: Fl./8, South Building, Bridge Mansion, No. 53" a$ V' N5 p4 X# i d
country: CN% y/ K" f4 Z, Z. s3 ^
phone: +86-010-83160000$ Q$ N6 ?. j9 @" U% h
fax-no: +86-010-83155528
" \/ Z) f* R. T) l- a" he-mail: [email protected]
( b, k* O; n6 b' u/ hnic-hdl: SD76-AP
1 e5 D7 i! n. J, d4 rmnt-by: MAINT-CNNIC-AP( m+ J6 E3 x4 r. p$ ~
changed: [email protected] 20020403
5 K4 {$ D3 I+ U* Msource: APNIC. N5 r" Q% n- Y0 z) s
# ^6 P9 H% p4 r8 T& z: R, `5、我为什么要写这篇文章?
9 V' h8 ]7 V8 N; p7 O
& l/ S- G& ~( @1 ?3 W新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;& Y- O: U+ ^) T1 i# C
或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。
4 i1 F$ j( t) Y可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。
O3 R2 g+ f3 q- G4 t# M8 d事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,. J, v6 |, B+ A D
但是现在你既然打搅了我的生活,我就不得不说几句了。# q- I' z. G, o6 J2 v* u; X; i
2 B. A# T, \! ~: A' z; I/ `+ s4 x
6、我是谁?
) i2 o% F8 F! C5 b8 Q ; R) K8 q }% \% D! F T( b4 m
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。; A7 o" u' ?4 }" s) t( d
#!/usr/bin/perl -w
6 j# m% L, u- A5 u' m1 Muse Digest::MD5 qw(md5 md5_hex md5_base64);3 _! \: G9 d7 ]
$name = 'MyName';
2 m2 ?# L! V4 p' F6 g$count = MyCount;
# H4 p: @7 h& @6 W# Ofor ($i=0; $i〈$count; $i++)' I$ s4 N, {! Y
{
6 h! F. q2 c5 X, e8 L$name = md5_hex($name);
: G+ w9 ?0 A1 j3 m a% \}0 l2 B+ i9 {4 b. ^# |; p# O
print $name;# N! y# T0 Z0 d# E; ?8 J3 G
" U, f2 f) X, G- t. g+ Y
以下签名,用于以后可能出现的关于此文的交流:+ }1 o5 b7 l$ _
1 6631876c2aea042934a5c4aaeabb88e9$ Y3 M& c* U5 @) H7 F, {& r+ |& Y
2 a6a607b3bcff63980164d793ff61d1709 e6 i! W. a$ @ U O$ j& j
3 6a58e8148eb75ce9c592236ef66a3448/ J% s9 r$ B8 y' M/ e
4 ded96d29f7b49d0dd3f9d17187356310
6 y7 \7 a* E! a. N$ q5 cc603145bb5901a0ec8ec815d83eea66 |