|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。* {. k& D- J( c7 |' j& f
9 f5 ^+ N7 r( `( }
. C9 j, c" u7 X, S............................................................................................................................................
j( y5 g1 J& j- t6 G
; S1 M6 w/ S; q( x1 g是谁控制了我们的浏览器?
2 }2 X3 T4 S8 y' q1、现象是什么?5 G0 b- i) M* f9 c, p: u
5 C( r- p4 e) _0 P7 ]; m
大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
% c& N/ W6 a9 [) P; C$ z- f! h \地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。" f% _. \, }+ i9 ]. h
很多人以为这是网站自己弹出的广告,也就没有在意。
4 |! R0 @% a4 T . D6 M2 D( U- }8 w
我是属于很在意的那些人之一。
1 M* Q& _" B; P . n8 ^/ {& }" N7 N) g% ?
2、这是怎么回事?
* d; U/ k! D% F% F+ \ j
e% q2 D* a% ]! {2 S) n经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),
0 F! z9 u- y3 y1 ^& I; ^% i& b6 a与使用何种操作系统也无关(linux用户也有相关报告)。: b' Y, @' l! X1 r+ v
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。; o1 Z: V4 x) d# Z
) n* N1 C) G8 U b: h' s( H那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。
" F- {2 Q' {% I
1 P2 e$ h' w8 l* V" [那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,% o) L4 o, p5 H$ ^4 T% _; n
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
1 R$ \$ @2 R: I( G) N) \ p
6 H7 O( M* N. ?# n F伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。4 E' L# l! V, R D$ Q+ d
+ \. p6 G) m' K+ J2 @5 ^* D
为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。) m' ^) \% q7 @+ y4 |
直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。
1 J E2 U# f6 R我写了一个脚本。不断访问这个IP,同时记录进出的数据包。% y2 B& k) |( c- F+ P" P+ i
在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
( J: F- `0 T9 o5 Q) G& m4 _HTTP/1.1 404 Object Not Found% u+ C' D8 ~, [ S/ d) ] A1 v2 P
Server: Microsoft-IIS/5.0; N1 q( g5 F2 ^- R0 q0 h
Date: Mon, 19 Jul 2004 12:57:37 GMT
2 W% K7 Y2 G9 p# x' CConnection: close
n# Z2 a P: y7 l9 O0 C/ nContent-Type: text/html
) |- L! E: w! J- OContent-Length: 111, r2 T& ~) c5 i- M
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉& r2 R; ]2 y1 h1 U3 r
〈body〉No web site is configured at this address.〈/body〉〈/html〉9 p! x9 d; Y4 g4 m
5 k' A" f: ]- c4 H% w' O但是有两次,返回了这个:
+ ~8 U9 A/ D& UHTTP/1.1 200 OK
j X: u# _" L. W9 T* G W8 i$ oContent-type: text/html
9 r% w" a/ S; f7 G〈html〉
8 U( j3 }+ R* X2 H〈meta http-equiv='Pragma' content='no-cache'〉( R9 D8 x) \) W, q) b
〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉( g) ?. i; i$ j6 Z
〈script〉
W, k. B* L, J, u4 i jwindow.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');* O* ]$ T9 }' g. m# M2 N
〈/script〉
# z0 L& I# r/ L6 F4 K5 v" c〈head〉1 ]8 E9 h# W! i
〈title〉〈/title〉
/ |. s2 W3 |" N2 S: y2 X6 S) F〈/head〉
2 \, B3 J( G7 O' `1 e7 ~# L& B〈body〉
; k- a E) n4 L0 z2 m: o1 p〈/body〉8 b8 S. X6 A4 d
〈/html〉/ n, {5 ~: ^- \5 F. R4 @
; K/ w, w- [$ \* `& l- T8 C
更进一步分析数据包,可知劫持流程如下:
2 z* E7 ?. A( ~# t9 ~ N
8 W0 e+ {6 c; lA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。
. M3 l/ s; R& s3 f; r5 p这个设备按照某种规律,对于某些HTTP请求进行特殊处理。& j9 `& N* H3 |1 k2 l, J2 ^! N
- s( t# i; b4 D; {
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。
, b. E" [$ S& j+ f& o& V这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。
" X; J( D( D! E, e而任何正常的服务器都不可能在这么短的时间内做出回应。( i& @8 n+ ^: C: l
! I6 [, W; U1 k& r5 L# w) m0 m6 q. t
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。 `$ E/ t# N+ k& m& [ u
* A3 D: d9 N( K$ h7 SD、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,
& o3 [& C" O9 @/ q( K4 U重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。
2 q, u; j+ D& b6 i+ q 3 M& W8 A/ g8 E
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,& j- |( }3 t( g) g
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。" y4 c3 f+ T( J2 q& I
- ?0 t& G- B) W/ P! I7 N4 p
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
8 z$ B% m. X/ @3 ~7 x% R
# T1 x) F7 j# L2 Y; ?3、现在怎么办?
3 L1 J' W$ u. @
0 X2 z6 i3 N/ I5 R3 G& Y在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:2 }$ c2 D% t6 n7 j: V% g$ w
/ F4 F0 r+ s# zA、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。1 s8 K- t; ?7 c( n
* y/ X, o% h6 k' e7 K' t
B、在你自己的个人防火墙上,完全封锁211.147.5.121。
3 Z6 Z( ]; O; \* U ~2 g- P
] N/ P# }' O8 qC、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
8 y2 z# h( u# Q# @& b7 V* V * Q: l/ i4 y( f$ [
绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。
% u/ M- K Q, i$ I0 r: j今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?
5 G+ U/ L) h0 B& {# o我们的HTTP通信完全控制在别人手里。6 s3 L: ^6 K$ F7 P0 j
/ Q/ \: C4 p O3 g/ u S, l
4、如何把坏家伙揪出来?
$ R/ g0 E9 N# w
: R! _% G& s w- q. ~8 K如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:
) z* F" N ]9 y; ]3 | v
: f9 M0 @4 a0 z' t方法1:
4 \8 H8 h% M+ r6 l
, Z1 M. a8 W3 b# S伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。; O% F0 x4 w" g2 l& `$ R
以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。) c. `* G$ R* x# g' _$ T6 P- b- ?
那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。( J% z( b; d9 H
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
! U$ c. e$ ~# g& y- Q
* _, x$ Y+ ?; e4 E9 J, e% V方法2:
2 d5 l1 e' ?' l: _ . m' o' ^0 V7 C2 q$ L( L" \+ O% u
假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
8 z& \4 a/ i$ j在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。
- S9 r# `3 ~' c/ ?* e编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,) ]5 N% i! g- [" u* P9 m
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
Z1 e1 {! ]: B2 N( E ' Q! |* I1 s( w( m
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,
; z; B/ }, Z$ w: F那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。
' S0 @ d2 z/ \8 A例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:+ c/ S" p7 ^* T/ M- Q8 Y7 z# {8 V, w
MyIP-12-13-14-15-65-[89]-15-57-A7 ~. z8 i7 Z4 }+ P" F
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
5 O7 z/ k9 z7 j; pMyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
/ m2 o" Q2 D3 g& b# c7 x& ~MyIP-22-25-29-32-65-45-[89]-58-D( r: M" {: ~3 v! L0 P
; W! Q; n$ u9 Y5 y( b
显然,inject设备极大可能就在“89”所在的机房。0 e+ @* T: Q9 Y; g/ L' I/ ^0 N; v
# ~7 E$ ?) g9 P方法3:
' M9 v, l1 h) `
4 g9 t1 O9 V, N! I) V另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
4 U* C4 n( u: p4 {/ w+ l5 f1 L' {5 |inetnum: 211.147.0.0 - 211.147.7.255: H0 D6 c- `$ e. T2 Q9 r0 a
netname: DYNEGY-COMMUNICATION- X2 U9 M+ T" I7 e% l2 _ y: G
descr: DYNEGY-COMMUNICATION
) r; T9 ?3 L) }1 E' ~descr: CO.LTD/ _; O# T- v* n3 ^& G/ w
descr: BEIJING
. u6 ~. q! V" F4 U& P" c9 rcountry: CN7 R" o; j0 A" {1 b" Q7 D. v5 P- {% h
admin-c: PP40-AP4 K+ a9 p* D+ {* W7 O6 b0 `
tech-c: SD76-AP3 u a$ J Z. m' Z
mnt-by: MAINT-CNNIC-AP" v0 E/ d; Q* P1 E
changed: [email protected] 20011112
: d0 c2 N8 d9 v% B9 mstatus: ALLOCATED PORTABLE
3 h8 w) } E N& L1 rsource: APNIC
8 R- Q6 d& o$ V' M' E' D" kperson: Pang Patrick$ D- t# B' _/ {' t& s
nic-hdl: PP40-AP
/ p) k3 b2 [" i! T7 M7 m' ge-mail: [email protected]
3 p' g# k# y3 k5 c3 S) @2 e3 saddress: Fl./8, South Building, Bridge Mansion, No. 53
, u% d7 h& X* l8 m# B8 C8 l$ O7 Sphone: +86-10-63181513* V; N( M& e+ ^7 C( G0 ]
fax-no: +86-10-63181597
# O2 c# }/ x6 V( Xcountry: CN6 b0 t+ _. O! p# [; @' F
changed: [email protected] 20030304
7 T, Y2 f! T% J9 c4 p; Gmnt-by: MAINT-CNNIC-AP
0 j0 N/ h4 @3 b+ u5 dsource: APNIC
" V* E* B( d" \' m4 ~$ `person: ShouLan Du
# [, J9 c! m: [6 D& u8 \) a1 haddress: Fl./8, South Building, Bridge Mansion, No. 53
, u' g; D$ W6 b$ l) f3 i- Acountry: CN9 ]! W- u% h% o5 w5 r2 X# C
phone: +86-010-83160000
/ W! @. e2 ]" {4 }8 q3 m/ Nfax-no: +86-010-83155528
9 X6 z& k$ m: Je-mail: [email protected]- h8 s/ o- `) t ~
nic-hdl: SD76-AP
9 p1 j3 A7 H) O6 g* K, m- Emnt-by: MAINT-CNNIC-AP" Z. F& N4 M# n
changed: [email protected] 200204030 B3 d/ B9 o, ^3 \5 R; h" k
source: APNIC! {5 E b% [! }( ~
) _( a% d7 \- l) J( Y5、我为什么要写这篇文章?- j+ x _5 @! ?/ \ _: Z! b3 N
# w: A% ]: P& l7 c1 K
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;3 F t- Y6 F- q0 f; a6 f, G
或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。( Y7 t/ u, d0 Z2 ?7 r4 I
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。, C4 M$ t% }( t5 m
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
1 w: B+ c# x. B' e8 v但是现在你既然打搅了我的生活,我就不得不说几句了。9 s) m: `- @" o, x( s3 @. N
; \1 y1 ~8 G s
6、我是谁?5 O8 |8 h" T* F8 V6 t) z
0 ~( `+ ~( U+ X+ e
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
( v5 Q% w6 X1 K2 J% |8 ^( E#!/usr/bin/perl -w2 J& a+ t' }' E) {
use Digest::MD5 qw(md5 md5_hex md5_base64);
4 y# z: }# T4 |. h/ E# R2 ?9 b$name = 'MyName';1 _$ {& n5 z! Y; R0 C- T9 R: M3 y7 M
$count = MyCount;2 o% Q- w" R. C
for ($i=0; $i〈$count; $i++)% @3 ?+ ?% t: d) S
{
6 v' N f/ b$ d$name = md5_hex($name);5 ]2 c# B/ ~# f3 }: g
}5 y l1 I! R+ T! O
print $name;$ k4 u) W4 r( ?' u0 `0 b
8 b; r* K$ [0 U7 N以下签名,用于以后可能出现的关于此文的交流:1 @1 I% K' g/ n. L. i( e Z
1 6631876c2aea042934a5c4aaeabb88e93 u$ K; F( h- D8 d/ }8 K5 s6 d
2 a6a607b3bcff63980164d793ff61d170
/ ?3 [% J- P3 ~" P5 m& h: q3 6a58e8148eb75ce9c592236ef66a3448, Y/ I: S& M1 p- F3 Y
4 ded96d29f7b49d0dd3f9d17187356310& K. l9 a3 x v
5 cc603145bb5901a0ec8ec815d83eea66 |