Métodos para defenderse contra rogue (clientes móviles)

5

Actualmente estoy creando un MVP (aplicación móvil financiera) y trato de comprender las mejores maneras de evitar que los clientes malintencionados interactúen con el servidor.

Al observar la seguridad de la mayoría de las aplicaciones móviles, puedo ver que es bastante fácil realizar un ataque MITM en estas para interceptar la comunicación a través de SSL.

Algunas aplicaciones parecen evitarlas con la fijación de certificados, pero eso también es muy fácil de superar en un teléfono con jailbreak.

(Veo que en este hilo ¿Los certificados de cliente proporcionan protección contra ¿MITM? es posible que el servidor verifique el cliente, pero parece que en la práctica prácticamente nadie hace esto? ¿No está seguro de por qué y es posible debido a alguna inflexibilidad al fijar un certificado de cliente en el servidor? )

Puedo ver que un par de las aplicaciones más seguras que he visto, implementan la fijación de certificados en el cliente, el servidor luego envía una clave pública (?) adicional (que puedo ver en el proxy de Charles), por lo que muy probablemente un segundo intercambio de claves público-privadas, pero después de eso ya no puedo seguir las comunicaciones. (Originalmente, esta aplicación, al igual que muchas otras aplicaciones financieras, parece hacer la seguridad fuera de banda a través de sms).

En resumen: 1) ¿Cuáles son las opciones de seguridad adicionales disponibles para proteger mi aplicación que van más allá de la fijación de certificados en el cliente (y evitar que los clientes deshonestos accedan al servidor?) (Excluyendo la prevención de jailbreak).

2) ¿Cómo funciona la seguridad de tipo fuera de banda y cómo proporciona protección adicional?

Gracias

    
pregunta yunti 06.02.2015 - 17:02
fuente

1 respuesta

1

La autenticación mutua TLS es la única forma en la que podemos garantizar que el cliente que habla con el servidor es legítimo.

Puedes realizar las siguientes cosas:

Cree un certificado autofirmado con capacidades de firma de certificado (CA = true)

Para cada usuario que quiera conectarse a usted, cuando se registra para su servicio por primera vez, necesita crear una Solicitud de firma de certificado (CSR) y se la entregará.

Debe firmar la CSR utilizando su certificado autofirmado y devolver el certificado firmado. Tenga en cuenta que, incluso si un MITM está escuchando en el medio, solo tendrá el CSR y el certificado firmado en la mano. Para realmente hacerse pasar por el cliente, el MITM también necesita acceso a la clave privada generada al crear el CSR. Esta clave privada nunca se envía a usted (y, por lo tanto, el MITM no la detecta).

Ahora, cada vez que un cliente quiera hablar con usted, le enviará un saludo a un cliente y le pedirá su certificado. Usted lo proporcionará. Ahora, solicitará el certificado del cliente (autenticación mutua). El cliente le enviará su certificado. Ahora, comprobará si el certificado presentado está firmado por su certificado autofirmado. Si es así, envíe un documento cifrado utilizando la clave pública mencionada en el certificado del cliente.

El cliente descifra el archivo cifrado utilizando la clave privada asociada con su clave pública. A continuación, cifrará una respuesta utilizando la clave pública mencionada en el certificado que recibió de usted (durante el protocolo de intercambio de TLS de ServerHello / server). y le enviaremos la respuesta cifrada.

Descifrarás la respuesta usando la clave privada asociada con tu clave pública. Si está esperando la respuesta, significa que es un cliente legítimo. Si no, es un MITM en el otro extremo.

Tenga en cuenta que para hackear con éxito la conexión y descifrar el contenido, el MITM necesita las claves privadas del cliente legítimo y de usted (servidor). Esto no es posible ya que las claves privadas nunca se envían unas a otras y, por lo tanto, el MITM nunca puede olerlo.

Por lo tanto, se establece una comunicación segura con un cliente legítimo.

Espero que esto aclare.

    
respondido por el commanderdileep 09.02.2015 - 20:07
fuente

Lea otras preguntas en las etiquetas