DataSunrise Logra el Estado de Competencia en AWS DevOps en AWS DevSecOps y Monitoreo, Registro, Rendimiento

Desbloqueo de la Seguridad de la Base de Datos MySQL

Desbloqueo de la Seguridad de la Base de Datos MySQL

MySQL es una de las bases de datos de código abierto más populares que se ejecuta en una variedad de plataformas. Es relativamente fácil de configurar, su firewall es simple y muestra buenas características de rendimiento incluso bajo una carga significativa, pero aún así presenta una amplia variedad de problemas de configuración relevantes para la seguridad.

Mejores Prácticas para la Seguridad de la Base de Datos MySQL

La mejor práctica en la gestión de la seguridad es ser paranoico y anticipar un ataque en cualquier momento desde todas las direcciones, pero si adopta algunas medidas de precaución, no será tan difícil. Las siguientes pautas le ayudarán a reducir sustancialmente la superficie de posibles amenazas.

Primero que nada, lea las directrices de seguridad de MySQL 5.7 y revise las actualizaciones regularmente. Recientemente se han encontrado varias vulnerabilidades graves en el RDBMS de MySQL, para las cuales existen exploits disponibles de forma libre. Aproveche las actualizaciones que añaden nuevas funcionalidades y, lo que es más importante, corrigen fallos de seguridad.

Monitoree regularmente las bases de datos de vulnerabilidades. Esté siempre atento a nuevas amenazas que puedan afectar su sistema.

Sistema Operativo

  1. Desactive los demonios y servicios innecesarios. Cuantos menos componentes pueda acceder un atacante, menor será la posibilidad de que encuentre una vulnerabilidad que pueda utilizar para acceder al sistema. Al mantener la configuración del host simple, reduce el esfuerzo necesario para gestionar el sistema y mitiga el riesgo de omisiones en la seguridad.
  2. Asegúrese de que los usuarios de MySQL no puedan acceder a archivos fuera de un conjunto limitado de directorios. Los archivos de datos de MySQL no deben ser leídos por ningún usuario, excepto por las cuentas de root o administrador.
  3. Desactive o restrinja el acceso remoto. En caso de que necesite que MySQL sea accesible de manera remota, configure la sentencia GRANT, que se utiliza para configurar el usuario, de modo que requiera SSL.
  4. Asegúrese de que ningún usuario, aparte del usuario de MySQL, pueda leer los archivos de configuración y de registro de MySQL. Los archivos my.cnf, my.ini y master.info comúnmente contienen nombres de usuario y contraseñas sin cifrar. Si existe un archivo de registro de consultas, es probable que también contenga contraseñas. Algunos archivos de configuración de MySQL pueden también contener nombres de usuario y contraseñas en texto plano. Asegúrese de que estos archivos estén protegidos contra usuarios no autorizados.
  5. Ejecute MySQL con la opción –chroot. Esto proporciona una excelente mitigación respecto al poder del privilegio de archivos. Chroot se usa para restringir el acceso a archivos por parte de un proceso a un directorio determinado. Incluso con la opción chroot, un atacante que obtenga privilegios sobre archivos podrá leer todos los datos de MySQL y probablemente aún podrá ejecutar UDF’s.
  6. Regularmente limpie su archivo .mysql_history o vincúlelo permanentemente a /dev/null. Por defecto, en sistemas Unix, encontrará un archivo .mysql_history en su directorio home. Este contiene un registro de todas las consultas que ha introducido en el cliente de línea de comandos de MySQL. Ejecute el siguiente comando para limpiar el historial:
cat /dev/null > ~/.mysql_history

Usuarios

Después de configurar el sistema operativo, es necesario construir un modelo de privilegios y asignar cuentas de usuario.

  1. Durante la fase inicial de configuración, elimine todos los usuarios de MySQL que no sean root, para que sepa exactamente quién tiene acceso a la base de datos. La mejor manera es empezar desde cero y crear usuarios conforme se necesiten.
  2. Renombre el nombre de usuario root y cambie la contraseña utilizando diferentes números y caracteres. Puede cambiar el nombre de usuario del administrador con el siguiente comando en la consola de MySQL: mysql> RENAME USER root TO new_name;
  3. No otorgue a las cuentas privilegios que realmente no necesitan, especialmente File_priv, Grant_priv y Super_priv. Considere crear una cuenta de MySQL separada que su aplicación pueda usar para interactuar con el sistema de archivos dentro de MySQL. Tenga en cuenta que este usuario tendrá acceso a todos los datos de MySQL, incluidos los hashes de las contraseñas.
  4. Si es posible, cree un usuario de MySQL para cada aplicación web o para cada rol dentro de cada aplicación web. Dentro de esta aplicación, asigne a los usuarios privilegios únicamente para los comandos requeridos. Puede parecer tedioso, pero tiene sentido cuando se trata de establecer un sistema de seguridad integral.
  5. En caso de que se habiliten conexiones remotas, especifique REQUIRE SSL en la sentencia GRANT utilizada para configurar el usuario. Algunos scripts de exploit no funcionarán puesto que no tienen soporte para SSL. Además, el protocolo SSL asegura la confidencialidad de la secuencia de respuesta de una contraseña. También puede establecer restricciones basadas en un certificado del lado del cliente que se utiliza para autenticarse con SSL. Otra medida de seguridad útil es que, si se conoce una contraseña, no será suficiente; también se requerirá un certificado especificado.
  6. No otorgue a nadie acceso a la tabla mysql.user (excepto los usuarios con privilegios de root).

Configuración de MySQL

  1. Desactive el comando LOAD DATA LOCAL INFILE. Se trata de una construcción que ayuda a importar archivos locales a una tabla, pero tiene la particularidad de que, bajo ciertas circunstancias, puede llevar a la recuperación del contenido del archivo /etc/passwd. El exploit para esto ha estado disponible de forma gratuita desde 2013. Agregue set-variable=local-infile=0 al archivo my.cnf.
  2. Elimine cualquier UDF no utilizada. Las UDF también representan amenazas para la seguridad de la base de datos. Si observa UDF no utilizadas en la tabla mysql.func, elimínelas.
  3. Si utiliza únicamente conexiones locales y no es necesario que hosts remotos se conecten a MySQL, desactive las conexiones TCP/IP mediante la opción –skip-networking.
  4. Elimine la base de datos de prueba. Por defecto, existe una base de datos de prueba que puede ser accesible para cualquier persona. Elimínela o restrinja sus privilegios.
  5. Elimine las cuentas anónimas. No deje ningún usuario con contraseñas en blanco.

    Puede encontrar usuarios anónimos con el siguiente comando:

    select * from mysql.user where user=””;
  6. Asegúrese de que el tráfico de MySQL esté cifrado.
  7. Active el registro de logs mediante la opción –log. Según la documentación de MySQL, el “registro general de consultas” es una función de depuración, pero también se puede utilizar como medida de seguridad. Registra conexiones exitosas y consultas ejecutadas. Por defecto, el registro de consultas está deshabilitado; puede activarlo utilizando la opción –log.

Tenga en cuenta que los logs de consultas y los logs de errores también son una fuente de información para los atacantes. Asegúrese de que el archivo de log sea visible solo para el administrador o para la cuenta root del sistema. Además, no registra los resultados de las consultas ni los datos recuperados, por lo que existen soluciones especiales de monitoreo de la actividad de la base de datos para este propósito.

Monitoree regularmente los logs de consultas y busque ataques de inyección de SQL, así como el uso de la sintaxis load_file, infile y outfile en el sistema de archivos.

Instale software antivirus y antispam. Despliegue un firewall para controlar el tráfico de red entrante y saliente y protegerse de ataques.

Un sistema integral de seguridad de la base de datos MySQL se construye combinando una gran cantidad de cambios de configuración discretos. Cada detalle es importante. No existe una forma de garantizar una seguridad del 100%, pero la búsqueda de la máxima protección es un deber en la era de los ciberdelitos.

Siguiente

Interfaz de Línea de Comandos Fácil

Interfaz de Línea de Comandos Fácil

Más información

¿Necesita la ayuda de nuestro equipo de soporte?

Nuestros expertos estarán encantados de responder a sus preguntas.

Información general:
[email protected]
Servicio al Cliente y Soporte Técnico:
support.datasunrise.com
Consultas sobre Asociaciones y Alianzas:
[email protected]