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
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.
|
□
|
|
□
|
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
- Microsoft :: SQL Server
- MSDN Library :: Microsoft Patterns and Practices
- Paper :: Improving Web Application Security: Threats and Countermeasures,
- How To :: Harden TCP/IP Stack
- Artículo :: Security Account Delegation
- Artículo :: LmCompatibilityLevel
No hay comentarios:
Publicar un comentario