¿Pueden los atacantes robar el certificado SSL del servidor y usarlo para los ataques MITM?

8

Estoy escribiendo una aplicación de iOS para uso privado para que actúe como cliente para un servidor PHP. Para asegurar la conexión, estoy usando un certificado SSL autofirmado.

Dado que el servidor es auto hospedado, en la primera conexión dentro de mi LAN, podría estar bastante seguro de que no hubo ataques MITM. Así que guardé en un archivo el certificado que el servidor envió al cliente y luego empaqueté el certificado descargado dentro de mi aplicación para verificar todas las conexiones si el certificado enviado por el servidor y el empaquetado en mi aplicación eran los mismos (SSL Pinning básicamente).

Sé muy poco acerca de los ataques MITM y la seguridad en general, por lo que mi pregunta es la siguiente: ¿podría un atacante descargar el certificado (como hice yo) desde mi servidor y usar ese certificado para pretender ser el servidor y realizar un ataque MITM? ? ¿O estoy malinterpretando la forma en que funciona el hombre en el medio?

    
pregunta BigLex 23.05.2013 - 02:20
fuente

3 respuestas

15

Lo que importa no es el certificado, sino la clave privada . Ese no sale del servidor. Para hacerse pasar por el servidor, el hombre del medio necesitaría obtener esa clave privada. El certificado en sí mismo es de datos públicos, y el servidor lo envía a todos los clientes que lo solicitan simplemente conectándose.

(Un Man in the Middle attack es una doble personificación: el atacante se hace pasar por el servidor al hablar con el cliente, como el cliente al hablar con el servidor. En SSL simple, sin autenticación de cliente basada en certificados, el cliente es nominalmente anónimo, por lo que montar un MitM exitoso se reduce a ejecutar un servidor falso que los clientes aceptan como genuino. Buena suerte con eso, si no tiene la clave privada del servidor.)

    
respondido por el Thomas Pornin 23.05.2013 - 02:35
fuente
3

En realidad, dependiendo de cómo su cliente implemente SSL / TLS y PKI, es posible que un atacante obtenga algo vagamente similar: por ejemplo, lea esta página sobre cómo la interceptación de conexiones seguras puede ser técnicamente posible, si no se presta suficiente atención a la parte PKI de SSL / TLS.

Para abreviar: el atacante generará un certificado raíz, de alguna manera hará que su aplicación cliente confíe en él (que es la parte crítica), y luego actuará como un hombre en el medio que genera certificados de servidor sobre la marcha. cuando su cliente se conecta a un (el) servidor.

Editar: Agrupar los certificados que el software debe confiar en la aplicación, en lugar de extraerlos de una tienda que el hombre en el medio pueda comprometer, es en principio suficiente para frustrar esto vulnerabilidad.

    
respondido por el Henrick Hellström 23.05.2013 - 02:46
fuente
2

Agrupar certificados, instalar certificados incrustados, implementaciones NO IMPORTA período. Si crees que este es el caso, te estás perdiendo el manejo subyacente de los certificados.

Cuando se realiza una conexión a través de la infraestructura PKI, generalmente funciona de la siguiente manera:

Client (with cert) --> before connection is made, let me consult CA --> Internet
Client (with cert) --> Hey CA is this cert being used valid --> Internet CA
CA --> checks cert information
CA --> Valid cert? --> Yes --> This is a valid cert --> Client
CA --> Valid cert? --> No --> This is NOT A VALID cert --> Client

Lo que ocurre con los atacantes es a) que pueden reemplazar SU certificado válido con un ROBADO - CERT FIRMADO y ocurre lo anterior:

Client (with signed STOLEN cert) --> Let me consult CA --> Internet
Client (with signed STOLEN cert) --> Hey CA is this cert valid?
CA --> checks cert information
(cert was not revoked)
CA --> Yes --> This is a valid cert --> Client

De lo que estoy leyendo es si la impresión de que cuando se realiza una conexión SOLAMENTE el ESPECIFICADO SE UTILIZARÁ y un atacante no se puede reemplazar completamente ese certificado. Se necesitará una enorme cantidad de programación para lograrlo. De hecho, un proveedor de software tendría que programar N cantidad de iteraciones para que cada cliente logre eso. De lo contrario, un certificado es un certificado es un certificado ...

    
respondido por el munkeyoto 23.05.2013 - 14:24
fuente

Lea otras preguntas en las etiquetas