今天分享的论文主题是针对 OpenVPN 的识别与检测,由密歇根大学的 Diwen Xue 等人完成。OpenVPN是一款知名的虚拟专用网络(VPN)开源软件,常用于保护不可信网络中的用户隐私。不过,VPN一直是网络流量审查关注的重点。本文通过深入分析OpenVPN的网络通信协议和数据报文,发现即使是在已经采取混淆策略的基础上,运营商和网络管理者依然具备检测并阻断VPN流量的能力。本文提出了一个检测系统,结合被动监测和主动探测方法,可以有效地在现网环境中检测OpenVPN流量。该论文发表于网络安全领域顶级会议USENIX Security 2022,并同时获得了“杰出论文奖”(Distinguished Paper Award Winner)与“互联网防御奖”(First Prize Winner of the 2022 Internet Defense Prize)。
【背景介绍】
虚拟专用网络(Virtual Private Networks, VPN) 是通过专用网络线路或者在现有网络上使用(加密)隧道协议进行网络通信的方式,这种通信方式允许用户在不可信的网络中保护隐私并且规避网络审查。
随着互联网服务供应商、广告商和国家政府越来越多地操纵和监控互联网流量,近年来 VPN 的应用呈现出快速增长的趋势。然而,网络审查和 VPN 之间存在一场 "永恒的战争",为了逃逸现有的 VPN 检测机制,VPN 软件的开发者也演化出了各式各样的混淆技术来对抗网络审查。同时,为了应对层出不穷的混淆策略,运营商和审查人员除了采取颁布服务条款或封禁VPN供应商等法律措施,还尝试了多种技术手段以检测甚至阻断 VPN 服务,包括采用深度包检测(Deep Packet Inspection, DPI)技术和采取基于网络协议语义的方法进行检测。
然而,上述提到的检测技术在真实网络中检测 VPN 的有效性目前仍然是未知的,尤其是基于机器学习的检测方法。因此,考虑到检测方法在现实中的部署难度和误报情况,本文主要关注深度包检测技术对VPN识别的影响。通过研究当前最为流行的商业VPN软件/协议,OpenVPN [1],本文主要探究了以下两个关键问题:
1. 能否实时地检测出(尤其是混淆后的)OpenVPN 产生的网络流量?
2. 针对 OpenVPN 流量的检测方案是否可以应用于大规模的网络场景?
【OpenVPN】
在正式介绍本文检测方法之前,我们先介绍 OpenVPN 的核心设计思想 [2] 和相关研究工作。
OpenVPN 的工作模式
OpenVPN 基于加密隧道协议实现通信,将原始 IP 数据包封装在 OpenVPN 协议数据包中,通过隧道发送或接受封装后的数据包。为了实现安全通信,OpenVPN 利用OpenSSL 库 [3] 对数据包进行加密,并提供两种认证和密钥交换的方法以建立通信双方的信任:(1) 通信双方预先共享静态密钥;(2)基于 TLS 的协商机制进行密钥交换。其中,后者已被大多数商业 VPN 服务所采用,这种方式在连接建立时会使用 TLS 握手协议进行协商,协商的部分也同样作为载荷封装在 OpenVPN 的协议包内部。
图表1 TCP 和 UDP 模式下的 OpenVPN 数据包头
OpenVPN 的格式
OpenVPN 可以分为TCP和UDP两种传输模式,这两种传输模式的数据包头格式如图表1所示。每个 OpenVPN 的数据包会在数据包头中设置消息类型的操作码(Opcode)和本次会话使用的TLS会话密钥。如图表2所示,操作码对应了客户端和服务器端不同通信阶段传输的消息类型,如操作码1代表客户端发起的重置请求。
图表2 建立 OpenVPN 会话的流程
已经有很多工作研究针对 OpenVPN 的检测方法,但是网络审查和 VPN 之间永远存在一场攻防博弈,越来越多的混淆技术被提出,以绕过针对 OpenVPN 的检测。下面介绍一些现有的针对 OpenVPN 的检测方法和混淆技术。
OpenVPN 的检测方法
作为一种最流行的商业VPN软件/协议,目前已有一些工作研究OpenVPN的检测方法。一类工作[4]参考WHOIS,rDNS等信息,提取TCP协议中的option等字段作为VPN的指纹进行指纹识别。另一类工作[5, 6]则是使用机器学习模型利用连接时长、时间间隔等特征进行的流级别被动检测,不过这类工作通常只是在实验环境下(如使用实验数据集ISCXVPN2016[7])进行测试。
OpenVPN 的混淆技术
同时,为了绕过现有的检测机制,越来越多软件开始使用 OpenVPN 的混淆技术,常用的混淆策略包括:(1) XOR 补丁(使用预共享的密钥对数据包中的某些字节进行异或操作,颠倒字节顺序);(2) 使用加密隧道(采用 Obfsproxy等混淆隧道逃逸深度包检测机制);(3)使用专有协议(开发专有的混淆协议,在 OpenVPN 协议的基础上添加专有的混淆层,如Astrill[8])。
【检测方法】
针对 OpenVPN 的检测架构概述
基于 OpenVPN 的通信特征,本文提出一种主被动结合的、实时识别 OpenVPN 流量的检测框架,架构如图表3所示,主要包括过滤器(Filter)和探测器(Prober)[9]两部分。首先,过滤器实时检测通过的网络流量,检测依据是本文发现的 OpenVPN 独特的网络通信特征。过滤器标记疑似为 OpenVPN 服务器的目的地址,并将这部分信息传递给探测器。然后,探测器针对疑似服务器执行主动探测,通过发送精心设计的探测数据包,引起 OpenVPN 协议特定的行为以确认服务器信息,最终完成 OpenVPN 服务器的识别确认。
图表3 针对 OpenVPN 的检测架构
I 过滤器(Filter):基于指纹识别 OpenVPN 流量
通过分析 OpenVPN 的网络通信模式和协议结构,本文总结出几种明显的特征并根据这些特征设计了两种基于指纹识别的方法,包括:
1)基于操作码的识别方法
本方法利用 OpenVPN 数据包头中操作码相对固定的特点设计指纹生成方法,具体来说,OpenVPN 数据包头中的操作码会采取固定数值,且一段OpenVPN会话的操作码变化次序唯一。本文将一个数据流的前 N 个数据包中 N 个操作码的值构成的序列作为其指纹。为了确保该指纹能够对抗利用 XOR 补丁混淆的流量,这种指纹生成方法并不对操作码的值进行精确匹配,而是统计每个数据流出现的操作码的种类数量进行模糊匹配。
2)基于ACK的识别方法
OpenVPN 在连接建立时会进行 TLS 握手,由于OpenVPN还支持UDP协议,握手协商过程需要通过发送P_ACK数据包来确认。P_ACK包不携带任何 TLS 有效负载,大小一致且只在握手前期出现。由于建立OpenVPN会话的流程是高度统一的,无论是对于未混淆还是经 XOR 补丁混淆的OpenVPN 流量,P_ACK包首次出现通常是传输时的第三个包。
利用这些特点,本文设计了指纹识别方法,具体操作是记录下首个ACK包并在后续流中统计与该ACK包大小相同的数据包的数量。统计不同时间窗口下的ACK包的数量,用一组数量阈值来检测判断。
图表4 OpenVPN 处理 TCP 数据包的过程
II 探测器(Prober):基于主动探测确认 OpenVPN 服务器
通常情况下,OpenVPN 服务器会以明确的 “P_Server_Reset”数据包来回应客户端发起的重置操作,这种重置确认数据包可以帮助确认 OpenVPN 服务器的身份。不过为了避免审查人员通过发送重置包来发现OpenVPN服务器进而封禁,大多数OpenVPN供应商会采用“tls-auth”或“tls-crypt”选项。这些选项会在每个控制包上增加一个消息认证码(HMAC签名) [10],该签名使用预共享的密钥进行签署,以用于完整性验证。如果客户端的请求不包含HMAC签名,服务器就不予回应,有效实现了抗探测。
除了上述通信特征,本文还分析了OpenVPN 处理 TCP 数据包的流程(如图表4所示)。一个OpenVPN数据包会被拆分成多个TCP包传输,只有全部数据包都传输到服务器后,才会进行数据包解析、检查语法等操作。
因此,本文利用这些特点设计了两个基础探针 BaseProbe1 和 BaseProbe2。如图表5所示,这两个探针虽然只相差最后一个字节,但可以触发OpenVPN 服务器进入不同的代码路径。两个基础探针分别向疑似 OpenVPN 的服务器发送精心构造的数据包,触发服务器不予回应或握手超时的效果,以确认 OpenVPN 服务器。同时,为排除其他协议的干扰,本文还设计了额外探针,同样利用的是不同协议对待同一请求的不同反应。
图表5 探针内容及OpenVPN服务器的预期行为
【检测结果】
为了评估检测方法的效果,本文与运营商 Merit [11] (一个中等规模运营商,为约 100 万个用户提供服务)合作,在现实环境中部署检测方法,根据现实网络中的结果来验证方法的检测效果和误报率。具体来说,本文将 OpenVPN 检测框架部署在一台服务器上,可以监听Merit网关处约20Gbps带宽的入口和出口流量。通过检测OpenVPN 协议产生的流量来评估检测框架的识别能力;通过确认在网关处检测出的OpenVPN服务器信息来评估检测框架的误报率。
为了评估检测系统的检测能力,本文选择 80 个 OpenVPN 服务提供商,通过搜索这些服务商提供的混淆功能,最终共选择了 81 种OpenVPN服务器的配置,其中 41 种配置是采取了混淆策略的。作者在 Merit 覆盖的网络内部的主机上启动 VPN 客户端程序,使用自动化工具Pywinaututo [12]进行网络连接, 以连接至默认或者推荐的服务器;随机等待 20 到 180 秒,并确认 VPN 隧道处于活跃状态后,通过 Selenium 向随机的 Alexa 排名前500的域名发送请求,产生随机浏览流量;最后断开与 VPN 服务器的连接并等待 180 秒。对于 81 种VPN配置,每种配置按上述流程重复 50 次。
结果显示,检测框架可以检测出 40 种常规配置中的 39 种。即使是使用了混淆策略的2020条OpenVPN流量,仍有 72.67% 可以被检测到,覆盖到了 41 种配置中的34种。通过分析混淆策略,作者发现混淆后 VPN 产生的流量被检测到的原因是混淆不够充分、无法掩盖 OpenVPN 的指纹。本文发现,除非使用了对内容及包大小的随机化处理,否则很难实现OpenVPN流量的充分混淆。
图表6 面向全流量的误报率评估结果
在网络安全检测工作中,误报率是非常关键的一个评估指标,本文也对误报率进行了评估。评估实验持续8天(2021年8月13日-8月20日),结果如图表6所示。最终,在 15TB 的全流量中,共有 3,638 个会话被标记为 OpenVPN 连接,其中 3,245 个会话可以被人工验证确认。该检测框架产生的误报相较于已有基于机器学习模型 [13][14][15] 的方法降低了三个数量级(从 1.4%~5.5% 降到0.0039%),这表明该检测系统具有非常高的识别准确率。
【结论】
OpenVPN是目前应用非常广泛的一款虚拟专用网络软件。本文通过分析其通信特征,发现即使在已经部署混淆策略的基础上,OpenVPN的流量依然具有独特的指纹特征。作者设计并实现了一个主被动结合的OpenVPN连接检测系统,并将其部署在真实网络环境中。结果表明,该方法可有效地检出大多数标准的、甚至是混淆的OpenVPN流量,误报极低。最后,本文也针对OpenVPN协议在设计方面的缺陷提出了一些建议。
原文链接:
https://www.usenix.org/conference/usenixsecurity22/presentation/xue-diwen
参考文献
[1] What is OpenVPN? https://www.technadu.com/openvpn/8640/
[2] OpenVPN协议解析-网络结构之外. http://www.uml.org.cn/xjs/201312275.asp
[3] OpenSSL. https://www.openssl.org/
[4] H. Hoogstraaten. Evaluating server-side internet proxy detection methods (MSc thesis). 2018.
[5] G. D. Gil, A. H. Lashkari, M. Mamun, and A. A. Ghorbani. Characterization of Encrypted and VPN Traffic Using Time-Related Features. In the 2nd International Conference on Information Systems Security and Privacy(ICISSP), 2016.
[6] M. Lotfollahi, M. J. Siavoshani, R. S. H. Zade, and M. Saberian. Deep packet: a novel approach for encrypted traffic classification using deep learning. In Soft Comput 24, 2019.
[7] VPN-nonVPN dataset (ISCXVPN2016). https://www.unb.ca/cic/datasets/vpn.html
[8] How Chameleon Defeats VPN Blocking. https://www.vyprvpn.com/features/chameleon.
[9] Frolov S, Wampler J, Wustrow E. Detecting Probe-resistant Proxies[C]//NDSS. 2020.
[10] HMAC. https://en.wikipedia.org/wiki/HMAC
[11] Merit Network. https://en.wikipedia.org/wiki/Merit_Network
[12] Pywinauto. https://github.com/pywinauto/pywinauto.
[13] S. Bagui, X. Fang, E. Kalaimannan, S. C. Bagui, and J. Sheehan. Comparison of machine-learning algorithms for classification of vpn network traffic flow using time-related features. In Journal of Cyber Security Technology, 2017.
[14] P. Fu, C. Liu, Q. Yang, Z. Li, G. Gou, G. Xiong, and Z. Li. A NetFlow Sequence Attention Network for Virtual Private Network Traffic Detection. In International Conference on Web Information Systems Engineering.
[15] S. Miller, K. Curran, and T. Lunney. Multilayer Perceptron Neural Network for Detection of Encrypted VPN Network Traffic. In 2018 International Conference On Cyber Situational Awareness, Data Analytics And Assessment (Cyber SA).
付卓群,编辑&审校|刘明烜、张一铭、刘保君
声明:本文来自NISL实验室,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。