对vpn流量进行监听,并确保它看起来像端口443上的SSL流量


13

我试图使我的传出和传入流量看起来尽可能接近SSL流量合法。有没有办法对我自己的流量进行DPI,以确保它看起来像SSL流量而不是OpenVPN流量?根据我的配置设置,所有流量都使用端口443(SSL端口)吗?

我的配置如下:

笔记本电脑上的STUNNEL:

[openvpn]
# Set sTunnel to be in client mode (defaults to server)
client = yes  
# Port to locally connect to
accept = 127.0.0.1:1194  
# Remote server for sTunnel to connect to
connect = REMOTE_SERVER_IP:443

笔记本电脑上的OPENVPN CONFIG:

client
dev tun
proto tcp
remote 127.0.0.1 1194
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun

服务器上的STUNNEL CONFIG:

sslVersion = all
options = NO_SSLv2
;chroot = /var/lib/stunnel4/
; PID is created inside the chroot jail
pid = /stunnel4.pid
; Debugging stuff (may useful for troubleshooting)
 debug = 7
 output = /var/log/stunnel4/stunnel4.log
setuid = root
setgid = root
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
compression = zlib
[openvpn]
accept = REMOTE_SERVER_IP:443
connect = REMOTE_SERVER_IP:11440
cert=/etc/stunnel/server.pem
key=/etc/stunnel/server.key

服务器上的OPENVPN CONFIG:

local REMOTE_SERVER_IP
port 11440
proto tcp

尝试学习VPN的新方面,了解网络协议以及分析等...
Jason

2
您可以在笔记本电脑上运行wireshark来回答第二个问题,并且在途中可能会学到更多
Alec Istomin 2015年

并不是说您可能应该禁用TLS压缩(由于CRIME)并限制TLS协议和可用的密码套件的数量,以便避免如果您真的想真正使用TLS隧道(服务器端和客户端)进行简单攻击世界。
ysdx

您可以将其他端口用于SSL / TLS。我什至通过SCTP和IPv6做到了。
Skaperen 2015年

Answers:


22

通过TLS的OpenVPN

您的VPN使用TCP作为传输协议。stunnel实例用于将TCP流的内容封装在TLS / TCP中。您得到以下协议栈:

[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
            [TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
 服务器通道客户端

在通道实例之间,您具有以下协议堆栈:

[IP]
[OpenVPN]
[TLS]
[TCP(443)]
[IP]
[...]

TLS加密其有效负载时,攻击者只能看到:

[??? ]
[TLS]
[TCP(443)]
[IP]
[...]

因此,是的,这是普通的TLS流量(对于查看流量的人来说,可以是HTTP / TLS,SMTP / TLS,POP / TLS或其他任何方式,但由于使用了TCP端口443,它看起来很像HTTP / TLS)。您可以使用Wireshark进行检查:记录Stunnel实例之间的流量。在wireshark UI(流数据包上的右键)上,您可以要求wireshark将流量解释为TLS:它将识别为TLS流量(您将看到不同的TLS消息,但看不到TLS会话的有效负载) 。

您可能想在客户端中使用SNI,以便看起来像现代浏览器将执行的操作。您可能还想使用ALPN,但是stunnel当前无法处理。

具有内置TLS的OpenVPN

相比之下,如果您使用的是OpenVPN,则将具有以下内容:

[IP]
[OpenVPN]
[TCP]
[IP]
[...]

看起来像这样:

[??? ]
[OpenVPN]
[TCP]
[IP]
[...]

内置TLS层不封装(IP,以太网)数据包,而仅用于设置会话和身份验证:

[TLS]
[OpenVPN]
[TCP]
[IP]
[...]

在这种情况下,您的流量并没有看起来像一个普通的TLS流量,但显然是OpenVPN的。如果在wireshark中将此流量解释为OpenVPN,您将识别出OpenVPN消息,并在其中识别TLS消息(但不包括有效载荷)。

警告

您应该注意,如果被动攻击者无法分辨出您的远程服务器实际上是OpenVPN服务器,那么主动攻击者将能够发现这一点:只需通过TLS连接到您的服务器,他就可以确认它不是 HTTP / TLS服务器。通过尝试说出OpenVPN协议,他将能够检测到您的服务器是OpenVPN / TLS服务器。

使用客户端身份验证的TLS上的OpenVPN

您担心这样做会启用TLS客户端身份验证:攻击者将无法启动有效的TLS会话,也无法猜测通过TLS封装了哪些有效负载。

*警告:**我不是在谈论OpenVPN内置的TLS支持(请参阅上面的en解释为什么它无法帮助您)。

多重OpenVPN / TLS和HTTP / TLS

另一个解决方案是通过TLS会话同时提供HTTP和OpenVPN。 sslh可用于自动检测协议的有效负载并将其分派到纯HTTP / TCP服务器或您的OpenVPN / TCP服务器。该服务器将看起来像标准的HTTP / TLS服务器,但是尝试与此服务器通话OpenVPN / TLS的人将能够检测到它实际上也是OpenVPN / TLS服务器。

        要么是OpenVPN / TCP
          或HTTP / TCP       
[1] .---------。.------。HTTP / TCP .-------------。
-> | 漏斗| ----> | sslh | -------> | HTTP服务器|
   '---------''------'| '-------------'
                           | .----------------。
                           '------> | OpenVPN服务器|
                        OpenVPN / TCP'----------------'

[1] = OpenVPN / TLS / TCP或HTTP / TLS / TCP

通过TLS的HTTP CONNECT上的OpenVPN

另一个解决方案是使用标准HTTP / TLS服务器并使用HTTP CONNECT / TLS连接到OpenVPN服务器:它看起来像是标准HTTP服务器。您甚至可以要求对客户端进行身份验证才能授权HTTP CONNECT请求(鱿鱼应该可以这样做)。

OpenVPN可以选择使用HTTP代理:

http-proxy proxy.example.com

您应该可以将其与连接到远程HTTPS PROXY的stunnel实例结合使用:

http-proxy 127.0.0.1 8443
remote vpn.example.com

哪个将实现此协议栈:

[IP] <------------------------> [IP]
[OpenVPN] <------------------------> [OpenVPN]
            [HTTP] <-------------> [HTTP]
            [TLS] <~~~~~> [TLS]
[TCP] <-> [TCP] <-----> [TCP] <-> [TCP]
[IP] <-> [IP] <-----> [IP] <-> [IP]
[] [] [] []
 服务器HTTPS PROXY stunnel客户端

您能详细说明一下HTTP CONNECT方法吗?在哪里可以找到设置的指南?
kontextify

kobtextify:添加了有关OpenVPN / HTTP_CONNECT / TLS可能实现的一些详细信息。
ysdx

谢谢!Web服务器或Squid部件的外观如何?
kontextify

我猜有点像“ acl VPN_SERVER dstdomain vpn.example.com”,“ acl VPN_PORT端口1194”,“ acl CONNECT方法CONNECT”,“ http_access允许VPN_SERVER VPN_PORT CONNECT»,“ http_access拒绝所有”。
ysdx

4

ysdx的答案很好,并且很好地描述了网络中的流量情况。

但是,流量分析可以在识别应用程序方面大有帮助。

假设您的OpenVPN连接看起来像是在线上的https连接,因此攻击者无法读取字节流并知道它是哪种连接。

典型的https连接的寿命不会太长。我不知道,也许您的浏览器使您的邮件服务器保持打开状态。通常,与许多不同的远程服务器之间的连接相对较短。

OTOH,OpenVPN连接可能会持续数小时或数天,并且会将大量数据来回发送到openvpn服务器。

您可以通过定期删除并重新启动连接来缓解长期连接。大概对您的应用程序流量有影响,但可能是可行的。但是,您和openvpn服务器之间的大量流量模式将变得更加难以伪装。


2
是。而且,我想可能可以查看流量​​的形状(例如其“突发性”),并将其与标准HTTP / TLS,IMAP / TLS,POP / TLS,OpenVPN / TLS进行比较。您可以尝试使用那些流量配置文件对给定的TLS流量进行分类,并了解封装在TLS连接中的流量类型。
ysdx 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.