Autorización en aplicación fuera de línea

1

Estoy trabajando en una máquina que necesita almacenar nombres de usuario y contraseñas para los distintos operadores, técnicos e ingenieros que pueden estar usando y configurando. Es importante que algunas funciones sean accesibles solo por ingenieros, otras accesibles por técnicos e ingenieros, y otras accesibles por todos. También debe haber una forma de agregar, eliminar y cambiar cuentas. Finalmente, los datos deben almacenarse en la misma computadora física que la aplicación.

Se ha sugerido que simplemente almacenemos el nombre de usuario, la contraseña y el nivel de privilegio en un archivo INI en el disco. Esto, obviamente, es malo. Me gustaría utilizar un sistema más seguro, con los objetivos que tiene un usuario con pocos privilegios:

  1. No se puede encontrar una copia de texto sin formato de la contraseña de nadie
  2. No se pueden realizar acciones fuera de su ámbito de privilegio

Creo que he logrado el objetivo n. ° 1 al añadir sal y hash a la contraseña, al almacenar la sal y el hash en el disco y a la autenticación con estos valores. Estoy utilizando .NET framework y System.Security.Cryptography.Rfc2898DeriveBytes esquema de hashing PBKDF2 para este propósito.

Sin embargo, 2 es más difícil, porque al almacenar las cuentas de usuario en el disco, es posible el siguiente ataque:

  1. El atacante hace una copia de seguridad del estado actual de la aplicación
  2. El atacante restablece la máquina al estado inicial / limpio al eliminar los archivos respaldados
  3. La máquina ahora debe proporcionar un mecanismo para agregar cuentas de usuario, como ofrecer una contraseña de administrador que se muestra solo en la primera ejecución
  4. El atacante se da a sí mismo los privilegios deseados y ejecuta acciones previamente restringidas
  5. El atacante restaura el estado de la máquina antigua

No puedo ver una forma de evitar este ataque. ¿Hay algo que pueda hacer? ¿Cómo se protegen los sistemas de autenticación completamente fuera de línea, como las cuentas de usuario de Windows o Linux, de este tipo de ataque?

Me doy cuenta de que un atacante con este tipo de acceso podría modificar o inspeccionar la propia aplicación y podría agregar un keylogger físico o de software, pero eso no es algo contra lo que pueda protegerme, por lo que quiero centrarme en hacer el mecanismo de autenticación. Lo más seguro posible.

    
pregunta kvermeer 08.10.2013 - 19:51
fuente

2 respuestas

1

Básicamente, no permite que el atacante modifique el estado de la aplicación.

Ahora, no estoy seguro de cómo se aplican los permisos de archivos en Windows, así que tome esta respuesta como un consejo de alto nivel. Tendrá que averiguar los detalles usted mismo.

Básicamente, los sistemas operativos como Linux evitan que ocurran este tipo de cosas al requerir una cuenta privilegiada para modificar, eliminar y, a veces, incluso leer un archivo importante. Linux moderno lo aplica de varias maneras, incluidos los permisos POSIX, las listas de control de acceso y SELinux.

Aplicando esto a su situación (en lenguaje de Linux), requeriría que la aplicación se ejecute como una cuenta de usuario específica del sistema operativo y posee los archivos que proporcionan el estado de la aplicación y otra información relevante. Esto elimina la capacidad de los usuarios normales que utilizan el sistema para modificar el estado de la aplicación.

    
respondido por el Ayrx 09.10.2013 - 02:56
fuente
0

No sé si su paso 3 ("La máquina ahora debe proporcionar ...") proviene de un requisito específico o no. Por mi parte, creo que es justo que, si uno elimina los archivos de datos principales de una aplicación, la aplicación simplemente ya no se inicia.

En tal caso, puede usar una base de datos cifrada para almacenar el estado de la aplicación y las credenciales. En los medios de instalación del software, la base de datos ya existe con la contraseña de administración predeterminada que se reemplazará (la aplicación puede incluso aplicar este cambio en el primer inicio de sesión). Y si falta el archivo de la base de datos, el inicio de la aplicación falla cuando se produce un error "Falta el archivo de datos".

De esta manera, la base de datos de usuarios de la aplicación nunca se deja sin protección y un atacante no puede recuperar fácilmente el privilegio de administración posterior a la instalación.

    
respondido por el WhiteWinterWolf 08.11.2013 - 09:27
fuente

Lea otras preguntas en las etiquetas