爱意满满的作品展示区。
raysonx

打算做一套专门对付网络劫持/污染的开源工具,目前 DNS 部分已基本完成

  •  
  •   raysonx ·
    vfreex · May 15, 2016 · 10318 views
    This topic created in 3718 days ago, the information mentioned may be changed or developed.
    众所周知天朝的网络环境非常烂,各种运营商劫持防不胜防。于是打算利用业余时间做一套开源工具集,过滤各种天朝特色的花式运营商劫持。
    GitHub 传送门: https://github.com/hijackfilter/hijackfilter

    主要打算做一些 netfilter/iptables 拓展,这样这些过滤模块就可以高效地在 OpenWrt 、 dd-wrt 等基于 Linux 的路由器上跑。感兴趣的朋友们可以来一起贡献代码。

    目前匹配 DNS A 记录的 iptables 模块已基本完成,可以将运营商伪造的 DNS 回应匹配出来,进行丢弃或更改。
    下一步还会做匹配 HTTP 302 劫持的模块。
    Supplement 1  ·  May 16, 2016
    目前 DNS 过滤模块已经可以使用了,按照说明配置 A 记录黑名单即可。
    Supplement 2  ·  May 16, 2016
    哇,还是有不少朋友感兴趣的。
    我来补充一下,现在完成的 dnsfilter 和下一步要做的 httpfilter 都是一些底层的模块,用来过滤旁路设备的伪造报文。
    我最初的设想是,等这些底层的模块基本成形后,再做一个上层的管理工具,可以协助导入各种规则集。
    60 replies    2016-07-12 20:48:41 +08:00
    devqin
        1
    devqin  
       May 15, 2016
    运营商的劫持什么的最恶心。
    McContax
        2
    McContax  
       May 15, 2016 via Android
    不错,有干货,我插一脚,混个脸熟
    Oi0Ydz26h9NkGCIz
        3
    Oi0Ydz26h9NkGCIz  
       May 15, 2016 via iPhone
    滋磁
    希望能早日见到作品。
    turan12
        4
    turan12  
       May 15, 2016
    这个厉害。前排观望楼主!
    addidda
        5
    addidda  
       May 15, 2016 via Android
    仰望高端玩家
    Sumire
        6
    Sumire  
       May 15, 2016 via Android
    病魔还没战胜校长!
    adrianzhang
        7
    adrianzhang  
       May 15, 2016
    功能看上去是对付大局域网内各种恶心,还无法对付局域网边缘的恶心。不过还是一个很有趣的项目,报名参与开发。
    yNV71aaf0Wn56q9G
        8
    yNV71aaf0Wn56q9G  
       May 16, 2016   ❤️ 1
    firefox 装个 https everwhere 就搞掂了
    ilikekindle
        9
    ilikekindle  
       May 16, 2016 via Android
    支持
    liyvhg
        10
    liyvhg  
       May 16, 2016 via Android
    强烈支持,混个脸熟
    ZRS
        11
    ZRS  
       May 16, 2016
    支持 已 Star
    raysonx
        12
    raysonx  
    OP
       May 16, 2016 via iPad
    @adrianzhang 局域网边缘比较复杂,不是过滤就能完全解决的。
    之前被联通的 HTTP 劫持恶心坏了,向工信部投诉了无数次都不给解决。
    后来不得不用 iptables 的 string 模块过滤联通伪造的 http302 重定向。考虑到 string 模块过滤会有误杀,效率也比较低,下一步尝试手写一个匹配 http 302 的模块。不过 http 有连接信息,还得研究一下 netfilter 的 conntrack 机制。
    目前已经完成 dns 过滤模块理论上过滤局域网边缘伪造的 dns 的也是可行的,不过效果仅相当于改 hosts 表,不是这个项目的主要目的。

    @yxc 主要是想放在路由器上跑哈哈,强迫症发作!
    ivyswen
        13
    ivyswen  
       May 16, 2016 via Smartisan T1
    已 star ,明天编译一个试试。
    sky170
        14
    sky170  
       May 16, 2016
    已 star
    adrianzhang
        15
    adrianzhang  
       May 16, 2016
    @raysonx 明天晚些时候 GH 上联系你。
    Biwood
        16
    Biwood  
       May 16, 2016 via Android
    真能做到么,我愿意捐钱, DNS 劫持太烦人了
    jasontse
        17
    jasontse  
       May 16, 2016 via Android
    不用这么麻烦, dnsmasq 有个参数叫 ignore-address 。
    Khlieb
        18
    Khlieb  
       May 16, 2016 via Android
    @Sumire 该来的早晚都会来的
    adrianzhang
        19
    adrianzhang  
       May 16, 2016
    @jasontse 开销不一样
    jasontse
        20
    jasontse  
       May 16, 2016 via iPad
    @adrianzhang 这样的开销更大,每次过防火墙都要滤一遍, dnsmasq 从 upstream 取得结果之后可以 cached 。
    shuiyingwuhen
        21
    shuiyingwuhen  
       May 16, 2016
    混一个脸熟,现在我参与测试
    lixingcong
        22
    lixingcong  
       May 16, 2016 via Android
    dnsmasq 从 2.73 开始具备 dns 答复 ip 过滤功能
    qq5745965425
        23
    qq5745965425  
       May 16, 2016
    支持 支持
    rubyvector
        24
    rubyvector  
       May 16, 2016
    支持,有技术,有想法,还实现了.赞一个
    JackBlack2006
        25
    JackBlack2006  
       May 16, 2016
    @lixingcong 愿闻其详?
    raysonx
        26
    raysonx  
    OP
       May 16, 2016
    @jasontse
    @lixingcong
    目前实现的 DNSfilter 只是这个项目的底层模块之一,主要用来过滤到上游链路之间的旁路设备的抢答报文。
    dxwwym
        27
    dxwwym  
       May 16, 2016 via iPhone
    今天青岛联通 Safari 访问贴吧时终于一睹小球真颜,
    clino
        28
    clino  
       May 16, 2016
    原理是什么? 怎么识别运营商劫持的部分呢?
    adrianzhang
        29
    adrianzhang  
       May 16, 2016
    @jasontse 如果有的设备不需要 dnsmasq ,防火墙过滤是最好的选择,开销低且各种设备都有。采用应用级的过滤好处是灵活容易,坏处就是开销大(不仅是网络开销,还有系统开销)以及要部署相关应用,适应性低。
    raysonx
        30
    raysonx  
    OP
       May 16, 2016
    @clino 目前的想法是按规则过滤。之后会做一个管理工具,至于生成和导入规则。
    raysonx
        31
    raysonx  
    OP
       May 16, 2016
    @adrianzhang DNSmasq 实现的是把黑名单中的响应替换为 NXDOMAIN , OpenWrt 上默认跑的就是。这个防火墙模块和 DNSmasq 在功能上并不是重叠的。
    clino
        32
    clino  
       May 16, 2016
    @raysonx 我是问怎么识别? 识别出来才能过滤吧 不太明白是如何识别的
    commonhub
        33
    commonhub  
       May 16, 2016
    dnsmasq 里把 114so 这种污染的 ip 设为 bogus-nxdomain 就可以。
    github 上面有个轮子了 https://github.com/felixonmars/dnsmasq-china-list/
    现在的解决方案是 dnsmasq 里部分墙网址指定 nameserver=/t66y.com/127.1#53535 ss-tunnel 给 8888
    默认 dns 是 isp 给的,返回结果如果和 bogus-nxdomain 一样就直接扔了
    raysonx
        34
    raysonx  
    OP
       May 16, 2016
    @clino 具体规则是要人工干预的,不可能通过机器自动生成,因为各种劫持、污染的情况非常复杂,还要同时考虑性能和误杀率。
    因为使用这种工具的人不可能是小白用户,所以不必做的过于傻瓜化。
    目前的想法是提供一个客户端的工具协助用户调试新的规则。对于大规模存在的相似劫持,直接放在 GitHub 上维护。
    onemoo
        35
    onemoo  
       May 16, 2016
    DNS 劫持还好说。最恶心的是 http 插入 iframe 广告,对付这个有什么好办法吗?
    raysonx
        36
    raysonx  
    OP
       May 16, 2016
    @onemoo 这种一般是用旁路设备伪造 HTTP 报文。下一步做的 httpfilter 的主要就是应对这种情况。
    至于怎么做最好、最方便、最灵活,还要靠大家一起讨论想办法。
    aivier
        37
    aivier  
       May 16, 2016
    昨天遇到联通劫持 JS ,然后重定向到自己的服务器上,反代,插广告,而且还是黄网....
    JackBlack2006
        38
    JackBlack2006  
       May 16, 2016
    @aivier 直接向扫黄打非办公室举报:doge:
    dreammes
        39
    dreammes  
       May 16, 2016 via iPhone
    强烈👍🏻支持
    21grams
        40
    21grams  
       May 16, 2016
    你们说的运营商劫持究竟指的是啥? 我一直用 114 的 dns 没发现有什么问题。
    imn1
        41
    imn1  
       May 16, 2016
    我现在桌面已经基本消除劫持了,但手机还是没有解决办法(对 android 不熟)
    zrj766
        42
    zrj766  
       May 16, 2016 via Android
    先 star 再说
    missdeer
        43
    missdeer  
       May 16, 2016
    说话,你们用过 pcap-dnsproxy 吗, winpcap/libpcap 直接抓包,然后丢掉抢答包
    vh2h
        44
    vh2h  
       May 16, 2016
    支持楼主,利国利民
    raysonx
        45
    raysonx  
    OP
       May 16, 2016
    @jasontse @lixingcong 翻了下 dnsmasq 的文档,确实 2.73 版之后开始提供类似的功能了。
    langjiyuan
        46
    langjiyuan  
       May 16, 2016
    火线支持,前两天的 http 劫持可是恶心坏了,现在访问个 b 站 还得挂代理。。
    mwylaoma
        47
    mwylaoma  
       May 16, 2016
    请问 Mac 能否使用?@raysonx
    avrillavigne
        48
    avrillavigne  
       May 16, 2016
    @21grams 常见 iframe 插广告,插不好网页都不能看了,高端的下载劫持到运营商内的服务器。
    KCheshireCat
        49
    KCheshireCat  
       May 16, 2016
    我建议可以去看下 iptables 的 u32 模块

    移动这边的 DNS 抢答,http 抢答,302 劫持跳转,单向 RST,BT-DHT, 都是有一定包构造特征的

    比如移动在抢答 DNS 的时候一定会带 dns.flags.authoritative 标志位,
    但是又和正常的包不一样一定不带 dns.flags.authenticated 标志。

    302 劫持也是,tcp 包会标记 ACK ,FIN , PSH.而通常 http 并不使用 PSH 且 FIN 也不和 PSH 同时使用

    还有 http 抢答,抢答的报文是有分包的,但是每个包大小都不到 MTU,且 tcp 窗口实际值恒为 0xFFFF

    再者 BT-DHT 干扰,抢答包里面协议版本是个没人使用的版本号了,所有抢答包还都是一样长,非常好过滤

    我目前都是用 u32 模块进行匹配来 DROP 的,这种抓异常包构造的方法一向很有效
    KCheshireCat
        50
    KCheshireCat  
       May 16, 2016
    很多情况用现有模块就能做到,不用造个新轮子实现重复功能

    我现在就在实验用 IP 头的 TTL 值来过滤抢答包,用的都是现有的模块,

    不过为了应付服务器自身 ttl 差异,这个过滤效果还是有待提高
    wpaygp
        51
    wpaygp  
       May 16, 2016
    Star
    raysonx
        52
    raysonx  
    OP
       May 16, 2016
    @KCheshireCat 这些问题在做之前都考虑过,能用现有模块解决的当然不会上复杂的东西。 netfilter/iptables 本身在设计上就不擅长处理 5 层的数据,做模块是为了接下来实现一些比较难搞的复杂过滤。
    Cpatrick
        53
    Cpatrick  
       May 16, 2016
    期待早日见到作品~
    Balthild
        54
    Balthild  
       May 16, 2016 via iPhone
    已 Star
    fengyunSmlie
        55
    fengyunSmlie  
       May 16, 2016
    不得不来支持一下!
    Vicer
        56
    Vicer  
       May 17, 2016
    @jasontse 2.75 版本添加 ignore-address=1.2.3.4 启动失败
    muziling
        57
    muziling  
       May 17, 2016
    @KCheshireCat u32 怎么弄,以前 tomato 用的时候,正常的 DNS 解析都要好几秒。
    addidda
        58
    addidda  
       May 19, 2016 via Android
    @imn1 dnscrypt/pdnsd/dnsmasq
    配合 iptables 一起食用效果更佳(x)。。
    Oucreate
        59
    Oucreate  
       Jun 5, 2016
    请问楼主大大有没有学习这些东西的“收藏夹”可以分享一下?
    我也想自己制作 Windows 和 Android 平台的“多重抗污”工具。
    [email protected] 万分感谢!
    only25133
        60
    only25133  
       Jul 12, 2016
    时不时来赞一下~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3406 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 137ms · UTC 11:36 · PVG 19:36 · LAX 04:36 · JFK 07:36
    ♥ Do have faith in what you're doing.