跳到主要内容

流量分析:TUN 劫持与代理规则详解

· 阅读需 6 分钟
Yak ProjectYak Project

在渗透测试或者日常抓包中,很多 App/小程序/系统服务不会尊重系统代理,导致传统 HTTP/S 代理和 SSL 旁路方案很难覆盖全流量,特别是 TLS、国密或自定义协议的场景。TUN 虚拟网卡 + MITM 的透明劫持可以把“无法挂代理”的流量也收入囊中。

同时在渗透或抓包场景,单一默认代理往往不够:不同域名/网段需要不同出口或直连,认证/链式代理容易失效,临时切换又怕漏配。全局代理规则能把流量按需分流,减少失败和重传。

Yakit MITM 新增了 TUN 劫持模式,全局代理规则设置,让我们一起来看看吧

MITM TUN 核心原理

  • 路由/接口:创建 TUN 虚拟网卡后,将目标流量的路由指向 TUN(常见做法:把默认路由或特定网段/域名的路由表项指向 TUN;DNS 也可指向本地以避免泄漏)。系统把原本发往外网的 IP 包交给 TUN。
  • 协议重组:Netstack VM 在 TUN 上收包,按五元组重组 TCP/UDP,得到面向流的连接对象。
  • 连接转交:重组后的 net.Conn 通过 SafeFeed 投喂到 ExtraConn 队列,并封装 “强主机模式” 元信息(原始目标 host/port、本地出口 IP)。
  • MITM 注入:MITM Proxy 合并该队列,逐连接进入劫持循环;强主机模式会禁用连接池复用、绑定本地 IP、保留原 Host/Port,确保透明转发不串路由。
  • 流量处理:MITM 完成 TLS/HTTP 解密与规则处理,可选 GMTLS、HTTP/2、WebSocket、JA3 伪装、下游代理、Host 映射等;同时记录标签(如 IsStrongHostMode)、进程名和流量存储。

使用场景

  • 移动端/小程序抓包:客户端不支持/不遵循系统代理,通过 TUN 抢占路由即可全量抓取 TLS/HTTP2/WS。
  • 容器/沙箱环境:容器内应用不可改代理,宿主机创建 TUN 并下发路由,透明接管出站流量。
  • 内网渗透与旁路分析:不改业务进程配置,不影响应用 socket,结合 Host 映射/下游代理可做分流或回注。
  • 国密/自定义协议:强主机模式 + MITM GMTLS 支持,保证原目标精确转发,方便国密链路或私有协议的解析/旁路。

注意事项启用TUN 需管理员权限,并且开启过程中可能会遇到杀软的拦截,Windows 用户还有可能弹出UAC的确认框,正常允许即可MITM 证书需要安装

实操1: 抓包浏览器网站

  1. 启动MITM

  2. 运行 “Tun劫持服务” ,添加路由www.baidu.com

  1. 浏览器无需设置任何代理,直接访问 baidu.com

实操2:抓包小程序

此前我们抓小程序时,需要借助 Proxifier 进行,借助 TUN 模式后,可实现 Yakit 即可完成全部的“抓”包工作,具体流程如下

  1. 启动 MITM

  2. 运行 “Tun劫持服务” ,添加路由api.m.jd.com

  1. 打开 JD 小程序

  1. 劫持流量

  1. 查看MITM流量

可能会有读者问,api.m.jd.com这个域名改怎么来呢?别担心,后续我们会添加相应的获取方式,完善抓包流程与体验

代理规则

全局代理规则目前可在 MITM 启动页,以及 webfuzzer 配置项中进行配置,入口如下:

代理节点

主要功能为节点的增删改查,存活检测等

当添加一个代理节点后,可以进行存活检测,如下图

节点为空时,默认使用本机访问检测目标,方便对比设置代理前后 IP 的变化情况

也可以输入完整的 URL 进行检测对目标地址的连通性

代理规则

主要功能为,为节点设置不同的规则,进行分流,有三个设置参数

规则组名:给规则设置一个名字,方便后续使用时选中

目标地址:支持按 Host 模式分流:精确域名、.example.com/*.example.com 后缀、通配符 *,和简单正则式通配(内部是通配转正则),匹配到就使用对应代理。

代理地址:选择在代理节点中添加的节点,将规则添加给这个节点

规则能力:

  • 可配置多个代理节点:(URL+可选账号密码,支持标准 http:///https:///socks5:// 形式),可单独禁用节点。
  • 支持按 Host 模式分流:精确域名、.example.com/*.example.com 后缀、通配符 *,和简单正则式通配(内部是通配转正则),匹配到就使用对应代理。
  • 匹配逻辑:优先精确匹配,再按通配/后缀顺序;只看 Host(不依赖 URL 路径)。

保存后,如下图,此后就可以在 MITM 或 WebFuzzer 中进行快速的选择了

此时,当选用规则组时,会按照规则组中设置的规则进行连接,当选择代理节点时,则代表所有流量都通过代理进行访问。

实际效果

为了更加直观的看出效果,我们添加一些能显示IP 的域名当作规则组

添加后,我们打开 MITM,选中下拉框中我们此前添加的规则

点击 免配置启动,访问 cip.cc ,根据规则 cip.cc 会走我们设置的 127.0.0.1:2080 的代理进行访问

访问 ifconfig.me, 根据规则,ifconfig.me 不在规则组中,应当进行直连

连通性错误提示

为了优化体验,现在 MITM 启动时不会对用户设置的下游代理进行连通性检查,而是通过响应包的方式,我们直接看例子,首先添加一个 http://127.0.0.1:8080 的下游代理,这是随意添加的一个代理,实际并不存在

点击免配置启动后,打开 www.baidu.com,可以发现,我们在多处,都添加了相应的提示,此时,用户应当对代理进行处理,检测连通性

最后

新的功能,可能也会带来新的bug,特别是 TUN 模式下,不同操作系统,不同主机环境下可能存在五花八门的问题,这次上线的全局代理规则和 TUN 透明劫持,目的是让大家在复杂网络下也能更顺手地抓包和分流。TUN 场景本身复杂,如果在使用中遇到路由、证书或代理异常,欢迎随时反馈,我们会持续打磨体验。


本文首发于 Yak Project 公众号,阅读原文