原文标题:OpenVPN is Open to VPN Fingerprinting
原文作者:Diwen Xue, Reethika Ramesh, Arham Jain, Michalis Kallitsis, J. Alex Halderman, Jedidiah R. Crandall and Roya Ensafi
原文链接:https://www.usenix.org/conference/usenixsecurity22/presentation/xue-diwen
视频链接:https://youtu.be/ZNVff1rH-vA
发表会议:USENIX Security '22
笔记作者:孙汉林@安全学术圈
主编:黄诚@安全学术圈
本文分析了流行的VPN工具OpenVPN,并受GFW(Great Firewall)的启发,提出一种由被动分析
和主动探测
相结合的两阶段识别框架,通过分析字节模式、数据包大小和服务器行为3种特征,在低误报率的情况下,识别了85%以上的OpenVPN流量。
与GFW的威胁模型类似,具体分为如下6个阶段:
在本文中,作者选取了3种特征来识别OpenVPN流量,即字节模式、数据包大小和服务器行为,其中前两个属于被动分析,最后一个属于主动探测。下图是OpenVPN的握手和数据交换过程,3种特征都基于此过程。
基于字节模式的指纹识别方法通过分析 OpenVPN 流量中的操作码(Opcode)字段来识别流量类型。OpenVPN 数据包包含一个操作码字段,用于指示消息类型,如客户端和服务器重置、TLS 加密数据等,完整字节模式如下图所示:
本文通过捕获前 N 个数据包的操作码序列,若序列中的不同操作码数量≥4(至少需要4种不同的操作码来完成握手,协议一共定义了10种操作码。),并且Client和Server的Reset操作码分别只出现过1次,则将该流量标记为OpenVPN流。此外,OpenVPN 使用 XOR 混淆技术保护数据负载,但操作码数量不受影响,因此即使流量经过混淆,操作码仍能提供有效的识别特征。这种指纹识别方法无需精确匹配操作码值或数据包大小,鲁棒性高,并能有效应对多种 XOR 混淆技术,确保高效准确地识别 OpenVPN 流量。
在OpenVPN的控制通道中,P_ACK包用于确认P_Control包,这些ACK包具有固定大小,并且只在会话的初期握手阶段出现,在数据传输阶段则不再使用。因此,P_ACK包在OpenVPN流量中呈现出独特的时序模式,成为一个可被识别的特征。
具体来说,本文通过分析OpenVPN会话的初期包交换序列(C->S (Client-Reset), S->C (Server-Reset), C->S (ACK), C->S(Control)),定位出初始的P_ACK包(第3个),并计算在每10个数据包中的ACK包数量,看是否满足OpenVPN的ACK数据包指纹(初期多,后期少)。该指纹识别技术对于识别未经随机填充(不改变ACK数据包大小)的OpenVPN混淆流量非常有效,且容易在实际的流量监控中部署。
本文讨论了通过主动探测识别OpenVPN服务器的可行性。许多OpenVPN服务器使用tls-auth或tls-crypt选项,增加了HMAC签名以提供完整性和认证机制,使得未经认证的客户端探测请求被服务器丢弃,从而提高了抗探测能力。尽管如此,作者设计了针对OpenVPN的探测方法,通过利用TCP层的行为特征,如超时或重置行为,仍能有效识别OpenVPN服务器。OpenVPN处理TCP包的流程如上图。
OpenVPN在处理TCP流时,会在内存中分配缓冲区,组装接收到的数据包片段,直到满足长度条件才开始解析和检查语法及加密错误。基于这一行为,作者设计了两种探针,以期望触发OpenVPN服务器的两种不同反应。作者根据OpenVPN服务器与非OpenVPN服务器对两种探针的不同反应识别OpenVPN服务器。
第一个探针(BaseProbe 1)包含一个经典的16字节OpenVPN客户端重置包,第二个探针(BaseProbe 2)在前者基础上去掉末尾一个字节。大多数非OpenVPN服务器会以相似的方式响应这两种探针,而对于启用HMAC的OpenVPN服务器来说,因为验证HMAC失败,第一个探针会被立即丢掉;第二个探针因没有凑够有效的解析长度而等待至超时。
为了进一步提高对OpenVPN服务器的探测精度,作者设计了基于Linux服务器关闭TCP连接方式的探针。当TCP连接在有未读字节时被终止,Linux服务器会发送RST包。大多数OpenVPN服务器的RST阈值(RST阈值定义为触发RST包所需的最小字节数)在1550-1660字节之间,而大部分非OpenVPN服务器的阈值低于500字节或高于4000字节。因此,作者构造了一个包含2000字节随机数据的探针,预计98%以上的OpenVPN服务器会回应RST包,而非OpenVPN服务器的回应率不到3%。
此外,由于OpenVPN支持端口共享功能,探针可能被转发给共享端口的其他服务(HTTP、TLS和SSH)解析,因此在发送基础探针后(此时已经过滤了大部分非共享端口的HTTP、TLS、SSH等服务),会首先探测这些服务,若收到正常响应,则停止探测,并将该服务器标记为非OpenVPN服务器。
为了验证方案的有效性,作者将该方案部署到真实的ISP网络中,并得到如下实验结果:
总的来说,在控制流中,识别原版OpenVPN的召回率达到85.90%,识别具有混淆技术的OpenVPN的召回率达到72.67%。在所有流中,共识别出3245个能够被证实是OpenVPN流量的流,393个不能够被证实的流。
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com