我试图使我的传出和传入stream量看起来尽可能接近SSLstream量合法。 有没有办法DPI我自己的stream量,以确保它看起来像SSLstream量,而不是OpenVPNstream量? 并根据我的configuration设置所有的stream量使用端口443这是SSL端口?
我的configuration如下:
笔记本电脑上的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 ON笔记本电脑:
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
STUNNELconfiguration服务器:
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使用TCP作为传输协议。 stunnel实例用于在TLS / TCP中封装TCPstream的内容。 你得到这个协议栈:
[IP] <------------------------> [IP] [OpenVPN的<------------------------> [OpenVPN的] [TLS] <~~~~~> [TLS] [TCP] < - > [TCP] <-----> [TCP] < - > [TCP] [IP] < - > [IP] <-----> [IP] < - > [IP] [] [] [] [] 服务器stunnel stunnel客户端
在stunnel实例之间你有这个协议栈在电线上:
[IP] [OpenVPN] [TLS] [TCP(443)] [IP] [...]
当TLSencryption其有效负载时,攻击者只能看到:
[??? ] [TLS] [TCP(443)] [IP] [...]
所以是的,这是简单的TLSstream量(可能是HTTP / TLS,SMTP / TLS,POP / TLS或其他任何人查看stream量,但看起来很像HTTP / TLS,因为使用TCP端口443)。 你可以使用wireshark检查这个:loggingstunnel实例之间的stream量。 在wireshark用户界面(stream的一个包的右键),你可以要求wireshark把stream量解释为TLS:它将把它识别为TLSstream量(你会看到不同的TLS消息,但不是TLS会话的有效载荷) 。 您可能想要在客户端使用SNI,以便看起来像现代浏览器会做什么。
相比之下,如果您使用的是OpenVPN,您将拥有如下所示的内容:
[IP] [OpenVPN] [TCP] [IP] [...]
看起来像这样:
[??? ] [OpenVPN] [TCP] [IP] [...]
内置的TLS层不包围(IP,以太网)数据包,但仅用于build立会话和validation:
[TLS] [OpenVPN] [TCP] [IP] [...]
在这种情况下,你的stream量看起来不像普通的TLSstream量,但显然是OpenVPN。 如果您在wireshark中将此stream量解释为OpenVPN,则您将识别OpenVPN消息,并在其中识别TLS消息 (但不包含有效内容)。
你应该知道,如果一个被动的攻击者不能够告诉你的远程服务器实际上是一个OpenVPN服务器,那么攻击者就能够发现这一点:只要通过TLS连接到你的服务器,他就可以确认它不是 HTTP / TLS服务器。 通过尝试说出OpenVPN协议,他将能够检测到您的服务器是OpenVPN / TLS服务器。
您担心这个问题,您可以启用TLS客户端身份validation:攻击者将无法启动正在运行的TLS会话,并且无法猜测哪个有效内容通过TLS进行了封装。
另一个解决scheme是在TLS会话上同时提供HTTP和OpenVPN。 sslh可用于自动检测协议的有效负载,并将其分派到普通的HTTP / TCP服务器或OpenVPN / TCP服务器。 服务器看起来像标准的HTTP / TLS服务器,但有人试图说服OpenVPN / TLS与这台服务器将能够检测到它实际上是一个OpenVPN / TLS服务器以及。
OpenVPN / TCP 或HTTP / TCP [1] ---------。 ------。HTTP / TCP .-------------。 - > | stunnel | ----> | sslh | -------> | HTTP服务器| '---------''------'| '-------------' | .----------------。 “------> | OpenVPN服务器| OpenVPN的/ TCP '----------------' [1] = OpenVPN / TLS / TCP或HTTP / TLS / TCP
另一个解决scheme是使用标准的HTTP / TLS服务器,并使用HTTP CONNECT / TLS连接到OpenVPN服务器:它看起来像一个标准的HTTP服务器。 你甚至可以要求authentication客户端,以授权HTTP CONNECT请求(鱿鱼应该能够做到这一点)。
ysdx的答案很好,并很好地描述了stream量在networking上的显示方式。
然而,没有提到的是,stream量分析对于识别应用程序可能有很长的路要走。
假设您的OpenVPN连接看起来就像是一个https连接,攻击者无法读取字节stream并知道它是什么types的连接。
一个典型的https连接不会活得太长。 也许你的浏览器保持连接打开你的邮件服务器,我不知道。 一般来说,与很多不同的远程服务器会有很多相对较短的连接。
OTOH,OpenVPN连接可能会活几个小时或几天,并将大量的数据来回openvpn服务器。
您可以通过定期删除并重新启动连接来缓解长期连接。 这大概会影响您的应用程序stream量,但可能是可行的。 然而,你和openvpn服务器之间的很多很多stream量的模式将变得难以伪装。