DataSunrise está patrocinando AWS re:Invent 2024 en Las Vegas, por favor visítenos en el stand #2158 de DataSunrise

Cómo Proteger Tu Base de Datos SQL Server Contra Ataques MITM con DataSunrise

Cómo Proteger Tu Base de Datos SQL Server Contra Ataques MITM con DataSunrise

1 ¿Qué es MITM?

Cuando un cliente se conecta a un servidor a través de un canal protegido, existe el riesgo de que una tercera parte se conecte entre ellos y tenga la capacidad de escuchar e interferir con las comunicaciones. Los ataques de red lanzados mediante dicha tercera parte se llaman ataques de Hombre en el medio (MITM). Hay muchas maneras de realizar tal ataque, pero el principio básico es hacer secretamente que el cliente se conecte al servidor del atacante.

2 ¿Cómo protegerse contra MITM?

El método principal de protección contra los ataques MITM es analizar la infraestructura de red en el momento de conectarse al servidor y detectar parámetros sospechosos que no son típicos para la conexión a un cierto servidor. Si se utiliza el protocolo SSL para protección, un cliente puede verificar el certificado del servidor durante el apretón de manos. Un certificado puede tener muchos parámetros, intercambiados entre el cliente y el servidor durante la autenticación. La práctica estándar para SSL es terminar una conexión inmediatamente si una parte acepta un parámetro (Nombre del directorio, DNS, Email, GUID, IP, UPN, URL y cualquier otro) que no es relevante para los parámetros de su entorno. Pero incluso tal verificación de certificado no puede garantizar seguridad total, porque la infraestructura del cliente en el momento del ataque puede cambiar significativamente para pasar la verificación. Es por eso que a menudo se utilizan métodos adicionales de validación de certificados. Uno de esos métodos es la firma de un certificado por una autoridad confiable. Se considera que es imposible forjar tal firma, y ​​cada cliente puede verificar su autenticidad. Es por eso que cualquier certificado firmado por una autoridad especial podría ser aceptado como más o menos seguro, dependiendo de la autoridad del emisor.

3 Protección contra MITM en MS SQL Server

La verificación de certificados es opcional en MS SQL, pero está habilitada por defecto. Dos parámetros principales que participan en una verificación de certificados son la fecha de expiración del certificado y el nombre del host para el cual se emitió el certificado (Nombre Común). Si un certificado está vencido, o no está emitido para el host de un servidor con el cual se establece una conexión, la conexión se terminaría inmediatamente con notificación al usuario. En caso de que una autoridad certificadora esté involucrada en una verificación adicional de certificados, el cliente verificará su firma. En tales casos, debería haber un certificado raíz de esta autoridad en el almacenamiento de certificados. Muchos sistemas operativos modernos incluyen conjuntos preconstruidos de certificados raíz de las autoridades más confiables, por lo que al seleccionar una autoridad certificadora para firmar un certificado corporativo, sería prudente seleccionar una de la lista.

En SSMS moderno, hay una casilla adicional «Confiar en el certificado del servidor» en la página de conexión del servidor. Se utiliza para verificar el certificado del servidor.

Al conectarse a un servidor a través de ODBC, hay un parámetro adicional, “TrustServerCertificate”, en la cadena de conexión. El valor “Yes” desactiva la verificación y “No“ – la habilita.

4 Certificados en DataSunrise

El proxy de DataSunrise es confiable, pero, sin embargo, es una tercera parte de la conexión, por lo que todos los medios de protección del cliente contra MITM se activarían en el momento de la conexión con dicho proxy.

En DataSunrise, cada instancia de base de datos opera con un conjunto de claves privadas y un certificado. Desde el punto de vista del cliente, este conjunto pertenece al servidor, pero en general, estas claves no están asociadas de ninguna manera con el servidor final que sirve al proxy de DataSunrise. Es este certificado el que un cliente verificará si se activa la protección contra MITM.

5 Posibles configuraciones de DataSunrise incluyendo protección contra MITM

Para proporcionar un nivel similar de protección de conexión directa y conexión de proxy, es necesario configurar correctamente los hosts de DataSunrise y del cliente. Podrían haber varias opciones de configuración.

Un conjunto predeterminado de claves y un certificado proporcionan una protección mínima. No se garantiza que el certificado predeterminado corresponda al nombre de host CN=DataSunrise Database Security Suite. Es por eso que lo primero que debes hacer para asegurar una conexión es generar un nuevo conjunto de claves y un certificado.

Un conjunto básico de claves y un certificado están incluidos en el archivo proxy.pem. Es este archivo el que debe ser reemplazado.

5.1 Caso general

Este es el caso más sencillo, cuando un administrador solo tiene una instancia de DataSunrise a su disposición, y un servidor MS SQL. Y hay un conjunto limitado y establecido de clientes que pueden acceder a los servidores dados a través de DataSunrise. Este caso involucra dos opciones:

5.1.1 Generación de proxy.pem (certificado autofirmado)

Es el método más simple de generar nuevas claves. Crea un archivo proxy.cfg (“commonName” debe incluir un nombre real del host de DataSunrise):

[req] distinguished_name = req_distinguished_name prompt = no [req_distinguished_name] countryName = US stateOrProvinceName = Washington localityName = Seattle organizationName = Sunrise organizationalUnitName = IT commonName = wmserver.db.local emailAddress = [email protected]

Ejecuta el siguiente archivo .bat en la carpeta donde se encuentra el archivo proxy.config:

SET RANDFILE=random SET PASS=R0T3qSW2s0459koH54 openssl genrsa -des3 -passout pass:%PASS% -out key.pem 2048 openssl rsa -passin pass:%PASS% -in key.pem -out key.pem openssl req -config proxy.cfg -new -key key.pem -out certificate.req openssl req -sha384 -x509 -config proxy.cfg -days 365 -key key.pem -in certificate.req -out certificate.cer openssl ecparam -genkey -name secp256r1 -out ec.pem openssl dhparam -out dh.pem 1024 COPY certificate.cer+key.pem+dh.pem+ec.pem proxy.pem /b DEL random certificate.req key.pem dh.pem ec.pem

Después de ejecutar el script, deberíamos obtener un archivo proxy.pem con una clave RSA de 2048 bits, una clave DH de 1024 bits, parámetros EC con la curva “secp256r1” y un certificado emitido por 365 días con algoritmo de firma “sha384”.

Adicionalmente, debería haberse generado un archivo certificate. cer que debe instalarse en el almacenamiento de certificados de confianza del cliente.

5.1.2 Instalación de un certificado y claves de proxy a través de la IU

Si un usuario ya tiene un conjunto de claves y un certificado, pueden instalarse a través de la IU web de DataSunrise.

Para configurar claves y un certificado para un proxy, realiza lo siguiente:

  1. Crea un Grupo de Claves SSL con el tipo Lado del Cliente.
  2. Rellena este grupo con todos los parámetros necesarios en codificación Base64: un certificado, una clave privada, parámetros DH, parámetros EC.
  3. Conecta este grupo a una instancia seleccionándolo de la lista de Grupos de Claves.

Ambas opciones (5.1.1 y 5.1.2) requieren que reinicies el Núcleo de DataSunrise después de haber reemplazado las claves, e instales un certificado creado para DataSunrise en un almacenamiento de certificados de confianza en el lado del cliente.

5.2 Varias instancias de DataSunrise

La siguiente configuración es para múltiples instancias de DataSunrise. Si usas los consejos del caso general descrito anteriormente, sería necesario instalar todo un conjunto de certificados en el lado del cliente y mantener un ojo en su aplicabilidad. Para evitar posibles errores, puedes firmar todos los certificados con una sola autoridad certificadora. Hay dos opciones también.

5.2.1 Tu propia Autoridad Certificadora

Esta opción es para crear tu propia autoridad certificadora sin dependencias adicionales del sistema operativo. La autoridad de tal emisor de certificados sería mínima.

Prepara la infraestructura:

mkdir db mkdir db\new mkdir db\private echo. 2>db\index echo 01> ./db/serial echo unique_subject = no> ./db/index.attr

Rellena el archivo ca.cfg:

[req] distinguished_name = req_distinguished_name prompt = no RANDFILE = ./db/private/.rand [req_distinguished_name] countryName = US stateOrProvinceName = Washington localityName = Seattle organizationName = DataSunrise organizationalUnitName = IT commonName = DataSunrise emailAddress = [email protected]

Rellena el archivo proxy.cfg:

[req] distinguished_name = req_distinguished_name prompt = no RANDFILE = ./db/private/.rand [req_distinguished_name] countryName = US stateOrProvinceName = Washington localityName = Seattle organizationName = Sunrise organizationalUnitName = IT commonName = wmserver.db.local emailAddress = [email protected] [ca] default_ca = CA_default [CA_default] dir = ./db # top dir database = $dir/index # index file. new_certs_dir = $dir/new # new certs dir certificate = $dir/ca.cer # The CA cert serial = $dir/serial # serial no file private_key = $dir/private/ca.pem # CA private key RANDFILE = $dir/private/.rand # random number file default_days = 365 # how long to certify for default_crl_days = 30 # how long before next CRL default_md = sha384 policy = policy_any # default policy email_in_dn = no # Don't add the email into cert DN name_opt = ca_default # Subject name display option cert_opt = ca_default # Certificate display option #copy_extensions = none # Don't copy extensions from request [policy_any] countryName = supplied stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional

Genera un certificado raíz ./db/ca.cer y una clave ./db/private/ca.pem. Este certificado (su clave) se usará para firmar todos los certificados futuros. Así, ./db/ca.cer debe instalarse en un almacenamiento de certificados de confianza de todos los clientes que verificarán los certificados DataSunrise:

./db/private/ca.pem: SET RANDFILE=.\db\private\.rand SET PASS=TxK7T88C27 openssl genrsa -des3 -passout pass:%PASS% -out .\db\private\ca.pem 2048 openssl rsa -passin pass:%PASS% -in .\db\private\ca.pem -out .\db\private\ca.pem openssl req -new -x509 -days 3650 -key .\db\private\ca.pem -out .\db\ca.cer -config ca.cfg openssl x509 -noout -text -in .\db\ca.cer

Genera y firma proxy.pem:

SET RANDFILE=.\db\private\.rand SET /P serial=<.\db\serial SET PASS=RTqSWs0koH openssl genrsa -des3 -passout pass:%PASS% -out .\db\private\%serial%.pem 2048 openssl rsa -passin pass:%PASS% -in .\db\private\%serial%.pem -out .\db\private\%serial%.pem openssl req -new -key .\db\private\%serial%.pem -nodes -config proxy.cfg -out .\db\private\%serial%.req openssl ca -batch -config proxy.cfg -infiles .\db\private\%serial%.req openssl ecparam -genkey -name secp256r1 -out .\db\private\%serial%.ec.pem openssl dhparam -out .\db\private\%serial%.dh.pem 1024 COPY .\db\new\%serial%.pem+key.pem+.\db\new\%serial%.dh.pem+.\db\new\%serial%.ec.pem proxy.pem /b MOVE .\db\new\%serial%.pem .\db\new\%serial%.cer

Los certificados creados se guardarán en la carpeta db\new\

Las claves generadas y los pfxs empaquetados (clave y certificado) se guardarán en la carpeta db\private\

Ejemplo. Un conjunto de claves número “01”:

db\new\01.cer — Nuevo certificado db\private\01.pem — Nueva clave privada RSA db\private\01.dh.pem — Nuevos parámetros DH db\private\01.ec.pem — Nuevos parámetros y clave EC

Durante cada generación de proxy.pem se creará un nuevo conjunto de claves. Corresponderá a un nuevo proxy.pem generado. Después de reemplazar el proxy.pem en DataSunrise, es necesario reiniciar el Núcleo para que los cambios surtan efecto. Teniendo un nuevo conjunto de claves, también puedes usar el método 5.1.2 para agregar las claves a la IU sin cambiar el proxy.pem.

5.2.2 Utilizando una Autoridad Certificadora Corporativa

Si es necesario proteger varios hosts de clientes, o hay varios hosts de DataSunrise incluidos en una red corporativa (dominio) o varias redes confiables (bosque), sería útil utilizar Servicios de Certificado de Active Directory. En este caso, puedes usar certreq para generar un proxy.pem. Tomemos un proxy.cfg descrito en la subs. 5.1.1 y generemos un proxy.pem (los comandos deben ser ejecutados como un usuario con privilegios suficientes para emitir nuevos certificados o como un administrador de dominio):

SET RANDFILE=random SET PASS=89RT90qSWs020koH12 openssl genrsa -des3 -passout pass:%PASS% -out key.pem 2048 openssl rsa -passin pass:%PASS% -in key.pem -out key.pem openssl req -config proxy.cfg -new -key key.pem -out certificate.req certreq -submit -attrib "CertificateTemplate:WebServer" certificate.req certificate.cer openssl ecparam -genkey -name secp256r1 -out ec.pem openssl dhparam -out dh.pem 1024 COPY certificate.cer+key.pem+dh.pem+ec.pem proxy.pem /b DEL random certificate.req

certreq mostrará un diálogo para seleccionar un centro de certificación corporativo que debería usarse para emitir un nuevo certificado. Usualmente, solo hay un centro en tal lista:

52C1

Pero esto depende de la infraestructura del dominio corporativo. Consulta a tu administrador si es necesario.

Habiendo instalado el proxy.pem, no se necesita configuración adicional del cliente de red, porque después de la instalación de AD CS, el certificado raíz cubre automáticamente todos los hosts del dominio/bosque.

Utilizando un conjunto de claves y un certificado (certificate.cer, key.pem, dh.pem, ec.pem), también puedes usar el método descrito en la subs. 5.1.2 para agregar claves a través de la IU web sin cambiar el proxy.pem.

5.3 Muchos clientes

Cuando necesites aplicar un certificado a un gran número de clientes, puedes usar políticas de grupo. Consulta la siguiente guía de Microsoft: https://technet.microsoft.com/en-us/library/cc770315%28v=ws.10%29.aspx?f=255&MSPPError=-2147217396 (Desplegar Certificados mediante el uso de Políticas de Grupo)

6 Conclusión

Utilizando cualquiera de los métodos descritos anteriormente, puedes lograr un alto nivel de seguridad de la conexión de proxy, pero depende de ti elegir el método que mejor se adapte a tu infraestructura. Para asegurar la seguridad total de tu base de datos SQL Server, puedes usar las siguientes herramientas de DataSunrise: