Almacenar y leer las credenciales del usuario en su máquina

1

Estoy escribiendo un cliente (de terceros) para un juego, y una característica que me gustaría que tuviera este cliente es la capacidad de iniciar sesión automáticamente en el juego usando las credenciales ingresadas anteriormente. Las credenciales simplemente consisten en un nombre de usuario alfanumérico y una contraseña. Una forma ingenua de implementar esto es almacenar un archivo que contiene el nombre de usuario y la contraseña en la máquina local. Sin embargo, esto no es seguro por varias razones obvias. Una en particular es que este cliente admite complementos que otros desarrolladores pueden escribir. Esto abre la puerta para que un desarrollador malintencionado lea el contenido del archivo, comprometiendo efectivamente la cuenta.

También he considerado la idea de utilizar algún cifrado para cifrar (y descifrar) la contraseña, pero no estaba seguro de cuál era una forma segura de inicializar el cifrado. Una idea que tuve fue crear un archivo generado aleatoriamente y usarlo para inicializar el cifrado y luego usar ese cifrado para acceder a la contraseña. Sin embargo, una vez más, un complemento malintencionado podría simplemente leer ese archivo generado aleatoriamente, agregar su propio cifrado y luego descifrar el contenido del archivo de contraseña.

¿Existe una forma segura de almacenar y recuperar la contraseña de un usuario en la máquina local? Supongamos que un desarrollador malintencionado tiene acceso total al código fuente de la aplicación y sabe exactamente qué algoritmos y técnicas se están utilizando.

Editar: No tengo acceso al servidor al que se conecta el cliente. Mi aplicación es básicamente una "envoltura" para el cliente oficial del juego que agrega funcionalidad adicional.

    
pregunta Martin Tuskevicius 25.02.2016 - 22:28
fuente

5 respuestas

1

No. No sin la entrada del usuario, como un código de acceso o frase de contraseña utilizada para cifrar y descifrar las credenciales.

Aun así, el desarrollador malintencionado podría rastrear las credenciales después del descifrado de todos modos.

    
respondido por el d1str0 25.02.2016 - 22:43
fuente
1

Si bien esto puede ser beneficioso para el usuario, piense en el impacto de la contraseña comprometida.

En lugar de guardar a su usuario unos segundos por cada inicio de sesión, su alternativa es una cuenta violada que puede significar una pérdida de fondos, identidad y crea más trabajo para usted y / o su equipo si / cuando se informa.

Hágase un favor a usted y a sus usuarios y no guarde su contraseña. Simplemente no vale la pena.

Refiéramos a nuestro amigo el triángulo CIA / AIC:

  • Confidencialidad: existe un riesgo inherente de que las credenciales almacenadas se descifren. Este es el vector de ataque más fácil e incluso le da al atacante la posibilidad de reutilizar (demasiadas personas reutilizan contraseñas ... ugh) las credenciales de otros servicios, por lo que su juego puede permitir que un atacante obtenga datos de múltiples servicios / sitios para un solo usuario.
  • Integridad: es muy difícil asegurarse de que un archivo no pueda leerse o manipularse en un sistema de archivos, por lo que no tiene ninguna garantía de que, sin embargo, elija almacenar las credenciales que no se puedan tomar y descifrar posteriormente. (incluso si el cifrado es fuerte contigo).
  • Disponibilidad: Hace que el juego esté más disponible para ser utilizado en segundos, por lo que el valor agregado es minúsculo.

Usted impone menos riesgo a su usuario y tiene mayor control cuando mantiene las credenciales de manera centralizada. Obviamente, siempre existe un riesgo inherente, y sus servidores se convertirán en un objetivo, pero su objetivo en seguridad es equilibrar el triángulo lo mejor que pueda (lo que puede significar sacrificios).

Pensamiento: Si estás centrado en la facilidad de uso, al menos ofrece la posibilidad de recordar su nombre de usuario para que solo tengan que escribir su contraseña. Sin embargo, si está realmente dispuesto a guardar esa contraseña en el sistema, implemente una solución 2FA para protegerlo a usted y a sus usuarios.

    
respondido por el Signus 25.06.2016 - 09:29
fuente
1

Limitar los complementos

"... este cliente admite complementos que otros desarrolladores pueden escribir. Esto abre la puerta para que un desarrollador malintencionado lea el contenido del archivo ..." es una declaración muy peligrosa: ¿pueden leer los complementos de terceros? ¿Archivos arbitrarios fuera de la máquina del usuario? Este no debería ser el caso, ya que abre la posibilidad de un malware mucho más dañino que simplemente robar las credenciales de un juego.

Los complementos deben estar cuidadosamente aislados para que su acceso al sistema de archivos sea estrictamente limitado: deben poder leer los recursos empaquetados dentro del complemento y nada más. Si / cuando esto se implementa, esto también elimina el riesgo de que puedan acceder a las credenciales almacenadas.

    
respondido por el Peteris 22.12.2016 - 14:36
fuente
1

Sin control en el servidor, no es posible tener una forma confiable y segura de hacer esto

Como dijiste en tu pregunta, un atacante que desarrolla un complemento malicioso tendrá acceso a todo lo que está almacenado en el lado del cliente, por lo que no puedes depender de nada del lado del cliente para autenticar a los usuarios

Más aún, si los complementos tienen acceso a todo el lado del cliente, incluso ingresar la contraseña es peligroso. Un complemento puede capturar la contraseña una vez que el usuario la ingresa y redirigir a un servidor controlado por el atacante

Creo que lo mejor sería hacer un sandbox de los complementos y solo recordar el nombre de usuario. La introducción de una contraseña lleva como máximo 5 segundos, no debería afectar negativamente la experiencia del usuario

    
respondido por el Mr. E 21.01.2017 - 16:22
fuente
1

Estoy luchando un poco para entender cómo almacenar las credenciales mediante el cifrado, pero con las claves de cifrado tan accesibles como los datos cifrados es más seguro que almacenar el texto en claro de las credenciales.

Mientras sea usuario final, inicie sesión en un sitio con un nombre de usuario y contraseña, a menudo sucede mucho más detrás de la escena. Los esquemas como oauth2 están diseñados específicamente para abordar escenarios como este. Además, muchos sistemas operativos modernos proporcionan facilidades para administrar las contraseñas de los usuarios (por ejemplo, gnome keyring, KDE wallet, seahorse), pero si está atascado en MSWindows, entonces creo que está atascado con complementos de terceros .

Realmente, si no puedes confiar en el código de otras personas en el mismo espacio de direcciones que el tuyo, entonces no tienes muchas opciones.

    
respondido por el symcbean 22.03.2017 - 17:29
fuente

Lea otras preguntas en las etiquetas