Skip to content

搓了个MITM代理工具,来试试 #6

@lhear

Description

@lhear

InnerFade

https://github.com/lhear/InnerFade

域名缓存命中的情况下,流量特征将和正常流量无法区分,理论上支持亿级域名缓存

核心特性

  • 0 RTT: 缓存命中时,连接建立用时和直连目标网站一致。

  • TLS MITM: 动态生成并签署 TLS 证书,实现对客户端 HTTPS 流量的透明解密,消除了TLS in TLS特征。

  • REALITY: 使用REALITY进行通信和对抗主动探测。

  • 多路复用 没有实现多路复用,以避免可能的MUX in MUX包长度特征

  • 流量伪装:

    • ALPN 透传: 透明地传递原始的 应用层协议协商 (ALPN) 值,解决了其他MITM代理常见的兼容性问题。

    • 域名持久缓存: 客户端和服务器端均采用高性能的自定义文件级哈希表(包含独立的索引文件和数据文件),用于持久存储域名及其基于 SHA256 哈希生成的短 ID。

    • 隐蔽目标信息传输: 当客户端命中域名缓存时,会将目标域名的 ID、端口和 ALPN 码进行加密,并嵌入到 32 字节的 TLS ClientHello.Random 字段 中。

    • 零包目标解析: 服务器在收到 ClientHello 后,会解密并从 Random 字段中提取这些信息。这样,无需额外的网络数据包或任何可检测的元数据,即可解析出真正的目标地址。

工作流程

1. 客户端操作

  • 对于 HTTPS 流量,客户端使用用户信任的 CA 执行 中间人攻击(Man-in-the-Middle) 进行解密。
  • 客户端识别出目标域名、端口和 ALPN。
  • 如果目标域名在本地缓存中(域名缓存命中),客户端会使用预共享密钥(源自 X25519 密钥交换)对域名 ID、端口和 ALPN 进行加密,并将加密数据嵌入到 REALITY 连接的 ClientHello.Random 字段 中。
  • 客户端建立与服务器的 REALITY 连接,并转发所有后续流量。

2. 服务器端操作

  • 服务器在 TLS 握手期间检查传入的 ClientHello.Random 字段。
  • 使用其对应的解密密钥(源于其 X25519 私钥),尝试解密并提取域名 ID、端口和 ALPN
  • 如果解密成功,则从本地缓存中检索实际域名。
  • 服务器连接到真正的目标地址,并转发流量。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions