Usuario de AD vs Usuario de SQL para autenticación de SQL Server

3

Mi empresa tiene varias aplicaciones web que implementamos en los sitios de los clientes. A menudo, el cliente tiene la última palabra en las opciones de implementación en las que a menudo me sorprende.

Muchos de estos clientes están implementando la aplicación web para apuntar a la base de datos implementada con las mismas credenciales de Active Directory que un administrador de servidor. Si la aplicación se comprometiera por cualquier motivo, el atacante también se ha ganado los derechos del servidor y, posiblemente, de la red.

¿Cuál es el propósito correcto de usar Active Directory para SQL Server? La única buena razón por la que podría pensar en usarlo es si tuviera granjas de servidores web con varios servidores SQL en los que tendría cuentas / grupos aislados para acceder a todos esos servidores con los permisos correctos e incluso entonces tendría inquietudes en entornos particulares. Supongo que es correcto que estos usuarios y grupos permanezcan aislados en los permisos de otros permisos, como las cuentas de administrador de máquina / servidor o una cuenta que nunca debería poder iniciar sesión en un servidor e iniciar sesión en una base de datos?

¿O es solo una seguridad perezosa en la que nunca debe usar AD para SQL Server?

Gracias,

    
pregunta Cyassin 01.09.2015 - 04:36
fuente

3 respuestas

7

Idealmente, el usuario o la aplicación que accede a SQL Server debería utilizar el conjunto de credenciales que los identifica correctamente y que se le ha asignado el nivel adecuado de acceso a SQL Server y / o las bases de datos según sea necesario para realizar la acciones que necesitan realizar.

La autenticación de SQL es un mecanismo de autenticación heredado que, en un entorno correctamente configurado, no debe habilitarse en absoluto. Microsoft no lo recomienda y la disociación entre la identidad de El usuario o la aplicación del contexto de autenticación solo es malo, desde el punto de vista de la seguridad.

Una vez resuelto, usted es ciertamente correcto de que una aplicación no debería acceder a una base de datos en el contexto de una cuenta de administrador de servidor o dominio. La aplicación web debe ejecutarse con una cuenta que tenga los permisos necesarios para ejecutar las funciones de la aplicación web (incluido el acceso adecuado a la (s) base (s) de datos que requiere para funcionar) y no más.

En última instancia, esto no es una cuestión de autenticación AD vs SQL, sino sobre el uso (o la falta de ellos) de cuentas de uso limitado, o la violación del principio de privilegio mínimo. El hecho de que no estén usando autenticación SQL no es un problema y, de hecho, es el diseño correcto. Por otra parte, el hecho de que las cuentas de AD tengan privilegios excesivos es, como ha notado, un problema grave y que debe abordarse.

    
respondido por el Xander 01.09.2015 - 05:26
fuente
4

El uso de Active Directory para SQL Server tiene varias ventajas, lo que lo convierte en el enfoque recomendado. Los DBA de SQL a menudo querrán tener la base de datos solo en el modo de autenticación integrada de Windows (WIA) (en lugar del "Modo mixto" donde también se admite la autenticación de SQL) debido a ello:

  • Cuando se usa AD, la autenticación de la cuenta está centralizada. Tiene una vista general de todas las cuentas que existen en el entorno. Si una cuenta está comprometida, solo necesita revocarla una vez: en AD. Con la autenticación de SQL, tendrá que iniciar sesión en cada servidor SQL y eliminarlo.
  • Cuando se usa AD, la rotación de la contraseña (si es necesario) está centralizada. Con la autenticación SQL, deberá iniciar sesión y cambiar la contraseña en cada destino (lo que a menudo significa que no lo va a hacer).
  • Cuando se usa AD, las contraseñas se almacenan en un único repositorio central. Con la autenticación SQL, se almacenan en la propia base de datos SQL. El endurecimiento de la AD suele ser mucho más simple que el endurecimiento de SQL Server, ya que el vector de ataque hacia sus servidores SQL es generalmente más grande (sí, esto es específico del caso).
  • Cuando se usa AD, la autenticación se realiza de manera más segura (usando Kerberos). Esto hace que sea más difícil para cualquier adversario intentar capturar la contraseña, y es mucho menos propenso a los ataques Man In The Middle (MITM). Además, a diferencia de las contraseñas, los tickets de Kerberos no se pueden reutilizar contra otros servicios: cada ticket es específico de un servicio (en este caso, para un solo servicio de SQL Server). La autenticación en otro servicio requiere la obtención de un nuevo ticket.
  • Cuando se usa WIA, la administración de cuentas para acceder a un SQL Server generalmente solo requiere otorgar los permisos a una cuenta de tiempo de ejecución (servicio) (la cuenta bajo la cual se ejecuta un servidor de aplicaciones). No es necesario crear cuentas adicionales como lo haría con la autenticación de SQL. Esto también centraliza el análisis de impacto: si un servidor IIS está comprometido, solo la cuenta de servicio IIS debe ser revocada para mitigar el riesgo. Con la autenticación SQL, deberá buscar en su configuración qué cuenta de autenticación SQL utiliza ese servidor IIS.
  • Al usar WIA, sus servidores de aplicaciones no necesitan almacenar el ID de usuario y la contraseña para sus conexiones. De nuevo, esto reduce el impacto de un sistema comprometido.
  • Al usar WIA, es posible deshabilitar los inicios de sesión remotos. Esto no es posible con cuentas autenticadas de SQL.
respondido por el Sven Vermeulen 01.09.2015 - 08:07
fuente
0

Al otorgar a un usuario acceso a una base de datos, se deben hacer algunas consideraciones con ventajas y desventajas en términos de usabilidad y seguridad. Aquí tenemos dos opciones para autenticar y otorgar permisos a los usuarios. La primera es dar a todos el acceso a la cuenta sa (administrador de sistemas) y luego restringir los permisos manualmente al conservar una lista de los usuarios en los que puede otorgar o denegar permisos según sea necesario. Esto también se conoce como el método de autenticación SQL. Existen importantes fallas de seguridad en este método, como se indica a continuación. La segunda y mejor opción es hacer que Active Directory (AD) maneje toda la autenticación y autorización necesarias, también conocida como autenticación de Windows. Una vez que el usuario inicie sesión en su computadora, la aplicación se conectará a la base de datos utilizando esas credenciales de inicio de sesión de Windows en el sistema operativo.

El principal problema de seguridad con el uso de la opción SQL es que viola el principio de privilegio mínimo (POLP), que consiste en otorgar al usuario los permisos absolutamente necesarios que necesita y nada más. Al usar la cuenta sa presentas serias fallas de seguridad. Se viola el POLP porque cuando la aplicación utiliza la cuenta sa, tiene acceso a todo el servidor de la base de datos. La autenticación de Windows, por otro lado, sigue el POLP otorgando solo acceso a una base de datos en el servidor.

El segundo problema es que no es necesario que cada instancia de la aplicación tenga la contraseña de administrador. Esto significa que cualquier aplicación es un posible punto de ataque para todo el servidor. Windows solo usa las credenciales de Windows para iniciar sesión en el servidor SQL. Las contraseñas de Windows se almacenan en un repositorio en lugar de la propia instancia de la base de datos SQL y la autenticación se realiza internamente dentro de Windows sin tener que almacenar las contraseñas de sa en la aplicación.

Un tercer problema de seguridad surge al utilizar el método SQL que involucra contraseñas. Tal como se presenta en el sitio web de Microsoft y en varios foros de seguridad, el método SQL no impone el cambio de contraseña o el cifrado, sino que se envían como texto sin cifrar a través de la red. Y el método SQL no se bloquea después de los intentos fallidos, lo que permite un intento prolongado de ingreso. Sin embargo, Active Directory utiliza el protocolo Kerberos para cifrar las contraseñas al tiempo que emplea un sistema de cambio de contraseña y un bloqueo después de intentos fallidos.

También hay desventajas de eficiencia. Como requerirá que el usuario ingrese las credenciales cada vez que quiera acceder a la base de datos, los usuarios pueden olvidar sus credenciales.

Si se elimina un usuario, tendrá que eliminar sus credenciales de cada instancia de la aplicación. Si tiene que actualizar la contraseña de administrador de sa, tendrá que actualizar cada instancia del servidor SQL. Esto lleva mucho tiempo y es inseguro, deja abierta la posibilidad de que un usuario descartado retenga el acceso al SQL Server. Con el método de Windows no surge ninguna de estas preocupaciones. Todo está centralizado y manejado por el AD.

Las únicas ventajas de usar el método SQL se encuentran en su flexibilidad. Puede acceder a él desde cualquier sistema operativo y red, incluso de forma remota. Es posible que algunos sistemas antiguos, así como algunas aplicaciones basadas en la web, solo admitan un acceso.

El método AD también proporciona herramientas de ahorro de tiempo, como grupos para facilitar la adición y eliminación de usuarios, y la capacidad de seguimiento de usuarios.

Incluso si logras corregir estos defectos de seguridad en el método SQL, estarías reinventando la rueda. Al considerar las ventajas de seguridad proporcionadas por la autenticación de Windows, incluidas las políticas de contraseña y seguir el POLP, es una opción mucho mejor que la autenticación de SQL. Por lo tanto, es altamente recomendable utilizar la opción de autenticación de Windows.

    
respondido por el shalomew 15.06.2016 - 20:02
fuente

Lea otras preguntas en las etiquetas