请问如何写 iptables 规则来过滤运营商 HTTP 劫持?

2016-08-08 16:39:00 +08:00
 Peanut666
坐标四川移动光纤, DNS 已经全局走 SS 过滤了移动运营商的 53 端口的 DNS 劫持。因为经常用国内网站,所以全局 SS 不现实。
目前存在的问题是京东、华为商城等网站有运营商 HTTP 劫持到返利链接,多次投诉工信部都没有效果,因此想求助大家写个 iptables 规则来过滤 HTTP 劫持,我放在 Openwrt 路由器上。

已经用 wireshark 抓取了两次劫持的过程,
京东劫持 https://www.cloudshark.org/captures/46d552c3e33b
华为商城 https://www.cloudshark.org/captures/aca094df243a

麻烦大家帮忙分析一下伪造的劫持包特征,帮我写个 iptables 规则,感谢大家!

对了,感谢 @KCheshireCat 的思路,可惜我不会写 iptables 规则,就放在这里一下:
[其实可以用 Wireshark 来观察 tcp 连接被劫持的情况
像移动的劫持都是抢答带 ACK , FIN , PSH 标志的 http 302 封包,把你的页面或者 JS 脚本劫持走。
而正常的 http 302 应答包通常并不会同时标记这 3 个标志位。
可以朝这个方向考虑,写成 iptables 规则就是
iptables -A FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 "0>>22&60@10&25=25&&0>>22&60@9>>2&60@0=0x48545450&&0>>22&60@9>>2&60@8=0x20333032" -j DROP
虽然可能会有误杀,但是劫持是再也没看到过]
我试过这个规则,针对四川移动的劫持无效。

看了这篇文章,也是关于流量劫持的
https://security.tencent.com/index.php/blog/msg/81
我也想试试攻击源定位,但是不会用XCAP构造被侦听的数据包(也就是直接发出访问京东首页的HTTP请求TCP包,不需要三次握手)多次发送,如果有朋友懂的话,麻烦指导我一下,感谢!
5989 次点击
所在节点    问与答
23 条回复
CloudnuY
2016-08-31 17:12:26 +08:00
@KCheshireCat 多谢,学习了,之前用 wireshark 拦截到抢答包,和请求包的 ID 是一样样的,真实的数据包会被丢弃。 TTL 测的多次多日都是 146 ,用 scapy 从 ttl=1 往上游发包不管是多少都没有链路劫持服务器的响应,劫持的广告服务器 IP 变动极大,各种云服务器都有。

这种情况可否直不限制 IP 直接 drop 掉所有 ttl=146 的包呢?
KCheshireCat
2016-08-31 22:18:22 +08:00
@CloudnuY

就 146 来说真的没有其他特征了可以这么尝试,因为常见的 TTL 初始值比 146 大的也就 256 了,

而通常不会有这么多跳路由来把 256 减到 146.

并且 256 也是 64,128,256 这 3 者里面比较不常见的.
CloudnuY
2016-09-02 01:05:30 +08:00
@KCheshireCat 多谢回复!这几天我试一下直接 drop 这个看看效果

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX