Identificar el tráfico SSL de la aplicación vs HTTPS

2

Escenario A:

Un usuario apunta su navegador web a https://users.server.com . El sitio web completa el protocolo de enlace SSL y continúa con el protocolo HTTP dentro de SSL.

Escenario B:

(lado del servidor) Ahora, digamos que users.server.com se modifica para ejecutar este socat :

socat OPENSSL-LISTEN:443,cert=path_to_cert TCP4:127.0.0.1:22

(lado del cliente) Luego, el usuario tiene el siguiente socat en ejecución:

socat TCP4-listen:6666 OPENSSL:the.server.host.com:443

Luego, el usuario apunta a su cliente PuTTY a localhost:6666 estableciendo efectivamente una conexión SSH SSL'd a the.server.host.com:22 .

¿Hay alguna forma de distinguir el tráfico de los escenarios anteriores? Mi preocupación es que un usuario dentro de mi red podría eludir eficazmente nuestro firewall al canalizar el tráfico TCP a través del puerto 443. ¿Se vería este tráfico diferente al tráfico HTTPS? ¿Hay diferencias en los tipos de protocolo de enlace SSL? Tenemos mecanismos establecidos para eliminar cualquier tráfico no HTTP en el puerto 80 y no SSL en el puerto 443 a través de nuestro proxy HTTP. (Todos los demás salientes están bloqueados). Espero que solo pueda permitir HTTPS (SSL con HTTP) en el puerto 443.

El ataque se detalla aquí (pdf).

Soy consciente de que si puedo instalar un certificado de CA raíz en la máquina del usuario, podría reducir el SSL. Pero eso no es factible. Estoy más interesado en detectar esto en la capa de red. Prevenir puede ser otra medida.

    
pregunta aus 16.01.2014 - 03:48
fuente

2 respuestas

3

Como @aus lo indica, puede intentar observar las características exactas de ClientHello y otras características SSL (por ejemplo, cómo se dividen los mensajes en los registros) para obtener alguna indicación sobre si el cliente es un navegador web genuino o no. . Sin embargo, esto no es robusto:

  • Los diferentes navegadores actúan de manera diferente en esa materia. Es posible que esté participando en una búsqueda cuesta arriba sin fin, con una evaluación continua de todas las versiones principales del navegador.
  • Una actualización del sistema operativo / navegador puede cambiar sus patrones de uso (por ejemplo, un conjunto de cifrado se habilita de manera predeterminada), por lo que su mecanismo de detección puede estar plagado de oleadas de falsos positivos en algunos momentos impredecibles (cuando Microsoft / Mozilla / Google decide presionar alguna actualización técnica).
  • Si los usuarios son conscientes de tales huellas dactilares, entonces pueden comenzar a utilizar clientes que imitan las funciones que está intentando detectar. Es posible la emulación "perfecta" de las características SSL de un "Internet Explorer normal". Proporcionar un incentivo (un mecanismo de detección que desencadene represalias) y ocurrirá.

Es posible que desee realizar un análisis de tráfico en función del tiempo y el tamaño de las solicitudes; cuando un navegador se conecta a un servidor, primero enviará una solicitud con un encabezado cuyo tamaño depende de muchas cosas, pero no será demasiado pequeño. En el caso específico de SSH-within-SSL, hay una manera ingeniosa y simple de utilizar la distinción: agregar un retraso .

Específicamente, cuando un servidor web recibe una conexión, espera: se supone que el cliente envía una solicitud. Desde el exterior, observa un protocolo de enlace SSL, que culmina con los dos mensajes Finished (aparecerían como "protocolo de enlace cifrado" ya que está monitoreando desde el exterior), luego el cliente enviará un registro de "datos de aplicación" (en SSL, el contenido del registro está cifrado, pero el tipo del registro no lo está: es handshake , alert , change_cipher_spec , o datos de aplicación ). Mientras no se envíen los "datos de la aplicación" del cliente, el servidor esperará.

Con SSH, sin embargo, las cosas son diferentes. Tan pronto como se establece la conexión, el cliente y el servidor se envían mutuamente su "banner" (que indica la versión del protocolo, etc.), sin ningún orden en particular. Por lo tanto, cuando su herramienta de monitoreo ve un nuevo protocolo de enlace SSL, puede retrasar temporalmente el primer registro de datos de la aplicación del cliente (por ejemplo, 0,5 segundos), para ver si el servidor enviaría espontáneamente un " Datos de aplicación "registro propio sin esperar el registro del cliente. Si el servidor lo hace, entonces no está hablando HTTP dentro del túnel SSL.

Por supuesto, si comienza a implementar dicho mecanismo de detección, los usuarios se adaptarán, modificando sus clientes y servidores SSH para que los servidores esperen el anuncio del cliente antes de hablar. Es probable que esto degenere en el mismo tipo de guerra estéril que entre virus y antivirus. Esto es, a largo plazo, agotador.

Además de SSH, su mayor problema serán los proxies web. A saber, el usuario:

  • Controla un proxy web externo.
  • Ejecuta en esa máquina externa un servidor SSL que simplemente reenvía bytes de datos al proxy web.
  • Ejecuta en su máquina local un proceso simple que escucha en el puerto local 3128 y reenvía todos los datos al servidor SSL.
  • Configura su navegador para usar "localhost: 3128" como proxy para solicitudes web.

Con esta configuración, toda la navegación web del servidor por parte del usuario se realizará a través de la conexión SSL, fuera del alcance de sus sistemas de monitoreo; y, de manera crucial, todas las solicitudes serán solicitudes HTTP desde un navegador web normal, por lo que no se pueden distinguir de las solicitudes HTTP desde un navegador web normal. Esto finalmente derrota el análisis de tráfico.

La conclusión es que lo que estás tratando de hacer es pelear una guerra que no puedes ganar. Te sugiero que comiences a buscar modelos alternativos. Una forma de verlo es la siguiente: si permite BYOD en su lugar de trabajo, debe confiar empleados por no abusar de ellos, y por imponer buenas prácticas de seguridad en ellos mismos.

    
respondido por el Tom Leek 16.01.2014 - 17:12
fuente
0

Después de algunas investigaciones adicionales, creo que he encontrado la respuesta a mi pregunta. La técnica utilizada para identificar clientes SSL se denomina Identificación del cliente SSL . Al observar los diversos componentes del ClientHello durante el protocolo de enlace SSL, podemos hacer una suposición educada de si el cliente SSL es un navegador u otra cosa.

Esta publicación de blog detalla bastante bien la idea:

  

En mi artículo anterior he descrito la estructura de SSL / TLS    ClientHello paquete.

     

Es importante destacar que contiene una lista de cifrados y extensiones compatibles.

     

Como era de esperar, esas listas difieren entre los clientes y, a menudo, es   posible identificar un cliente SSL mirándolos. En otras palabras   - Es posible distinguir Firefox, Chrome, Opera e IE aparte con solo mirar el paquete HTTPS inicial, que no está encriptado.

Por lo tanto, en circunstancias normales, sería posible distinguir entre HTTPS y SSL de aplicación.

El autor continúa hablando sobre cómo usar p0f con su parche para huellas digitales SSL contra una base de datos de firmas predefinidas .

La publicación y research de Ivan Ristić son fascinantes.

Sin embargo, hay una excepción. Con una granularidad suficiente en la configuración de un cliente SSL, uno podría fácilmente emular un ClientHello similar que parece provenir de un determinado navegador. Dada la suficiente atención a los detalles, no estoy seguro de que hubiera otra forma de distinguir entre el SSL del navegador y el SSL de otra aplicación con un apretón de manos cuidadosamente diseñado.

Dado que el resto de la secuencia TCP está encriptada, las únicas otras sugerencias serían la "charla" entre el servidor y el cliente, y la cantidad de datos que se transfieren.

    
respondido por el aus 16.01.2014 - 05:31
fuente

Lea otras preguntas en las etiquetas