Al implementar aplicaciones web (.net) en un entorno de producción, ¿es mejor usar seguridad integrada o incluso importa?
Me parece que si un pirata informático rompe el servidor web, realmente no importará, ya que puede hacerse pasar fácilmente por la máquina.
Pensamientos?
Respuestas:
Diría que solo hay dos razones válidas para usar la autenticación de SQL:
Para el escenario que está proponiendo (el host del servidor web está completamente comprometido) nada puede protegerlo. El hacker puede hacer en el servidor DB como mínimo todo lo que el servidor web puede hacer . Y diría que la defensa en profundidad puede enseñarle a minimizar la pérdida en tal caso: reduzca los derechos de base de datos de la cuenta utilizada por su servidor web al mínimo requerido y nada más. En segundo lugar, asegúrese de que si el host del servidor web se ve comprometido, no se puede usar para elevar los privilegios por encima de la cuenta del servidor web (es decir, no hay otro servicio en el host WWW que use credenciales con privilegios más altos en la base de datos que la cuenta WWW). Estos son principios de seguridad básicos y no tienen nada que ver con el esquema de autenticación utilizado.
Si bien la autenticación SQL frente a la autenticación de Windows no ofrece una ventaja clara en su escenario, hay otros problemas a considerar:
Una última nota: el protocolo TDS expone la contraseña de autenticación sql en texto claro sobre el tráfico, pero eso generalmente se mitiga al solicitar el cifrado SSL del tráfico.
Entonces, ¿por qué todavía ve hosts WWW sql auth que almacenan la contraseña en clear en web.config? Esos son los malos desarrolladores / administradores, no seas uno de ellos.
msdn.microsoft.com/en-us/library/aa378326(VS.85).aspx
technet.microsoft.com/en-us/library/ms189067.aspx
fuente
Si no usa SSPI, está codificando el nombre de usuario y la contraseña en los archivos de origen.
Si está codificando el nombre de usuario y la contraseña en los archivos de origen, todos sus empleados tienen acceso a él.
Esto es relativamente inseguro. Un ex empleado descontento podría usar la información maliciosamente. Un visitante puede ver el código en una pantalla en alguna parte. O el código fuente podría salir accidentalmente en la naturaleza.
La ventaja de SSPI es que la contraseña nunca se almacena en ningún lugar claro.
fuente
Las otras respuestas hasta ahora han sido buenas, pero agregaré otra: administración.
Tarde o temprano, probablemente terminará con múltiples servidores SQL. Administrar la autenticación de SQL entre su aplicación y múltiples servidores SQL puede ser un poco doloroso, especialmente cuando tiene problemas de seguridad. Si cambia una contraseña de autenticación de Windows una vez, cambia de inmediato en todos sus servidores. Si necesita rotar sus contraseñas de autenticación de SQL, es más doloroso, hasta el punto de que probablemente no lo haga en absoluto. Eso es un riesgo de seguridad.
fuente
No estoy 100% seguro aquí, pero creo que el punto principal es que la autenticación de SQL no es segura, por lo que es mejor usar la autenticación de Windows. Dependiendo de cómo esté configurada su aplicación, también puede almacenar las credenciales adecuadas en forma cifrada en la máquina utilizando la autenticación de Windows. No creo que eso sea realmente posible con la autenticación SQL. Puede ofuscarlo, pero en última instancia debe estar en claro.
Además, el hecho de que un hacker pueda ingresar a un servidor no significa que se acabó el juego. Un pirata informático puede obtener el control de un proceso no privilegiado pero no hacer nada más en el servidor. Por eso es importante no ejecutar todo como administrador o sistema, sino utilizar cuentas de servicio con privilegios mínimos.
fuente
Lo mejor que puede hacer es limitar lo que pueden hacer si / cuando entran en el servidor web. Eso significa otorgar solo los derechos de SQL necesarios para que la aplicación funcione. Es mucho más fácil otorgar derechos de DBO a la aplicación, pero hace que DB sea mucho más vulnerable en caso de un ataque exitoso al servidor web.
fuente
Voy a prefacio todo esto diciendo que estoy asumiendo que estás hablando de un servidor web interno en la red privada interna.
Comencemos con la suplantación de la máquina. Si la identidad del grupo de aplicaciones es el Servicio de red y no hay suplantación en la aplicación .NET, entonces sí, la aplicación web se conectará al servidor SQL de fondo utilizando la cuenta de la computadora de la máquina. Y eso significaría que ha otorgado acceso a dicha cuenta de máquina. El CRM de Microsoft funciona de esta manera.
Sin embargo, si ha especificado una identidad, esa cuenta de usuario necesitará acceso al SQL Server. Si bien tiene razón en que si un atacante comprometió el servidor web, efectivamente tiene el mismo acceso que la cuenta de identidad, lo cierto es que el uso de un inicio de sesión de SQL Server no cambia nada aquí. Una vez que tengo acceso, puedo modificar la aplicación web para hacer lo que quiero y lo hará, al máximo que sus permisos de seguridad en el servidor SQL de fondo.
Ahora en cuanto a por qué usar SSPI. En primer lugar, no está utilizando un inicio de sesión basado en SQL Server. Eso significa que Active Directory es la única fuente de seguridad. Eso significa que tiene los medios de auditoría normales para determinar el acceso no válido. En segundo lugar, significa que a menos que haya otras aplicaciones que lo requieran, puede dejar su SQL Server en modo de autenticación de Windows solamente. Eso significa que no se permiten inicios de sesión de SQL Server. Eso significa que cualquier ataque contra sa se detiene incluso antes de comenzar. Y finalmente, facilita la recuperación. Si utiliza un inicio de sesión basado en SQL Server, deberá extraer el inicio de sesión con SID y contraseña cifrada. Si está utilizando una cuenta de usuario basada en Windows como una "cuenta de servicio", cuando va a un nuevo SQL Server, al crear el inicio de sesión,
fuente
La pregunta es ¿cuál es "mejor"? Lo cual es difícil de responder ya que se basa en el contexto, los valores y las prioridades del interlocutor.
Personalmente, me gusta la autenticación SQL.
Último punto: codifica su clase de administrador de conexión para probar cada cadena de conexión, de esa manera puede cambiar la contraseña en el primero en la configuración, eliminar el cambio y pasará a la segunda conexión, luego actualizará la contraseña en MSQL y el primero se usará nuevamente. Se necesita un cambio de configuración final para establecer la segunda contraseña igual que la primera, lista para la próxima vez.
fuente
Si los usuarios no van a manipular la base de datos directamente (a través de otras herramientas cliente como SQL Server Management Studio), normalmente solo crearé un inicio de sesión SQL único para la aplicación y le otorgaré el acceso que necesita. En ese momento, el usuario está restringido en lo que puede hacer según lo permitido por la interfaz de la aplicación web.
fuente