|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。# A) e- _& a- G7 p
9 \% s+ r; Q6 s' Y+ f2 t' L3 F# e1 t1 O1 b1 u! p" @1 Y0 c7 Y
............................................................................................................................................) l" D8 L P' _. m
$ s: H: p* I/ @是谁控制了我们的浏览器?* p2 F+ y) [& X! _
1、现象是什么?' R }- X8 g9 o0 y5 c
2 Z1 S. \) d: R( G/ ^0 o' c
大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
- Z/ C7 P6 \0 ]地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。
+ c) P- h0 [" M. m% w很多人以为这是网站自己弹出的广告,也就没有在意。
$ [$ q# v5 c% P/ a2 K6 s
& m; U& R0 p2 ~- W0 [我是属于很在意的那些人之一。 t) G0 E+ Q# |8 K" Y$ e. [
$ u D6 o, }# ~) B2、这是怎么回事?
& @+ q1 ~5 Y& Z `6 b) r 0 N" k/ e7 K$ G3 D3 E3 M7 X
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),; w0 S+ p7 W' L4 l
与使用何种操作系统也无关(linux用户也有相关报告)。
! r* X$ |$ k9 a我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。 W6 Q1 p& D* @: C1 V$ f: L6 U& M
2 ?- T* z$ z6 R0 q' U: x/ b那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。) D4 h. f; w1 W0 a4 D, r
3 G% ~; X0 |6 A% L/ n6 E5 C C2 s
那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,7 N3 c" f1 F! t0 y
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
. f* c+ t7 j; L) q$ f ) J0 {6 ?: x2 a9 p, I- H9 N
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。
3 r s- b" b( v- t8 R7 e
$ b4 Z% T* E/ V$ H2 d1 S9 _ R为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。) c" A% r* r }7 o5 \
直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。 P" A7 F& B3 s& T$ I# x% d- U! r
我写了一个脚本。不断访问这个IP,同时记录进出的数据包。
% d$ e; Q( y' u4 Z& h% X) P在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:$ B h5 k) J* `; y! [7 H
HTTP/1.1 404 Object Not Found
+ Y7 N9 u8 E1 Y+ M) GServer: Microsoft-IIS/5.03 l6 G9 v; i0 P2 l# S) l: b+ X
Date: Mon, 19 Jul 2004 12:57:37 GMT
3 g/ h4 F# t& q6 A- c$ RConnection: close$ K5 Z$ x1 {8 d
Content-Type: text/html" W" g G7 _6 F5 T, D
Content-Length: 111! K0 R+ A/ p6 l
〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉' y8 W* J; {5 x" N
〈body〉No web site is configured at this address.〈/body〉〈/html〉! E9 h+ L. F! Z* M. y
; Y8 n* I- ^, C( ]$ Y* t+ R, {
但是有两次,返回了这个:
6 [& o! I; Q: c% O( n' W) kHTTP/1.1 200 OK
9 @, z. g j! k) uContent-type: text/html
% Q$ e, V2 [6 j: y: N* @8 g〈html〉
& o4 p6 A: z( X1 E' N〈meta http-equiv='Pragma' content='no-cache'〉
) _( V# F2 g. s7 F〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉4 Q6 v$ z# q, _$ x+ s- N
〈script〉
; {: ~$ N3 ]( J& Z( P& F" pwindow.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
2 Z7 w) ~: C6 R2 c. r〈/script〉
6 A, }8 S5 B/ j7 m〈head〉6 V! m! F2 c) t/ U, Y/ b: H; p
〈title〉〈/title〉
7 |- e/ D2 k7 _4 D8 _; s! w) m〈/head〉3 Y; H; } q" M1 J: B6 h
〈body〉2 v) I2 K3 h1 o3 p( Y- j
〈/body〉
7 Y7 y w7 W/ R- E# A8 n〈/html〉: d* B/ o E6 {$ M2 B
3 }8 t, j1 j0 W$ T9 O更进一步分析数据包,可知劫持流程如下:
9 T) b& c. a5 S: } K4 f ! ?- a% _+ r1 a3 n
A、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。
/ ?4 A5 V% [ t1 h这个设备按照某种规律,对于某些HTTP请求进行特殊处理。
/ d- Z) s, p8 t8 N% s0 k. N ! [; R' Y( }. o; {8 v* O4 V
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。% N2 x8 ~' I9 U: b9 R
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。
2 D4 {% s% P7 I ?- D }) B而任何正常的服务器都不可能在这么短的时间内做出回应。
6 Z/ B/ @. s6 d+ e8 l6 c
t( [9 z. D! _! V2 r) w4 ^% @C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。, J3 a8 R& ?1 }+ w
( U; q, F1 z% p1 f( |( ~$ C
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,
2 U; M9 f9 h8 r+ Z重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。
5 N2 c/ I B" Y$ G) R
' ]: O4 V n* o$ L/ y) |1 D; E在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,
$ L/ n1 B. e K* M3 X这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。% n0 w, O# _ W- w- J2 u: |
+ E3 G% i: m3 V! A
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
# h' T# X6 ]" _9 q5 b4 e
8 ?) Q1 r' M* d3、现在怎么办?$ y" v b7 C" o. T
( V/ u a+ T5 H$ u: g* B) [
在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
4 u. G+ I9 }# D+ z, c+ A 2 [7 ?& a# B, Q8 W
A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
, E" q4 r. I7 N" r 8 X1 d8 A, X# G& W2 F# k' {
B、在你自己的个人防火墙上,完全封锁211.147.5.121。0 \0 Q- L: G( {7 \- j
3 f R6 c! x. D2 s1 F4 W6 [, _& F
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。
0 |* z1 G6 o3 K. p/ _; A
1 @4 V. D5 B9 q" r3 O O3 M绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。2 ^, a. n/ X% `! b, s7 V
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?
5 x* T1 I( R- i4 M0 O s: D我们的HTTP通信完全控制在别人手里。$ F* h9 V% R8 x& k7 @0 g* L6 `- t, j
3 x7 F+ a0 b4 [9 A1 I
4、如何把坏家伙揪出来?& p5 `9 s1 B3 o, [0 ?" j
) y; ]1 y8 M- ?! H# X! B/ D7 X如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:" M) O" }$ V# L" D; n
" z5 T! v3 d" @) a6 H0 w
方法1:
. y* m/ q5 C6 v: D
}0 @8 e8 I: u5 z& H- T: Y伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。# H r+ n3 c* n% Y5 k. f% B, N6 F+ g
以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
1 l+ B$ f0 p- _5 ^9 G那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。; H5 ~: Z9 p( ]# X) j3 O
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
6 x. n6 N" b2 A4 \% t
/ m' L0 j6 h* _方法2:
- h# c2 D1 Z5 ?+ c
( [0 a9 l/ ^( ^5 X- y假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
% ~7 ^4 Y# N: B- k0 R0 ^在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。2 C0 J( T, z8 h4 ^ x
编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,4 x- N9 h( _. e. i5 f. ~
在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。
7 }% G% L, F2 P: M$ H ; w; u+ [; E! \
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,4 z- }" z6 q* K7 Z
那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。' @6 L2 ~/ g7 ]9 Q2 O% ]# Z
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:/ [- D- [( E" P
MyIP-12-13-14-15-65-[89]-15-57-A6 W" @( H8 ~* f+ Y+ o
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B; y8 R% z- `/ y! M. m
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C; z a; o [0 _6 G
MyIP-22-25-29-32-65-45-[89]-58-D
) n/ W' h) l9 l
% g( Y0 o* \ W: _显然,inject设备极大可能就在“89”所在的机房。
* h5 c% m% Z3 `5 s
( ]4 b8 g1 d5 Y6 b* {方法3:
9 s: ^+ \9 A6 } a' _! a* _, a2 O+ _5 V( |
另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:% G0 X5 ]& R4 f5 T$ ?( k
inetnum: 211.147.0.0 - 211.147.7.255
) `5 Z5 @+ b/ c# P2 v$ m, }2 t ]; inetname: DYNEGY-COMMUNICATION
, V0 r6 _% U4 Qdescr: DYNEGY-COMMUNICATION
# P& ], L) ], h( C( Sdescr: CO.LTD
# E* ^8 n! C( Wdescr: BEIJING% E6 e" o4 F, L9 A$ C
country: CN, ^! c3 ~0 v3 e* z& `8 e) Z
admin-c: PP40-AP
. p9 s. N: \) J1 U, Ftech-c: SD76-AP! o: q! \8 G3 H7 P5 v
mnt-by: MAINT-CNNIC-AP
! o% W, u( `" h) ?changed: [email protected] 20011112
6 Q2 W3 i \3 ]" l4 ~- w6 kstatus: ALLOCATED PORTABLE( x8 b5 y4 ^9 C6 c X
source: APNIC* j3 r( b/ y/ r& W' ]& [- E3 C
person: Pang Patrick
. H& q+ D. @ X5 ?- ^) W3 G7 D* onic-hdl: PP40-AP: {& v8 B# n, { H. z$ I
e-mail: [email protected]
& F# Y1 f! C1 Y7 Q& V! Z2 r' Vaddress: Fl./8, South Building, Bridge Mansion, No. 53 C! ~* I' K$ J4 q" R7 m$ Y
phone: +86-10-63181513$ s0 Z- P+ |4 z6 o& v
fax-no: +86-10-63181597
1 D& \4 `/ _8 x2 D; }. b$ E( zcountry: CN% ?. l* x1 O' \* ~8 o
changed: [email protected] 20030304
M. _) f4 S+ B6 z7 W' b s% Tmnt-by: MAINT-CNNIC-AP
3 ^# l0 ^" F# j6 a% Ksource: APNIC
. U6 A% b$ ~1 v* o0 u2 a6 M& l7 `( Bperson: ShouLan Du
" |" x# }$ F# B& \) H& |+ V% Daddress: Fl./8, South Building, Bridge Mansion, No. 53$ k* h y, H7 n6 P' w+ U3 R
country: CN% G& [" z7 `' S) R& h
phone: +86-010-83160000+ Y/ M) Y* B; N5 ~# ^9 n& V. i
fax-no: +86-010-83155528
: P* y8 t& I( |- t7 e9 p5 ?e-mail: [email protected]3 A( q# t8 b1 `! G% y, i
nic-hdl: SD76-AP& j3 W# G: m, l- E
mnt-by: MAINT-CNNIC-AP
, h e F- S* m- N7 w' O+ V6 ochanged: [email protected] 20020403: }) m( D' V. l& W. U
source: APNIC' d. U# Y0 z# @# |( E
1 ^. h ^( N, W+ A$ @% P5、我为什么要写这篇文章?
& ?9 j. y( t5 M 7 i7 p$ E' g( w) {/ S2 F& S7 s
新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
- a) v* w' @8 p7 Q$ F# S o或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。! l, s8 c$ v- r1 z/ W
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。7 [" p; T2 y; C" ?) p4 t( i( T: ]
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,
2 p% N7 k7 O- _8 C- M但是现在你既然打搅了我的生活,我就不得不说几句了。8 c1 S3 @- c9 t; h
7 B0 N* J7 c- O4 s, y6、我是谁?
5 I* @( E' v7 y, L2 x% u
9 [7 m" B; F4 g$ R' B如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。4 G* }! J2 Q* Z% R+ P+ k
#!/usr/bin/perl -w' J' Q1 D `/ Q
use Digest::MD5 qw(md5 md5_hex md5_base64);
9 m& C* ]: f, j7 M3 C$name = 'MyName';
8 Z) C, b2 |; ~! E3 \9 ^. Q# D$count = MyCount;% m! c+ M4 C( A9 r9 Z
for ($i=0; $i〈$count; $i++)
5 ~6 {6 T& t" J9 w9 i: x+ O; z{6 L1 E" S" V* Z$ Y( o
$name = md5_hex($name);
. d/ ~- \, q, ]! j6 v8 V}0 r7 ^0 A" K1 N1 V9 F( M
print $name;- D4 r2 b a1 G) ^% l3 e6 ? d
' B4 S$ E3 p& Q以下签名,用于以后可能出现的关于此文的交流:
4 @3 y4 a9 d# L6 p' U& W5 H- U9 \# \1 6631876c2aea042934a5c4aaeabb88e9
3 M$ h( ^2 G+ v; @; x) c4 _2 a6a607b3bcff63980164d793ff61d170$ ~( a9 t# y) X
3 6a58e8148eb75ce9c592236ef66a3448
- G8 K4 d4 ?. \2 j. S. \( T H4 ded96d29f7b49d0dd3f9d17187356310
m" Y2 W; A. T- w }5 cc603145bb5901a0ec8ec815d83eea66 |