miércoles, 19 de diciembre de 2012

Seguridad en Servidores de Bases de Datos SQL Server (Checklist)

Problema:

Este pequeño artículo no vas más allá de ser una reseña del capítulo 18 de Improving WebApplication Security: Threats and Countermeasures de J.D. Meier, Alex Mackman, Srinath Vasireddy, Michael Dunner y Ray Escamilla de Microsoft Patterns and Practices y Anandha Murukan de Satyam Computer Services. El cual puede ser descargado de forma gratuita desde el vínculo anterior. En este capítulo ellos nos muestran una metodología probada la cual garantiza reforzar la seguridad de nuestros servidores de bases de datos, ellos explican cuáles son las amenazas más comunes que asechan cualquier implementación de servidores de este tipo, así como los pasos para asegurar que nuestro servidor no sea presa fácil para estos atacantes. 

Debido a la diversidad de formas y tipos de ataques posibles a los servidores de bases de datos, un paso obligatorio posterior a la instalación de nuestros servidores de bases de producción es indudablemente el de reforzar la seguridad de estos para así poder asegurar la integridad, confiabilidad y confidencialidad de los datos que como administradores de bases de datos e infraestructura tenemos la responsabilidad de resguardar.

Así como es vulnerable el servidor de bases datos en sí, también este hereda muchas de las vulnerabilidades inherentes a plataforma sobre la cual se apoya, dígase el sistema operativo o de alguna aplicación web desarrollada o diseñada sin tomar en cuenta los lineamientos y mejores prácticas de seguridad lo cual también es utilizado para explotar las vulnerabilidades existentes en nuestra implementación.

Tampoco podemos pasar por alto los riesgos internos dentro de nuestra organización, como son: administradores de bases de datos o administradores de redes irresponsables, usuarios maliciosos o incluso desarrolladores que por alguna razón intenten ejecutar algún código malicioso que pueda comprometer nuestro servidor de base de datos.
Como dijimos un atacante puede intentar comprometer un servidor de base de datos de varias formas y aprovechando una gran variedad de vulnerabilidades a nivel tanto de configuración, aplicación y plataforma. De modo general las amenazas que encontramos más frecuentemente hoy día para un servidor de base de datos son las siguientes:
  • Inyección de SQL (SQL Injection)
  • Escucha ilegal a nivel de red (Network eavesdropping) 
  • Acceso no-autorizado al servidor 
  • Craqueo de contraseña
Para cada uno de los tipos de amenaza anteriores existen varios cursos de acción y precauciones que hay que tener en cuenta para poder tomar contra-medidas para estos ataques, explicar cada uno de estos ataques sale del alcance de este artículo. Para asegurarnos de reducir nuestra superficie de ataque les recomiendo utilizar el conjunto de buenas prácticas que hemos organizado como tareas contenidas en la siguiente lista de comprobación.

Solución:

Lista de comprobación de tareas
Seguridad para Servidores de Producción de Bases de Datos SQL Server

Datos Servidor / Instancia
Nombre Servidor:

Dirección IP:

Puerto TCP:

Nombre Instancia:

Versión SQL Server:

Es un cluster:

Fecha de Elaboración:


Consideraciones al Instalar Servidores de Producción
Verificado
Descripción
Herramientas de actualización, símbolos de debug, soporte para publicación, libros en línea y las herramientas de desarrollo no están instalados en el servidor de producción.
Microsoft SQL Server no está instalado en un controlador de dominio.
SQL Server Agent no está instalado y si lo está no está siendo usado por ninguna otra aplicación.
SQL Server está instalado en un servidor dedicado.
SQL Server está instalado en una partición NTFS.
El modo de Autenticación de Windows  esta seleccionado a menos que la Autenticación de SQL Server sea requerida específicamente, por lo que en dicho caso se activara la Autenticación en Modo Mixto.
Una contraseña fuerte ha sido aplicada a la cuenta sa y todos los miembros del rol sysadmin. (Lo recomendado es utilizar una contraseña fuerte para todas las cuentas)
El servidor de base de datos se encuentra físicamente seguro.

Parches y Actualizaciones
Verificado
Descripción
Los últimos parches y actualizaciones han sido aplicados a SQL Server.
Parchos post service-pack han sido aplicados a SQL Server.
Servicios
Verificado
Descripción
Los servicios del sistema operativo Microsoft Windows que no son necesarios han sido deshabilitados en el servidor de base de datos.
Parchos post service-pack han sido aplicados a SQL Server.
Todos los servicios opciones, incluyendo Microsoft Search Service, MSSQLServerADHelper y SQLServerAgent, han sido deshabilitados si no están siendo utilizados por alguna otra aplicación.
El Microsoft Distributed Transaction Coordinator (MSDTC) está deshabilitado si no está siendo utilizado por alguna otra aplicación.
Una cuenta de dominio con privilegios reducidos está siendo utilizada para ejecutar los diferentes servicios de SQL Server, por ejemplo, replicación y copias de respaldo.

Protocolos
Verificado
Descripción
Todos los protocolos excepto TCP/IP están deshabilitados dentro del SQL Server. Verifique esto utilizando la herramienta Server Network Utility o SQL Server Configuration Manager, respectivamente según la versión de SQL Server que esté utilizando.
La pila TCP/IP (TCP/IP Stack) está endurecida en el servidor de base de datos. How To: Harden the TCP/IP Stack

Cuentas
Verificado
Descripción
SQL Server se está ejecutando utilizando una cuenta local con privilegios reducidos (u opcionalmente, una cuenta de dominio con privilegios reducidos si se requiere algún servicio o recurso de la red).
Las cuentas que no se están utilizando tanto de SQL Server como de Windows han sido removidas.
La cuenta Invitado (Guest) de Windows ha sido deshabilitada.
La cuenta Administrador (Administrator) de Windows ha sido renombrada y tiene una contraseña fuerte.
La política de Contraseñas Fuertes ha sido aplicada.
El Inicio de Sesión Remota ha sido restringido.
Las sesiones nulas (inicios de sesión anónimos) han sido restringidas.
Se requiere aprobación para la delegación de cuentas. Security Account Delegation
No se están utilizando cuentas compartidas.
La membresía al grupo de administradores locales está restringido (sí es posible no más de dos cuentas administrativas).

Archivos y Directorios
Verificado
Descripción
Permisos restrictivos han sido configurados en los directorios de la instalación de SQL Server.
El grupo Todos (Everyone) no tiene permisos de acceso a los directorios de la instalación de SQL Server.
Los archivos de registro de instalación (Setup log files) están asegurados.
Los archivos de datos sensitivos están cifrados usando EFS (Este es un paso opcional. Si lo implementa solo cifre los archivos MDF, pero no los archivos LDF).
Recursos Compartidos de Archivos
Verificado
Descripción
Todos los recursos de archivos compartidos innecesarios han sido removidos del servidor.
El acceso a los recursos de archivos compartidos requeridos están restringidos (el grupo Todos (Everyone) no tiene acceso).
Los recursos administrativos de archivos compartidos (Administrative Shares C$ y Admin$) han sido removidos si no son requeridos (algunas aplicaciones como el Microsoft Management Server (SMS) y el Microsoft Operation Manager (MOM) requieren estos recursos).

Puertos
Verificado
Descripción
Restringir el acceso a todos los puertos en el servidor excepto aquellos puertos configurados para SQL Server (TCP 1433 y 1434 UDP por defecto).
Las instancias nombradas han sido configuradas para escuchar en el mismo puerto.
El 3389 ha sido asegurado usando IPSec si ha sido dejado abierto para la administración remota a través de Terminal Services.
El cortafuego (firewall) ha sido configurado para soportar el tráfico del DTC (si es requerido por la aplicación).
La opción Ocultar Servidor (Hide Server) ha sido seleccionada en la herramienta Server Network Utility o SQL Server Configuration Manager, respectivamente según la versión de SQL Server que esté utilizando (Este paso es opcional).

 Registro
Verificado
Descripción
Las claves de registro de SQL Server han sido aseguradas con restricción de permisos.
La SAM ha sido asegurada. Solo para servidores independientes (Standalone servers).

Auditoria y Registro
Verificado
Descripción
Todos los intentos fallidos de inicio de sesión en Windows están siendo registrados.
Todas las acciones fallidas sobre el sistema de archivos están siendo registradas.
La auditoría de inicio de sesión de SQL Server está habilitada.
Los archivos de registro (Log) han sido reubicados de la ruta por defecto y asegurados a través listas de control de acceso (ACL).
Los archivos de registro (Log) han sido configurados con un tamaño apropiado dependiendo de los requerimientos de seguridad de la aplicación.

SQL Server Security
Verificado
Descripción
La autenticación de SQL Server esta configura en modo de autenticación de Windows (si este modo es soportado por la aplicación).
El nivel de auditoria de SQL Server está configurado a Fallo (Failure) o Todos (All).
SQL Server está siendo ejecutado utilizando una cuenta con permisos reducidos.

Inicios de sesión (logins), usuarios y roles de SQL
Verificado
Descripción
La cuenta sa utiliza una contraseña fuerte (esto aplica a todas las cuentas).
Las cuentas Invitado (guest) de SQL han sido removidas.
El inicio de sesión para BUILTIN\Administrators ha sido removido.
El rol público (public role) no tiene ningún permiso otorgado.
Los miembros del rol de servidor sysadmin están limitados (idealmente, no más de dos usuarios en este rol).
Se han otorgados permisos restringidos a las bases de datos. (Evite el uso de roles incorporados como db_datareader y db_datawriter, ya que estos proveen una granularidad de autorización limitada).
Los permisos que se aplican por defecto a los objetos de SQL Server no han sido alterados.

Objetos de Base de Datos de SQL Server
Verificado
Descripción
Las bases de datos de ejemplo (Northwind, Pubs, AdventureWorks, etc.) han sido removidas.
Los procedimientos almacenados y los procedimientos almacenados extendidos han sido asegurados.
Acceso a cmdExec está restringido a los miembros del rol sysadmin.

Consideraciones Adicionales
Verificado
Descripción
Un certificado ha sido instalado en el servidor de bases de datos para soportar comunicación SSL y el cifrado automático de las credenciales de las cuentas de SQL Server (Opcional)
NTLM versión 2 o superior está habilitada a través de la configuración del parámetro LMCompatibilityLevel a 5.

Manteniéndonos Seguros
Verificado
Descripción
Se realizan copias de respaldo regularmente.
La membresía a los grupos es auditada.
Los registros de auditoria son monitoreados regularmente.
Se realizan evaluaciones de seguridad regularmente.
Suscribirse a los boletines de seguridad de SQL en http://www.microsoft.com/technet/security/current.aspx.
Suscribirse al Servicio de Notificación de Seguridad de Windows en http://technet.microsoft.com/en-us/security/dd252948.aspx.


Espero que este artículo y la lista de verificación adjunta les sean de utilidad en sus organizaciones como una guía para ayudar a mantener la seguridad en sus servidores de bases de datos.

Referencias