对于ISP的http会话劫持,各位看看这个文章,更换DNS纯属蛋疼

两天
两天
管理员
740
文章
0
粉丝
七嘴八舌3686,1069字数 3638阅读12分7秒阅读模式

最近发现我的另一个小站(爱Radio网)频繁弹出广告,被QQ浏览器拦截,起初以为是被人挂马了,仔细找了找也没发现异常。后来想想是不是DNS劫持了,可惜换了本地DNS弹窗广告依旧。后请教Jason分析说说isp劫持,尼玛这就尴尬了,这是神马玩意。百度可以下,还是不懂,毕竟是学机电的,理解这玩意有些难度。最后解决方法就是投诉运行商或者加证书用https访问,这俩对我来说都不简单,就只能先这样了,蓝瘦香菇!
另外,我的网络是山东移动无线网络(CMCC),坑爹的玩意。

文章源自两天的博客-https://2days.org/3032.html



以下转载:

本文遵从GPL协议,欢迎转载。文章源自两天的博客-https://2days.org/3032.html

1、现象是什么?文章源自两天的博客-https://2days.org/3032.html

大约从今年年初开始,很多人就发现,在浏览一些网站的时候,地址栏的url后面会被莫名其妙地加上“?curtime=xxxxxxxxxx”(x为数字),并且弹出广告窗口。很多人以为这是网站自己弹出的广告,也就没有在意。文章源自两天的博客-https://2days.org/3032.html

我是属于很在意的那些人之一。文章源自两天的博客-https://2days.org/3032.html

2、这是怎么回事?文章源自两天的博客-https://2days.org/3032.html

经过测试和分析,我们发现,上述现象与使用何种浏览器无关(我们测试了各种流行的http客户端),与使用何种操作系统也无关(linux用户也有相关报告)。我对出现该现象的IE浏览器进程进行了跟踪调试,没有发现任何异常。可以断定,并不是系统被安装了adware或者spyware。文章源自两天的博客-https://2days.org/3032.html

那么是不是那些网站自己做的呢?后来发现,访问我们自己管理的网站时也出现了这种情况,排除了这个可能。文章源自两天的博客-https://2days.org/3032.html

那么剩下唯一的可能就是:有人在某个或某几个关键网络节点上安装了inject设备,劫持了我们的HTTP会话——我实在是不愿相信这个答案,这个无耻、龌龊的答案。文章源自两天的博客-https://2days.org/3032.html

伟大的谢洛克·福尔摩斯说过:当其他可能都被排除之后,剩下的,即使再怎么不可思议,也一定是答案。文章源自两天的博客-https://2days.org/3032.html

为了验证这个想法,我选择了一个曾经出现过上述现象的网站附近网段的某个IP。直接访问这个IP的HTTP服务,正常情况下是没有页面的,应该返回404错误。我写了一个脚本,不断访问这个IP,同时记录进出的数据包。在访问进行了120次的时候,结束请求,查看数据。120次请求中,118次返回的都是正常的404错误:

  1. HTTP/1.1 404 Object Not Found
  2. Server: Microsoft-IIS/5.0
  3. Date: Mon, 19 Jul 2004 12:57:37 GMT
  4. Connection: close
  5. Content-Type: text/html
  6. Content-Length: 111
  7. <html>
  8. <head>
  9. <title>Site Not Found</title>
  10. </head>
  11. <body>
  12. No web site is configured at this address.
  13. </body>
  14. </html>

但是有两次,返回了这个:

  1. HTTP/1.1 200 OK
  2. Content-type: text/html
  3. <html>
  4. <meta http-equiv='Pragma' content='no-cache'>
  5. <meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'>
  6. <script>
  7. window.open('http://211.147.5.121/DXT06-005.htm', '', 'width=400,height=330');
  8. </script>
  9. <head>
  10. <title></title>
  11. </head>
  12. <body>
  13. </body>
  14. </html>

更进一步分析数据包,可知劫持流程如下:

A、在某个骨干路由器的边上,躺着一台旁路的设备,监听所有流过的HTTP会话。这个设备按照某种规律,对于某些HTTP请求进行特殊处理。

B、当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。这个过程是非常快的,我们的HTTP请求发出之后,仅过了0.008秒,就收到了上面的回应。而任何正常的服务器都不可能在这么短的时间内做出回应。

C、因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。

D、浏览器会根据〈meta http-equiv='Refresh' content='0;URL=?curtime=1091231851'〉这一行,重新对你要访问的URL进行请求,这一次,得到了请求的真正页面,并且调用window.open函数打开广告窗口。

在google中以“php?curtime”、“htm?curtime”、“asp?curtime”为关键字搜索,出现的基本上是国内网站,这表明,问题出在国内。用于inject的设备插在国内的某个或某几个大节点上。

真相大白。我们被愚弄了,全中国的网民都成了某些人的赚钱工具。

3、现在怎么办?

在坏家伙被捉出来之前,我们要想不受这个玩意的骚扰,可以考虑下面的方法:

A、请各单位的网络管理员,在网络的边界设备上,完全封锁211.147.5.121。
B、在你自己的个人防火墙上,完全封锁211.147.5.121。
C、如果你的浏览器是FireFox、Opera、GreenBrowser、或者MyIE,可以把“http://211.147.5.121/*”丢到弹出窗口过滤列表中去。

绝不只是广告那么简单,这涉及到我们的选择,我们的自由,这比垃圾邮件更加肮脏和无耻。今天是广告,明天就可能在你下载软件的时候给你加个adware或者加个病毒进去,谁知道呢?我们的HTTP通信完全控制在别人手里。

4、如何把坏家伙揪出来?

如果你是一个有权力调查和处理这件事的人,从技术上,可以考虑下面的手段:

方法1、

伪造的回应数据中并没有处理TTL,也就是说,我们得到的回应数据中TTL是和inject设备位置相关的。以我收到的数据包为例,真实的服务器端回应TTL是107,伪造的回应TTL是53。那么,从我们这里到被请求的服务器之间经过了21(128-107)个节点,从我们这里到inject设备经过了11(64-53)个节点。只需要traceroute一下请求的服务器,得到路由回溯,往外数第11个节点就是安插inject设备的地方!

方法2:

假如坏家伙也看到了这篇文章,修改了TTL,我们仍然有办法。在google上以下面这些关键字搜索:php?curtime,htm?curtime,asp?curtime,可以得到大量访问时会被inject的网址。编写脚本反复访问这些网址,验证从你的ip访问过去是否会被inject。将确实会被inject的结果搜集起来,在不同的网络接入点上挨个用traceroute工具进行路由回溯。分析回溯的结果。

上面我们已经说明了,坏家伙是在某个或者某些重要节点上安插了inject设备,那么这个节点必然在被inject的那些网址到我们的IP之间的某个位置上。例如有A、B、C、D四个被inject到的网站,从四个地方进行路由回溯的结果如下:

MyIP-12-13-14-15-65-[89]-15-57-A
MyIP-66-67-68-69-85-[89]-45-68-84-52-44-B
MyIP-34-34-36-28-83-[89]-45-63-58-64-48-41-87-C
MyIP-22-25-29-32-65-45-[89]-58-D

显然,inject设备极大可能就在“89”所在的机房。

方法3:

另一方面,可以从存放广告业面的211.147.5.121这个IP入手,whois查询结果如下:

inetnum: 211.147.0.0 - 211.147.7.255
netname: DYNEGY-COMMUNICATION
descr: DYNEGY-COMMUNICATION
descr: CO.LTD
descr: BEIJING
country: CN
admin-c: PP40-AP
tech-c: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: hui_zh@sina.com 20011112
status: ALLOCATED PORTABLE
source: APNIC

person: Pang Patrick
nic-hdl: PP40-AP
e-mail: bill.pang@bj.datadragon.net
address: Fl./8, South Building, Bridge Mansion, No. 53
phone: +86-10-63181513
fax-no: +86-10-63181597
country: CN
changed: ipas@cnnic.net.cn 20030304
mnt-by: MAINT-CNNIC-AP
source: APNIC

person: ShouLan Du
address: Fl./8, South Building, Bridge Mansion, No. 53
country: CN
phone: +86-010-83160000
fax-no: +86-010-83155528
e-mail: dsl327@btamail.net.cn
nic-hdl: SD76-AP
mnt-by: MAINT-CNNIC-AP
changed: dsl327@btamail.net.cn 20020403
source: APNIC

5、我为什么要写这篇文章?

新浪为我提供桃色新闻,我顺便看看新浪的广告,这是天经地义的;或者我安装某某网站的广告条,某某网站付给我钱,这也是天经地义的。可是这个211.147.5.121既不给我提供桃色新闻,又不给钱,却强迫我看广告,这就严重伤害了我脆弱而幼小的心灵。事实上,你可以敲诈克林斯·潘,**克里奥·佩德拉,咬死王阳明,挖成吉思汗墓,我都不会计较,但是现在你既然打搅了我的生活,我就不得不说几句了。

6、我是谁?

如果你知道MyName,又知道MyCount的话,那么,用下面这段perl可以得到:2f4f587a80c2dbbd870a46481b2b1882。

  1. #!/usr/bin/perl -w
  2. use Digest::MD5 qw(md5 md5_hex md5_base64);
  3. $name = 'MyName';
  4. $count = MyCount;
  5. for ($i=0; $i$count$i++)
  6. {
  7. $name = md5_hex($name);
  8. }
  9. print $name;

以下签名,用于以后可能出现的关于此文的交流:
1 6631876c2aea042934a5c4aaeabb88e9
2 a6a607b3bcff63980164d793ff61d170
3 6a58e8148eb75ce9c592236ef66a3448
4 ded96d29f7b49d0dd3f9d17187356310
5 cc603145bb5901a0ec8ec815d83eea66

彻底解决办法就是打电话给ISP骂人,要他们把你的帐号列入广告推送黑名单。前面有个和帖子说更换DNS,其实换DNS根本没有用。更换DNS连DNS劫持都不能解决,别说http会话劫持了。

【HTTP劫持和DNS劫持】腾讯的实际业务分析

简单介绍一下HTTP劫持和DNS劫持的概念,也就是运营商通过某些方式篡改了用户正常访问的网页,插入广告或者其他一些杂七杂八的东西。

首先对运营商的劫持行为做一些分析,他们的目的无非就是赚钱,而赚钱的方式有两种:
1、对正常网站加入额外的广告,这包括网页内浮层或弹出广告窗口;
2、针对一些广告联盟或带推广链接的网站,加入推广尾巴。例如普通访问百度首页,被前置跳转为http://www.baidu.com/?tn=90509114_hao_pg

在具体的做法上,一般分为DNS劫持和HTTP劫持。
DNS劫持:
一般而言,用户上网的DNS服务器都是运营商分配的,所以,在这个节点上,运营商可以为所欲为。
例如,访问http://jiankang.qq.com/index.html,正常DNS应该返回腾讯的ip,而DNS劫持后,会返回一个运营商的中间服务器ip。访问该服务器会一致性的返回302,让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原来访问的地址。
HTTP劫持:
在运营商的路由器节点上,设置协议检测,一旦发现是HTTP请求,而且是html类型请求,则拦截处理。后续做法往往分为2种,1种是类似DNS劫持返回302让用户浏览器跳转到另外的地址,还有1种是在服务器返回的HTML数据中插入js或dom节点(广告)。

在用户角度,这些劫持的表现分为:
1、网址被无辜跳转,多了推广尾巴;
2、页面出现额外的广告(iframe模式或者直接同页面插入了dom节点)。

处理办法:
1、先对外网做检测,上报被劫持的情况。
对于我这个业务而言,加推广尾巴没意义,那么就剩下植入广告的问题了。页面广告可能通过iframe方式,也可以通过dom节点方式,需要在首页检查这两种情况。

  1. window.addEventListener('DOMNodeInserted', checkDivHijack);
  2. function checkDivHijack(e) {
  3.         var html = e ? (e.srcElement.outerHTML || e.srcElement.wholeText) : $('html').html();
  4.         var reg = /http:\/\/([^\/]+)\//g;
  5.         var urlList = html.match(reg);
  6.         if (!urlList || urlList.length == 0) {
  7.             return;
  8.         }
  9.         reg = /^http:\/\/(.*\.qq\.com|.*\.gtimg\.cn|.*\.qlogo\.cn|.*\.qpic\.cn|.*\.wanggou\.com)\/$/;
  10.         var hijack = false;
  11.         for (var i = 0; i < urlList.length; i++) {
  12.             if (!reg.test(urlList[i])) {
  13.                 hijack = true;
  14.                 break;
  15.             }
  16.         }
  17. }

(注:事后发现这个url检查不够严谨,虽然劫持的情况都能发现,但也把产品原有的一些正常插入做劫持误报了。例如,不过这个是小细节,把正则表达式完善一下就ok了)

2、针对被iframe加载的情况,需要先找到运营商设置的劫持规律。
在iframe中的网页能正常打开,而不是又被拦截加iframe,可能是因为请求的url上或cookie上运营商做了标记。我们可以利用这个规则,躲过劫持。

3、针对注入dom节点的情况,初始化时做检查,而且后续dom注入也做检查。可以检查dom中是否含有白名单以外的http链接,如果有,就可以判定为http劫持。

4、在前端以外的处理办法还有
a) 终端拦截所有返回包,判断ip来自黑名单(劫持的中间ip)则丢弃返回包。
这种做法的原因是,运营商劫持http请求后,并不是完全丢弃请求包,而是做了复制,一份继续发给目标服务器,另外一份做劫持处理直接返回302。因为这个302会比目标服务器的正常返回早得多,所以用户浏览器会只认第一个302,而丢弃后到的正常返回。
如果先把第一个302丢弃,等待后续正常返回,则问题解决。
b) 终端拦截请求包,并拆包发送。
运营商一般判断是否劫持,通过判断是否HTTP请求。 一般只会检测TCP连接建立后的第一个数据包,如果其是一个完整的HTTP协议才会被标记;如果并非是一个完整的HTTP协议,由于无法得到足够多的劫持信息,所以并不会被标记为HTTP协议。
所以,只要把请求包切得足够细,就能躲过一部分劫持(如果运营商学习“墙”大力气做多包拦截就没辙了)。

5、当然,最终,根本解决办法是使用HTTPS,不过这个涉及到很多业务的修改,成本较高。如果劫持比例小,也许通过适当的补救做法会更好。

来看看检测到的劫持情况:

总体1500万pv的业务,一天竟然有100万的劫持上报,即使排除一半的误报,也代表说20个用户中,就接近有1个用户出现被劫持的情况。
可见,各种小运营商(尤其是移动)的心是有多黑!胆子是有多大!

各种劫持的手段都有:
1、直接返回一个带广告的HTML;
2、在原html中插入js,再通过js脚本安插广告;
3、iframe展示原来正常网页.

本站文章大部分始于原创,用于个人学习记录,可能对您有所帮助,仅供参考!

weinxin
312379857
微信号已复制
←QQ扫一扫添加QQ好友
版权声明:本站原创文章转载请注明文章出处及链接,谢谢合作!
广告也精彩
 
  • ISP
  • ISP劫持
  • DNS
  • DNS劫持
  • https
  • ssl
评论  36  访客  32  作者  4
    • 澳门银座信誉
      澳门银座信誉 4

      如果你也正在为爱迷惘,或许下面这段话可以给你一些启示:爱一个人,要了解,也要开解;要道歉,也要道谢;要认错,也要改错;要体贴,也要体谅;是接受,而不是忍受;是宽容,而不是纵容;是支持,而不是支配;是慰问,而不是质问;是倾诉,而不是控诉;是难忘,而不是遗忘;

      是彼此交流,而不是凡事交代;是为对方默默祈求,而不是向对方诸多要求;可以浪漫,但不要浪费;可以随时牵手,但不要随便分手。

      • 澳门银座总代
        澳门银座总代 4

        如果你还继续爱得更多,很可能会给对方沉重的压力,让彼此喘不过气来,完全丧失了爱情的乐趣。所以请记住,喝酒不要超过六分醉,吃饭不要超过七分饱,爱一个人不要超过八分喔!

        那天朋友问我:‘到底该怎么做才算是爱一个人呢?’

        我笑着跟他说:‘其实每个人的爱情观都不一样,说对了叫开导,但就怕说错反倒变成误导。那就糟糕了!’

        • 澳门银座分分彩
          澳门银座分分彩 4

          所以,还是仔细看看身边的人吧!他或许已经等你很久喽!有人说,喝酒的时候,六分醉的微醺感是最舒服的。肌肉可以得到松弛,眼中看到的一切都是可爱的,如果你还继续喝,很可能隔天你会头疼欲裂,全身不舒服,完全丧失了喝酒的乐趣。吃饭的时候,七分饱的满足感是最舒服的。口中还留着食物的香味,再加上饭后甜点、水果,保持身材和身体健康绝对足够。如果你还继续吃,很可能会肠胃不适、吃太饱想睡觉,完全丧失了吃饭的乐趣。当你爱一个人的时候,爱到八分绝对刚刚好。所有的期待和希望都只有七八分;剩下两三分用来爱自己。

          • 澳门银座时时彩平台
            澳门银座时时彩平台 4

            我们总说:‘我要找一个你很爱很爱的人,你才会谈恋爱。’但是当对方问你,怎样才算是很爱很爱的时候,你却无法回答他,因为你自己也不知道。

            没错,我们总是以为,我们会找到一个自己很爱很爱的人。可是后来,当我们猛然回首,我们才会发觉自己曾经多么天真。假如从来没有开始,你怎么知道自己会不会很爱很爱那个人呢?

            其实,很爱很爱的感觉,是要在一起经历了许多事情之后才会实现的。或许每个人都希望能够找到自己心目中百分之百的伴侣,但是你有没有想过:“在你身边会不会早已经有人默默对你付出很久了,只是你没发觉而已呢?”

            • 澳门银座平台
              澳门银座平台 4

              接着他为女孩拭去脸上的雨水,并且脱去外套盖在女孩身上,此刻,女孩流泪了!但是流过她脸颊的泪却是温馨的。你体会到了吗?

              其实爱、恨往往只是在我们的一念之间!爱不仅要懂得宽容更要及时,很多事可能只是在于你心境的转变罢了!

              懂了吗?当有个人爱上你,而你也觉得他不错。那并不代表你会选择他。

              • 新澳门银座
                新澳门银座 4

                有一对情侣,相约下班后去用餐、逛街,可是女孩因为公司会议而延误了,当她冒着雨赶到的时候已经迟到了30多分钟,他的男朋友很不高兴的说:‘你每次都这样,现在我甚么心情也没了,我以后再也不会等你了!’刹那间,女孩终于决堤崩溃了,她心里在想:或许,他们再也没有未来了!

                同样的在同一个地点,另一对情侣也面临同样的处境;女孩赶到的时候也迟到了半个钟头,他的男朋友说:‘我想你一定忙坏了吧!’

                • themebetter
                  themebetter 2

                  学机电的折腾代码,很厉害呀。

                  • 青海旅游包车
                    青海旅游包车 0

                    现在的牛人是越来越多了

                    • 小萝博客
                      小萝博客 0

                      前排吃瓜群众

                      • 担保月入万元
                        担保月入万元 0

                        这个代码不错

                        • 凯哥自媒体
                          凯哥自媒体 0

                          分享的不错,谢谢

                          • 液晶电视哪个牌子好
                            液晶电视哪个牌子好 1

                            简爱的离开,是现在争论的重点。当简爱知道罗切斯特先生已有妻子时,在当时不允许离婚的风气里,简爱如果留下,就成了罗的情妇,而简爱的离开,让人们称赞她有自尊。

                            • 任务易
                              任务易 1

                              看楼下两个讨论的热火朝天 哈哈哈

                              • 故事会在线阅读
                                故事会在线阅读 1

                                挺不错的,可以看看的

                                • 胡杨
                                  胡杨 1

                                  就凭这一堆代码也要关注你 :evil:

                                    • 两天
                                      两天

                                      @ 胡杨 复制粘贴 ,你关注我干啥 :!:

                                    • 企业管理培训
                                      企业管理培训 2

                                      国内技术还不够完善的原因吧

                                      • 老何
                                        老何 5

                                        你是要抛弃这个博客的节奏

                                        • Win7en乐园
                                          Win7en乐园 2

                                          电脑端还好,手机浏览器简直无耻至极,我说的就是江苏电信,只要是手机浏览器打开http的页面,都会劫持,强行插入底部banner广告,简直没有办法治

                                          • 励志语录
                                            励志语录 4

                                            脸蛋疼+1

                                            • 企业咨询
                                              企业咨询 2

                                              脸蛋疼

                                            匿名

                                            发表评论

                                            匿名网友
                                            :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
                                            确定

                                            拖动滑块以完成验证
                                            加载失败