¿Cómo puedo fisgonear en una conexión SSL mutuamente autenticada?

1

Nuestra empresa se conecta a un servicio externo a través de una biblioteca desactualizada (utilizando una extensión de PHP para una versión anterior de PHP). Como esto requiere que tengamos una configuración de servidor aislada para este servicio, me puse en contacto con la empresa para preguntar si existe alguna posibilidad de una versión más nueva de su extensión, pero desafortunadamente no en esta etapa.

La extensión utiliza un certificado de cliente conocido y compartido (para todos los clientes) con una contraseña de certificado diferente por cliente.

Me interesa ver cómo funciona el protocolo para que podamos desarrollar nuestra propia biblioteca con tecnologías modernas, sin embargo, debido a la autenticación mutua, no estoy seguro de cómo investigar el tráfico.

Por motivos de argumento, digamos que el servicio al que nos estamos conectando es example.com (tenga en cuenta que el servidor también está autenticado con SSL). Si se nos ha otorgado un certificado de cliente compartido y una contraseña específica del cliente, ¿es posible interceptar este tráfico y cómo podemos hacerlo?

La extensión requiere específicamente un sistema operativo Linux, por lo que, cuando sea posible, sería muy útil si la solución o las sugerencias se adaptaran a ese entorno.

    
pregunta mitchdav 06.08.2017 - 16:09
fuente

1 respuesta

2

Es posible que desee consultar ReverseEngineering.SE ya que puede haber más información práctica allí. También le recomiendo que revise su licencia de producto y obtenga un consejo legal: mientras que la ingeniería inversa generalmente se considera una práctica justa (desde una perspectiva legal) cuando se trata de garantizar la compatibilidad del software, a menudo es un área gris y es posible que no quiera ponerte a ti mismo oa tu empresa en problemas.

Su aplicación utiliza autenticación mutua SSL, lo que significa que el servidor se autentica ante el cliente, el cliente se autentica ante el servidor y la comunicación entre ambos está cifrada.

Lo que necesita se llama intercepción SSL.

Esto se hace básicamente usando algún tipo de proxy que falsifique la identidad del servidor con el cliente, la identidad del cliente falso con el servidor, y tenga acceso a la comunicación en forma clara entre ellos.

Normal communication:

CLIENT >client_cert>---------------------------------<server_cert< SERVER


Communication intercepted by a proxy:

CLIENT >client_cert>------<fake_server_cert< PROXY >client_cert>------<server_cert< SERVER

Identidad del servidor falso al cliente

Esto generalmente se hace instalando un certificado de CA que usted controla (es decir, uno que usted mismo creó y para el cual tiene la clave privada asociada) en el cliente.

Luego instale este certificado de CA en el proxy con la clave privada asociada. Ahora el cliente confiará en cualquier certificado que el proxy genere y firme usando esta CA. En particular, el proxy podrá generar nuevos certificados con el nombre del servidor original, falsificando efectivamente su identidad.

Tenga en cuenta que hay medidas que el cliente puede tomar para detectar que el certificado enviado por el proxy no es el certificado real del servidor, pero si tiene suerte (es decir, si los desarrolladores no tomaron ningún paso específico para fortalecer su aplicación) ) dicha medida no será implementada.

Identidad de cliente falsa en el servidor

Como no tiene control sobre el servidor, necesita un certificado de cliente genuino con su clave privada asociada. Afortunadamente, según su publicación, parece que los tiene, por lo que debería ser posible instalar uno de estos certificados de cliente en el proxy para que pueda identificarse como un cliente genuino contra el servidor remoto.

    
respondido por el WhiteWinterWolf 06.08.2017 - 19:48
fuente

Lea otras preguntas en las etiquetas