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

Cómo asegurarse de que su base de datos MySQL esté protegida

Alguna información básica antes de comenzar:

Fuente:Centro para la Seguridad en Internet (CIS) Oracle MySQL Community Server 5.7

Sistema operativo: Windows 10

Dónde ejecutar: línea de comando

mysql -u USERNAME -p

Aplicación de destino: Servidor comunitario Oracle MySQL 5.7

Auditoría y registro para sistemas de información

Los registros juegan un papel crucial para la seguridad cuando se sospecha de un ciberataque. Una revisión manual de los registros es laboriosa para el personal de seguridad, y deben usar herramientas de revisión de registros para extraer información y analizarla. Los registros deben usar una tecnología de almacenamiento y encriptación WORM (escribir una vez, leer muchas) para evitar la corrupción y la pérdida de datos de registro. Además, los registros deben tener un formato estandarizado para facilitar el mantenimiento, el acceso y la comparación.

Asegúrese de que "log_error" no esté vacío

comando:

SHOW variables LIKE ‘log_error’;

Los registros de errores contienen datos sobre eventos cuando mysqld se inicia o se detiene. También muestra cuando una mesa necesita ser evaluada o reparada. Debe generar un “valor”. La razón para habilitar el registro de errores es que ayuda a aumentar la capacidad de detectar intentos maliciosos contra MySQL y otros mensajes vitales.

Asegúrese de que los archivos de registro se almacenen en una partición que no sea del sistema

comando:

SELECT @@global.log_bin_basename;

Los archivos de registro de MySQL se pueden almacenar en cualquier parte del sistema de archivos y se pueden establecer mediante la configuración de MySQL. Además, una buena práctica es asegurarse de que los registros en el sistema de archivos no estén saturados con otros registros, como los registros de aplicaciones. Debe asegurarse de que el valor devuelto no indique que está en la raíz "('/')", "/var" o "/usr". La razón de esto es que la partición disminuirá la probabilidad de denegación de servicio si se agota el espacio en disco disponible para el sistema operativo.

Asegúrese de que "log_error_verbosity" no esté configurado en "1"

comando:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Esta verificación proporciona información adicional sobre qué funcionalidades tiene o ha habilitado el registro de MySQL en los mensajes de error. Un valor de 1 habilita el registro de mensajes de error. Un valor de 2 habilita tanto el registro de mensajes de error como de advertencia. Un valor de 3 habilita el registro de mensajes de error, advertencia y nota. Esto ayuda a detectar comportamientos maliciosos al registrar errores de comunicación y conexiones canceladas.

Asegúrese de que el registro de auditoría esté habilitado

Habilitar el registro de auditoría es crucial para el entorno de producción para sesiones de usuario interactivas y sesiones de aplicación. Con el registro de auditoría, ayuda a identificar quién cambió qué y cuándo. También puede ayudar a identificar lo que ha hecho un atacante e incluso puede usarse como prueba en las investigaciones.

comando:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;

comando:

SET GLOBAL general_log = ‘ON’ ;

comando: CREAR USUARIO 'usuario1'@'localhost' IDENTIFICADO POR CONTRASEÑA 'no tan secreto';

La ruta del registro en Windows 10 se puede encontrar utilizando la aplicación Servicios, buscando si MySQL se está ejecutando y haciendo clic con el botón derecho en propiedades.

El registro en el sistema del autor se encontraba en:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

Autenticación para sistema de información

La autenticación garantiza que las credenciales proporcionadas por el usuario o la máquina coincidan con la base de datos de usuarios autorizados en un sistema operativo local o en un servidor de autenticación. Luego, a la autenticación le sigue la autorización, que es otorgada por un administrador a los usuarios o máquinas. Una autenticación que se usa comúnmente tanto en redes públicas como privadas es la autenticación basada en contraseña.

Asegúrese de que las contraseñas no se almacenen en la configuración global

La sección [cliente] de un archivo de configuración de MySQL permite establecer un usuario y una contraseña. La verificación es importante porque permitir un usuario y una contraseña en el archivo de configuración afecta negativamente la confidencialidad de la contraseña del usuario.

Para auditar, abra el archivo de configuración de MySQL y examine la sección [cliente]; no debe tener ninguna contraseña almacenada. No se estableció ninguna contraseña en el sistema del autor (ver la figura a continuación). Si se configuró una contraseña en el archivo de configuración, use mysql_config_editor para almacenar contraseñas en forma cifrada en .mylogin.cnf.

Asegúrese de que 'sql_mode' contiene 'NO_AUTO_CREATE_USER'

"no_auto_create_user" es una opción para evitar la creación automática de usuarios cuando no se proporciona información de autenticación.

comando:

SELECT @@global.sql_mode;

comando:

SELECT @@session.sql_mode;

Asegúrese de que las contraseñas estén configuradas para todas las cuentas de MySQL

Un usuario puede crear una contraseña en blanco. Tener una contraseña en blanco es arriesgado ya que cualquiera puede simplemente asumir la identidad del usuario, ingresar el ID de inicio de sesión del usuario y conectarse al servidor. Esto pasa por alto la autenticación, lo cual es malo.

comando:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

Asegúrese de que 'default_password_lifetime' sea menor o igual que '90'

Cambiar la vida útil de la contraseña a 90 días reduce el tiempo disponible para que el atacante comprometa la contraseña y, por lo tanto, reduce la probabilidad de ser atacado.

comando:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

comando:

SET GLOBAL default_password_lifetime=90;

Asegúrese de que la complejidad de la contraseña esté en su lugar

La complejidad de la contraseña agrega fuerza de seguridad a las autenticaciones e incluye agregar o aumentar la longitud, mayúsculas y minúsculas, números y caracteres especiales. Cuanto más compleja sea la contraseña, más difícil será para los atacantes utilizar la fuerza bruta para obtener la contraseña. Las contraseñas débiles se obtienen fácilmente en un diccionario de contraseñas.

comando:

SHOW VARIABLES LIKE ‘validate_password%’;

Asegúrese de que ningún usuario tenga nombres de host comodines

A los usuarios con nombres de host comodín (%) se les otorga permiso para cualquier ubicación. Es mejor evitar la creación de nombres de host comodines. En su lugar, cree usuarios y asígneles ubicaciones específicas desde las que un usuario determinado pueda conectarse e interactuar con la base de datos.

comando:

SELECT user, host FROM mysql.user WHERE host = ‘%’;

Asegúrese de que no existan cuentas anónimas

Los usuarios pueden tener un nombre de usuario anónimo (vacío o en blanco). Estos nombres de usuario anónimos no tienen contraseñas y cualquier otro usuario puede usar ese nombre de usuario anónimo para conectarse al servidor MySQL. La eliminación de estas cuentas anónimas garantiza que solo los usuarios identificados y de confianza puedan acceder al servidor MySQL.

comando:

SELECT user,host FROM mysql.user WHERE user = ‘’;

Conexión de red al servidor MySQL

La conexión de red juega un papel importante para la comunicación entre el usuario y el servidor MySQL. Las conexiones de red inseguras son muy vulnerables a los ataques. Las siguientes son comprobaciones de la seguridad de la conexión de red.

Asegúrese de que 'have_ssl' esté configurado en 'SÍ'

Para evitar que los atacantes maliciosos se asomen al interior de su sistema, es mejor utilizar SLL/TLS para todo el tráfico de red cuando utilice redes que no sean de confianza.

comando:

WHERE variable_name = ‘have_ssl’;

Asegúrese de que 'ssl_type' esté configurado en 'CUALQUIERA', 'X509', o 'ESPECIFICADO' para todos los usuarios remotos

SSL/TLS debe configurarse por usuario. Esto evita aún más el espionaje de atacantes malintencionados.

comando:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

Replicación

Verificar el estado de la replicación le permite monitorear el rendimiento y las vulnerabilidades de seguridad. Microsoft SQL Server Management Studio tiene las siguientes herramientas para monitorear la replicación:

  1. ver el estado del agente de instantáneas,
  2. ver el estado del agente del lector de registros y
  3. ver el estado de sincronización.

Asegúrese de que el tráfico de replicación esté protegido

Replicación el tráfico entre servidores debe estar protegido. Durante las transferencias de replicación, las contraseñas podrían filtrarse.

Para auditar, verifique si están usando:una red privada, una VPN, SSL/TLS o un túnel SSH. Con suerte, el sistema del autor está usando una red privada. Corrija en caso contrario y asegure mediante el uso de la red privada, una VPN, SSL/TLS o un túnel SSH.

Asegúrese de que 'MASTER_SSL_VERIFY_SERVER_CERT' esté configurado en 'SÍ' o '1'

‘MASTER_SSL_VERIFY_SERVER_CERT’ verifica si la réplica debe verificar el certificado principal o no. La réplica debe verificar el certificado principal para autenticar el principal antes de continuar con la conexión.

comando:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Asegúrese de que 'master_info_repository' esté configurado en 'TABLA'

El 'master_info_repository' determina dónde la réplica registra el estado del principal y la información de conexión. La contraseña se almacena en el repositorio de información principal que es un archivo de texto sin formato. Almacenar la contraseña en TABLE master_info es más seguro.

comando:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Asegúrese de que 'super_priv' no esté configurado en 'Y' para los usuarios de replicación

El El privilegio "SUPER" ('super_priv') ubicado en la tabla "mysql.user" tiene funciones como "CAMBIAR", "MAESTRO PARA", "MATAR", "matar mysqladmin", "PURGAR REGISTROS BINARIOS", "CONFIGURAR GLOBAL", “depuración de mysqladmin” y otros controles de registro. Otorgar a un usuario el privilegio "SUPER" le permite ver y terminar las sentencias SQL que se están ejecutando actualmente, incluso para la administración de contraseñas. Si el atacante aprovecha y obtiene el privilegio "SUPER", puede deshabilitar, alterar o destruir los datos de registro.

comando:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

Asegúrese de que ningún usuario de replicación tenga nombres de host comodines

MySQL le permite otorgar permisos a nombres de host comodines. Deben evitarse los nombres de host comodín, y debe crear o modificar usuarios y proporcionarles ubicaciones específicas desde las que un usuario determinado puede conectarse e interactuar con la base de datos.

Conclusión

Las siguientes comprobaciones se realizan para un solo entorno de trabajo utilizando MySQL como sistema de información tanto en el lado de la aplicación como en el lado del usuario.

La evaluación es imprescindible para verificar el registro estándar de MySQL y habilitar funciones de registro adicionales (también permite verificar vulnerabilidades de autenticación). Las comprobaciones de red son importantes para evitar que otros usuarios con malas intenciones se asomen a su red. Implemente siempre SSL/TLS para cifrar. Es necesario asegurar la transferencia unidireccional. Asegurar el tráfico de replicación agrega una capa defensiva.

El resultado de la evaluación puede informarle si el sistema puede operar con un nivel de confianza.

¡Gracias por leer mi blog! Ahora ha iniciado el camino para asegurar su base de datos MySQL.=)