Me acabo de dar cuenta de que los ataques SSL de hombre en el medio son mucho más comunes de lo que pensaba, especialmente en entornos corporativos. Me he enterado y he visto varias empresas que tienen un servidor proxy SSL transparente. Todos los clientes están configurados para confiar en el certificado de este proxy. Básicamente, esto significa que, en teoría, el empleador puede interceptar incluso el tráfico cifrado SSL sin que surja ninguna advertencia en el navegador. Como se mencionó anteriormente, los clientes vienen con el certificado de confianza. Esto solo se puede revelar validando manualmente el certificado que se está utilizando.
Para mí, parece que el empleador utiliza su posición superior para espiar el tráfico SSL del empleado. Para mí, esto hace que todo el concepto de SSL no sea confiable. Yo mismo probé con éxito una configuración similar usando mitmproxy y pude leer la comunicación entre el cliente y mi servidor de banca electrónica. Esta es información que no debe ser revelada a nadie.
Por lo tanto, mi pregunta es bastante simple: ¿cómo puedo validar la cadena de confianza en el lado del servidor? Quiero asegurarme de que el cliente use el certificado de mi servidor y solo una cadena de confianza. Me pregunto si esto se puede lograr con la configuración SSL de Apache. Esto sería conveniente ya que podría aplicarse fácilmente a muchas aplicaciones. Si esto no es posible, ¿alguien sabe de alguna manera de hacer esto en PHP? ¿O tienes alguna otra sugerencia?
fuente
Respuestas:
Creo que esta pregunta sería más apropiada para security.stackexchange.com donde el tema de MITM se discute en muchas preguntas. Pero de todos modos:
La validación del certificado del servidor solo se realiza en el cliente y no se puede mover de alguna manera al servidor, ya que el punto de validación del certificado en el cliente es que los clientes deben asegurarse de que está hablando con el servidor correcto y no pueden confiar en el servidor (no confiable) para tomar esta decisión por el cliente.
En caso de intercepción SSL, el cliente TLS desde la perspectiva del servidor es el cortafuegos / AV interceptor SSL. Por lo tanto, el problema en el lado del servidor es detectar si está hablando con el cliente esperado (el navegador) o no (el firewall / AV). La forma más segura de hacerlo es usar certificados de cliente para autenticar al cliente; de hecho, la intercepción SSL no funcionará si se usa la autenticación de cliente, es decir, el protocolo de enlace TLS fallará ya que el MITM no puede proporcionar el certificado de cliente esperado.
Solo, los certificados de cliente rara vez se usan. Además, un protocolo de enlace TLS fallido no significaría que el cliente puede comunicarse con el servidor sin intercepción SSL, sino que el cliente no puede comunicarse con el servidor en absoluto. Una forma alternativa sería utilizar algunas heurísticas para detectar el tipo de cliente TLS basado en la huella digital del protocolo de enlace TLS, es decir, el tipo y el orden de los cifrados, el uso de extensiones específicas ... Mientras que un proxy de interceptación SSL podría emular en teoría el original ClientHola perfectamente, la mayoría no. Consulte también Detectar man-in-the-middle en el lado del servidor para HTTPS o la sección III Heurística de implementación de TLS en El impacto de seguridad de la intercepción HTTPS .
fuente
El problema no está en el concepto de SSL ni en la implementación técnica, sino que alguien más tiene control total sobre un punto final de la conexión, es decir, su estación de trabajo.
Esa es la raíz del riesgo de seguridad real ...
Desde una perspectiva de seguridad, es su estación de trabajo la que se ve comprometida, lo que rompe la cadena de confianza que, en circunstancias normales, impide que un MITM tenga éxito.
No puedes Eso se hace del lado del cliente.
Dependiendo de su caso de uso, lo que puede hacer es RFC 7469 HTTP Public Key Pinning en el que envió un encabezado adicional al cliente con una lista (hash) de sus certificados SSL reales o las CA que utiliza.
fuente
Ese es el camino equivocado. No el servidor comprueba la cadena de confianza. Es el cliente. Entonces, la razón por la cual la compañía usa esta forma es asegurar el entorno de la compañía y verificar lo que el empleado está haciendo en su tiempo de trabajo.
fuente
Usted PODRÍA (tipo de), pero la verdadera pregunta es si usted DEBE .
Pero cuidado, no es tan simple como cambiar una bandera en apache.conf.
Además, como el "atacante" (por ejemplo, el empleador) controla la computadora del cliente, siempre puede frustrar sus intentos si está dispuesto a invertir suficiente esfuerzo (por el lado positivo, a menos que sea un pez muy grande, lo más probable es que no inclinado, para que logre su objetivo de que sus usuarios no puedan conectarse con usted a menos que sea seguro))
puede volver a implementar TLS en javascript y verificar allí si el certificado de que el cliente está conectado es el certificado de su sitio web.
si tiene suerte , el usuario podría estar usando un navegador donde Javascript del lado del cliente puede obtener información sobre el certificado remoto utilizado (y así verificarlo fácilmente contra el valor codificado del certificado de su servidor).
podría usar JavaScript para ejecutar su cifrado personalizado . Entonces, incluso cuando el malvado TLS MiTM de la compañía tuvo éxito, todavía no le daría acceso a sus datos. Por supuesto, si hay suficiente interés (y dado que controlan al cliente), podrían reemplazar sobre la marcha su javascript seguro con el suyo, que también registra (o cambia) toda la información en tránsito.
Además, dado que las empresas que emplean proxys TLS MiTM también suelen controlar la computadora del cliente por completo, podrían instalar fácilmente la pantalla y el keylogger para simplemente grabar video de todo lo que ve el usuario y grabar todas las pulsaciones de teclas (y movimientos del mouse) que el usuario escribe. Como puede ver, cuando el atacante ES el cliente, no hay una forma absolutamente segura de engañarlo. Realmente es solo una pregunta cuánto van a molestar ... Y algunas de las soluciones anteriores pueden ser lo suficientemente buenas para usted.
fuente