sql >> Base de Datos >  >> RDS >> Mysql

Seguridad de bases de datos 101:Seguridad en bases de datos de código abierto

La seguridad de los datos es uno de los aspectos más importantes de la administración de una base de datos. Según la estructura organizativa, si administra la base de datos de producción, debe supervisar el acceso y el uso no autorizados. Esto también se aplica al host subyacente. En este blog vamos a explicar la seguridad en las bases de datos de código abierto.

Seguridad general

Después de instalar el software de la base de datos, debemos realizar algunas comprobaciones previas para evitar los errores de seguridad más comunes.

Las pautas generales son las siguientes:

  • ¡Nunca le dé a nadie acceso de root/administrador a otros! Esto es crítico.

  • Aprenda cómo funciona el sistema de privilegios de acceso a la base de datos. No conceda más privilegios de los necesarios. Nunca conceda privilegios a todos los hosts.

  • No almacene contraseñas en texto claro en su base de datos. En lugar de usar SHA2() o alguna otra función hash unidireccional y almacenar el valor hash.

  • No utilice puertos predeterminados y asegúrese de que el puerto elegido no sea accesible desde un host que no sea de confianza.

  • Coloque la base de datos de código abierto detrás de un firewall. Esto lo protege de al menos el 50 % de todos los tipos de vulnerabilidades en cualquier software.

Control de acceso y gestión de cuentas

Una de las funciones principales de la base de datos es autenticar a un usuario que se conecta desde un host determinado y asociar ese usuario con privilegios en una base de datos. Para controlar qué usuarios pueden conectarse, a cada cuenta se le pueden asignar credenciales de autenticación, como una contraseña.
 

Funciones de usuario 

Un rol de base de datos es una colección de cualquier cantidad de privilegios que se pueden asignar a uno o más usuarios. En las bases de datos de código abierto modernas, la mayoría de los usuarios vienen con roles predefinidos.

Gestión de contraseñas 

El acceso a la base de datos requiere que sus usuarios se autentiquen con un nombre de usuario y una contraseña. La base de datos aplica la misma función hash en la contraseña que ingresó el usuario y la compara con el hash almacenado en la base de datos. Si ambos coinciden, se concede el permiso. La caducidad de la contraseña es necesaria para que todos los usuarios de la base de datos cambien las contraseñas periódicamente. Y se requiere la generación aleatoria de contraseñas para contraseñas literales explícitas especificadas por el administrador. Una cosa importante a monitorear es el seguimiento de fallas de autenticación/contraseña incorrecta, se recomienda habilitar el bloqueo temporal de la cuenta después de demasiadas fallas consecutivas de inicio de sesión con contraseña incorrecta.

Manejo de Contraseñas Caducadas

Una vez que la contraseña caduca, el servidor de la base de datos desconecta una conexión de cliente con contraseña caducada.

Ejemplo 
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.
 

Limitación de los recursos 

Restringe el uso de los recursos del servidor de la base de datos por parte de un cliente, limitando la cantidad de conexiones simultáneas que puede realizar cualquier cuenta de usuario. Por ejemplo, podemos restringir la cantidad de consultas que un usuario puede ejecutar por hora o la cantidad de veces que un usuario puede conectarse al servidor por hora.

Conexiones cifradas 

Las bases de datos suelen admitir conexiones cifradas entre los clientes y el servidor utilizando algunos protocolos de seguridad. Usando SSL, encriptará las conexiones entre los clientes y el servidor. Esto convierte los datos en un formato ilegible a través de la capa de red y evita el espionaje de la red. Una vez que habilitamos SSL en la base de datos, comienza a admitir conexiones cifradas y no permitirá conexiones no cifradas.

Componentes de seguridad y complementos

Los componentes de seguridad se integran fácilmente con la base de datos. Por ejemplo, mysql incluye varios componentes y complementos que implementan funciones de seguridad.

Complementos de autenticación:estos complementos autentican los intentos de los clientes de conectarse al servidor MySQL. Podemos integrarnos fácilmente con nuestro servidor de base de datos.

Complemento de contraseña:este complemento verifica si la contraseña actual es segura y rechaza cualquier contraseña que se considere débil.

Complemento de llavero:este complemento cifra los espacios de tablas. Esta técnica de cifrado funciona sobre la base de la rotación de archivos de claves. Aquí hay un ejemplo de cómo cifrar MySQL 8.0.

Registro de auditoría:la auditoría es el proceso de monitorear y registrar la actividad que ocurre en el servidor de la base de datos. Se utiliza para registrar quién está haciendo qué, p. operaciones de base de datos por parte de usuarios, conexiones o intentos fallidos de inicio de sesión. Si está utilizando un equilibrador de carga para acceder a la base de datos, también deberá supervisarlo. De forma predeterminada, los archivos de registro de auditoría se almacenan en el directorio de datos mysql.

Registros de muestra 
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

Si desea almacenar los archivos de registro de auditoría en diferentes ubicaciones, puede agregar este parámetro en su archivo de configuración "server_audit_file_path".

Supervisión de registros:la supervisión de registros brinda al equipo de operaciones un mayor nivel de visibilidad en el entorno de la base de datos, que se compone de las instancias de la base de datos pero también de los balanceadores de carga. Ayuda a identificar anomalías, cuándo ocurren estas anomalías y la frecuencia con la que ocurren.

Complemento de validación de contraseña

La contraseña es como palabras, números y una cadena de caracteres. En el lado de la base de datos y del servidor, el nombre de usuario y la contraseña eran necesarios para ciertos accesos. Por ejemplo, si la contraseña se proporcionó como un valor de texto sin cifrar, el complemento validate_password compara la contraseña con la política de contraseñas actual y la rechaza si es débil.

La política de contraseña_validación tiene tres valores BAJO, MEDIO o FUERTE. El valor de BAJO comprueba solo la longitud de la contraseña, la política MEDIA agrega algunas condiciones y la política FUERTE agrega la condición de que las subcadenas de contraseña que constan de 4 o más caracteres no deben coincidir con palabras en un archivo de diccionario que se puede especificar modificando la variable validate_password_dictionary_file.

Complemento LDAP

El complemento LDAP permite que el servidor de la base de datos acepte conexiones de usuarios definidos en directorios LDAP. En la autenticación LDAP, los complementos del lado del cliente y del lado del servidor comunican la contraseña como texto no cifrado. Se recomienda una conexión segura entre el cliente y el servidor para evitar la exposición de la contraseña. Si el nombre de usuario del cliente y el nombre de host no coinciden, la base de datos rechazará la conexión.

 La configuración de LDAP es muy sencilla en ClusterControl. En esta publicación explicamos los pasos de configuración usando ClusterControl.

Seguridad de las copias de seguridad de la base de datos 

Las copias de seguridad de datos son importantes cuando se trata de proteger sus datos. Es aún más importante asegurarse de que sus copias de seguridad se mantengan seguras y disponibles para una recuperación más rápida. ClusterControl brinda soporte completo para el proceso de administración de copias de seguridad, incluido el cifrado de los archivos de copia de seguridad mediante el algoritmo de cifrado AES-256 antes de enviarlos fuera del sitio.

Acceso VPN a la red host de salto 

Para acceder a la base de datos de fuente abierta de la red privada desde un lugar local, el mejor método es usar VPN. VPN brinda privacidad y seguridad a los usuarios para construir una conexión de red privada a través de una red pública. Un host de salto es un host intermediario o una puerta de enlace SSH para acceder a servidores de red remotos. El servidor de salto actúa como intermediario para conectar ambos extremos, lo que lo convierte en un host de "salto" para acceder al otro lado. Esta es una de las formas populares de proteger el servidor del mundo exterior. Podemos usar túneles SSH para acceder a una red remota de forma segura, poniendo menos esfuerzo que configurar un servidor VPN.

Gestión de acceso a la base de datos a través de Jump host

Para acceder a los servidores de bases de datos de producción de manera más segura, se requiere un servidor de salto dedicado. Este servidor de salto dedicado brinda acceso a una red privada desde una red externa o pública, como Internet. Proporciona un enfoque escalonado para que cualquier usuario acceda a su red privada y minimiza las posibilidades de un posible ataque al servidor.

¿Cómo podemos lograr esto?

La mejor práctica es configurar un servidor de salto para conectarse a sus bases de datos desde una máquina Linux, aunque la instancia de base de datos esté en una red privada. Después de crear el host de Jump, siga las siguientes pautas,

  • Restringe el acceso público en tus bases de datos con subredes privadas.

  • Restringe la puerta de enlace de Internet en las tablas de rutas.

  • Cree una nueva VPC o agregue su host de salto a la misma VPC que su instancia de base de datos. Luego agregue una puerta de enlace de Internet a su servidor de salto con subredes públicas.

  • Permitir solo puertos de base de datos específicos a las IP requeridas.

Entonces podemos crear túneles SSH para acceder a un servidor de base de datos de forma segura.

SELinux

SELinux es un conjunto de modificaciones del kernel y herramientas de espacio de usuario y tiene algunos módulos de políticas. Los módulos de políticas son contextos de SELinux para definir reglas sobre cómo los procesos, archivos, puertos y otros objetos del sistema interactúan entre sí. La interacción entre los objetos del sistema solo se permite si una regla de política lo permite.

Los usuarios del sistema desconocerán en gran medida SELinux. Solo los administradores del sistema deben considerar qué tan estricta es la política que deben implementar para su entorno de servidor. Este detalle le da al kernel de SELinux un control granular completo sobre todo el sistema.