GNU/Linux >> Tutoriales Linux >  >> Linux

aturda el tráfico vpn y asegúrese de que parezca tráfico SSL en el puerto 443

Solución 1:

OpenVPN sobre TLS

Su VPN está utilizando TCP como protocolo de transporte. La instancia de stunnel se usa para encapsular el contenido de la secuencia TCP en TLS/TCP. Obtienes esta pila de protocolos:

[IP     ]<------------------------>[IP     ]
[OpenVPN]<------------------------>[OpenVPN]
            [TLS   ]<~~~~~>[TLS]
[TCP    ]<->[TCP   ]<----->[TCP]<->[TCP    ]
[IP     ]<->[IP    ]<----->[IP ]<->[IP     ]
[       ]   [      ]       [   ]   [       ]
 Server      stunnel      stunnel  Client

Entre las instancias de stunnel, tiene esta pila de protocolos en el cable:

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

A medida que TLS cifra su carga útil, un atacante solo puede ver:

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

Así que sí, es tráfico TLS simple (podría ser HTTP/TLS, SMTP/TLS, POP/TLS o cualquier otra cosa para alguien que observa el tráfico, pero se parece mucho a HTTP/TLS ya que se usa el puerto TCP 443). Puede verificar esto usando wireshark:registre el tráfico entre las instancias de stunnel. En la interfaz de usuario de wireshark (botón derecho en un paquete de la transmisión), puede pedirle a wireshark que interprete el tráfico como TLS:lo reconocerá como tráfico TLS (verá los diferentes mensajes TLS pero no la carga útil de la sesión TLS) .

Es posible que desee utilizar SNI en el cliente para parecerse a lo que haría un navegador moderno. Es posible que desee usar ALPN también, pero Stunnel actualmente no maneja eso.

OpenVPN con TLS integrado

En comparación, si usa OpenVPN, tendrá algo como esto:

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

Que se parece a esto:

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

La capa TLS integrada no encapsula los paquetes (IP, Ethernet), sino que solo se utiliza para configurar la sesión y autenticar:

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

En este caso, su tráfico no parece un tráfico TLS simple, pero obviamente es OpenVPN. Si interpreta este tráfico como OpenVPN en wireshark, reconocerá los mensajes de OpenVPN y dentro de ellos los mensajes TLS (pero no la carga útil).

Advertencia

Debe tener en cuenta que si un atacante pasivo no puede darse cuenta de que su servidor remoto es de hecho un servidor OpenVPN, un atacante activo podrá averiguarlo:simplemente conectándose a su servidor a través de TLS, podrá para confirmar que no un servidor HTTP/TLS. Al tratar de hablar el protocolo OpenVPN, podrá detectar que su servidor es un servidor OpenVPN/TLS.

OpenVPN sobre TLS con autenticación de cliente

Si le preocupa esto, podría habilitar la autenticación de cliente TLS:un atacante no podrá iniciar una sesión TLS en funcionamiento y no podrá adivinar qué carga útil está encapsulada a través de TLS.

*Advertencia:** No me refiero a la compatibilidad con TLS integrada en OpenVPN (consulte más arriba una explicación sobre por qué no le ayudará).

OpenVPN/TLS y HTTP/TLS multiplexados

Otra solución es servir HTTP y OpenVPN a través de la sesión TLS. sslh se puede usar para detectar automáticamente la carga útil del protocolo y enviarlo a un servidor HTTP/TCP simple o a su servidor OpenVPN/TCP. El servidor se verá como un servidor HTTP/TLS estándar, pero alguien que intente hablar OpenVPN/TLS con este servidor podrá detectar que, de hecho, también es un servidor OpenVPN/TLS.

        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 sobre HTTP CONNECT sobre TLS

Otra solución es usar un servidor HTTP/TLS estándar y usar HTTP CONNECT/TLS para conectarse al servidor OpenVPN:se verá como un servidor HTTP estándar. Incluso puede solicitar la autenticación del cliente para autorizar la solicitud HTTP CONNECT (squid debería poder hacer esto).

OpenVPN tiene una opción para usar un Proxy HTTP:

http-proxy proxy.example.com

Debería poder combinar esto con una instancia de stunnel que se conecta a un PROXY HTTPS remoto:

http-proxy 127.0.0.1 8443
remote vpn.example.com

Que implementaría esta pila de protocolos:

[IP     ]<------------------------>[IP     ]
[OpenVPN]<------------------------>[OpenVPN]
            [HTTP  ]<------------->[HTTP   ]
            [TLS   ]<~~~~~>[TLS]
[TCP    ]<->[TCP   ]<----->[TCP]<->[TCP    ]
[IP     ]<->[IP    ]<----->[IP ]<->[IP     ]
[       ]   [      ]       [   ]   [       ]
 Server    HTTPS PROXY     stunnel   Client

Solución 2:

La respuesta de ysdx es excelente y describe muy bien cómo se verá el tráfico en el cable.

Sin embargo, no se menciona que el análisis del tráfico puede ser de gran ayuda para identificar aplicaciones.

Supongamos que su conexión OpenVPN parece una conexión https en el cable, por lo que un atacante no puede leer el flujo de bytes y saber qué tipo de conexión es.

Una conexión https típica no vivirá demasiado tiempo. Tal vez su navegador mantiene una conexión abierta con su servidor de correo, no lo sé. Sin embargo, en general, habrá muchas conexiones relativamente cortas a muchos servidores remotos diversos.

OTOH, la conexión OpenVPN puede durar horas o días, y enviará una gran cantidad de datos de ida y vuelta al servidor openvpn.

Puede mitigar la conexión de larga duración interrumpiendo y reiniciando periódicamente la conexión. Esto presumiblemente tiene implicaciones para el tráfico de su aplicación, pero podría funcionar. Sin embargo, el patrón de mucho tráfico entre usted y el servidor openvpn será mucho más difícil de camuflar.


Linux
  1. ¿Qué es una VPN SSL?

  2. Cómo solucionar el problema del protocolo Curl TLS SSL desde CLI y código PHP

  3. Lectura y escritura en puerto serie en C en Linux

  4. ¿Permitir que el proceso no raíz se vincule a los puertos 80 y 443?

  5. Evitar que otras aplicaciones se vinculen a los puertos 80 y 443

Instale Lets Encrypt and Secure Nginx con SSL/TLS en Debian 9

Cómo cambiar el puerto de WordPress en Apache y Nginx

Instalación y uso de Nmap Port Scanner

Cómo comprobar la fecha de caducidad de SSL en Plesk

Cambia tu puerto SSH en Ubuntu y Debian

¿Por qué está abierto el puerto 1111 y es seguro estarlo?