2011-05-09 8 views
5

Tengo una aplicación cliente que se conecta a un servidor a través de un socket seguro/SSL. El usuario debe iniciar sesión cuando se inicia la aplicación. En este momento, tengo el requisito de que debo enviar la contraseña real al servidor (encriptada a través de SSL), en lugar del método preferido para enviar un hash de la contraseña. Dicho esto, ¿cómo hago para almacenar de forma segura la contraseña en la memoria del cliente de modo que pueda volver a utilizar esta contraseña si el cliente necesita volver a conectarse al servidor detrás de las escenas debido a una conexión perdida?¿Cómo almacenar la contraseña del servidor en el cliente de Java para reconectarse más tarde?

Puedo cifrar fácilmente la contraseña, o incluso ponerla en KeyStore y recuperarla más tarde para la reconexión, sin embargo, incluso si hago esto, me parece que un hacker podría recuperar la contraseña si tuviera acceso al aplicación en un depurador. ¿Es esto solo un hecho de la vida cuando uno necesita almacenar la contraseña en el cliente por un tiempo temporal?

¿Hay una manera mejor/preferida de lograr lo mismo (es decir, permitir que el cliente se vuelva a conectar al servidor sin que el usuario tenga que ingresar su contraseña nuevamente después del inicio de sesión inicial)? ¿Sería mejor enviar un token de inicio de sesión que expira desde el servidor (donde puedo pasar este token de expiración al servidor en lugar de una contraseña al reconectarlo)?

Finalmente, en general, ¿qué tan fácil es para alguien conectar un depurador a una aplicación en ejecución en el escritorio de Java o Android, cuando la Aplicación está "despojada" correctamente de los símbolos de depuración? ¿Debo preocuparme por este caso, o Java protegerá mi aplicación de envío de tener un depurador u otro analizador de memoria conectado a él?

Respuesta

0

No puede hacer nada en contra de un registrador de teclas (en todo el sistema) en su aplicación. Por lo tanto, almacenar la contraseña en la memoria es arriesgado pero menos riesgoso que los tokens de sesión:

Un hacker puede usar un cliente malicioso que ha simulado una reconexión SSL/segura y fuerza bruta los tokens. Este enfoque impondría más riesgos que el almacenamiento de la contraseña en la memoria.

+1

No entiendo por qué un token sería más vulnerable a un ataque de fuerza bruta que el hacker que intenta atacar con fuerza bruta la contraseña? –

+0

Porque, en general, los tokens están más estructurados que las contraseñas. También; los tokens se envían tal como están (como debe asignarse a la sesión en el lado del servidor), mientras que las contraseñas se pueden codificar (las mismas contraseñas se correlacionan con los mismos datos "desconocidos", menos predecibles). Otro riesgo está en el esfuerzo de desarrollo; uno debe crear una sesión y una capa de autenticación de token, mientras que usar la técnica de contraseña relativamente "simple" requiere menos esfuerzo. Digamos que un programador presenta un error cada 5 minutos. Menos tiempo para implementar significa menos errores. – Pindatjuh

1

un hacker podría recuperar la contraseña si tuviera acceso a la aplicación en un depurador.

Correcto. El hacker también tiene acceso a la contraseña cuando observa el tipo de usuario mirando por encima del hombro físico del usuario con sus ojos físicos.

Y el pirata informático tiene acceso después de que almacenan un keylogger en la computadora de los usuarios.

¿Es esto solo una realidad cuando uno necesita almacenar la contraseña en el cliente por un tiempo temporal?

La alternativa es para visitar personalmente a cada usuario y les dice que no utilizar el depurador para romper la seguridad.

Pensemos en el caso de uso en el que el usuario (que conoce la contraseña) desencadena la aplicación en un depurador para conocer la contraseña. Que ellos ya sabían

Después de pensar en el único caso de uso en el que el usuario activa la aplicación cliente que se ejecuta bajo un depurador, no estoy seguro de que la seguridad esté "rota", ya que ellos ya conocían la contraseña.

Supongo que sería posible que Henry Hacker inicie la aplicación en el depurador, lo oculte en otra pantalla apagándolo, luego ejecute para obtener el usuario real y haga que escriba su contraseña en una estación de trabajo de desarrollo que tiene uno de los monitores apagados. ¿Es ese el escenario de "acceso a la aplicación en un depurador" del que está hablando?

siquiera necesito que preocuparse por este caso,

En realidad, no

o va a Java proteger a mi solicitud de envío de tener un depurador, u otro analizador de memoria, agregar a dicho informe ?

No, Java no protege a sus usuarios. El sentido común protege a tus usuarios.

Si se está ejecutando un depurador, no deberían estar usando la computadora.

Y el 99% de las veces, no se iniciará un depurador.

1% de las veces, ejecutarán accidentalmente un depurador, porque los usuarios hacen clic en íconos aleatorios. De esos 1% realmente hará que su aplicación se ejecute bajo el depurador. Nuevamente, haciendo clic en íconos aleatorios. De esos 1% llegarán al lugar donde podrían ingresar una contraseña haciendo clic en íconos aleatorios en la pantalla.

podría suceder que un usuario podría de alguna manera ejecutar su cliente bajo un depurador. Pero. Como ya conocen la contraseña, no tiene sentido preocuparse por ella.


Esto es completamente diferente de un ataque de hombre en el medio o un ataque de control remoto.

Si alguien toma el control remoto de la computadora de su usuario, ejecuta el depurador y observa la transacción, eso está completamente separado. Eso es detenido por firewalls y sistemas operativos. No Java.


ponerlo en un almacén de claves y recuperarlo más tarde para la reconexión

Eso es todo lo que puede hacer nunca. Las aplicaciones no pueden evitar el escenario de "conectar un depurador". El trabajo del sistema operativo es alertar al usuario de que se está conectando un depurador.

Si le preocupa la responsabilidad, no almacene contraseñas. Fin de la responsabilidad.

+0

Un depurador también se puede utilizar como una API utilizada por un virus sin una GUI. – Pindatjuh

+0

@S.Lott, no estoy de acuerdo, creo que debería ser una preocupación (aunque no se puede hacer mucho al respecto). Puedes alejarte de tu PC, voy con un depurador o analizador de memoria –

+0

¿No puede el pirata informático adjuntar un depurador o un analizador de memoria a una aplicación que ya se está ejecutando si el usuario abandona su escritorio, o en la carcasa del móvil, alguien roba el teléfono del usuario mientras la aplicación está conectada? –

0

Haría lo que sugiera, crear algún tipo de token de sesión en el lado del servidor. Asociarlo con el usuario y enviarlo de vuelta al cliente.

Depende de lo que quieras decir con fácil. Creo que es bastante fácil depurar las aplicaciones Java, incluso si están desprovistas de símbolos de depuración. Incluso podría depurarlos si están ofuscados.

Cuestiones relacionadas