Evaluacion Hardening SQL SERVER

GUIA PARA ANALISIS DE VULNEBILIDADES PARA MICROSOFT SQL SERVER ................ 3 Introducción .........................

Views 297 Downloads 62 File size 775KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

GUIA PARA ANALISIS DE VULNEBILIDADES PARA MICROSOFT SQL SERVER ................ 3 Introducción ....................................................................................................................3 Propósito .........................................................................................................................3 Definiciones .....................................................................................................................3 Recomendaciones ............................................................................................................3 1.

Instalacion, Actualizaciones y Parches ....................................................................................4 1.1 Asegúrese de que los últimos Service Pack y revisiones de SQL Server estén instalados 4 1.2 Garantizar que los servidores de bases de datos tienen solamente el rol de base de datos 6 2. Reducción de área de superficie .............................................................................................7 2.1 Asegúrese de que la opción de configuración del servidor “Ad Hoc Distributed Queries” sea establecido en 0 .....................................................................................................7 2.2 Asegúrese de que la opción de configuración del servidor “CLR ENABLED” sea establecido en 0 .......................................................................................................................... 9 2.3 Asegúrese de que la opción de configuración del servidor “Cross DB Ownership Chaining” sea establecido en 0..................................................................................................11 2.4 Asegúrese de que la opción de configuración del servidor “Database Mail XPs” sea establecido en 0 ........................................................................................................................ 11 2.5 Asegúrese de que la opción de configuración del servidor “Ole Automation Procedures” sea establecido en 0 .............................................................................................13 2.6 Asegúrese de que la opción de configuración del servidor “Remote Access” sea establecido en 0 ........................................................................................................................ 14 2.7 Asegúrese de que la opción de configuración del servidor “Remote Admin Connections” sea establecido en 0 ............................................................................................ 16 2.8 Asegúrese de que la opción de configuración del servidor “Scan For Startup Procs” sea establecido en 0 ........................................................................................................................ 18 2.9 Asegúrese que la opción de Bases de Datos “Trustworthy” sea establecido en “OFF” 20 2.10 Asegúrese de que los protocolos innecesarios de SQL Server estén configurados en “Disabled” .................................................................................................................................21 2.11 Asegúrese de que SQL Server esté configurado para usar puertos no estándar ..........22 2.12 Asegúrese de que la opción “HIDE INSTANCE” esté establecida en 'YES' para las instancias de SQL Server de producción ....................................................................................24 2.13 Asegúrese que la cuenta de Login SA está establecida en “DISABLED” ........................ 26 2.14 Asegúrese que la cuenta Login SA ha sido renombrada ...............................................28 2.15 Asegúrese de que la opción de configuración del servidor “xp_cmdshell” sea establecido en 0 ........................................................................................................................ 29 2.16 Asegúrese de que 'AUTO_CLOSE' esté configurado en 'OFF' en las bases de datos contenidas.................................................................................................................................30 2.17 Asegúrese que no exista una cuenta Login con el nombre SA ......................................31 3. Autenticación y Autorización ................................................................................................33 3.1 Asegúrese de que la propiedad del servidor “Server Authentication” sea establecido en “Windows Autentication Mode” .........................................................................................33 3.2 Asegúrese de que se revoquen los permisos CONNECT en el usuario 'invitado' dentro de todas las bases de datos de SQL Server, excepto el maestro, msdb y tempdb ....................35 3.3 Asegúrese de que los 'usuarios huérfanos' se eliminen de las bases de datos de SQL Server 37 3.4 Asegúrese de que la autenticación de SQL no se use en bases de datos contenidas....38 3.5 Asegúrese de que la cuenta de servicio MSSQL de SQL Server no sea un Administrador 39 3.6 Asegúrese de que la cuenta de servicio SQLAgent de SQL Server no sea un Administrador ...........................................................................................................................41

4.

5.

6.

7.

8.

9.

3.7 Asegúrese de que la cuenta de servicio Full-Tex Service Account de SQL Server no sea un Administrador ......................................................................................................................43 3.8 Asegúrese de que solo los permisos predeterminados especificados por Microsoft sean otorgado al rol de base de datos “public” ........................................................................45 3.9 Asegúrese de que los grupos BUILTIN de Windows no sean inicios de sesión de SQL ..47 3.10 Asegúrese de que los grupos locales de Windows no sean inicios de sesión de SQL ...49 3.11 Asegúrese de que el rol público en la base de datos msdb no tenga acceso a los proxies del Agente SQL .............................................................................................................51 Políticas de Contraseña .........................................................................................................53 4.1 Asegurar que la opción 'MUST_CHANGE' este seteada en 'ON' para todos los SQL Authenticated Logins ................................................................................................................53 4.2 Asegurar que la opción 'CHECK_EXPIRATION' este seteada en 'ON' para todos los SQL Authenticated Logins dentro del Sysadmin Role .......................................................................55 4.3 Asegurar que la opción 'CHECK_POLICY' este seteada en 'ON' para todos los SQL Authenticated Logins ................................................................................................................57 Auditoria y Registro ..............................................................................................................59 5.1 Asegúrese de que ‘Maximum number of error log files’ esté establecido en mayor o igual que '12' .............................................................................................................................59 5.2 Asegúrese de que la opción de configuración ‘Default Trace Enabled’ este establecido en 1 61 5.3 Asegúrese de que la opción ‘Login Auditing’ este configurado en ‘failed logins’ .........62 5.4 Asegúrese de que la opción ‘SQL Server Audit’ este configurado en capture both ‘failed’ y ‘successful logins’ .......................................................................................................64 Desarrollo de Aplicaciones ....................................................................................................67 6.1 Asegúrese de proteger la base de datos y que la entrada del usuario de la aplicación sea protegida ............................................................................................................................ 67 6.2 Asegúrese que la opción ‘CLR Assembly Permission Set’ está configurada en ‘SAFE_ACCESS’ en todos los CLR Assemblies .............................................................................69 Encriptación ..........................................................................................................................71 7.1 Asegurese que la opción ‘Symmetric Key encryption algorithm’ este configurado en 'AES_128' o mayor en bases de datos que no son del sistema ..................................................71 7.2 Asegurese que la opción ‘Asymmetric Key Size’ este configurado igual o mayor a '2048' en bases de datos que no son del sistema ................................................................................73 Consideraciones Adicionales .................................................................................................73 8.1 Asegúrese de que la opción ‘SQL Server Browser Service’ está configurado correctamente...........................................................................................................................74 Tabla Resumen......................................................................................................................76

GUIA PARA ANALISIS DE VULNEBILIDADES PARA MICROSOFT SQL SERVER

Introducción El presente documento lista las pautas para aplicar Hardening en los servidores y las instancias SQL Server.

Propósito Este documento proporciona una guía prescriptiva para establecer una configuración segura postura para Microsoft SQL Server. Esta guía fue probada contra Microsoft SQL Server. Este documento se basada en la documentación de la CIS (Center for Internet Security), es una entidad sin fines de lucro que aprovecha el poder de una comunidad global de TI para proteger a las organizaciones públicas y privadas contra las amenazas cibernéticas. El propósito de este instructivo es establecer los estándares de seguridad y configuración para la infraestructura de Base de Datos SQL SERVER. Para poder cumplir con las normas de la política Aseguramiento de la infraestructura Tecnológica de procesamiento, es necesario la aplicación de los parámetros de configuración indicados en este documento.

Definiciones Harden / Hardening: Proceso para reducir vulnerabilidades y acceso a bases de datos para protección de datos.

Recomendaciones • • • • • • • •

Instalacion, Actualizaciones y Parches Reducción de área de superficie Autenticación y Autorización Políticas de Contraseña Auditoria y Registro Desarrollo de Aplicaciones Encriptación Consideraciones Adicionales

1. Instalacion, Actualizaciones y Parches Esta sección contiene recomendaciones relacionadas con la instalación y revisión de SQL Server.

1.1 Asegúrese de que los últimos Service Pack y revisiones de SQL Server estén instalados •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Los parches de SQL Server contienen actualizaciones de programas que reparan la seguridad y la funcionalidad del producto. problemas encontrados en el software. Estos parches se pueden instalar con una revisión que es única parche, una actualización acumulativa que es un pequeño grupo de parches o un service pack que es una gran colección de parches. La versión de SQL Server y los niveles de parche deberían ser los más reciente compatible con las necesidades operativas de las organizaciones.



Razón fundamental: o El uso del software SQL Server más reciente, junto con todos los parches aplicables, puede ayudar a limitar las posibilidades de vulnerabilidades en el software, la versión de instalación y / o parches aplicado durante la instalación debe establecerse de acuerdo con las necesidades de la organización.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT SERVERPROPERTY ('ProductLevel') as SP_installed, SERVERPROPERTY ('ProductVersion') as Versión;

o



La primera columna devuelve el nivel de Service Pack instalado, la segunda es el número de compilación exacto.

Solución: o Identifique la versión actual y el nivel de parche de sus instancias de SQL Server y asegúrese de que contienen las últimas correcciones de seguridad. Asegúrese de probar estas soluciones en sus entornos de prueba antes de actualizar las instancias de producción. o Los parches más recientes de SQL Server se pueden encontrar aquí: ▪ Revisiones y actualizaciones acumulativas:



• http://blogs.msdn.com/b/sqlreleaseservices/ Service Packs: • https://support.microsoft.com/en-us/kb/3177534



Valor por defecto: o Los paquetes de servicio y parches no están instalados de manera predeterminada



Referencias: o https://support.microsoft.com/en-us/kb/3177534

1.2 Garantizar que los servidores de bases de datos tienen solamente el rol de base de datos •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: Se recomienda instalar el software SQL Server en un servidor dedicado. Esta la consideración arquitectónica brinda flexibilidad de seguridad en que el servidor de bases de datos puede ser colocado en una subred separada que permite el acceso solo desde hosts particulares y sobre particulares protocolos Los grados de disponibilidad también son más fáciles de lograr: con el tiempo, una empresa puede pasar de un único servidor de base de datos a una conmutación por error a un clúster utilizando el equilibrio de carga alguna combinación de los mismos.



Razón fundamental: o Es más fácil administrar (es decir, reducir) la superficie de ataque del servidor que aloja SQL Server software si las únicas superficies a considerar son el sistema operativo subyacente, SQL Server en sí mismo y cualquier herramienta de seguridad / operativa que pueda instalarse adicionalmente. Como se señala en la descripción, la disponibilidad se puede abordar más fácilmente si la base de datos está en un sitio dedicado servidor.



Auditoría: o Asegúrese de que no haya otros roles habilitados para el sistema operativo subyacente y que no se instala el exceso de herramientas, según la política de la empresa.



Solución: Desinstale el exceso de herramientas y / o elimine roles innecesarios del funcionamiento subyacente sistema.



Consideraciones: Es difícil ver algún impacto razonablemente adverso al hacer este cambio arquitectónico, una vez que los costos de realizar el cambio hayan sido pagados. Las aplicaciones personalizadas pueden necesitar ser modificado para acomodar conexiones de base de datos a través del cable en lugar de en el host (es decir usando TCP / IP en lugar de canalizaciones con nombre). Licencias adicionales de hardware y sistema operativo puede ser requerido para hacer estos cambios arquitectónicos.

2. Reducción de área de superficie SQL Server ofrece varias opciones de configuración, algunas de ellas pueden ser controladas por procedimiento almacenado sp_configure. Esta sección contiene el listado de las correspondientes recomendaciones.

2.1 Asegúrese de que la opción de configuración del servidor “Ad Hoc Distributed Queries” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: La habilitación de consultas distribuidas ad hoc permite a los usuarios consultar datos y ejecutar declaraciones enfuentes de datos externas. Esta funcionalidad debe estar deshabilitada.



Razón fundamental: o Esta característica se puede utilizar para acceder de forma remota y explotar vulnerabilidades en SQL remoto o Instancias de servidor y para ejecutar Visual Basic inseguro para funciones de aplicación.



Auditoría: o Ejecute el siguiente comando: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'Ad Hoc Distributed Queries';

o



El valor de ambas columnas debe estar en 0.

Solución: o Para solucionar el problema debe se debe ejecutar los siguientes comandos T-SQL: EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'Ad Hoc Distributed Queries', 0; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



Valor por defecto: o 0 (Deshabilitado)



Referencias: o Https://docs.microsoft.com/en-us/sql/database-engine/configurewindows/adhoc-distributed-queries-server-configuration-option



Consideraciones de Negocio: o Si se debe establecer comunicación con otros servidores de bases de datos, se debe asegurar que el ambiente en el cual estos servidores están alojados gocen de medidas de seguridad robustas, protección del medio de comunicación, establecimiento de análisis de intrusos, etc. Asegurando la comunicación entre los servidores, esta opción puede ser habilitada para establecer la comunicación entre los servers, ya sea de SQL SERVER u Oracle o cualquier otro motor.

2.2 Asegúrese de que la opción de configuración del servidor “CLR ENABLED” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Las instancias de SQL Server que no son Cluster dentro de los entornos de producción deben designarse como ocultas para evitar la publicidad por parte del servicio del Explorador de SQL Server.



Razón fundamental: o La designación de instancias de producción de SQL Server como ocultas conduce a una instalación más segura porque no se pueden enumerar. Sin embargo, las instancias en clúster pueden romperse si se selecciona esta opción.



Auditoría: o Existen 2 métodos de verificar, por el GUI o T-SQL: o Método GUI ▪ En el Administrador de configuración de SQL Server, expanda SQL Server Network Configuration, haga clic con el botón derecho en Protocols for y luego seleccione Propierties. ▪ En la pestaña Flags, en el cuadro Hide Instance, se selecciona YES. o

Método T-SQL

DECLARE @getValue INT; EXEC master..xp_instance_regread @rootkey = N'HKEY_LOCAL_MACHINE', @key = N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib', @value_name = N'HideInstance', @value = @getValue OUTPUT; SELECT @getValue;

▪ •

Debe devolverse un valor de 1 para cumplir

Solución: o Realice el método GUI o T-SQL que se muestra: EXECUTE sp_configure 'clr enabled', 0; RECONFIGURE;



Valor por defecto: o 0 (Deshabilitado)



Consideraciones de Negocio: o Si los ensamblados CLR están en uso, es posible que sea necesario volver a diseñar las aplicaciones para eliminar su uso antes de deshabilitar esta configuración. Alternativamente, algunas organizaciones pueden permitir que esta configuración esté habilitada 1 para ensamblados creados con el conjunto de permisos SAFE, pero no permitir ensamblados creados con los conjuntos de permisos UNSAFE y EXTERNAL_ACCESS más riesgosos. Para buscar ensamblados creados por el usuario, ejecute la siguiente consulta en todas las bases de datos, reemplazando con cada nombre de base de datos: USE [] GO SELECT name AS Assembly_Name, permission_set_desc FROM sys.assemblies WHERE is_user_defined = 1; GO



Referencias: o https://docs.microsoft.com/en-us/sql/t-sql/statements/createassembly-transactsql

2.3 Asegúrese de que la opción de configuración del servidor “Cross DB Ownership Chaining” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción Cross DB Ownership Chaining controla el encadenamiento de propiedad cross-database en todas las bases de datos a nivel de instancia (o servidor).



Razón fundamental: o Cuando está habilitada, esta opción permite que un miembro del rol db_owner en una base de datos gane acceso a objetos que son propiedad de un inicio de sesión en cualquier otra base de datos, causando una innecesaria divulgación de información. Cuando sea necesario, el encadenamiento de propiedad entre bases de datos solo debe ser habilitado para las bases de datos específicas que lo requieren en lugar de en el nivel de instancia para todos bases de datos utilizando ALTER DATABASE SET DB_CHAINING ON mando. Esta opción de base de datos no se puede cambiar en el maestro, modelo o tempdb bases de datos del sistema.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'cross db ownership chaining';

o •

Ambos valores deben ser devueltos en 0.

Solución: o Se debe ejecutar el siguiente comando, EXECUTE sp_configure 'cross db ownership chaining', 0; RECONFIGURE; GO



Valor por defecto: o Por defecto esta opción esta deshabilitada (0) • Referencias o https://docs.microsoft.com/en-us/sql/database-engine/configurewindows/crossdb-ownership-chaining-server-configuration-option 2.4 Asegúrese de que la opción de configuración del servidor “Database Mail XPs” sea establecido en 0



Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción Database Mail XPs, controla la opción de generar y transmitir mensajes de correo electrónico desde SQL Server.



Razón fundamental: o Deshabilitar la opción Database Mail XPs reduce la superficie del servidor SQL, elimina un vector de ataque DOS y un canal para filtrar datos del servidor de la base de datos a un host remoto.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'Database Mail XPs';

o •

Ambos valores deben ser devueltos en 0.

Solución: o Se debe ejecutar el siguiente comando, EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'Database Mail XPs', 0; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



Valor por defecto: o Por defecto esta opción esta deshabilitada (0)



Referencias o https://docs.microsoft.com/en-us/sql/relationaldatabases/databasemail/database-mail

2.5 Asegúrese de que la opción de configuración del servidor “Ole Automation Procedures” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción Procedimientos de automatización Ole controla si los objetos de automatización OLE se pueden instanciar dentro de lotes de Transact-SQL. Estos son procedimientos almacenados extendidos que permiten a los usuarios de SQL Server ejecutar funciones externas a SQL Server.



Razón fundamental: o Habilitar esta opción aumentará la superficie de ataque de SQL Server y permitirá a los usuarios ejecutar funciones en el contexto de seguridad de SQL Server.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'Ole Automation Procedures';

o •

Ambos valores deben ser devueltos en 0.

Solución: o Se debe ejecutar el siguiente comando, EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'Ole Automation Procedures', 0; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



Valor por defecto: o Por defecto esta opción esta deshabilitada (0)



Referencias o https://docs.microsoft.com/en-us/sql/database-

engine/configure-windows/oleautomation-proceduresserver-configuration-option

2.6 Asegúrese de que la opción de configuración del servidor “Remote Access” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción de acceso remoto controla la ejecución de procedimientos almacenados locales en servidores remotos o procedimientos almacenados remotos en servidores locales.



Razón fundamental: o Se puede abusar de la funcionalidad para lanzar un ataque de denegación de servicio (DoS) en servidores remotos descargando el procesamiento de consultas a un destino.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'remote access';

o •

Ambos valores deben ser devueltos en 0.

Solución: o Se debe ejecutar el siguiente comando, EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'remote access', 0; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



o Reinicie el Servicio de Base de Datos Impacto o Por Microsoft: esta característica se eliminará en la próxima versión de Microsoft SQL Server (a partir de Versión 2016). No use esta función en nuevos trabajos de desarrollo y modifique las aplicaciones que actualmente usan esta función lo antes posible. Utilice sp_addlinkedserver en su lugar.



Valor por defecto: o Por defecto esta opción esta deshabilitada (1)



Referencias

o

https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/configure-the-remote-access-serverconfiguration-option

2.7 Asegúrese de que la opción de configuración del servidor “Remote Admin Connections” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción de conexiones de administración remota controla si una aplicación cliente en una computadora remota puede usar la Conexión de administrador dedicada (DAC).



Razón fundamental: o La Conexión de administrador dedicado (DAC) permite que un administrador acceda a un servidor en ejecución para ejecutar funciones de diagnóstico o instrucciones Transact-SQL, o para solucionar problemas en el servidor, incluso cuando el servidor está bloqueado o se ejecuta en un estado anormal y no responde a un SQL Conexión del motor de base de datos del servidor. En un escenario de clúster, es posible que el administrador no haya iniciado sesión en el mismo nodo que actualmente aloja la instancia de SQL Server y, por lo tanto, se considera "remoto". Por lo tanto, esta configuración generalmente debería estar habilitada (1) para los clústeres de conmutación por error de SQL Server; de lo contrario, debería deshabilitarse (0), que es el valor predeterminado.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: USE master; GO SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'remote admin connections' AND SERVERPROPERTY('IsClustered') = 0;

o



Si no se devuelven datos, la instancia es un clúster y esta recomendación no es aplicable. Si se devuelven datos, ambas columnas de valor deben mostrar 0 para ser compatibles.

Solución: o Se debe ejecutar el siguiente comando, EXECUTE sp_configure 'remote admin connections', 0; RECONFIGURE; GO



Valor por defecto:

o

De manera predeterminada, esta opción está deshabilitada (0), solo las conexiones locales pueden usar el DAC.



Referencias o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/remote-admin-connections-serverconfiguration-option



Importante o Si se trata de una instalación en clúster, esta opción debe estar habilitada ya que un servidor SQL en clúster no puede vincularse a localhost y DAC no estará disponible de lo contrario. Habilítelo para instalaciones en clúster. Inhabilítelo para instalaciones independientes donde no sea necesario.

2.8 Asegúrese de que la opción de configuración del servidor “Scan For Startup Procs” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción de Scan For Startup Procs, si está habilitada, hace que SQL Server escanee y ejecute automáticamente todos los procedimientos almacenados que están configurados para ejecutarse al iniciar el servicio.



Razón fundamental: o Forzar la aplicación de este control reduce la amenaza de que una entidad aproveche estas instalaciones con fines maliciosos.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'scan for startup procs';

o •

Ambos valores deben ser devueltos en 0.

Solución: o Se debe ejecutar el siguiente comando, EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'scan for startup procs', 0; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



Impacto: o Al establecer la Exploración para procedimientos de inicio en 0, se evitará que ciertos rastreos de auditoría y otros procedimientos almacenados de monitoreo comúnmente utilizados se reinicien en el inicio. Además, la replicación requiere que esta configuración esté habilitada (1) y cambiará automáticamente esta configuración si es necesario.



Valor por defecto: o Por defecto esta opción esta deshabilitada (0)



Referencias

o

https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/configure-the-scan-for-startup-procsserver-configuration-option

2.9 Asegúrese que la opción de Bases de Datos “Trustworthy” sea establecido en “OFF” • Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos •

Descripción: o La opción de base de datos TRUSTWORTHY permite que los objetos de la base de datos accedan a objetos en otras bases de datos bajo ciertas circunstancias.



Razón fundamental: o Proporciona protección contra ensamblajes CLR maliciosos o procedimientos extendidos.



Auditoría: o Para determinar su nivel de paquete de servicio de SQL Server, ejecute el siguiente fragmento de código: SELECT name FROM sys.databases WHERE is_trustworthy_on = 1 AND name != 'msdb';

o •

La repuesta no debe generar rows.

Solución: o Se debe ejecutar el siguiente comando, ALTER DATABASE [] SET TRUSTWORTHY OFF;



Valor por defecto: De manera predeterminada, esta propiedad de la base de datos está OFF (is_trustworthy_on = 0), excepto para la base de datos msdb en la que se requiere que esté ON.



Referencias o https://docs.microsoft.com/en-us/sql/relationaldatabases/security/trustworthydatabase-property o https://support.microsoft.com/it-it/help/2183687/guidelines-forusing-thetrustworthy-database-setting-in-sql-server

Importante: Toda la información almacenada en los sistemas se protegerá con listas de control de acceso específicas del sistema de archivos, recursos compartidos de red, reclamos, aplicaciones o bases de datos. Estos controles harán cumplir el principio de que solo las personas autorizadas deben tener acceso a la información en función de su necesidad de acceder a la información como parte de sus responsabilidades.

2.10 Asegúrese de que los protocolos innecesarios de SQL Server estén configurados en “Disabled” •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o SQL Server admite memoria compartida, canalizaciones con nombre y protocolos TCP / IP. Sin embargo, SQL Server debe configurarse para usar el mínimo requerido en función de las necesidades de la organización.



Razón fundamental: Usar menos protocolos minimiza la superficie de ataque de SQL Server y, en algunos casos, puede protegerlo de ataques remotos.



Auditoría: o Abrir el SQL Server Configuration Manager e ir a SQL Server Network Configuration y Asegúrese de que solo los protocolos necesarios estén habilitados.



Solución: o Abrir el SQL Server Configuration Manager e ir a SQL Server Network Configuration y Asegúrese de que solo los protocolos necesarios estén habilitados. Deshabilitar los no necesarios.



Impacto: o Los servicios (MSSQL y SQL Agent) deben detenerse y reiniciarse para que el cambio surta efecto.



Valor por defecto: o De forma predeterminada, los protocolos TCP / IP y Memoria compartida están habilitados en todas las ediciones comerciales.



Referencias o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/enable-or-disable-a-server-networkprotocol

2.11

Asegúrese de que SQL Server esté configurado para usar puertos no estándar •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Si está instalado, a una instancia predeterminada de SQL Server se le asignará un puerto predeterminado de TCP: 1433 para la comunicación TCP / IP. Los administradores también pueden configurar manualmente instancias con nombre para usar TCP: 1433 para la comunicación. TCP: 1433 es un puerto de SQL Server ampliamente conocido y esto la asignación de puertos debe cambiarse. En un escenario de varias instancias, a cada instancia se le debe asignar su propio puerto TCP / IP dedicado.



Razón fundamental: o El uso de un puerto no predeterminado ayuda a proteger la base de datos de ataques dirigidos al puerto predeterminado.



Auditoría: o Ejecute el siguiente script T-SQL: DECLARE @value nvarchar(256); EXECUTE master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IPAll', N'TcpPort', @value OUTPUT, N'no_output'; SELECT @value AS TCP_Port WHERE @value = '1433';

o



No debe retornar rows.

Solución: o En el Administrador de configuración de SQL Server, en el panel de la consola, expanda Configuración de red de SQL Server, expanda Protocolos para y luego haga doble clic en el protocolo TCP / IP o En el cuadro de diálogo Propiedades de TCP / IP, en la pestaña Direcciones IP, aparecen varias direcciones IP en el formato IP1, IP2, hasta IPTodo. Uno de estos es para la dirección IP del adaptador de bucle invertido, 127.0.0.1. Aparecen direcciones IP adicionales para cada dirección IP en la computadora. o En IPAll, cambie el campo Puerto TCP de 1433 a un puerto no estándar o deje el campo Puerto TCP vacío y establezca el valor de Puertos dinámicos TCP en 0 para habilitar la asignación dinámica de puertos y luego haga clic en Aceptar. o En el panel de la consola, haga clic en Servicios de SQL Server.

o





En el panel de detalles, haga clic con el botón derecho en SQL Server () y luego haga clic en Reiniciar para detener y reiniciar SQL Server.

Valor por defecto: o De manera predeterminada, las instancias predeterminadas de SQL Server escuchan el tráfico TCP / IP en el puerto TCP 1433 y las instancias con nombre usan puertos dinámicos.

Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/configure-a-server-to-listen-on-aspecific-tcp-port

2.12 Asegúrese de que la opción “HIDE INSTANCE” esté establecida en 'YES' para las instancias de SQL Server de producción •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Las instancias de SQL Server no agrupadas en entornos de producción (No Cluster) deben designarse como oculto para evitar la publicidad del servicio del navegador SQL Server.



Razón fundamental: o Designar instancias de producción de SQL Server como ocultas conduce a una instalación más segura porque no pueden ser enumerados. Sin embargo, las instancias agrupadas pueden romperse si esta opción está seleccionado



Auditoría: o Realice el método GUI o T-SQL que se muestra: ▪ Método GUI • En SQL Server Configuration Manager, se expande SQL Server Network Configuration, se da clic derecho sobre Protocols for , y se selecciona propiedades. • En el tab FLAGS, en el cuadro de Hide Instance, si YES esta seleccionado, la opción cumple, si no se marca. ▪ Método T-SQL • Ejecute el siguiente comando DECLARE @getValue INT; EXEC master..xp_instance_regread @rootkey = N'HKEY_LOCAL_MACHINE', @key = N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib', @value_name = N'HideInstance', @value = @getValue OUTPUT; SELECT @getValue;



Si el valor es 1, la opción cumple.



Solución: o Realice el método GUI o T-SQL que se muestra: ▪ Método GUI • En SQL Server Configuration Manager, se expande SQL Server Network Configuration, se da clic derecho sobre Protocols for , y se selecciona propiedades. • En el tab FLAGS, en el cuadro de Hide Instance, seleccione YES y luego se da clic en OK para cerrar el cuadro de dialogo y aplicar los cambios. ▪

Método T-SQL • Ejecute el siguiente comando

EXEC master..xp_instance_regwrite @rootkey = N'HKEY_LOCAL_MACHINE', @key = N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib', @value_name = N'HideInstance', @type = N'REG_DWORD', @value = 1;



Impacto: o Este método solo evita que la instancia aparezca en la red. Si la instancia está oculta (no expuesta por el navegador SQL), entonces las conexiones deberán especificar el servidor y el puerto para poder conectarse. No impide que los usuarios se conecten al servidor si conocen el nombre y el puerto de la instancia. o Si oculta una instancia con nombre en clúster, es posible que el servicio de clúster no pueda conectarse al SQL Server. Consulte la referencia de documentación de Microsoft.



Valor por defecto: o Por defecto, las instancias de SQL Server no están ocultas.



Referencias: o https://docs.microsoft.com/en-us/sql/database-engine/configurewindows/hidean-instance-of-sql-server-database-engine

2.13

Asegúrese que la cuenta de Login SA está establecida en “DISABLED” •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La cuenta sa es una cuenta de SQL Server ampliamente conocida y a menudo ampliamente utilizada con privilegios de administrador del sistema (sysdamin). Este es el inicio de sesión original creado durante la instalación y siempre tiene el principal_id = 1 y sid = 0x01.



Razón fundamental: o Hacer cumplir este control reduce la probabilidad de que un atacante ejecute ataques de fuerza bruta contra Principal.



Auditoría: o Use la siguiente sintaxis para determinar si la cuenta sa está deshabilitada. La comprobación de sid = 0x01 garantiza que la cuenta sa original se verifique en caso de que haya cambiado de nombre según las mejores prácticas. SELECT name, is_disabled FROM sys.server_principals WHERE sid = 0x01 AND is_disabled = 0;

o



No se deben devolver filas para cumplir. Un valor is_disabled de 0 indica que el inicio de sesión está habilitado actualmente y, por lo tanto, necesita corrección.

Solución: o Ejecute el siguiente script T-SQL: USE [master] GO DECLARE @tsql nvarchar(max) SET @tsql = 'ALTER LOGIN ' + SUSER_NAME(0x01) + ' DISABLE' EXEC (@tsql) GO





Impacto: o No es una buena práctica de seguridad codificar aplicaciones o scripts para usar la cuenta sa. o Sin embargo, si se ha hecho esto, deshabilitar la cuenta sa evitará que los scripts y las aplicaciones se autentiquen en el servidor de la base de datos y ejecuten las tareas o funciones requeridas. Valor por defecto:

De forma predeterminada, la cuenta de inicio de sesión sa está deshabilitada en el momento de la instalación cuando se selecciona el Modo de autenticación de Windows. Si se selecciona el modo mixto (Autenticación de SQL Server y Windows) en la instalación, se habilita el valor predeterminado para el inicio de sesión sa. •

Referencias: o https://docs.microsoft.com/en-us/sql/relationaldatabases/system-catalogviews/ o sys-server-principals-transact-sql o https://docs.microsoft.com/en-us/sql/t-sql/statements/alterlogin-transact-sql o https://docs.microsoft.com/en-us/sql/relationaldatabases/security/choose-anauthentication-mode

2.14

Asegúrese que la cuenta Login SA ha sido renombrada •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La cuenta sa es un inicio de sesión de SQL Server ampliamente conocido y a menudo ampliamente utilizado con privilegios de administrador del sistema. El inicio de sesión sa es el inicio de sesión original creado durante la instalación y siempre tiene principal_id = 1 y sid = 0x01.



Razón fundamental: o Es más difícil lanzar ataques de adivinación de contraseña y de fuerza bruta contra el inicio de sesión sa si no se conoce el nombre.



Auditoría: o Use la siguiente sintaxis para determinar si se cambia el nombre de inicio de sesión sa (principal): SELECT name FROM sys.server_principals WHERE sid = 0x01;

o



El nombre de sa indica que la cuenta no ha sido renombrada y, por lo tanto, necesita corrección.

Solución: o Reemplace el valor dentro de la sintaxis siguiente y ejecute para cambiar el nombre de sa ALTER LOGIN sa WITH NAME = ;



Impacto: o No es una buena práctica de seguridad codificar aplicaciones o scripts para usar el inicio de sesión sa. Sin embargo, si esto se ha hecho, cambiar el nombre del inicio de sesión sa evitará scripts y aplicaciones desde la autenticación al servidor de la base de datos y la ejecución de tareas o funciones requeridas.



Valor por defecto: Por defecto, el nombre de inicio de sesión sa es 'sa'.

• •

Referencias: https://docs.microsoft.com/en-us/sql/relationaldatabases/security/choose-anauthentication-mode

2.15 Asegúrese de que la opción de configuración del servidor “xp_cmdshell” sea establecido en 0 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La opción xp_cmdshell controla si el procedimiento almacenado extendido xp_cmdshell puede ser utilizado por un usuario autenticado de SQL Server para ejecutar el shell de comandos del sistema operativo comandos y devolver resultados como filas dentro del cliente SQL.



Razón fundamental: o El procedimiento xp_cmdshell es comúnmente utilizado por los atacantes para leer o escribir datos en / desde El sistema operativo subyacente de un servidor de base de datos.



Auditoría: o Ejecute el siguiente comando T-SQL: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'xp_cmdshell';

o



Ambas columnas de valores deben mostrar 0 para ser compatibles.

Solución: o Ejecute el siguiente comando T-SQL: EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'xp_cmdshell', 0; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



Valor por defecto: o Por defecto, esta opción está deshabilitada (0).



Referencias: o https://docs.microsoft.com/en-us/sql/relationaldatabases/system-storedprocedures/xp-cmdshell-transact-sql o https://docs.microsoft.com/en-us/sql/database-engine/configurewindows/xpcmdshell-server-configuration-option

2.16 Asegúrese de que 'AUTO_CLOSE' esté configurado en 'OFF' en las bases de datos contenidas •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o AUTO_CLOSE determina si una base de datos determinada se cierra o no después de que finaliza una conexión. Si está habilitado, las conexiones posteriores a la base de datos dada requerirán que la base de datos se vuelva a abrir y que se reconstruyan los cachés de procedimientos relevantes.



Razón fundamental: o Debido a que la autenticación de usuarios para bases de datos contenidas se produce dentro de la base de datos, no a nivel del servidor \ instancia, la base de datos debe abrirse cada vez para autenticar a un usuario. o La apertura / cierre frecuente de la base de datos consume recursos adicionales del servidor y puede contribuir a una denegación de servicio.



Auditoría: o Realice lo siguiente para buscar bases de datos contenidas que no estén configuradas según lo prescrito: SELECT name, containment, containment_desc, is_auto_close_on FROM sys.databases WHERE containment 0 and is_auto_close_on = 1;

o •

No se deben devolver filas.

Solución: o Ejecute el siguiente T-SQL, reemplazando con cada nombre de base de datos encontrado por el procedimiento de auditoría: ALTER DATABASE SET AUTO_CLOSE OFF;



Valor por defecto: o De forma predeterminada, la propiedad de base de datos AUTO_CLOSE está DESACTIVADA, lo que equivale a is_auto_close_on = 0.



Referencias: o https://docs.microsoft.com/en-us/sql/relationaldatabases/databases/securitybest-practices-with-containeddatabases

2.17

Asegúrese que no exista una cuenta Login con el nombre SA •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o El inicio de sesión sa (por ejemplo, principal) es una cuenta de SQL Server ampliamente conocida y a menudo ampliamente utilizada. Por lo tanto, no debe haber un inicio de sesión llamado sa incluso cuando se haya cambiado el nombre del inicio de sesión sa original (principal_id = 1).



Razón fundamental: o Hacer cumplir este control reduce la probabilidad de que un atacante ejecute ataques de fuerza bruta contra un nombre principal bien conocido.



Auditoría: o Use la siguiente sintaxis para determinar si hay una cuenta llamada sa: SELECT principal_id, name, FROM sys.server_principals WHERE name = 'sa';

o •

No se deben devolver filas.

Solución: o Ejecute la instrucción ALTER o DROP apropiada a continuación en función del principal_id devuelto para el inicio de sesión denominado sa. Reemplace el valor dentro de la sintaxis siguiente y ejecútelo para cambiar el nombre del inicio de sesión sa. USE [master] GO -- If principal_id = 1 or the login owns database objects, rename the sa login ALTER LOGIN [sa] WITH NAME = ; GO -- If the login owns no database objects, then drop it -- Do NOT drop the login if it is principal_id = 1 DROP LOGIN sa



Impacto: o No es una buena práctica de seguridad codificar aplicaciones o scripts para usar la cuenta sa. Dado que es una mejor práctica cambiar el nombre y deshabilitar la cuenta sa, algunas aplicaciones de terceros verifican la existencia de un inicio de sesión llamado sa y, si no existe, crea uno. Eliminar el inicio de sesión sa impedirá que estos scripts y aplicaciones se autentiquen en el servidor de la base de datos y ejecuten las tareas o funciones requeridas.



Valor por defecto: o El inicio de sesión con principal_id = 1 se denomina sa por defecto.

3. Autenticación y Autorización Esta sección contiene recomendaciones relacionadas con los mecanismos de autenticación y autorización de SQL Server. 3.1 Asegúrese de que la propiedad del servidor “Server Authentication” sea establecido en “Windows Autentication Mode” •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Utiliza la autenticación de Windows para validar los intentos de conexión.



Razón fundamental: o Windows proporciona un mecanismo de autenticación más robusto que SQL Server autenticación.



Auditoría: o Ejecute el siguiente comando: SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') as [login_mode];

o



Un login_mode de 1 indica que la propiedad de autenticación del servidor está configurada en el modo de autenticación de Windows. Un login_mode de 0 indica autenticación de modo mixto.

Solución: o Realice el método GUI o T-SQL que se muestra: ▪ Método GUI • Abra SQL Server Management Studio. • Abra la pestaña Explorador de objetos y conéctese a la instancia de la base de datos de destino. • Haga clic derecho en el nombre de la instancia y seleccione Propiedades. • Seleccione la página Seguridad del menú de la izquierda. • Establezca la configuración de autenticación del servidor en el modo de autenticación de Windows. ▪ Método T-SQL • Ejecute el siguiente comando USE [master] GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 1 GO



o Reinicie el servicio SQL Server para que el cambio surta efecto. Impacto:

o

Cambiar la configuración del modo de inicio de sesión requiere un reinicio del servicio.



Valor por defecto: o Windows Authentication Mode



Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/server-properties-security-page

3.2 Asegúrese de que se revoquen los permisos CONNECT en el usuario 'invitado' dentro de todas las bases de datos de SQL Server, excepto el maestro, msdb y tempdb •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Elimine el grant del usuario invitado para conectarse a las bases de datos de SQL Server, excepto master, msdb y tempdb.



Razón fundamental: o Un inicio de sesión asume la identidad del usuario invitado cuando un inicio de sesión tiene acceso a SQL Server pero no tiene acceso a una base de datos a través de su propia cuenta y la base de datos tiene una cuenta de usuario invitado. La revocación del permiso CONNECT para el usuario invitado garantizará que se inicie sesión no puede acceder a la información de la base de datos sin acceso explícito para hacerlo.



Auditoría: o Ejecute el siguiente fragmento de código para cada base de datos (reemplazando según corresponda) en la instancia para determinar si el usuario invitado tiene permiso CONNECT: USE []; GO SELECT DB_NAME() AS DatabaseName, 'guest' AS Database_User, [permission_name], [state_desc] FROM sys.database_permissions WHERE [grantee_principal_id] = DATABASE_PRINCIPAL_ID('guest') AND [state_desc] LIKE 'GRANT%' AND [permission_name] = 'CONNECT' AND DB_NAME() NOT IN ('master','tempdb','msdb');

o •

No se deben devolver filas.

Solución: o El siguiente fragmento de código revoca los permisos CONNECT del usuario invitado en una base de datos. Reemplace según corresponda: USE []; GO REVOKE CONNECT FROM guest;



Impacto: o Cuando se revoca el permiso CONNECT para el usuario invitado, se debe asignar explícitamente un inicio de sesión de la instancia de SQL Server a un usuario de la base de datos explícitamente para tener acceso a la base de datos.



Valor por defecto: La cuenta de usuario invitado se agrega a cada nueva base de datos pero sin permiso CONNECT de manera predeterminada.



Importante: o El usuario invitado no puede revocar el permiso CONNECT en master, msdb y tempdb, pero este permiso debe revocarse en todas las demás bases de datos en la instancia de SQL Server.



Referencias: o https://docs.microsoft.com/en-us/sql/relational-

databases/policy-basedmanagement/guest-permissions-onuser-databases

3.3 Asegúrese de que los 'usuarios huérfanos' se eliminen de las bases de datos de SQL Server •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Un usuario de la base de datos para el que el inicio de sesión correspondiente de SQL Server no está definido o está definido incorrectamente en una instancia del servidor no puede iniciar sesión en la instancia y se le conoce como huérfano y debe ser eliminado.



Razón fundamental: o Los usuarios huérfanos deben eliminarse para evitar el posible uso indebido de esos usuarios rotos de cualquier manera.



Auditoría: o Ejecute la siguiente consulta T-SQL en cada base de datos para identificar a los usuarios huérfanos: USE []; GO EXEC sp_change_users_login @Action='Report';

o •

No se deben devolver filas.

Solución: o Si el usuario huérfano no puede o no debe coincidir con un inicio de sesión existente o nuevo utilizando el proceso documentado de Microsoft al que se hace referencia a continuación, ejecute la siguiente consulta T-SQL en la base de datos apropiada para eliminar un usuario huérfano: USE []; GO DROP USER ;



Referencias: o https://docs.microsoft.com/en-us/sql/sql-server/failoverclusters/troubleshootorphaned-users-sql-server

3.4 Asegúrese de que la autenticación de SQL no se use en bases de datos contenidas •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Las bases de datos contenidas no aplican reglas de complejidad de contraseña para usuarios autenticados de SQL.



Razón fundamental: La ausencia de una política de contraseña forzada puede aumentar la probabilidad de que se establezca una credencial débil en una base de datos contenida.



Auditoría: o Ejecute el siguiente T-SQL en cada base de datos contenida para encontrar los usuarios de la base de datos que utilizan la autenticación de SQL: SELECT name AS DBUser FROM sys.database_principals WHERE name NOT IN ('dbo','Information_Schema','sys','guest') AND type IN ('U','S','G') AND authentication_type = 2; GO



Solución: o Aproveche los usuarios autenticados de Windows en bases de datos contenidas.



Impacto: o Si bien las bases de datos contenidas brindan flexibilidad para reubicar las bases de datos a diferentes instancias y diferentes entornos, esto debe equilibrarse con la consideración de que no existe un mecanismo de política de contraseñas para usuarios autenticados de SQL en bases de datos contenidas.



Valor por defecto: o Los usuarios autenticados de SQL (autenticación de USUARIO CON CONTRASEÑA) están permitidos en bases de datos contenidas.



Referencias: o https://docs.microsoft.com/en-us/sql/relationaldatabases/databases/securitybest-practices-with-containeddatabases

3.5 Asegúrese de que la cuenta de servicio MSSQL de SQL Server no sea un Administrador •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La cuenta de servicio y / o el SID de servicio utilizado por el servicio MSSQLSERVER para una instancia predeterminada o el servicio MSSQL $ para una instancia con nombre no debe ser miembro del grupo Administrador de Windows, ya sea directa o indirectamente (a través de un grupo). Esto también significa que la cuenta conocida como LocalSystem (también conocido como NT AUTHORITY \ SYSTEM) no debe usarse para el servicio MSSQL ya que esta cuenta tiene más privilegios que los que requiere el servicio SQL Server.



Razón fundamental: o Siguiendo el principio de privilegio mínimo, la cuenta de servicio no debe tener más privilegios de los necesarios para hacer su trabajo. Para los servicios de SQL Server, el programa de instalación de SQL Server asignará los permisos necesarios directamente al SID del servicio. No deberían ser necesarios permisos o privilegios adicionales.



Auditoría: o Verifique que la cuenta de servicio (en el caso de una cuenta local o AD) y el SID de servicio no sean miembros del grupo de Administradores de Windows.



Solución: o En el caso de que se use LocalSystem, use el Administrador de configuración de SQL Server para cambiar a una cuenta menos privilegiada. De lo contrario, elimine la cuenta o el SID del servicio del grupo Administradores. Es posible que deba ejecutar el Administrador de configuración de SQL Server si se han cambiado los permisos subyacentes o si el Administrador de configuración de SQL Server no se utilizó originalmente para configurar la cuenta de servicio.



Impacto: o La herramienta Administrador de configuración de SQL Server siempre debe usarse para cambiar la cuenta de servicio de SQL Server. Esto asegurará que la cuenta tenga los privilegios necesarios. Si el servicio necesita acceso a recursos distintos de los directorios definidos por Microsoft estándar y registro, entonces los permisos adicionales pueden necesitar ser otorgados por separado a esos recursos.



Valor por defecto:

o



De forma predeterminada, la cuenta de servicio (o SID de servicio) no es miembro del grupo de administradores.

Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/configure-windows-service-accountsand-permissions

3.6 Asegúrese de que la cuenta de servicio SQLAgent de SQL Server no sea un Administrador •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La cuenta de servicio y / o el SID de servicio utilizado por el servicio SQLSERVERAGENT para una instancia predeterminada o el servicio SQLAGENT $ para una instancia con nombre no debe ser miembro del grupo Administrador de Windows, ya sea directa o indirectamente (a través de un grupo). Esto también significa que la cuenta conocida como LocalSystem (también conocido como NT AUTHORITY \ SYSTEM) no debe usarse para el servicio SQLAGENT ya que esta cuenta tiene más privilegios que los que requiere el servicio SQL Server.



Razón fundamental: o Siguiendo el principio de privilegio mínimo, la cuenta de servicio no debe tener más privilegios de los necesarios para hacer su trabajo. Para los servicios de SQL Server, el programa de instalación de SQL Server asignará los permisos necesarios directamente al SID del servicio. No deberían ser necesarios permisos o privilegios adicionales.



Auditoría: o Verifique que la cuenta de servicio (en el caso de una cuenta local o AD) y el SID de servicio no sean miembros del grupo de Administradores de Windows.



Solución: o En el caso de que se use LocalSystem, use el Administrador de configuración de SQL Server para cambiar a una cuenta menos privilegiada. De lo contrario, elimine la cuenta o el SID del servicio del grupo Administradores. Es posible que deba ejecutar el Administrador de configuración de SQL Server si se han cambiado los permisos subyacentes o si el Administrador de configuración de SQL Server no se utilizó originalmente para configurar la cuenta de servicio.



Impacto: o La herramienta Administrador de configuración de SQL Server siempre debe usarse para cambiar la cuenta de servicio de SQL Server. Esto asegurará que la cuenta tenga los privilegios necesarios. Si el servicio necesita acceso a recursos distintos de los directorios definidos por Microsoft estándar y registro, entonces los permisos adicionales pueden necesitar ser otorgados por separado a esos recursos.



Valor por defecto:

o



De forma predeterminada, la cuenta de servicio (o SID de servicio) no es miembro del grupo de administradores.

Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/configure-windows-service-accountsand-permissions

3.7 Asegúrese de que la cuenta de servicio Full-Tex Service Account de SQL Server no sea un Administrador •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La cuenta de servicio y / o el SID de servicio utilizado por el servicio MSSQLFDLauncher para una instancia predeterminada o el servicio MSSQLFDLauncher$ para una instancia con nombre no debe ser miembro del grupo Administrador de Windows, ya sea directa o indirectamente (a través de un grupo). Esto también significa que la cuenta conocida como LocalSystem (también conocido como NT AUTHORITY \ SYSTEM) no debe usarse para el servicio SQLAGENT ya que esta cuenta tiene más privilegios que los que requiere el servicio SQL Server.



Razón fundamental: o Siguiendo el principio de privilegio mínimo, la cuenta de servicio no debe tener más privilegios de los necesarios para hacer su trabajo. Para los servicios de SQL Server, el programa de instalación de SQL Server asignará los permisos necesarios directamente al SID del servicio. No deberían ser necesarios permisos o privilegios adicionales.



Auditoría: o Verifique que la cuenta de servicio (en el caso de una cuenta local o AD) y el SID de servicio no sean miembros del grupo de Administradores de Windows.



Solución: o En el caso de que se use LocalSystem, use el Administrador de configuración de SQL Server para cambiar a una cuenta menos privilegiada. De lo contrario, elimine la cuenta o el SID del servicio del grupo Administradores. Es posible que deba ejecutar el Administrador de configuración de SQL Server si se han cambiado los permisos subyacentes o si el Administrador de configuración de SQL Server no se utilizó originalmente para configurar la cuenta de servicio.



Impacto: o La herramienta Administrador de configuración de SQL Server siempre debe usarse para cambiar la cuenta de servicio de SQL Server. Esto asegurará que la cuenta tenga los privilegios necesarios. Si el servicio necesita acceso a recursos distintos de los directorios definidos por Microsoft estándar y registro, entonces los permisos adicionales pueden necesitar ser otorgados por separado a esos recursos.



Valor por defecto: o De forma predeterminada, la cuenta de servicio (o SID de servicio) no es miembro del grupo de administradores.



Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/configure-windows-service-accountsand-permissions

3.8 Asegúrese de que solo los permisos predeterminados especificados por Microsoft sean otorgado al rol de base de datos “public” •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Public es un rol de servidor fijo especial que contiene todos los inicios de sesión. A diferencia de otras funciones fijas de servidor, los permisos se pueden cambiar para la función Public. De acuerdo con el principio de privilegios mínimos, la función de servidor público no debe utilizarse para otorgar permisos en el ámbito del servidor, ya que estos serían heredados por todos los usuarios.



Razón fundamental: o Cada inicio de sesión de SQL Server pertenece al rol público y no se puede eliminar de este rol. Por lo tanto, todos los permisos otorgados a este rol estarán disponibles para todos los inicios de sesión, a menos que se hayan denegado explícitamente a inicios de sesión específicos o roles de servidor definidos por el usuario.



Auditoría: o Use la siguiente sintaxis para determinar si se han otorgado permisos adicionales al Rol de servidor Public. SELECT * FROM master.sys.server_permissions WHERE (grantee_principal_id = SUSER_SID(N'public') and state_desc LIKE 'GRANT%') AND NOT (state_desc = 'GRANT' and [permission_name] = 'VIEW ANY DATABASE' and class_desc = 'SERVER') AND NOT (state_desc = 'GRANT' and [permission_name] = 'CONNECT' and class_desc = 'ENDPOINT' and major_id = 2) AND NOT (state_desc = 'GRANT' and [permission_name] = 'CONNECT' and class_desc = 'ENDPOINT' and major_id = 3) AND NOT (state_desc = 'GRANT' and [permission_name] = 'CONNECT' and class_desc = 'ENDPOINT' and major_id = 4) AND NOT (state_desc = 'GRANT' and [permission_name] = 'CONNECT' and class_desc = 'ENDPOINT' and major_id = 5);

o •

Esta consulta no debería devolver ninguna fila.

Solución: o Agregue los permisos extraños que se encuentran en los resultados de la consulta de auditoría a los inicios de sesión específicos a los roles de servidor definidos por el usuario que requieren el acceso. o Revoca el del rol público como se muestra a continuación. ▪ Ejecute el siguiente comando USE [master] GO REVOKE FROM public; GO



Impacto: o Cuando se revocan los permisos extraños de la función de servidor público, se puede perder el acceso a menos que se otorguen permisos a los inicios de sesión explícitos o a las funciones de servidor definidas por el usuario que contienen los inicios de sesión que requieren el acceso. •



Valor por defecto: o De manera predeterminada, el rol de servidor público tiene permiso para VIEW ANY DATABASE y el permiso CONNECT en los puntos finales predeterminados (TSQL Local machine, TSQL Named Pipes, TSQL Default TCP, TSQL Default VIA). El permiso VIEW ANY DATABASE permite que todos los inicios de sesión vean los metadatos de la base de datos, a menos que se deniegue explícitamente.

Referencias: o https://docs.microsoft.com/enus/sql/relationaldatabases/security/authentication-access/serverlevel-roles o https://docs.microsoft.com/enus/sql/relationaldatabases/security/authentication-access/serverlevel-roles#permissions-of-fixedserver-roles

3.9 Asegúrese de que los grupos BUILTIN de Windows no sean inicios de sesión de SQL •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Antes de SQL Server 2008, el grupo BUILTIN\Administrators agregaba un inicio de sesión de SQL Server con privilegios de administrador del sistema durante la instalación de forma predeterminada. Las mejores prácticas promueven la creación de un grupo de nivel de Active Directory que contenga cuentas de personal de DBA aprobadas y el uso de este grupo de AD controlado como inicio de sesión con privilegios de administrador del sistema. El grupo AD debe especificarse durante la instalación de SQL Server y, por lo tanto, el grupo BUILTIN\Administrators no tendría que ser un inicio de sesión.



Razón fundamental: o Los grupos BUILTIN (Administrators, Everyone, Authenticated Users, Guests, etc.) generalmente contienen membresías muy amplias que no cumplirían con la mejor práctica de garantizar que solo los usuarios necesarios tengan acceso a una instancia de SQL Server. Estos grupos no deben usarse para ningún nivel de acceso a una instancia del Motor de base de datos de SQL Server.



Auditoría: o Use la siguiente sintaxis para determinar si se han agregado grupos o cuentas BUILTIN como inicios de sesión de SQL Server: SELECT pr.[name], pe.[permission_name], pe.[state_desc] FROM sys.server_principals pr JOIN sys.server_permissions pe ON pr.principal_id = pe.grantee_principal_id WHERE pr.name like 'BUILTIN%';

o

Esta consulta no debe devolver ninguna fila.



Solución: o Para cada inicio de sesión de BUILTIN, si es necesario, cree un grupo de AD más restrictivo que contenga solo las cuentas de usuario requeridas. o Agregue el grupo de AD o las cuentas individuales de Windows como un inicio de sesión de SQL Server y otórguele los permisos necesarios. o Suelte el inicio de sesión BUILTIN utilizando la sintaxis a continuación después de reemplazar en [BUILTIN \ ].



GO Impacto: DROP o LOGIN Antes[BUILTIN\]; de eliminar los inicios de sesión del grupo BUILTIN, asegúrese GO de que se hayan agregado grupos AD alternativos o inicios de sesión

USE [master];

de Windows con permisos equivalentes. De lo contrario, la instancia de SQL Server puede volverse totalmente inaccesible. •

Valor por defecto: o Por defecto, no se agregan grupos BUILTIN como inicios de sesión SQL



Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/server-properties-security-page

3.10 Asegúrese de que los grupos locales de Windows no sean inicios de sesión de SQL •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Los grupos locales de Windows no deben usarse como inicios de sesión para instancias de SQL Server.



Razón fundamental: o Permitir grupos locales de Windows como inicios de sesión SQL proporciona un vacío legal por el cual cualquier persona con derechos de administrador a nivel del sistema operativo (y sin derechos de SQL Server) podría agregar usuarios a los grupos locales de Windows y, por lo tanto, darse a sí mismos u otro acceso a la instancia de SQL Server.



Auditoría: o Use la siguiente sintaxis para determinar si se han agregado grupos locales como inicios de sesión de SQL Server: USE [master] GO SELECT pr.[name] AS LocalGroupName, pe.[permission_name], pe.[state_desc] FROM sys.server_principals pr JOIN sys.server_permissions pe ON pr.[principal_id] = pe.[grantee_principal_id] WHERE pr.[type_desc] = 'WINDOWS_GROUP' AND pr.[name] like CAST(SERVERPROPERTY('MachineName') AS nvarchar) + '%';

o •

Esta consulta no debe devolver ninguna fila.

Solución: o Para cada inicio de sesión de LocalGroupName, si es necesario, cree un grupo AD equivalente que contenga solo las cuentas de usuario requeridas. o Agregue el grupo de AD o las cuentas individuales de Windows como un inicio de sesión de SQL Server y otórguele los permisos necesarios. o Suelta el inicio de sesión de LocalGroupName usando la sintaxis a continuación después de reemplazar . o Ejecute el siguiente comando USE [master] GO DROP LOGIN [] GO



Impacto: o Antes de eliminar los inicios de sesión de grupos locales, asegúrese de que se hayan agregado grupos AD alternativos o inicios de sesión de Windows con permisos equivalentes. De lo contrario, la instancia de SQL Server puede volverse totalmente inaccesible.



Valor por defecto: o De manera predeterminada, no se agregan grupos locales como inicios de sesión SQL.

3.11 Asegúrese de que el rol público en la base de datos msdb no tenga acceso a los proxies del Agente SQL •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o La función de base de datos pública contiene cada usuario en la base de datos msdb. Los proxies del Agente SQL definen un contexto de seguridad en el que se puede ejecutar un paso de trabajo.



Razón fundamental: o Otorgar acceso a los proxies del Agente SQL para el rol público permitiría a todos los usuarios utilizar el proxy que puede tener altos privilegios. Esto probablemente rompería el principio de privilegios mínimos.



Auditoría: o Use la siguiente sintaxis para determinar si se ha otorgado acceso a cualquier proxy para el rol público de la base de datos msdb. o Ejecute el siguiente comando: USE [msdb] GO SELECT sp.name AS proxyname FROM dbo.sysproxylogin spl JOIN sys.database_principals dp ON dp.sid = spl.sid JOIN sysproxies sp ON sp.proxy_id = spl.proxy_id WHERE principal_id = USER_ID('public'); GO

o •

Esta consulta no debería devolver ninguna fila.

Solución: o Asegúrese de que los principales de seguridad necesarios tengan acceso explícito al proxy (use sp_grant_login_to_proxy). o Revocar el acceso al desde el rol público. USE [msdb] GO EXEC dbo.sp_revoke_login_from_proxy @name = N'public', @proxy_name = N''; GO



Impacto: o Antes de revocar el rol público del proxy, asegúrese de que se hayan agregado inicios de sesión alternativos o roles de base de datos definidos por los usuarios apropiados con permisos equivalentes. De lo contrario, los pasos del trabajo del Agente SQL que dependen de este acceso fallarán.



Valor por defecto: o De manera predeterminada, el rol public de msdb no tiene acceso a ningún proxy



Referencias: o https://support.microsoft.com/en-us/help/2160741/bestpractices-in-configuringsql-server-agent-proxy-account

4. Políticas de Contraseña Esta sección contiene recomendaciones relacionadas con las políticas de contraseña de SQL Server. 4.1 Asegurar que la opción 'MUST_CHANGE' este seteada en 'ON' para todos los SQL Authenticated Logins •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Siempre que esta opción esté activada, SQL Server solicitará una contraseña actualizada la primera vez que se use el inicio de sesión nuevo o modificado.



Razón fundamental: o La aplicación de un cambio de contraseña después de un reinicio o una nueva creación de inicio de sesión evitará que los administradores de la cuenta o cualquier persona que acceda a la contraseña inicial use indebidamente el inicio de sesión SQL creado sin que se note.



Auditoría: o Abra SQL Server Management Studio. o Abra el Explorador de objetos y conéctese a la instancia de destino. o Navegue a la pestaña Inicios de sesión en el Explorador de objetos y expanda. Haga clic derecho en el inicio de sesión deseado y seleccione Propiedades. o Verifique que el usuario debe cambiar la contraseña en la próxima casilla de verificación de inicio de sesión está marcada. Nota: Este procedimiento de auditoría solo es aplicable inmediatamente después de que se haya creado o modificado el inicio de sesión para forzar el cambio de contraseña. Una vez que se cambia la contraseña, no hay forma de saber específicamente que esta opción fue el mecanismo de forzamiento detrás de un cambio de contraseña.



Solución: o Establezca la opción MUST_CHANGE para inicios de sesión autenticados de SQL al crear un inicio de sesión inicialmente. CREATE LOGIN WITH PASSWORD = '' MUST_CHANGE, CHECK_EXPIRATION = ON, CHECK_POLICY = ON;

o

Establezca la opción MUST_CHANGE para inicios de sesión autenticados de SQL al restablecer una contraseña:

ALTER LOGIN WITH PASSWORD = '' MUST_CHANGE;



Impacto: o Las opciones CHECK_EXPIRATION y CHECK_POLICY deben estar activadas. Los usuarios finales deben tener los medios (aplicación) para cambiar la contraseña cuando sea forzada.



Valor por defecto: o ON al crear un nuevo inicio de sesión a través de la GUI de SSMS. o OFF al crear un nuevo inicio de sesión usando T-SQL CREATE LOGIN a menos que la opción MUST_CHANGE se incluya explícitamente junto con CHECK_EXPIRATION = ON.



Referencias: o https://docs.microsoft.com/en-us/sql/t-sql/statements/alterlogin-transact-sql o https://docs.microsoft.com/en-us/sql/t-sql/statements/createlogin-transact-sql

4.2 Asegurar que la opción 'CHECK_EXPIRATION' este seteada en 'ON' para todos los SQL Authenticated Logins dentro del Sysadmin Role •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: Aplica la misma política de caducidad de contraseña utilizada en Windows a las contraseñas utilizadas dentro de SQL Server.



Razón fundamental: o Asegurar que los inicios de sesión de SQL cumplan con la política de contraseña segura aplicada por el Benchmark de Windows Server garantizará que las contraseñas para inicios de sesión de SQL con privilegios de administrador del sistema se cambien con frecuencia para ayudar a evitar el compromiso a través de un ataque de fuerza bruta. CONTROL SERVER es un permiso equivalente para sysadmin y los inicios de sesión con ese permiso también deben tener contraseñas que caduquen.



Auditoría: o Ejecute la siguiente instrucción T-SQL para buscar sysadmin o inicios de sesión equivalentes con CHECK_EXPIRATION = OFF. SELECT l.[name], 'sysadmin membership' AS 'Access_Method' FROM sys.sql_logins AS l WHERE IS_SRVROLEMEMBER('sysadmin',name) = 1 AND l.is_expiration_checked 1 UNION ALL SELECT l.[name], 'CONTROL SERVER' AS 'Access_Method' FROM sys.sql_logins AS l JOIN sys.server_permissions AS p ON l.principal_id = p.grantee_principal_id WHERE p.type = 'CL' AND p.state IN ('G', 'W') AND l.is_expiration_checked 1;

o •

No se deben devolver filas.

Solución: o Para cada encontrado por el procedimiento de auditoría, ejecute la siguiente instrucción T-SQL: ALTER LOGIN [] WITH CHECK_EXPIRATION = ON;



Impacto: o Esta es una recomendación atenuante para sistemas que no pueden seguir la recomendación de usar solo inicios de sesión autenticados de Windows. En cuanto a limitar esta regla a solo inicios de sesión con privilegios de sysadmin y CONTROL SERVER, hay demasiados casos de aplicaciones que se ejecutan con menos privilegios de nivel de sysadmin que tienen contraseñas codificadas o contraseñas codificadas efectivamente (lo que se

o

establece la primera vez es casi imposible de cambiar). Hay varias aplicaciones de línea de negocio que se consideran las mejores de su clase que tiene este fallo. Además, tenga en cuenta que la política de contraseña se toma de la política local de la computadora, que se tomará de la configuración de Política de dominio predeterminada. Muchas organizaciones tienen una política de contraseña diferente con respecto a las cuentas de servicio. Estos se manejan en AD configurando la contraseña de la cuenta para que no caduque y teniendo alguna otra pista de proceso cuando necesitan ser cambiados. Con este segundo control en su lugar, esto es perfectamente aceptable desde una perspectiva de auditoría. Si trata un inicio de sesión de SQL Server como una cuenta de servicio, debe hacer lo mismo. Esto garantiza que el cambio de contraseña ocurra durante una ventana de tiempo de inactividad comunicada y no de manera arbitraria.



Valor por defecto: o CHECK_EXPIRATION está activado de forma predeterminada cuando se usa SSMS para crear un inicio de sesión autenticado de SQL. o CHECK_EXPIRATION está DESACTIVADO de manera predeterminada cuando se usa la sintaxis T-SQL CREATE LOGIN sin especificar la opción CHECK_EXPIRATION.



Referencias: o https://docs.microsoft.com/en-us/sql/relationaldatabases/security/passwordpolicy

4.3 Asegurar que la opción 'CHECK_POLICY' este seteada en 'ON' para todos los SQL Authenticated Logins •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Aplica la misma política de complejidad de contraseña utilizada en Windows a las contraseñas utilizadas dentro de SQL Server.



Razón fundamental: o Asegúrese de que las contraseñas de inicio de sesión autenticadas de SQL cumplan con la política de contraseña segura aplicada por el Benchmark de Windows Server para que no se puedan comprometer fácilmente mediante un ataque de fuerza bruta.



Auditoría: o Use el siguiente fragmento de código para determinar el estado de los inicios de sesión de SQL y si se aplica la complejidad de su contraseña. o Ejecute el siguiente comando: SELECT name, is_disabled FROM sys.sql_logins WHERE is_policy_checked = 0;

o



El valor is_policy_checked de 0 indica que la opción CHECK_POLICY está desactivada; El valor de 1 está activado. Si el valor is_disabled es 1, el inicio de sesión está deshabilitado e inutilizable. Si no se devuelven filas, no existen inicios de sesión autenticados por SQL o todos tienen CHECK_POLICY ON.

Solución: o Ejecute el siguiente trozo de código: ALTER LOGIN [] WITH CHECK_POLICY = ON;



Impacto: o Esta es una recomendación atenuante para sistemas que no pueden seguir la recomendación de usar solo inicios de sesión autenticados de Windows. o Las contraseñas débiles pueden conducir a sistemas comprometidos. Los inicios de sesión autenticados de SQL Server utilizarán la política de contraseña establecida en la política local de la computadora, que generalmente se establece mediante la configuración de la Política de dominio predeterminada.

o

La configuración solo se aplica cuando se cambia la contraseña. Esta configuración no obliga a cambiar las contraseñas débiles existentes.



Valor por defecto: o CHECK_POLICY está ON



Referencias: o https://docs.microsoft.com/en-us/sql/relationaldatabases/security/password-policy

5. Auditoria y Registro Esta sección contiene recomendaciones relacionadas con los mecanismos de auditoría y registro de SQL Server. 5.1 Asegúrese de que ‘Maximum number of error log files’ esté establecido en mayor o igual que '12' •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Los archivos de registro de errores de SQL Server deben protegerse contra pérdidas. Se debe hacer una copia de seguridad de los archivos de registro antes de sobrescribirlos. Retener más registros de errores ayuda a evitar pérdidas por el reciclaje frecuente antes de que se puedan realizar copias de seguridad.



Razón fundamental: o El registro de errores de SQL Server contiene información importante sobre eventos importantes del servidor e información de intentos de inicio de sesión también.



Auditoría: o Abra SQL Server Management Studio. o Abra el Explorador de objetos y conéctese a la instancia de destino. o Navegue a la pestaña Administración en el Explorador de objetos y expanda. Haga clic derecho en el archivo de Registros de SQL Server y seleccione Configurar. o Verifique la casilla de verificación Limitar el número de archivos de registro de errores antes de reciclarlos. o Verifique que el número máximo de archivos de registro de errores sea mayor o igual a 12. O ejecute el siguiente T-SQL o

El NumberOfLogFiles devuelto debe ser mayor o igual a 12, ejecute el siguiente comando:

DECLARE @NumErrorLogs int; EXEC master.sys.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', @NumErrorLogs OUTPUT; SELECT ISNULL(@NumErrorLogs, -1) AS [NumberOfLogFiles];



Solución: o Ajuste la cantidad de registros para evitar la pérdida de datos. El valor predeterminado de 6 puede ser insuficiente para un entorno de producción. o Abra SQL Server Management Studio. o Abra el Explorador de objetos y conéctese a la instancia de destino. o Navegue a la pestaña Administración en el Explorador de objetos y expanda. Haga clic derecho en el archivo de registros de SQL Server y seleccione Configurar o Marque la casilla Limitar la cantidad de archivos de registro de errores antes de reciclarlos. o Establezca el número máximo de archivos de registro de errores en mayor o igual que 12 O o

Ejecute el siguiente T-SQL para cambiar la cantidad de archivos de registro de errores, reemplace con la cantidad deseada de archivos de registro de errores:

EXEC master.sys.xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, ;



Impacto: o Una vez que se alcanza el número máximo de registros de errores, el archivo de registro de errores más antiguo se elimina cada vez que SQL Server se reinicia o se ejecuta sp_cycle_errorlog.



Valor por defecto: o 6 son los archivos de registro de errores de SQL Server además del archivo de registro de errores actual se retienen de manera predeterminada.



Referencias: o https://docs.microsoft.com/en-us/sql/database-engine/configurewindows/scmservices-configure-sql-server-error-logs

5.2 Asegúrese de que la opción de configuración ‘Default Trace Enabled’ este establecido en 1 •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o El seguimiento predeterminado proporciona el registro de auditoría de la actividad de la base de datos, incluidas las creaciones de cuentas, la elevación de privilegios y la ejecución de comandos DBCC.



Razón fundamental: o El rastreo predeterminado proporciona información valiosa de auditoría sobre actividades relacionadas con la seguridad en el servidor.



Auditoría: o Ejecute el siguiente comando: SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'default trace enabled';

o •

Ambas columnas deben devolver 1.

Solución: o Ejecute el siguiente trozo de código: EXECUTE sp_configure 'show advanced options', 1; RECONFIGURE; EXECUTE sp_configure 'default trace enabled', 1; RECONFIGURE; GO EXECUTE sp_configure 'show advanced options', 0; RECONFIGURE;



Valor por defecto: o 1 = ON



Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/default-trace-enabled-serverconfiguration-option

5.3 Asegúrese de que la opción ‘Login Auditing’ este configurado en ‘failed logins’ •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Esta configuración registrará intentos de autenticación fallidos para inicios de sesión de SQL Server en el registro de errores de SQL Server. Esta es la configuración predeterminada para SQL Server. o Históricamente, esta configuración ha estado disponible en todas las versiones y ediciones de SQL Server. Antes de la disponibilidad de SQL Server Audit, este era el único mecanismo provisto para capturar inicios de sesión (exitoso o fallido).



Razón fundamental: o La captura de inicios de sesión fallidos proporciona información clave que se puede utilizar para detectar \ confirmar ataques de adivinación de contraseña. La captura de intentos de inicio de sesión exitosos se puede utilizar para confirmar el acceso al servidor durante las investigaciones forenses, pero el uso de esta configuración de nivel de auditoría para capturar también inicios de sesión exitosos crea un ruido excesivo en el registro de errores de SQL Server que puede dificultar que un DBA intente solucionar problemas. En otra parte de este punto de referencia, recomendamos usar la nueva y liviana función de Auditoría de SQL Server para capturar inicios de sesión exitosos y fallidos.



Auditoría: EXEC xp_loginconfig 'audit level';

o



Un config_value en failure indica una configuración de auditoría de inicio de sesión del servidor de solo inicios de sesión fallidos. Si aparece un config_value of all, se registran los inicios de sesión fallidos y exitosos. Ambas configuraciones también deben considerarse válidas, pero como se mencionó, la captura de inicios de sesión exitosos utilizando este método crea mucho ruido en el registro de errores de SQL Server.

Solución: o Realice los siguientes pasos para establecer el nivel de auditoría utilizando SQL Server Management Studio: ▪ Abra SQL Server Management Studio. ▪ Haga clic derecho en la instancia de destino, seleccione Propiedades y navegue a la pestaña Seguridad. ▪ Seleccione la opción Inicios de sesión fallidos solo en la sección Auditoría de inicio de sesión y haga clic en Aceptar. ▪ Reinicie la instancia de SQL Server.

o

Realice los siguientes pasos para establecer el nivel de auditoría utilizando T-SQL:

EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'AuditLevel', REG_DWORD, 2

o

Reinicie el servicio de la instancia de SQL Server.



Impacto: o Como mínimo, queremos asegurarnos de que se capturen los inicios de sesión fallidos para detectar si un adversario intenta forzar contraseñas de fuerza bruta o intenta acceder a un servidor SQL incorrectamente. o Cambiar la configuración requiere un reinicio del servicio SQL Server.



Valor por defecto: o Por defecto, solo se capturan los intentos fallidos de inicio de sesión



Referencias: o https://docs.microsoft.com/en-us/sql/databaseengine/configurewindows/server-properties-security-page

5.4 Asegúrese de que la opción ‘SQL Server Audit’ este configurado en capture both ‘failed’ y ‘successful logins’ •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o SQL Server Audit es capaz de capturar inicios de sesión exitosos y fallidos y escribirlos en uno de estos tres lugares: el registro de eventos de la aplicación, el registro de eventos de seguridad o el sistema de archivos. Lo utilizaremos para capturar cualquier intento de inicio de sesión en SQL Server, así como también cualquier intento de cambiar la política de auditoría. Esto también servirá para ser una segunda fuente para registrar intentos fallidos de inicio de sesión.



Razón fundamental: o Al utilizar Auditoría en lugar de la configuración tradicional en la pestaña Seguridad para capturar inicios de sesión exitosos, reducimos el ruido en el ERRORLOG. Esto lo hace más pequeño y fácil de leer para los DBA que intentan solucionar problemas con SQL Server. Además, el objeto de auditoría puede escribir en el registro de eventos de seguridad, aunque esto requiere la configuración del sistema operativo. Esto ofrece una opción adicional sobre dónde almacenar eventos de inicio de sesión, especialmente en combinación con un SIEM.



Auditoría: SELECT S.name AS 'Audit Name' , CASE S.is_state_enabled WHEN 1 THEN 'Y' WHEN 0 THEN 'N' END AS 'Audit Enabled' , S.type_desc AS 'Write Location' , SA.name AS 'Audit Specification Name' , CASE SA.is_state_enabled WHEN 1 THEN 'Y' WHEN 0 THEN 'N' END AS 'Audit Specification Enabled' , SAD.audit_action_name , SAD.audited_result FROM sys.server_audit_specification_details AS SAD JOIN sys.server_audit_specifications AS SA ON SAD.server_specification_id = SA.server_specification_id JOIN sys.server_audits AS S ON SA.audit_guid = S.audit_guid WHERE SAD.audit_action_id IN ('CNAU', 'LGFL', 'LGSD');

o

El conjunto de resultados debe contener 3 filas, una para cada uno de los siguientes udit_action_names: ▪ AUDIT_CHANGE_GROUP ▪ FAILED_LOGIN_GROUP ▪ SUCCESSFUL_LOGIN_GROUP

o



Tanto la Auditoría como la especificación de Auditoría deben estar habilitadas y el resultado auditado debe incluir tanto el éxito como el fracaso.

Solución: o A través de la interfaz SSMS GUI: ▪ Expanda SQL Server en el Explorador de objetos. ▪ Expande la carpeta de seguridad ▪ Haga clic derecho en la carpeta Auditorías y elija Nueva auditoría. ▪ Especifique un nombre para la Auditoría del servidor. ▪ Especifique los detalles del destino de la auditoría y luego haga clic en Aceptar para guardar la Auditoría del servidor. ▪ Haga clic con el botón derecho en Especificaciones de auditoría del servidor y elija Nueva especificación de auditoría del servidor. ▪ Nombre de la especificación de auditoría del servidor ▪ Seleccione la Auditoría de servidor recién creada en la selección desplegable Auditoría. ▪ Haga clic en el menú desplegable en Tipo de acción de auditoría y seleccione AUDIT_CHANGE_GROUP. ▪ Haga clic en el nuevo tipo de acción de auditoría desplegable y seleccione FAILED_LOGIN_GROUP. ▪ Haga clic en el nuevo menú desplegable en Tipo de acción de auditoría y seleccione SUCCESSFUL_LOGIN_GROUP. ▪ Haga clic en Aceptar para guardar la especificación de auditoría del servidor. ▪ Haga clic con el botón derecho en la nueva Especificación de auditoría del servidor y seleccione Habilitar especificación de auditoría del servidor. ▪ Haga clic derecho en la nueva Auditoría del servidor y seleccione Habilitar auditoría del servidor. o A través de T-SQL:

CREATE SERVER AUDIT TrackLogins TO APPLICATION_LOG; GO CREATE SERVER AUDIT SPECIFICATION TrackAllLogins FOR SERVER AUDIT TrackLogins ADD (FAILED_LOGIN_GROUP), ADD (SUCCESSFUL_LOGIN_GROUP), ADD (AUDIT_CHANGE_GROUP) WITH (STATE = ON); GO ALTER SERVER AUDIT TrackLogins WITH (STATE = ON); GO

o

Nota: Si el destino de escritura para el objeto de Auditoría es el registro de eventos de seguridad, consulte el tema Libros en línea Write SQL Server Audit Events to the Security Log y siga los pasos apropiados.



Impacto: o Con la recomendación anterior, solo se capturan inicios de sesión fallidos. Si el objeto de auditoría no se implementa con la configuración adecuada, SQL Server no capturará inicios de sesión exitosos, lo que podría resultar útil para el análisis forense.



Valor por defecto: o Por defecto, no hay eventos de inicio de sesión de seguimiento de objetos de auditoría.



Referencias: o https://docs.microsoft.com/enus/sql/relationaldatabases/security/auditing/create-a-serveraudit-and-server-audit-specification

6. Desarrollo de Aplicaciones Esta sección contiene recomendaciones relacionadas con el desarrollo de aplicaciones que interactúan con SQL Server.

6.1 Asegúrese de proteger la base de datos y que la entrada del usuario de la aplicación sea protegida •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Siempre valide la entrada del usuario recibida de una aplicación o cliente de base de datos probando el tipo, la longitud, el formato y el rango antes de transmitirla al servidor de la base de datos.



Razón fundamental: o La desinfección de la entrada del usuario minimiza drásticamente el riesgo de inyección SQL.



Auditoría: o Verifique con los equipos de aplicaciones para asegurarse de que cualquier interacción con la base de datos se realice mediante el uso de procedimientos almacenados y no mediante SQL dinámico. Revoque los privilegios INSERTAR, ACTUALIZAR o ELIMINAR a los usuarios para que las modificaciones de los datos se realicen mediante procedimientos almacenados. Verifique que no haya una consulta SQL en el código de la aplicación producida por la concatenación de cadenas.



Solución: o Se pueden seguir los siguientes pasos para corregir las vulnerabilidades de inyección SQL: o Revise TSQL y el código de la aplicación para inyección de SQL Solo permite que las cuentas con privilegios mínimos envíen información del usuario al servidor. Minimice el riesgo de ataque de inyección SQL mediante el uso de comandos parametrizados y procedimientos almacenados. o Rechace la entrada del usuario que contiene datos binarios, secuencias de escape y caracteres de comentarios. o Siempre valide la entrada del usuario y no la use directamente para construir sentencias SQL.



Impacto:

o

o



La desinfección de la entrada del usuario puede requerir cambios en el código de la aplicación o en la sintaxis del objeto de la base de datos. Estos cambios pueden requerir que las aplicaciones o bases de datos se tomen temporalmente fuera de línea. Cualquier cambio en TSQL o en el código de la aplicación debe probarse exhaustivamente en el entorno de prueba antes de la implementación de producción.

Referencias: o https://www.owasp.org/index.php/SQL_Injection

6.2 Asegúrese que la opción ‘CLR Assembly Permission Set’ está configurada en ‘SAFE_ACCESS’ en todos los CLR Assemblies •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Establecer los conjuntos de permisos de ensamblado de CLR en SAFE_ACCESS evitará que los ensamblados accedan a recursos externos del sistema, como archivos, la red, variables de entorno o el registro.



Razón fundamental: o Los ensamblados con conjuntos de permisos EXTERNAL_ACCESS o UNSAFE se pueden usar para acceder a áreas sensibles del sistema operativo, robar y / o transmitir datos y alterar el estado y otras medidas de protección del sistema operativo Windows subyacente. o Los ensamblados creados por Microsoft (is_user_defined = 0) se excluyen de esta verificación, ya que son necesarios para la funcionalidad general del sistema.



Auditoría: o Ejecute el siguiente comando: SELECT name, permission_set_desc FROM sys.assemblies where is_user_defined = 1;

o



Todos los ensamblados devueltos deben mostrar SAFE_ACCESS en la columna permission_set_desc.

Solución: o A través de T-SQL:

ALTER ASSEMBLY WITH PERMISSION_SET = SAFE;



Impacto: o La medida de remediación primero debe probarse dentro de un entorno de prueba antes de la producción para garantizar que el ensamblaje siga funcionando según lo diseñado con la configuración de permiso SEGURO.



Valor por defecto: o SAFE permission es configurado por defecto.



Referencias:

o

o o

https://docs.microsoft.com/en-us/sql/relationaldatabases/clrintegration/security/clr-integration-code-accesssecurity https://docs.microsoft.com/en-us/sql/relationaldatabases/system-catalogviews/sys-assemblies-transact-sql https://docs.microsoft.com/en-us/sql/t-sql/statements/alterassembly-transactsql

7. Encriptación Estas recomendaciones se refieren a aspectos relacionados con el cifrado de SQL Server 7.1 Asegurese que la opción ‘Symmetric Key encryption algorithm’ este configurado en 'AES_128' o mayor en bases de datos que no son del sistema •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Según las mejores prácticas de Microsoft, solo las opciones del algoritmo AES de SQL Server, AES_128, AES_192 y AES_256, deben usarse para un algoritmo de cifrado de clave simétrica.



Razón fundamental: o Los siguientes algoritmos (a los que se refiere SQL Server) se consideran débiles o en desuso y ya no deberían usarse en SQL Server: DES, DESX, RC2, RC4, RC4_128. Muchas organizaciones pueden aceptar los algoritmos Triple DES (TDEA) que utilizan las opciones de codificación 1 (3 teclas, también conocido como 3TDEA) o la opción de codificación 2 (2 teclas, también conocido como 2TDEA). En SQL Server, estos se denominan TRIPLE_DES_3KEY y TRIPLE_DES respectivamente. Además, el algoritmo de SQL Server llamado DESX es en realidad la misma implementación como la opción TRIPLE_DES_3KEY. Sin embargo, el uso del identificador DESX como el tipo de algoritmo ha quedado en desuso y ahora se desaconseja su uso.



Auditoría: o Ejecute el siguiente código para cada base de datos de usuario individual: USE [] GO SELECT db_name() AS Database_Name, name AS Key_Name FROM sys.symmetric_keys WHERE algorithm_desc NOT IN ('AES_128','AES_192','AES_256') AND db_id() > 4; GO

o





Por cumplimiento, no se deben devolver filas.

Solución: o Referirse a Microsoft SQL Server Book online ALTER SYMMETRIC KEY entrada: ▪ https://docs.microsoft.com/en-us/sql/tsql/statements/alter-symmetric-key-transact-sql Impacto:

o

Elimina el uso de algoritmos débiles y obsoletos que pueden poner a un sistema en mayor riesgo de que un atacante rompa la llave. Los datos cifrados no se pueden comprimir, pero los datos comprimidos se pueden cifrar. Si usa compresión, debe comprimir los datos antes de cifrarlos.



Valor por defecto: o Ninguno.



Referencias: o https://docs.microsoft.com/en-us/sql/t-sql/statements/altersymmetric-keytransact-sql

7.2 Asegurese que la opción ‘Asymmetric Key Size’ este configurado igual o mayor a '2048' en bases de datos que no son del sistema •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o Microsoft Best Practices recomienda utilizar al menos un algoritmo de cifrado de 2048 bits para claves asimétricas.



Razón fundamental: El algoritmo de cifrado RSA_2048 para claves asimétricas en SQL Server es el nivel de bit más alto proporcionado y, por lo tanto, la opción más segura disponible (otras opciones son RSA_512 y RSA_1024).



Auditoría: o Ejecute el siguiente código para cada base de datos de usuario individual: USE ; GO SELECT db_name() AS Database_Name, name AS Key_Name FROM sys.asymmetric_keys WHERE key_length < 2048 AND db_id() > 4; GO

o

Por cumplimiento, no se deben devolver filas.



Solución: o Referirse a Microsoft SQL Server Book online ALTER SYMMETRIC KEY entrada: ▪ https://docs.microsoft.com/en-us/sql/tsql/statements/alter-symmetric-key-transact-sql



Impacto: o El nivel de bit más alto puede resultar en un rendimiento más lento, pero reduce la probabilidad de que un atacante rompa la clave. o Los datos cifrados no se pueden comprimir, pero los datos comprimidos se pueden cifrar. Si usa compresión, debe comprimir los datos antes de cifrarlos.



Valor por defecto: o Ninguno.



Referencias: o https://docs.microsoft.com/en-us/sql/t-sql/statements/alterasymmetric-keytransact-sql

8. Consideraciones Adicionales

Este apéndice analiza las posibles opciones de configuración para las cuales no se da ninguna recomendación.

8.1 Asegúrese de que la opción ‘SQL Server Browser Service’ está configurado correctamente •

Aplicabilidad de perfil o Nivel 1 – Motor Base de Datos



Descripción: o No se ofrece ninguna recomendación para deshabilitar el servicio del navegador SQL Server.



Razón fundamental: En el caso de una instalación de instancia predeterminada, el servicio del navegador SQL Server está deshabilitado de manera predeterminada. A menos que haya una instancia con nombre en el mismo servidor, generalmente no hay razón para que se ejecute el servicio del navegador SQL Server. En este caso, se recomienda encarecidamente que el servicio del navegador SQL Server permanezca deshabilitado. Cuando se trata de instancias con nombre, dado que un escaneo de seguridad puede tomar huellas digitales de un servidor SQL que escucha en cualquier puerto, por lo tanto, es de beneficio limitado deshabilitar el servicio del navegador SQL Server. Sin embargo, si todas las conexiones contra la instancia con nombre se realizan a través de aplicaciones y no son visibles para los usuarios finales, entonces la configuración de la instancia con nombre para escuchar en un puerto estático, deshabilitar el servicio del navegador SQL Server y configurar las aplicaciones para conectarse al puerto especificado debería Ser la dirección tomada. Esto sigue la práctica general de reducir el área de superficie, especialmente para una característica innecesaria. Por otro lado, si los usuarios finales se conectan directamente a las bases de datos de la instancia, lo mejor es hacer que usen ServerName \ InstanceName. Esto requiere el servidor SQL Servicio de navegador para ejecutar. Deshabilitar el servicio del navegador SQL Server significaría que los usuarios finales tendrían que recordar los números de puerto para las instancias. Cuando no lo hacen, eso generará llamadas de servicio al personal de TI. Dado el beneficio limitado de deshabilitar el servicio, la compensación probablemente no valga la pena, lo que significa que tiene más sentido comercial dejar el servicio del navegador SQL Server habilitado.



Auditoría: o Verifique el estado del servicio SQL Browser a través de services.msc o métodos similares.



Solución: o Active o desactive el servicio según sea necesario para su entorno.



Valor por defecto: o El servicio SQL Server Browser está deshabilitado si solo se instala una instancia predeterminada en el servidor. Si se instala una instancia con nombre, el valor predeterminado es que el servicio SQL Server Browser se configure como automático para el inicio.



Referencias: o https://docs.microsoft.com/en-us/sql/database-engine/configurewindows/sqlserver-browser-service-database-engine-and-ssas

9. Tabla Resumen CONFIGURADO SI NO

CONTROL 1

Instalacion, Actualizaciones y Parches 1.1 Asegúrese de que los últimos Service Pack y revisiones de SQL Server estén instalados 1.2 Garantizar que los servidores de bases de datos tienen solamente el rol de base de datos

2

Reducción de área de superficie

2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17

3

Asegúrese de que la opción de configuración del servidor “Ad Hoc Distributed Queries” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “CLR ENABLED” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “Cross DB Ownership Chaining” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “Database Mail XPs” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “Ole Automation Procedures” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “Remote Access” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “Remote Admin Connections” sea establecido en 0 Asegúrese de que la opción de configuración del servidor “Scan For Startup Procs” sea establecido en 0 Asegúrese que la opción de Bases de Datos “Trustworthy” sea establecido en “OFF” Asegúrese de que los protocolos innecesarios de SQL Server estén configurados en “Disabled” Asegúrese de que SQL Server esté configurado para usar puertos no estándar Asegúrese de que la opción “HIDE INSTANCE” esté establecida en 'YES' para las instancias de SQL Server de producción Asegúrese que la cuenta de Login SA está establecida en “DISABLED” Asegúrese que la cuenta Login SA ha sido renombrada Asegúrese de que la opción de configuración del servidor “xp_cmdshell” sea establecido en 0 Asegúrese de que 'AUTO_CLOSE' esté configurado en 'OFF' en las bases de datos contenidas Asegúrese que no exista una cuenta Login con el nombre SA

Autenticación y Autorización 3.1 Asegúrese de que la propiedad del servidor “Server Authentication” sea establecido en “Windows Autentication Mode” 3.2 3.3 3.4 3.5 3.6 3.7 3.8

3.9 3.10 3.11

4

Asegúrese de que se revoquen los permisos CONNECT en el usuario 'invitado' dentro de todas las bases de datos de SQL Server, excepto el maestro, msdb y tempdb Asegúrese de que los 'usuarios huérfanos' se eliminen de las bases de datos de SQL Server Asegúrese de que la autenticación de SQL no se use en bases de datos contenidas Asegúrese de que la cuenta de servicio MSSQL de SQL Server no sea un Administrador Asegúrese de que la cuenta de servicio SQLAgent de SQL Server no sea un Administrador Asegúrese de que la cuenta de servicio Full-Tex Service Account de SQL Server no sea un Administrador Asegúrese de que solo los permisos predeterminados especificados por Microsoft sean otorgado al rol de base de datos “public” Asegúrese de que los grupos BUILTIN de Windows no sean inicios de sesión de SQL Asegúrese de que los grupos locales de Windows no sean inicios de sesión de SQL Asegúrese de que el rol público en la base de datos msdb no tenga acceso a los proxies del Agente SQL

Políticas de Contraseña 4.1 Asegurar que la opción 'MUST_CHANGE' este seteada en 'ON' para todos los SQL Authenticated Logins Asegurar que la opción 'CHECK_EXPIRATION' este seteada en 'ON' para todos los SQL Authenticated Logins dentro del Sysadmin Role 4.3 Asegurar que la opción 'CHECK_POLICY' este seteada en 'ON' para todos los SQL Authenticated Logins

4.2

5

Auditoria y Registro 5.1 5.2 5.3 5.4

6

Asegúrese de que ‘Maximum number of error log files’ esté establecido en mayor o igual que '12' Asegúrese de que la opción de configuración ‘Default Trace Enabled’ este establecido en 1 Asegúrese de que la opción ‘Login Auditing’ este configurado en ‘failed logins’ Asegúrese de que la opción ‘SQL Server Audit’ este configurado en capture both ‘failed’ y ‘successful logins’

Desarrollo de Aplicaciones 6.1 Asegúrese de proteger la base de datos y que la entrada del usuario de la aplicación sea protegida 6.2 Asegúrese que la opción ‘CLR Assembly Permission Set’ está configurada en ‘SAFE_ACCESS’ en todos los CLR Assemblies

7

Encriptación Asegurese que la opción ‘Symmetric Key encryption algorithm’ este configurado en 'AES_128' o mayor en bases de datos que no son del sistema Asegurese que la opción ‘Asymmetric Key Size’ este configurado igual o mayor a '2048' en bases de datos que no son del 7.2 sistema

7.1

8

Consideraciones Adicionales 8.1 Asegúrese de que la opción ‘SQL Server Browser Service’ está configurado correctamente