Řešení 1:
OpenVPN přes TLS
Vaše VPN používá TCP jako přenosový protokol. Instance stunnelu se používá k zapouzdření obsahu toku TCP v TLS/TCP. Získáte tento zásobník protokolů:
[IP ]<------------------------>[IP ] [OpenVPN]<------------------------>[OpenVPN] [TLS ]<~~~~~>[TLS] [TCP ]<->[TCP ]<----->[TCP]<->[TCP ] [IP ]<->[IP ]<----->[IP ]<->[IP ] [ ] [ ] [ ] [ ] Server stunnel stunnel Client
Mezi instancemi stunnelu máte na drátě tento zásobník protokolů:
[IP ] [OpenVPN ] [TLS ] [TCP(443)] [IP ] [... ]
Protože TLS šifruje svůj datový obsah, útočník vidí pouze:
[??? ] [TLS ] [TCP(443)] [IP ] [... ]
Takže ano, je to prostý provoz TLS (může to být HTTP/TLS, SMTP/TLS, POP/TLS nebo cokoli jiného pro někoho, kdo se dívá na provoz, ale vypadá to hodně jako HTTP/TLS, protože se používá TCP port 443). Můžete to zkontrolovat pomocí wireshark:zaznamenejte provoz mezi instancemi stunnelu. V uživatelském rozhraní wireshark (pravé tlačítko na paketu streamu) můžete požádat wireshark, aby provoz interpretoval jako TLS:rozpozná jej jako provoz TLS (uvidíte různé zprávy TLS, ale ne užitečné zatížení relace TLS) .
Možná budete chtít použít SNI v klientovi, abyste vypadali jako moderní prohlížeč. Možná budete chtít použít také ALPN, ale stunnel to v současnosti nezvládá.
OpenVPN s vestavěným TLS
Pro srovnání, pokud používáte OpenVPN, budete mít něco takového:
[IP ] [OpenVPN ] [TCP ] [IP ] [... ]
Což vypadá takto:
[??? ] [OpenVPN ] [TCP ] [IP ] [... ]
Vestavěná vrstva TLS nezapouzdřuje pakety (IP, Ethernet), ale používá se pouze pro nastavení relace a ověřování:
[TLS ] [OpenVPN ] [TCP ] [IP ] [... ]
V tomto případě váš provoz není vypadat jako prostý provoz TLS, ale je to zjevně OpenVPN. Pokud tento provoz interpretujete jako OpenVPN ve wireshark, rozpoznáte zprávy OpenVPN a uvnitř nich zprávy TLS (ale ne užitečné zatížení).
Upozornění
Měli byste si být vědomi toho, že pokud pasivní útočník nebude schopen říct, že váš vzdálený server je ve skutečnosti server OpenVPN, aktivní útočník to bude moci zjistit:jednoduše připojením k vašemu serveru přes TLS bude schopen pro potvrzení, že není HTTP/TLS server. Když se pokusí mluvit protokolem OpenVPN, bude schopen zjistit, že váš server je server OpenVPN/TLS.
OpenVPN přes TLS s ověřením klienta
Pokud se toho obáváte, můžete povolit ověřování klienta TLS:útočník nebude schopen zahájit pracovní relaci TLS a nebude schopen odhadnout, která datová část je zapouzdřena přes TLS.
*Upozornění:** Nemluvím o vestavěné podpoře TLS v OpenVPN (viz výše pro vysvětlení, proč vám to nepomůže).
Multiplexní OpenVPN/TLS a HTTP/TLS
Dalším řešením je obsluhovat HTTP i OpenVPN přes relaci TLS. sslh lze použít k automatické detekci užitečného zatížení protokolu a odeslání buď na prostý HTTP/TCP server, nebo na váš OpenVPN/TCP server. Server bude vypadat jako standardní HTTP/TLS server, ale někdo, kdo se pokusí mluvit OpenVPN/TLS s tímto serverem, bude schopen zjistit, že se ve skutečnosti také jedná o OpenVPN/TLS server.
either OpenVPN/TCP or HTTP/TCP [1].---------. .------.HTTP/TCP.-------------. -->| stunnel |---->| sslh |------->| HTTP server | '---------' '------'| '-------------' | .----------------. '------>| OpenVPN server | OpenVPN/TCP'----------------' [1]= Either OpenVPN/TLS/TCP or HTTP/TLS/TCP
OpenVPN přes HTTP CONNECT přes TLS
Dalším řešením je použít standardní HTTP/TLS server a použít HTTP CONNECT/TLS pro připojení k OpenVPN serveru:bude to vypadat jako standardní HTTP server. Můžete dokonce vyžadovat ověření klienta pro autorizaci požadavku HTTP CONNECT (chobotnice by to měla umět).
OpenVPN má možnost použít HTTP Proxy:
http-proxy proxy.example.com
Měli byste to být schopni zkombinovat s instancí stunnelu, která se připojuje ke vzdálenému HTTPS PROXY:
http-proxy 127.0.0.1 8443
remote vpn.example.com
Což by implementovalo tento zásobník protokolů:
[IP ]<------------------------>[IP ] [OpenVPN]<------------------------>[OpenVPN] [HTTP ]<------------->[HTTP ] [TLS ]<~~~~~>[TLS] [TCP ]<->[TCP ]<----->[TCP]<->[TCP ] [IP ]<->[IP ]<----->[IP ]<->[IP ] [ ] [ ] [ ] [ ] Server HTTPS PROXY stunnel Client
Řešení 2:
Odpověď ysdx je skvělá a velmi dobře popisuje, jak bude provoz vypadat na drátě.
Nezmíněno však je, že analýza provozu může jít dlouhou cestou k identifikaci aplikací.
Předpokládejme, že vaše připojení OpenVPN vypadá stejně jako připojení https na drátě, takže útočník nemůže číst bajtový stream a vědět, o jaký druh připojení se jedná.
Typické připojení https nebude žít příliš dlouho. Možná váš prohlížeč udržuje otevřené připojení k vašemu poštovnímu serveru, nevím. Obecně však bude existovat spousta relativně krátkých připojení k mnoha různým vzdáleným serverům.
OTOH, připojení OpenVPN může trvat hodiny nebo dny a bude odesílat spoustu dat tam a zpět na server openvpn.
Dlouhotrvající připojení můžete zmírnit pravidelným rušením a restartováním připojení. To má pravděpodobně důsledky pro provoz vaší aplikace, ale mohlo by to být funkční. Vzorec velkého a velkého provozu mezi vámi a serverem openvpn však bude mnohem těžší maskovat.