Almacenamiento del nombre de usuario y la contraseña en la memoria de la aplicación (ram)

0

He creado una aplicación de usuario que se ejecuta en escritorios de Windows 7. Esta aplicación permite a los usuarios ingresar su nombre de usuario y contraseña para otro sistema. Mi aplicación hace esto con un simple cuadro de texto.

Actualmente, estoy almacenando estos datos en la memoria para la aplicación. La aplicación posteriormente encripta y transmite las credenciales a través de TLS https. Mi pregunta es, ¿puedo almacenar el nombre de usuario y la contraseña en la memoria de mis aplicaciones sin cifrar? ¿Qué reglas debo seguir para aceptar y conservar las credenciales de usuario (en la memoria)?

    
pregunta Steve Short 04.09.2017 - 22:45
fuente

3 respuestas

1

Es una buena práctica cifrar estos detalles en la memoria, pero es necesario realizar algún tipo de proceso de modelado de amenazas y ver si esto justifica la sobrecarga.

Parece que su principal riesgo es que los usuarios lean la memoria utilizando las herramientas adecuadas; esto requiere intenciones maliciosas y un usuario bastante sofisticado. ¿Es este un escenario de amenaza probable? ¿A qué pueden acceder si comprometen las credenciales? ¿Son solo datos en la máquina local?

Los volcados de memoria son otro problema potencial, si se produce un error o si un usuario malintencionado comete un error y la memoria se descarga en los registros, los datos pueden recuperarse de estos registros.

Los archivos de intercambio y los archivos de hibernación también pueden contener estos datos a medida que la memoria se intercambia o si el dispositivo hiberna mientras las credenciales están en la memoria.

Existen múltiples herramientas disponibles para protegerse contra estos casos, como SecureString en el marco .Net, también hay API de protección de datos proporcionadas por los sistemas operativos MS. Cadena segura como un usuario ya respondió, son inmutables y encriptadas y también se almacenan en varias ubicaciones en la memoria. Yo usaría construcciones como esta provistas por los marcos y el sistema operativo y evitaría rodar su propio código para asegurar los datos en la RAM.

    
respondido por el iainpb 05.09.2017 - 10:56
fuente
0

No debes mantenerlos sin cifrar, ya que es fácil tomar copias de la memoria y buscar tokens conocidos allí.

Dependiendo de su idioma utilizado, recomendaría una implementación de cadena segura como . NET SecureString class . Esto garantiza una inmutable, cifrada y tiene una recolección de basura de seguridad cuando ya no se necesita.

Aparte de eso, asegúrese de que no termine en archivos de registro o volcados de gestión de excepciones, etc.

    
respondido por el ndrix 04.09.2017 - 22:55
fuente
-2

Todo se reduce a una evaluación de riesgos : ¿cuál es el riesgo de hacer lo que usted propone? ¿Cuál es el impacto de tener esas credenciales robadas?

Cualquier proceso con acceso a esa memoria podría copiar las credenciales.

¿Estás bien con ese riesgo? ¿Estarán bien tus usuarios?

En segundo lugar, si se lo contara a sus usuarios, ¿qué tan cómodos serían? ¿Te arriesgas a perder clientes o reputación?

    
respondido por el schroeder 04.09.2017 - 22:55
fuente

Lea otras preguntas en las etiquetas