VPN相关研究
VPN攻防技术迭代
一点想法:现在的各种“翻墙工具”几乎都是为了对抗GFW而生的,这是一场不断迭代的攻防游戏。因此,为了更好的研究各类“翻墙工具”,我们有必要调研各种现代VPN技术,在已有相关研究的基础上开展研发
⚠️ 安全研究声明
- 目的: 本文仅用于网络安全技术交流及企业内部流量审计研究。
- 隐私: 实验所用 Pcap 数据已进行脱敏处理,不包含敏感个人信息。
- 责任: 严禁利用文中所述方法从事任何违反《中华人民共和国网络安全法》及相关法律法规的行为。研究技术是为了更好地防护,请勿越界。
参考来源:
加密协议
传统 VPN 旨在保护隐私(Privacy),而现代协议旨在实现隐匿(Stealth)。
传统VPN协议
目的是在不安全的网络中建立安全的加密隧道,主要工作在网络层(L3)或数据链路层(L2)
OpenVPN
- 基于 SSL/TLS,有非常明显的握手特征(Handshake packets)。
- 默认使用 UDP 1194 或 TCP 443。
- 特征码: 在
pcapng中可以识别出特定的 OpenVPN 头部,包长度分布有规律。
WireGuard
- 完全基于 UDP。
- 静默响应: 如果发往服务器的包不合法,服务器完全不回包(防止扫描)。
- 指纹: 虽然它是加密的,但其 UDP 报文的固定大小(如 148 字节的握手包)和特定字段偏移,使得它在流量分析中具有很高的统计学辨识度。
早期抗封锁协议
设计目标是绕过防火墙,通过简单的混淆和加密让流量看起来像“随机垃圾”。
Shadowsocks (SS)
- 技术特征: SOCKS5 代理 + 预共享密钥加密(如 AES-256-GCM)。
- 无握手特征: 第一个包就开始发送加密数据。
- 高熵值 (High Entropy): 整个 Payload 看起来完全随机。
- 弱点:主动探测 —— GFW的做法
现代隐匿协议(重点)
让流量看起来像正常的 Web 流量
VMess (V2Ray 的核心)
认证原理:依赖于服务器和客户端的时间同步,这种设计是为了防止重放攻击(即防火墙截获一个包后反复发送,看服务器是否响应)。
弱点:其协议头具有明显的统计特征,现代做法是套一层WebSocket,再套一层TLS,以及后来为了规避TLS指纹库审查方式而诞生的uTLS
Large scale blocking of TLS-based censorship circumvention tools in China
Trojan
- 将所有流量模仿成翻墙中最常见的协议
HTTPS,诱使 GFW 误以为它是HTTPS - 反检测机制:所有没有正确结构和密码的连接都将被重定向到预设的端点
REALITY(by Project X)
- XTLS协议的升级,关于XTLS
- 若用 REALITY 取代 TLS,可消除服务端 TLS 指纹特征,仍有前向保密性等,且证书链攻击无效,安全性超越常规 TLS,且可以指向别人的网站,无需自己买域名、配置 TLS 服务端,更方便,实现向中间人呈现指定 SNI 的全程真实 TLS,白话解释
Hysteria2
- 一个基于 HTTP/3 QUIC 的 TCP 和 UDP(主要) 代理,得益于 QUIC 的全加密和填充,大大地增加中间防火墙嗅探的负担,且强制要求使用 TLS 1.3
- 通过在数据包中加入随机长度的填充,来专门对抗流量分析
理解 TLS SNI——以及它为何在实际 API 代理中至关重要
TLS 1.3, ESNI, DoH, interception… it’s not that complicated 😉
AnyTLS
- 一个试图缓解 嵌套的TLS握手指纹(TLS in TLS) 问题的代理协议。
代理客户端
工具繁多,功能大同小异,但起核心作用的总是代理内核,以下是几款常见的内核
Xray-core (Project X)
目前技术演进最快、影响力最大的内核。它是从 V2Ray 衍生出来的分支(Fork),专注于高性能和新技术研发,包括REALITY,VLESS,XTLS
Sing-box
高性能,低内存占用
Mihomo (原 Clash Meta)
在原有的 Clash 项目(已停更)基础上发展而来的分支,是目前 Clash 生态中最强大的内核,继承了 Clash 极其灵活的规则分流引擎以及实现了全协议支持。
V2Ray-core
出现较早,是多协议代理工具的开创者,提出了著名的“路由-出口-入口”架构。
一些第三方客户端
- V2RayN 是一个基于 V2Ray和Singbox等一系列内核的 Windows 客户端。
- v2RayA:基于 web GUI 的跨平台 V2Ray 客户端,在 Linux 上支持全局透明代理,其他平台上支持系统代理。
- clash-verge-rev:内置Clash.Meta(mihomo)内核,并支持切换
Alpha版本内核,可视化节点和规则编辑。 - FIClash:基于 ClashMeta 的多平台代理客户端,简洁易用,开源且无广告。
- ······
检测方法相关研究
主动探测
- 协议回放/重放攻击: 探测器会模拟客户端向你的服务器发送一段之前捕获的加密报文。如果你的服务器给予了“符合协议逻辑”的回包,则判定为代理。
- 异常报文测试: 向目标端口发送不符合协议格式的随机数据。如果服务器选择了直接断开连接(这是很多代理软件的防探测机制,但本身也是一种特征),GFW 可能会通过侧信道(Side-channel)分析来确认。
- 证书一致性检查: 如果你使用的是自签名证书,或者证书域名与实际访问的 SNI 不符,会触发立即阻断。
Examining How the Great Firewall Discovers Hidden Circumvention Servers
被动探测
深度包检测
- 协议特征码匹配: 针对 OpenVPN、L2TP 等传统协议。即使开启了混淆,GFW 仍能识别出协议握手阶段的特定偏移字节。
- TLS 指纹识别 (JA3/JA4+): 这是目前检测 V2Ray/Trojan 的核心手段。GFW 会记录 TLS 握手中的加密套件列表、扩展项顺序、ALPN 值等。
- QUIC/HTTP3 审计: 通过解密 QUIC Initial 包,从而读取其中的 SNI 甚至部分握手参数。
DNS劫持/污染
- 劫持 (Hijacking): 强行获取 DNS 服务器的控制权,或直接在网关层面重定向请求。
- 污染 (Pollution): 不控制服务器,而是通过“抢答”机制,将错误的解析结果抢在正确结果之前发送给用户。
- 现代“翻墙工具”已经抛弃传统DNS查询方式,而是通过DoH,DoT,DoQ等手段处理
尚未调查的方面
- 各类“一键直连”的“翻墙工具”(免费/付费)
- 敏感/违规关键字审查机制
欢迎补充
最后:技术在不断迭代,上述的某些文章可能已经过时,目前的审查手段已经逐步转向基于机器学习对流量特征的识别,因此还需要大量的流量分析来辅佐研究