CDN和DNS劫持网络跳转,排查及解决经验分享

2019年9月4日14:29:11 发表评论 35 views

https://www.sojson.com 被劫持了。开始没发现,个别地区用户发现打开sojson.com或者从百度搜索 sojson 的关键词进入的时候,就跳转到了搜狗。

下面来看看一个跳转的图:

CDN和DNS劫持网络跳转,排查及解决经验分享

另外看看视频吧:

感谢 @甘肃|Java|逝月  提供的视频。

我们可以看到,点击一个页面到了搜狗,并且 搜索的关键词是“json”。

抓包看了一下头信息:

第一次请求www.sojson.com

  1. Request URL: https://www.sojson.com/
  2. Request Method: GET
  3. Status Code: 200 (from disk cache)
  4. Remote Address: 123.132.254.145:443
  5. Referrer Policy: no-referrer-when-downgrade
  6. age: 1077
  7. cache-control: max-age=7200
  8. content-encoding: br
  9. content-type: text/html
  10. date: Fri, 13 Apr 2018 07:48:32 GMT
  11. expires: Fri, 13 Apr 2018 09:30:35 GMT
  12. server: marco/2.0
  13. status: 200
  14. vary: Accept-Encoding
  15. via: S.mix-sd-dst-036, T.43.H, V.mix-sd-dst-040, T.139.H, M.cun-sd-lyi1-139
  16. x-request-id: 64e8891e3fafd7c83206d4f897b4ddbb; fc4ef7cb4b954412c8a0710df20d9ab5
  17. x-source: C/200
  18. Provisional headers are shown
  19. Upgrade-Insecure-Requests: 1
  20. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

第二次跳转到了(adg.payud.com):

  1. Request URL: http://adg.payud.com/sogou_pc.php?flag=0&kw=json
  2. Request Method: GET
  3. Status Code: 200 OK
  4. Remote Address: 113.10.139.224:80
  5. Referrer Policy: no-referrer-when-downgrade
  6. Connection: keep-alive
  7. Content-Encoding: gzip
  8. Content-Type: text/html
  9. Date: Fri, 13 Apr 2018 08:04:25 GMT
  10. Pragma: no-cache
  11. Server: nginx/1.0.15
  12. Transfer-Encoding: chunked
  13. Vary: Accept-Encoding
  14. X-Powered-By: PHP/5.2.17p1
  15. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  16. Accept-Encoding: gzip, deflate
  17. Accept-Language: zh-CN,zh;q=0.9
  18. Connection: keep-alive
  19. Host: adg.payud.com
  20. Upgrade-Insecure-Requests: 1
  21. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
  22. flag: 0
  23. kw: json

第三次跳转(www.sogou.com)

  1. Request URL: https://www.sogou.com/sogou?pid=sogou-site-9cd013fe250ebffc&ie=utf-8&query=json
  2. Request Method: GET
  3. Status Code: 200 OK
  4. Remote Address: 58.250.125.49:443
  5. Referrer Policy: unsafe-url
  6. Cache-Control: max-age=0
  7. Connection: keep-alive
  8. Content-Encoding: gzip
  9. Content-Type: text/html; charset=utf-8
  10. Date: Fri, 13 Apr 2018 08:04:25 GMT
  11. Expires: Fri, 13 Apr 2018 08:04:25 GMT
  12. Server: nginx
  13. set-cookie: black_passportid=1; domain=.sogou.com; path=/; expires=Thu, 01-Dec-1994 16:00:00 GMT
  14. set-cookie: ld=Klllllllll2z1pRylllllVryBw6lllll0GMO1kllll1lllllRylll5@@@@@@@@@@; path=/; expires=Sun, 13 May 2018 08:04:25 GMT; domain=.sogou.com
  15. Transfer-Encoding: chunked
  16. Vary: Accept-Encoding
  17. x_ad_pagesize: adpagesize=7622
  18. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  19. Accept-Encoding: gzip, deflate, br
  20. Accept-Language: zh-CN,zh;q=0.9
  21. Connection: keep-alive
  22. Cookie: ABTEST=0|1523605712|v17; SNUID=E493F8BB36335F812E71720F37BF314B; SUID=D2A5CF8C4F18910A000000005AD060D0; browerV=3; osV=1; SUV=000D53928CCFA5D25AD060D1BAD50261; IPLOC=CN3100; ld=vZllllllll2z1pRylllllVryYMylllll0GMO1kllllZlllllRylll5@@@@@@@@@@
  23. Host: www.sogou.com
  24. Referer: http://adg.payud.com/sogou_pc.php?flag=0&kw=json
  25. Upgrade-Insecure-Requests: 1
  26. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
  27. pid: sogou-site-9cd013fe250ebffc
  28. ie: utf-8
  29. query: json

通过CDN 获取CDN缓存的内容是以下内容:

CDN和DNS劫持网络跳转,排查及解决经验分享

仔细看吧,应该能看明白,就是返回的就是一个  js  ,并且直接刷新到上面第二个网址,然后跳转到搜狗了。

过程就是这么简单,这个就确定了,100%是被劫持了。但是不一定是  DNS劫持  。

答疑:

1.有的人看到这里就会问了,不是  HTTPS  会解决劫持吗?sojson 不是HTTPS的站点吗?那为什么?

这个问题问的漂亮,我来回答一下:首先  HTTPS  是防止嵌入  JS   方式的劫持,就是你请求一个页面,  DNS  恶心的厂商会加一段js放里面,会出现广告之类的,一般出现在移动端,PC端少,但是博客园就出现过一次。这种一般是  https  就可以解决。

2.那这种是什么劫持?

这种就是直接做的域名劫持,就是把你域名直接拦截,直接返回他的内容,然后就是上面图的恶心内容了。这种  https  没有用。

3.怎么解决?

首先告诉你,基本无解,只是这种太恶心了。你只能发律师函给网络运营商。好多是网络运营商和  CDN  厂商相互勾结,因为这个利益链很大。

感谢群里的热心网友:@北京|java|lsp @杭州|java|Mr.周 @广东|Java|哈喽  @上海|Java|Ever  @甘肃|Java|逝月 @上海|Java|ETFOX  等等,感谢你们帮我一起排查问题。

DNS劫持的几种示意图

1、DNS域名拦截方式

CDN和DNS劫持网络跳转,排查及解决经验分享

2、DNS增加脚本方式

CDN和DNS劫持网络跳转,排查及解决经验分享

3、CDN + 网络运营商混合方式(今天SOJSON遇到的就是这种)

CDN和DNS劫持网络跳转,排查及解决经验分享

这样  CDN  直接缓存的就是劫持的脚本。

这个就是没办法,下面看看CDN厂商的回复:

您好,肯定不是我们和网络服务商一起搞的,您出现这样的问题,某种程度上说我们CDN 也是受害者。况且我们没有理由把您劫持到 sogou 而不是有利我们的其他一些网站。您目前出现的劫持类型应该数属于DNS层劫持,所以https方案 应该是不能解决您的问题的。

刚才希望您配置的是有一点作用的,如果劫持返回了是content-type是 静态文件的话,会被我们CDN 默认缓存起来,这样的话,就可能会扩大您的影响范围了,所以在一定程度上是有作用的。

目前我们这边也是缺少 直接的劫持证据,您也可以后续再观察一下,有复现可以随时联系我们,我们肯定会帮您强力的反馈给网络运营商,要求停止劫持行为。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: