¿Por qué una aplicación no debe usar la cuenta sa


21

Mi primera pregunta, sé gentil. Entiendo que la cuenta sa permite un control completo sobre un servidor SQL y todas las bases de datos, usuarios, permisos, etc.

Creo absolutamente que las aplicaciones no deberían usar la contraseña sa sin una persona de negocios perfeccionada y centrada en eso. Las respuestas a esta pregunta incluyen mucho de mi razonamiento para una discusión centrada en TI

Me veo obligado a aceptar un nuevo sistema de administración de servicios que NO FUNCIONARÁ a menos que use la contraseña sa. Nunca tuve tiempo de averiguar por qué al configurar una evaluación, pero el equipo del servidor intentó instalarla para usar una función fija que había configurado incorporando db_creater y otros permisos que pensé que requerirían. que falló Luego dejé que el equipo del servidor se instalara con la cuenta sa pero se ejecutara bajo una cuenta en el rol dbo para su base de datos, pero eso también falló. Malhumorado, intenté que funcionara con una cuenta en el rol de administrador del sistema, pero incluso eso falló y no con mensajes de error útiles que me permitieron resolver lo que estaba sucediendo sin pasar más tiempo del que tenía disponible. Solo funcionará con la cuenta sa y la contraseña almacenada en texto sin cifrar en el archivo de configuración.

Cuando pregunté esto y el equipo del servidor habló con el proveedor, obtuvieron la preocupante respuesta de '¿Cuál es el problema con eso?' y luego 'bueno, podemos ver cómo codificar la contraseña' codificando ffs

Sé que hay formas y medios para restringir el acceso al archivo, pero en mi opinión, es solo otra debilidad en la seguridad.

De todos modos, mi pregunta es, ¿alguien podría señalarme alguna documentación que pueda usar para explicarle al negocio la razón por la cual esto es algo malo y debería ser un gran no? Trabajo en un campo que significa que necesito tomarme en serio la seguridad y he estado luchando para que el negocio entienda y, en última instancia, puede ser superado de todos modos, pero tengo que intentarlo.


1
sao algún miembro de sysadmin, incluidos los inicios de sesión de Windows?
Remus Rusanu

sa y sa solamente :-(
SQLDBAWithABeard

1
Necesita obtener más información del proveedor. Específicamente qué cosas están haciendo que requieren saexplícitamente.
Aaron Bertrand

11
A menudo, cuando un proveedor dice que necesitan iniciar sesión como sa explícitamente, significa que simplemente no han probado su aplicación de otra manera (o lo hicieron una vez y se cayó con un error que no investigaron antes de decidir "simplemente nos quedaremos" con sa "), que no es algo que me llene de confianza. Sin embargo, no tome esta táctica directamente con el vendedor, ¡investigar de manera más diplomática obtendrá mejores resultados!
David Spillett el

David lo tiene correctamente, creo, por mis breves tratos con el vendedor
SQLDBAWithABeard

Respuestas:


21

Depende de su negocio, pero lo principal en la mayoría de los casos es asegurarse de que no se vea como un problema de TI. Es un problema de seguridad y, si bien las dos personas de negocios masivos se superponen, es más probable que escuchen si dice "seguridad" que si simplemente está "gimiendo sobre cosas generales de TI".

¿Trabaja con algún cliente que tenga requisitos de seguridad? Ese es un buen lugar para comenzar. Si ejecutamos una aplicación con acceso de nivel sa, o simplemente una aplicación que no aseguró adecuadamente sus credenciales, incluso si no usaba acceso privilegiado (preferimos Windows Integrated en lugar del usuario / pase almacenado cuando sea posible), y estaríamos sujetos a una seguridad auditoría, esa auditoría fallaría y correríamos el riesgo de perder clientes y / o tener que devolver dinero a los clientes de nuestros grupos (las organizaciones bancarias en el caso del producto en el que trabajo principalmente, otras partes del grupo tratan con la policía y la salud autoridades y demás) la seguridad es parte de que nuestra oferta sea adecuada para su propósito. La gente de negocios serán comprender la gravedad de esa amenaza potencial, aunque por lo general no más que palabras pagan a las recomendaciones de TI.

Incluso si ignora los requisitos impuestos por el cliente, si se esfuerza por cumplir con varios estándares de seguridad estándar de la industria, nuevamente este tipo de autenticación de aplicación le fallará frente a una auditoría, ya que está muy lejos de ser una práctica recomendada como algo que generalmente se considera en la lista "simplemente no se debe hacer". Deje en claro a los responsables de la toma de decisiones de su negocio que la seguridad es una parte importante de la aplicación, y el hecho de que este proveedor no parece ser consciente (o al menos no se preocupa adecuadamente) hace que tenga dudas sobre qué más podrían no ser capaces de hacer. lidiar con: conocer las mejores prácticas de seguridad de DB es (bueno, debería ser) parte de su trabajo y su implementación no es difícil.

Señale también que usted (el comprador) debe dictar requisitos de seguridad razonables al proveedor, y no al revés. Son sus datos, por lo que no están calificados para indicar lo que se considera lo suficientemente seguro.


Decir ah. No me di cuenta de que enter agregó el comentario Es seguro decir que donde trabajo, la seguridad de todo tipo es una preocupación importante, considérelo igual que la policía si lo desea. Sin embargo, los tomadores de decisiones no ven la sa como una preocupación. La auditoría es un buen lugar para comenzar y lo investigaré más a fondo.
SQLDBAWithABeard

+1 Me gustó especialmente el comentario de que este es un problema de seguridad , no un problema de it .
Kenneth Fisher

2
Dudaría en comprar cualquier cosa de un grupo de personas que piensan que está bien dejar las llaves del reino en un archivo de configuración en texto plano. Sé que no es su decisión, pero si puede hacer que The Deciders vea qué idea tan terrible es y qué dice sobre el proveedor, eso podría ayudar a su caso.
mdoyle

Mdoyle: el problema es que a medida que aprendo más al respecto, los Decididores ven las cosas en signos £ y, dado que se trata de una actualización de una versión antigua, se está volviendo barata. Creo que estoy ganando la batalla un poco gracias a la buena gente aquí. He retrasado las pruebas de la porción del servidor web de esto al menos por el momento
SQLDBAWithABeard

20

Ninguna aplicación necesita tener acceso SA nunca. (A menos que su único propósito sea la administración de bases de datos de algún tipo).

Es una regla general no otorgar más derechos a ningún inicio de sesión (de aplicación o personal) de lo que la empresa requiere que tenga ese inicio de sesión.

Ninguna aplicación es completamente segura. La mayoría tiene algún tipo de vulnerabilidad de inyección SQL o XSS. Si un intruso puede ejecutar una declaración de su elección y tiene acceso 'SA', hay muchas cosas que pueden sucederle a sus datos que podrían matar el negocio instantáneamente. (Especialmente si los datos necesitan ser confiables porque son utilizados por las fuerzas del orden público). Pregunte a los interesados ​​qué tendrían que hacer, si alguien pudiera cambiar deliberadamente incluso un solo registro y esa información se filtró.

Ahora, con el acceso 'SA', no solo se puede cambiar la base de datos de la aplicación, sino también todas las demás bases de datos del sistema. Por lo tanto, pregunte a sus partes interesadas qué harían si hiciera una copia de TODAS sus bases de datos y la enviara al periódico. Porque eso podría suceder si un empleado descontento descubre que existe este agujero de seguridad.

El vendedor dijo que podían codificar la contraseña. Eso es BS. La aplicación necesita acceder a la contraseña en texto sin cifrar para usarla, por lo que la clave para descifrar la contraseña se almacenará descifrada junto a ella. Además, como se mencionó anteriormente, el verdadero problema no es que alguien encuentre esta contraseña; es que las personas (mal) que usan este sistema a través de una vulnerabilidad tendrán acceso completo a todas sus bases de datos sin ver la contraseña.

La causa más probable de que se requiera SA es que la aplicación necesita interactuar con el Agente SQL. Al menos esa es una de las funciones más difíciles de implementar correctamente y la mayoría de las personas simplemente toman la ruta "usar SA" para evitarlo. Requerir 'SA' en sí mismo podría deberse a que el proveedor no sabe cómo verificar los permisos del administrador del sistema.

Hay dos soluciones que puedes probar:

  1. Cambie el nombre de SA (una práctica recomendada de seguridad de todos modos) y cree una nueva cuenta llamada 'SA' con derechos restringidos. (Nunca probé esto, pero debería funcionar)

  2. No instales el software. Usted como profesional no puede asumir la responsabilidad de esa acción, por lo que no debe instalarla. Para darle una comparación, pídale a un plomero que dirija la línea de gas directamente a través de la chimenea en lugar de rodearla para ahorrar algo de tubería / dinero. Puede que te estés riendo de esta imagen, pero creo que es una comparación adecuada: este software explotará tarde o temprano, probablemente antes. Y cuando lo haga, también podría derribar el negocio.

Si todo esto no impide que "ellos" requieran este software, la última recomendación que puedo darle es ejecutar. Si algo le sucede a los datos, usted será el primero en ser responsable. Entonces, con esta aplicación en su lugar, probablemente no tenga seguridad laboral, así que busque un empleador que le brinde al menos algo.


44
+1 solo para el símil "la línea de gas directamente a través de la chimenea" .
ypercubeᵀᴹ

En SQL Server, la cuenta sa no se puede renombrar. Sin embargo, puede ser deshabilitado.
Greenstone Walker

1
@GreenstoneWalker: seguro de que puede: alter login sa with name = [as];.
Remus Rusanu

Remus, eso me servirá bien por confiar en SSMS y también por confiar en viejos conocimientos. Antes de SQL Server 2005 no se podía renombrar. Parece que SSMS no puede cambiar el nombre del inicio de sesión sa, pero el T-SQL que publica es exactamente correcto.
Greenstone Walker

12

Veo dos líneas de atacar esto.

  • El cumplimiento . ¿Existe algún criterio de cumplimiento obligatorio en su tienda? Busque cuidadosamente a través de su redacción y vea si encuentra algo que sea incompatible con el "requisito" de la aplicación. Si encuentra algo que impida el sauso de una aplicación, tiene una carcasa hermética a prueba de balas, ya que la aplicación haría responsable a su negocio, etc.

  • Acceso de administrador de usuario . Asegúrese de presentar claramente el caso de que una aplicación que requiere saacceso en efecto le da saacceso a todos los usuarios corporativos que tienen derechos de administrador en las estaciones de trabajo donde está instalada la aplicación. No hay forma de ocultar la sacontraseña de los administradores locales donde se ejecuta la aplicación, eso es un hecho y ninguna cantidad de 'codificación' puede evitar esto. No existe una raíz local de confianza a la que un administrador local no pueda acceder, si así lo desea. Deje en claro que tener una aplicación que requiere saequivale a dar saprivilegios a todos los usuarios que ejecutan la aplicación. Explique lo que eso significa, lo que efectivamente pueden hacer los usuarios:

    • capacidad de leer cualquier dato en el servidor, no solo desde esta aplicación sino desde cualquier otra base de datos alojada en ese servidor
    • capacidad de modificar cualquier dato en el servidor, nuevamente desde cualquier otra base de datos en el mismo servidor
    • capacidad de borrar cualquier rastro de sus acciones después de realizar una modificación
    • capacidad de alterar cualquier auditoría e historial para que parezca que ciertas acciones fueron realizadas por un usuario diferente
    • capacidad de usar las credenciales de SQL Server para escalar un ataque a cualquier otro recurso que confíe en este servidor. Esto puede implicar cualquier otro servidor SQL, pero también otros recursos, incluidos, entre otros, recursos compartidos de archivos, servidores de intercambio, etc., ya que el servidor SQL puede usarse solo como un trampolín.

Deje en claro a los tomadores de decisiones que aceptar esta aplicación implica confiar a todos los empleados que tienen acceso de administrador a las estaciones de trabajo que ejecutan la aplicación con todos los privilegios mencionados anteriormente. El vendedor intentará defender su posición invocando de algún modo u otro 'encriptando' la sacontraseña de la aplicación. Esto no retiene el agua. No existe un esquema de cifrado que pueda resistir un ataque de un administrador. Y deje en claro que la cantidad de habilidad técnica requerida para encontrar una contraseña 'oculta' localmente es completamente irrelevante. Los empleados no lo van a hacer ellos mismos, uno de ellos buscará en Google y descubrirá el script fácil de usar que lo hace.


Gracias Remus Esa es precisamente la respuesta que necesitaba. Lentamente estoy ganando la batalla y todo esto está ayudando
SQLDBAWithABeard

7

Primero, ¿la contraseña sa almacena el texto plano? Deberías votar con tu billetera. Quien piense que eso es aceptable debe quedar fuera del negocio.

Aquí hay una anología que podría ayudarlo a explicar el problema: la empleada Alice necesita acceso al primer piso. ¿Le das la llave maestra de todo el edificio o solo la llave del primer piso? Respuesta: Le das solo las llaves del primer piso. ¿Por qué? Porque reduce la posibilidad de daño accidental o deliberado. Si Alice no puede llegar a la sala de servidores del segundo piso en primer lugar, entonces nunca hará nada malo allí.

Es el principio de menor privilegio.

En cuanto a por qué la aplicación necesita usar la cuenta sa, esa es una pregunta que PerfMon o Extended Events deberían poder responder. Cree una traza PerfMon utilizando la plantilla T-SQL, tal vez filtrada por el nombre de la aplicación.

Fuera de mi cabeza, aquí hay otro argumento contra el uso de sa: el uso de la cuenta sa requiere que el servicio de SQL Server esté en modo de autenticación mixta. La autenticación de Windows solo es mejor porque podemos aprovechar todas las características seguras de Kerberos.


4

Desde una perspectiva técnica, no hay razón para que una aplicación necesite permisos de SA. Lo que probablemente sucedió es que los desarrolladores de la aplicación probablemente verifiquen si su inicio de sesión tiene permisos de administrador de sistemas y si no, simplemente arroja un mensaje de error. De esta manera pueden afirmar que la aplicación requiere derechos de SA.

Si tiene que tener esta aplicación, la ejecutaré en una instancia separada que no tiene nada más.


Creo que probablemente verifica si se está ejecutando como sa y luego falla, ya que no se ejecutará en una cuenta con sysadmin
SQLDBAWithABeard

1
Entonces será mucho verificar el ID de usuario específico. Lo más probable es que el desarrollador esté haciendo esto porque funciona con sa y no querían molestarse en ver qué permisos realmente necesitaban, por lo que esta es la forma más fácil de evitar otros errores. Es un enfoque totalmente basura y el vendedor debe ser golpeado por hacerlo.
mrdenny 05 de

4

Quizás su proveedor esté solicitando / requiriendo "sa" porque en algún lugar de su aplicación están utilizando XP_CMDSHELL. (No empiece con el daño posible con acceso irrestricto a XP_CMDSHELL. Baste decir que esto potencialmente abre no solo sus datos sino la máquina host y, tal vez, cualquier otra cosa en su red para acceso de administrador)

Si hay una necesidad legítima, puede otorgar acceso restringido a través de una cuenta proxy. Ver, por ejemplo, BOL: http://msdn.microsoft.com/en-us/library/ms175046.aspx


4

Ninguna aplicación debe requerir la cuenta SA y la contraseña para operar.

Sin embargo, he instalado un producto de gestión de servicios de TI, y durante el proceso de instalación tiene la opción de proporcionar las credenciales de la cuenta SA para permitir que el instalador cree la base de datos y adjunte una cuenta a la base de datos para que el software la use. Las credenciales de la cuenta SA no se guardan en la aplicación ni en los registros del instalador. Este software también proporciona la opción de usar una base de datos pre-creada durante la instalación.

Por lo tanto, solo confirmaría si la cuenta SA es necesaria para la instalación o el funcionamiento de este software de gestión de servicios de TI.

Si la instalación: crea una cuenta temporal 'sa' - realiza la instalación - y elimina la cuenta.

Si Operación: Evita ese software como la peste. (o configurar un servidor SQL independiente que solo albergará esa base de datos).


+1 para instancia de servidor SQL dedicado. Esa sería una buena alternativa de último recurso para otorgar sa en el servidor real.
Dan

0

Se debe modificar cualquier parámetro de seguridad del sistema SQL Server predeterminado proporcionado. Se recomienda no usar el modo mixto (habilita la autenticación de Windows y SQL Server) para la autenticación. En su lugar, cambie a la autenticación de Windows solamente, que hará cumplir la política de contraseña de Windows, comprobando la longitud de la contraseña, la duración de la vida y el historial. La característica de la política de contraseñas de Windows que la diferencia de la autenticación de SQL Server es el bloqueo de inicio de sesión: después de varios intentos de inicio de sesión fallidos sucesivos, el inicio de sesión se bloquea y no se puede usar para un uso posterior

Por otro lado, la autenticación de SQL Server no proporciona ningún método para detectar intentos de ataque de fuerza bruta, y lo que es peor, SQL Server incluso está optimizado para manejar un gran número de intentos de inicio de sesión rápido. Por lo tanto, si la autenticación de SQL Server es imprescindible en un sistema SQL Server en particular, se recomienda deshabilitar el inicio de sesión de SA


1
¿Fue un accidente o fue intencional responder dos preguntas con la misma respuesta exacta?
ypercubeᵀᴹ

Gracias por el comentario. Solo pensé que la explicación puede ayudar en ambos casos.
Ivan Stankovic

Interesante, pero no particularmente útil para el OP.
Dan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.