Credenciales de usuario para acceder a los recursos de la red

2

Estoy en el proceso de configurar la infraestructura para microservicios utilizando RabbitMQ como nuestro intermediario de mensajes para nuestra empresa. Estoy tratando de descubrir la mejor manera de manejar la seguridad del sistema. Este sistema solo se utilizará (por ahora) en nuestra red interna. Utilizamos Active Directory para mantener a los usuarios en el dominio.

He configurado RabbitMQ para usar LDAP sobre TLS para autenticar usuarios usando nuestros servidores de Active Directory. En algún momento tendré que enviar las credenciales de un usuario a RabbitMQ. Planeo usar .NET NetworkCredential para almacenar las credenciales. RabbitMQ no puede usar el token de WindowsIdentity, por lo que tendremos que enviar credenciales reales (nombre de usuario y contraseña en lugar de un token) al servidor RabbitMQ.

Primero, entiendo que NetworkCredential no es a prueba de balas, pero es mejor que nada.

Algunos compañeros de trabajo han expresado su preocupación de que almacenaremos las credenciales personales de los usuarios en la memoria de las aplicaciones. Cuando no se utiliza RabbitMQ, no era necesario almacenar explícitamente las credenciales a largo plazo. Simplemente podríamos autenticar al usuario y seguir adelante, (permitiendo que el recolector de basura finalmente limpie la contraseña ingresada por los usuarios).

Argumentan que preferirían tener una identidad de usuario avanzado que tenga los permisos necesarios para conectarse a RabbitMQ. Entonces no estaríamos almacenando credenciales personales y, en cambio, utilizaríamos la seguridad transitiva a través de la identidad del "Usuario de la aplicación".

Mi pregunta es ¿cuál es la práctica estándar para esta situación? Mi pensamiento es que almacenar una identidad de usuario avanzado en una aplicación es problemático. Si las credenciales de usuario avanzado, que necesariamente se distribuirán a cada usuario de alguna manera (incluso si están ocultas en el código), se comprometieron, las consecuencias serían peores que si las credenciales de un usuario individual estuvieran comprometidas.

En lo que respecta al control de permisos en el sistema, me parece que usar las credenciales reales de una persona es preferible a una identidad de usuario avanzado. No tengo forma de excluir a las personas si una persona tiene acceso a las credenciales de usuario avanzado.

¿Me falta alguna herramienta o recurso que maneje esta situación?

    
pregunta Michael Harris 22.05.2017 - 23:05
fuente

1 respuesta

1

El complemento de autenticación Kerberos que encontramos para RabbitMQ es inmaduro y no se está manteniendo por lo que podemos decir. La única opción real era que enviemos las credenciales del usuario a RabbitMQ a través de una conexión TLS. Almacenamos las credenciales en la aplicación en un objeto de NetworkCredential, según sea necesario, lo que encripta la contraseña en la memoria, lo que dificulta significativamente el acceso.

Los usuarios de la aplicación y las credenciales de los usuarios avanzados solo son viables cuando puede controlar el acceso a esas credenciales. Es decir, solo deben usarse en contextos limitados, como dentro de una aplicación web segura o un servicio que controla el acceso a funciones específicas que los usuarios pueden realizar. La aplicación, que vive en un servidor, puede usar la cuenta elevada sin exponer las credenciales a un usuario.

Si comparte credenciales de usuario avanzado con usuarios comunes, por ejemplo, a través de una aplicación de escritorio, para que el usuario pueda realizar las acciones que el usuario avanzado pueda, debe asumir que el usuario tiene esas credenciales ahora, sin importar qué tan bien Ocultas esas credenciales dentro de la aplicación. Es una mejor idea utilizar la propia identidad del usuario para la seguridad siempre que sea posible. Esto le permite revocar permisos de un usuario si es necesario. También le permite rastrear y registrar quién está haciendo qué en el sistema.

    
respondido por el Michael Harris 19.03.2018 - 21:36
fuente

Lea otras preguntas en las etiquetas