¿El uso de la seguridad integrada (SSPI) para acceder a SQL Server es mejor para las aplicaciones web?

13

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?

Yo no
fuente
Hay tantas buenas respuestas aquí; Fue difícil elegir un ganador. Gracias a todos.
NotMe

Respuestas:

8

Diría que solo hay dos razones válidas para usar la autenticación de SQL:

  1. Se está conectando desde fuera del dominio, por lo que está integrado de autenticación
  2. Está ejecutando un punto de referencia TPC-C y cada ciclo cuenta. La autenticación SQL es un poco más rápida.

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:

  1. Aplicación centralizada de políticas: tiene un lugar para configurar sus políticas de contraseña, incluida la vigencia y caducidad de la contraseña, la cancelación de la cuenta, etc.
  2. Control sobre la suplantación y delegación de confianza. Una vez que se utiliza sql auth en una cadena de delegación de confianza, todas las apuestas se cancelan, ya que esa no es una "delegación" real y, por lo tanto, ya no está bajo las restricciones que imponen sus políticas
  3. Auditoría: su LSA ni siquiera ve la autenticación sql, por lo que simplemente se pasa por alto toda su infraestructura de auditoría. Debe agregar explícitamente los registros que SQL produce sobre los eventos de autenticación SQL, pero está mezclando manzanas y naranjas ya que esos eventos tienen una fuente, un proveedor y un esquema diferentes en el registro de eventos

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

Remus Rusanu
fuente
6

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.

Joel Spolsky
fuente
Aunque es cierto, un empleado descontento también podría simplemente instalar una página web que utiliza la conexión SSPI. ¿Qué es tan malo como tener acceso a la contraseña en sí ...
NOTME
1
un empleado EX descontento ya no tendría acceso, ya que su contraseña habría sido desactivada
Joel Spolsky
6

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.

Brent Ozar
fuente
¿Seguramente necesita modificar la contraseña en cada servidor web para la identidad del proceso de trabajo? Eso suena más difícil de automatizar que un cambio de archivo de configuración. En la actualidad, todas mis elecciones se basan en la facilidad de automatización.
Luke Puplett
2

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.

diq
fuente
1

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.

Kevin Colby
fuente
1

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,

K. Brian Kelley
fuente
No estoy seguro de que realmente haya una diferencia entre un servidor expuesto públicamente y uno utilizado internamente. Aparte de eso, esta es una buena explicación.
NotMe
Claro que lo hay. Un servidor expuesto públicamente, en general, no debería estar en el dominio. Eso significa que no puede usar una conexión confiable. SSPI no es una opción.
K. Brian Kelley
1

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.

  • AD es otra cosa para ejecutar y apoyar y administrar cuentas de servicio.
  • AD debe estar disponible en su entorno de alojamiento.
  • AD dificultaría pasar a la nube o nube híbrida.
  • AD facilita agregar cuentas de servicio a grupos en los que los administradores no deberían estar en alguna otra parte de su organización.
  • SSPI no evita el problema de cifrar la cadena de conexión, ya que debe cifrar su nombre de host SQL en la configuración.
  • La autenticación de SQL es simple y solo configuración de texto, fácil de implementar.
  • Configurar las identidades del grupo de aplicaciones es otra cosa para automatizar y luego ocultar el nombre de usuario y la contraseña en esos scripts de automatización para cada entorno.
  • El uso de dos cadenas de conexión facilita el uso de contraseñas continuas, por lo que puede actualizar la contraseña sin tiempo de inactividad.

Ú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.

Luke Puplett
fuente
0

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.

squillman
fuente