|
在剑盟看到的帖子,很值得玩味特此转来,建议新手就不用看了。7 K. y L: c! D; C2 M) K; n- b
5 f- N9 [6 l3 b
- D3 m/ E" K8 l9 a
............................................................................................................................................4 S& b' d1 ]# M: Y1 x1 T- J
% B {) L$ O; X9 i! | H) F4 U+ ]
是谁控制了我们的浏览器?) \4 I& m; }, m' G( {# D# `1 ~
1、现象是什么?2 E9 F6 _9 t/ r k. h3 H2 a6 R$ i
+ C6 |9 C2 s8 i大约从今年年初开始,很多人就发现,在浏览一些网站的时候,
/ D0 K: t/ c6 |4 h) D7 D地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。1 N, J' e( N7 H# n
很多人以为这是网站自己弹出的广告,也就没有在意。, Y% t. \! y* l) A" m4 }9 J
0 E5 { f$ v! a1 q/ h% E
我是属于很在意的那些人之一。: V; I( Z! Q$ w e6 l; U, ~
8 P; l _, D7 {/ ?" ?2 \
2、这是怎么回事?
8 b7 |* B) ?1 C& v / |$ K6 q% n/ G& M
经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),# q3 z# q3 J# x8 C8 f+ i9 z- T+ w- _4 J
与使用何种操作系统也无关(linux用户也有相关报告)。! s( m) H! l" @4 g
我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。$ \6 m$ j9 ^* j/ B0 N) x$ p
U* ]1 z+ J2 ]9 {( j那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。& U# N% b+ x& u5 \0 V) \! `% E$ Q
' c5 k( u! k4 Y( L, t$ Z, }$ d6 E+ b
那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,0 O0 f, [6 H. C$ n, g; T+ |% H
劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。
: ]. E {- y# _* F( K* ?4 U) z3 |3 k 7 o; l2 h! |9 S' |* g" ~7 H+ s
伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。, ]+ G# |0 J6 B4 g# b5 [
) `: J# Q6 s) d/ r8 \9 r为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。! q. v6 ~) r/ h" m
直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回 404错误。
?- B6 a& u% y7 m2 |' r我写了一个脚本。不断访问这个IP,同时记录进出的数据包。+ m' I+ K. M5 i
在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:
; p: }1 r' C& K) T4 _) ]# RHTTP/1.1 404 Object Not Found
* t* \& p% q X; P, @: D8 vServer: Microsoft-IIS/5.0
( A8 {# Z# G* C! O& GDate: Mon, 19 Jul 2004 12:57:37 GMT* V6 h/ k! m7 V% n& m! P; Z
Connection: close3 V2 K; P K Q7 d. R
Content-Type: text/html
8 v! C4 ^- Y4 l& aContent-Length: 111
/ _( Q& b+ a3 t2 S2 y* Y〈html〉〈head〉〈title〉Site Not Found〈/title〉〈/head〉* z# }2 @: A0 {7 ~" |8 i
〈body〉No web site is configured at this address.〈/body〉〈/html〉
$ p) {# `6 s% v3 z( `' R3 ]0 g
/ {1 G# \3 k. t, U0 g# @; P* ]* T但是有两次,返回了这个:
8 z S6 B1 J+ q8 M4 [/ h# r6 x% Q' uHTTP/1.1 200 OK1 ~0 o2 Y- ^ P
Content-type: text/html
2 `5 s2 p+ Z7 [$ R& E6 ^& _〈html〉
+ i J2 {* \* x〈meta http-equiv='Pragma' content='no-cache'〉
5 x, h; i |; E3 p7 ^' W〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉
& Y7 @9 g! f" J) W* a〈script〉& `$ E3 I3 J& D0 O6 @2 `
window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');+ B5 a- Q) k: @$ B
〈/script〉6 f% U5 v: h* y1 \ J. o0 r
〈head〉, Z6 d: G, s6 M1 n, i9 R B5 m
〈title〉〈/title〉 s7 r; C* r c; d7 J
〈/head〉
1 g/ h0 b+ \* j/ T〈body〉6 I% H$ L5 D$ X; n/ @/ t& \
〈/body〉
$ r# d9 ?' V& u$ Y〈/html〉
: V8 d: \4 l! l& l& U" S ' ]1 r+ t! `' t0 ^
更进一步分析数据包,可知劫持流程如下:
2 U, P; d' W! z/ G1 r) d2 F
3 U& H' q+ S5 B3 eA、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。: a, t) G* V* X6 |! c8 V# q
这个设备按照某种规律,对于某些HTTP请求进行特殊处理。' I8 b' {. ~. m7 o& p V" W a
9 t+ W4 y9 {& g
B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。8 g$ _1 Q1 ^: B& e
这个过程是非常快的。我们的 HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。1 b9 X5 E6 `+ M* v: e- e: d9 H# k
而任何正常的服务器都不可能在这么短的时间内做出回应。 u' T! V z4 s; ^- ^2 {
. v- a$ |7 f/ k: B2 o3 E [1 V
C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。0 D/ X! B9 Z- q
& b6 ^. i" B6 d$ P# }9 o
D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,2 a3 }* Q) i2 Y* ~. v3 z1 O0 v
重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。; E j# y1 m! j c: m9 w6 z8 n* |
7 z* x' _5 B7 F: t
在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,' T- [) [1 W R2 [: V2 V
这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。) C5 A, ^" h( ~; U% L
" M! n6 G* _3 R3 g R% I
真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。
2 r% u# f4 I; c 5 I, v* }( n# r# t9 \; @* M% ~
3、现在怎么办?' R- e8 u" `7 v! U+ g& \
, d% e% g8 y# n* j Y) o1 V在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:
# U2 m. b' Z; D5 M
; ?7 f, p$ s& l7 OA、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
+ B" n% Q! W) l1 {# u - E/ P# g& r- W$ i5 y$ K' h( a4 T
B、在你自己的个人防火墙上,完全封锁211.147.5.121。
' Q0 o9 u) @0 c0 x, n& O # \$ Z" @1 T& W8 g) f, P
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。/ Q' `8 Y( a: s; h
( u! \) z- u6 V# R8 y; g绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。" n6 _& U2 |2 v" k$ Z$ |
今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?3 d: j" V0 P$ E& y
我们的HTTP通信完全控制在别人手里。
9 t& j5 Z* p. Q5 W
. ]4 d& _& F1 e( v; @0 ]4、如何把坏家伙揪出来?- {1 i' d1 H h$ N s& j
2 K/ K- h) |" Z; P9 i如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:$ W: Z# O4 A! R. X! @
1 k: F$ L2 x3 R2 ]8 Y
方法1:$ q: }. f& g8 Y7 d- H
# R/ B" k% }+ V% z2 }# A% U伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。
% ~) A: M5 s! l9 y以我收到的数据包为例,真实的服务器端回应 TTL是107,伪造的回应TTL是53。
; {/ u+ y/ s5 d* I那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。8 U. y) y6 x! y/ c% j0 [3 F7 c
只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!
& [0 _6 b, Q0 z; y
8 W) B; w' H* K ]+ V) x8 y8 }3 Q方法2:* r8 W$ i! j- S2 b
; p% L+ w1 D0 _8 _ ~# F% w! k
假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。
+ N; R" n$ l) D& u; m- [% K" E1 G% p在google上以下面这些关键字搜索:php?curtime,htm? curtime,asp?curtime,可以得到大量访问时会被inject的网址。! u1 g* f0 K5 K$ t# |# g" S7 x/ E% v
编写脚本反复访问这些网址,验证从你的ip访问过去是否会被 inject.将确实会被inject的结果搜集起来,
: M! ~2 `- R# F6 H- @在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。- G* x# C3 A; b2 A1 \& v
# j: Q5 H3 c" V- {
上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,1 b$ @# Y) {! w& C7 m' W$ j+ a4 }' M- {
那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。6 D# Y1 R: V2 U0 E+ z
例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:
# q' A% V4 ?8 t0 h1 B/ iMyIP-12-13-14-15-65-[89]-15-57-A C8 I m5 z2 K& E9 w; F
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B8 y; [7 N6 s8 Z% G N, n0 d/ q
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
9 N5 s Z; \4 v6 Y! a2 dMyIP-22-25-29-32-65-45-[89]-58-D
9 O, ]0 D# P2 p% r $ I) Y+ b8 P0 E2 P4 a8 z$ B
显然,inject设备极大可能就在“89”所在的机房。4 s9 i/ D! g" F* Z$ m
7 ]$ A% l3 y1 K5 r: y方法3:
" q- A+ t$ T! Q( j! G! h& B+ F 1 t' T+ q# |- ~" u
另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:
1 ~( J6 O: c' `7 ainetnum: 211.147.0.0 - 211.147.7.255
# X; h P! J* v; {netname: DYNEGY-COMMUNICATION) b6 e# \$ n- W
descr: DYNEGY-COMMUNICATION
) F S+ P$ c& z/ d5 w" O+ w; o/ Qdescr: CO.LTD1 ^( O- u$ E' U6 Q- v. U& ? u
descr: BEIJING7 i r% ?* D$ p2 N
country: CN! E2 k" m. N6 @; a5 G$ z6 T% S
admin-c: PP40-AP
' h; o5 G5 ^7 p' |; Z, C- xtech-c: SD76-AP
) j; c" I* x6 gmnt-by: MAINT-CNNIC-AP
2 e l" C+ X$ _- T% N1 ]7 f: x1 lchanged: [email protected] 20011112 d; D3 p# T9 M$ I5 H
status: ALLOCATED PORTABLE
" K3 e- J5 x0 E Y/ ~source: APNIC' R) b6 v0 \, Z5 y+ ]. {# R
person: Pang Patrick
* ~% H$ U" P: G8 [5 B! B% K6 z0 xnic-hdl: PP40-AP
3 |6 j' s3 ^) H( b7 R( s1 Fe-mail: [email protected]) `# p0 c1 F B# B3 H" Z! q5 C& u6 R
address: Fl./8, South Building, Bridge Mansion, No. 53
6 T0 X" ^3 Y; s5 Xphone: +86-10-63181513; @+ @7 L# E1 U/ M1 ~% w& }% W
fax-no: +86-10-63181597
) M6 E- j6 h% L- Ycountry: CN
: O, w* j; O0 _5 Tchanged: [email protected] 20030304! F0 ~( I+ S. _5 U$ O, s! f
mnt-by: MAINT-CNNIC-AP' S6 ?, M% E# l
source: APNIC
& [, o6 ~# {4 Y; J6 Y1 j3 Q' Hperson: ShouLan Du
5 {2 x' {9 O1 q% o, k- d1 ?address: Fl./8, South Building, Bridge Mansion, No. 53
b% }+ _+ D4 u# h* @0 Pcountry: CN! d3 ]8 f. X) Y- r' V9 ?
phone: +86-010-83160000
% e. b0 u; h8 l; ^fax-no: +86-010-831555283 F( Q* p E. L' w0 W" ~" q- z; Z
e-mail: [email protected]
$ ?; q1 d. A unic-hdl: SD76-AP
1 W+ Z7 C7 b5 @$ }" ?mnt-by: MAINT-CNNIC-AP. _) s6 m. V+ p0 X! g* s
changed: [email protected] 200204038 [7 E5 }+ e5 y3 t5 [, Z/ U4 l$ ?) y
source: APNIC
0 `% P- H9 P% j
' j" a! T8 W$ }! P5、我为什么要写这篇文章?
# Y( M- |; a; x: @; @
x E$ @: R0 E7 l3 ]7 I2 X新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;
) l9 M6 S& k) @, p或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。1 B/ s8 _" r+ K* \
可是这个 211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。, C: i4 n! @: p' B, F9 m# C# Z
事实上,你可以敲诈克林斯·潘,强奸克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,6 U4 g7 ]8 S! W! _* G& t
但是现在你既然打搅了我的生活,我就不得不说几句了。
1 o5 ` t2 G9 l: }& ]! R
7 ^8 e6 P* T9 X. h o$ _& W6、我是谁?
9 m# y/ b0 _3 w( I- N `9 | 4 ^- [3 M9 C6 m' s; c
如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。
! ]# g& j) V* y( h3 F' G#!/usr/bin/perl -w
, e* }6 k, X& ouse Digest::MD5 qw(md5 md5_hex md5_base64);
2 v9 b& j; ?, G F$name = 'MyName';; ]- l8 m! l: ^& s1 c
$count = MyCount;: @: K( B3 ^1 z n2 ?1 r
for ($i=0; $i〈$count; $i++)
- G& R. v6 C4 e2 c; M$ v/ ?{
3 e+ _4 l4 J- f4 @$name = md5_hex($name);
) n6 y; T9 H' x1 M+ j}% e/ `* k* ~5 ^0 O
print $name;
6 \. A) p: `$ }- k& G) C. J1 L / B/ Z) h" ?, D0 h" c# m1 R
以下签名,用于以后可能出现的关于此文的交流:
! J3 t+ P1 D( A1 6631876c2aea042934a5c4aaeabb88e9
' ` s8 T7 C' l/ D5 `5 U0 h2 a6a607b3bcff63980164d793ff61d170+ n& ~ _, _( }! k& _. F
3 6a58e8148eb75ce9c592236ef66a34487 h, a1 F$ y. x4 d7 T# h5 S
4 ded96d29f7b49d0dd3f9d17187356310) e& _6 [; o, l0 J
5 cc603145bb5901a0ec8ec815d83eea66 |