El mejor enfoque para crear una aplicación que se conecte a información confidencial

3

Voy a escribir una aplicación que se conecta a un servidor con información confidencial y uno de los requisitos principales es que solo mi aplicación podrá hacer la conexión. No hay un usuario provisto de usuario o contraseña involucrados. Por cierto, esto estará en la plataforma Android, pero eso no debería ser demasiado relevante para esta pregunta.

No estoy muy familiarizado con el funcionamiento interno de las comunicaciones de Internet seguras, sin embargo, supongo que el mejor enfoque será establecer una conexión SSL entre mi aplicación y el servidor. El problema que tengo es: lo que impide a alguien monitorear el tráfico de red que mi aplicación envía al servidor para iniciar la conexión SSL y luego enviar el mismo tráfico para abrir su propia conexión (es decir, duplicar el número aleatorio que envío al servidor que es utilizado para crear la clave de sesión)? Supongo que este tipo de cosas se han pensado antes y se han asegurado, pero espero que alguien pueda compartir más información sobre esto para ayudar a lidiar con mi preocupación.

Gracias, Harry

    
pregunta Harry Muscle 05.12.2011 - 05:33
fuente

3 respuestas

5

SSL evita que un atacante en la red pueda ver o manipular los datos en tránsito. Sin embargo, esto no garantiza que el usuario de la aplicación no haya modificado la aplicación. Cualquier valor almacenado en la memoria del dispositivo se puede obtener fácilmente utilizando un depurador.

En resumen, nunca puede confiar en el cliente, y esto no es un problema que pueda resolver la criptografía, punto.

    
respondido por el rook 05.12.2011 - 05:47
fuente
2

Primero, un ataque donde alguien transmite tráfico entre dos partes se llama man-in-the-middle ataque . SSL protege contra ellos si las dos partes se han autenticado . La autenticación de los dos lados requiere que use SSL de una manera particular, ya sea (preferiblemente) con certificados de cliente o algún método específico de la aplicación.

En cualquier caso, si desea asegurarse de que solo su aplicación se comunique con el servidor, debe almacenar un secreto dentro de su aplicación. Tiene que haber algo que tu aplicación sepa y el atacante no sepa. No es imposible almacenar secretos en una aplicación que distribuyes, pero es muy difícil; requiere ofuscación. Tenga en cuenta que la palabra "ofuscación" tiene varios significados cuando se trata de software; Aquí desea ofuscación no en el sentido de código fuente que es difícil de leer, sino en el sentido de ocultar un secreto dentro de una aplicación. La biblia de ofuscación es Software subrepticio por Christian Collberg y Jasvir Nagra si quieres bajar por esta ruta. Todos los métodos de ofuscación se rompen con el tiempo, por lo que su única esperanza es mantenerse al tanto de los atacantes y seguir cambiando sus técnicas. Desarrollar para ofuscación multiplicará fácilmente su tiempo de desarrollo por dos o tres, una vez que haya adquirido los antecedentes necesarios. Si alguien te dice que puedes obtenerlo más fácilmente, están equivocados o mintiendo.

En resumen, no puedes confiar en el cliente . Si tiene datos confidenciales, manténgalos en el servidor. Trate cualquier respuesta del cliente como no confiable.

    
respondido por el Gilles 06.12.2011 - 09:51
fuente
1

1- Debe familiarizarse con los principios de las comunicaciones seguras. No hay escapatoria aquí.
2- Como han dicho otros, NUNCA CONFÍE EN EL CLIENTE, incluso si está escribiendo al cliente.
3- Para cada comunicación, necesita asegurarse de quién está en cada lado (en el lado del cliente debe asegurarse de que está hablando con el servidor correcto, en el servidor que necesita para asegurarse de que está hablando con el cliente que espera) hablar también). Una de las muchas formas de hacer esto es usar una combinación de cifrado asimétrico y simétrico, en el servidor que necesita saber [la] clave pública de cada cliente, en el cliente que necesita conocer la clave pública de sus servidores, entonces puede intercambiar una clave RSA o alguna clave simétrica (especialmente si el rendimiento es un problema).

Esto es solo una sugerencia, debes modificarla según lo que necesites.

    
respondido por el Ali 06.12.2011 - 18:59
fuente

Lea otras preguntas en las etiquetas