Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Los probadores de penetración principiantes, en particular, ponen menos énfasis en la seguridad de la base de datos en general. Una aplicación sin configuración de base de datos y pruebas de seguridad no puede ser segura. Es posible que ya esté utilizando el software MySQL, un sistema de administración de bases de datos, entonces, ¿cómo puede hacerlo más seguro? Aquí hay siete pasos que debe seguir.

1. Utilice túneles SSH en lugar de conexión remota

El servicio MySQL se ejecuta en el puerto 3306 de forma predeterminada. Cuando instale MySQL, verá que el puerto 3306 está en modo de escucha para todas las conexiones. Tal como está, el puerto MySQL está abierto al mundo exterior. Es por eso que debe configurar el servicio MySQL para escuchar solo la dirección local.

Dado que los servidores generalmente se ejecutan en una distribución de Linux, los ejemplos a continuación se basan en una distribución de Debian. El archivo que necesita usar para el túnel SSH en lugar de la conexión remota y para cerrar el puerto predeterminado al mundo exterior es

instagram viewer
/etc/mysql/my.cnf. En este archivo, debe abrir un campo llamado [mysqld] y escribe el siguiente comando:

[mysqld]
unir-dirección=127.0.0.1

Después de este proceso, no olvides guardar este archivo y reiniciar el servicio con el siguiente comando:

sudo systemctl reiniciar mysqld
# o
sudosystemctlReanudarmariadb.servicio

Con esto, el servicio MySQL solo escuchará la dirección local.

Si está utilizando MariaDB, también puede examinar /etc/mysql/mariadb.conf.d/50-server.cnf y verifique si hay una definición para dirección de enlace.

Ahora que tiene la dirección de enlace establecida en 127.0.0.1, que es host local, puede ejecutar un análisis de Nmap y comprobar el resultado:

Puede ver el puerto MySQL como 127.0.0.1 representa el host local que ve. Puede intentar cambiar la dirección de enlace nuevamente para asegurarse de que esto funcione:

[mysqld]
unir-dirección=127.5.5.1

Luego guarde el /etc/mysql/my.cnf archivo y reinicie el servicio MySQL. Si realiza un escaneo Nmap nuevamente en esta etapa, no debería ver esta dirección de enlace en localhost.

Una vez que sepa que esto funciona, vuelva a la configuración del primer paso y establezca la dirección de enlace de nuevo en 127.0.0.1 y guárdela de nuevo.

2. Configurar una barrera de acceso a archivos locales

MySQL puede comunicarse con el sistema de archivos local. Con las consultas, puede ver el contenido de un texto en el sistema de archivos local o grabar el resultado de la consulta en un disco. Para evitar que atacantes maliciosos utilicen esta función, debe evitar que MySQL se comunique con el sistema de archivos local.

Puede usar una función llamada local-infile para tomar precauciones. Por ejemplo, imagine que tiene un archivo llamado "/etc/secretfile.txt" y tiene una contraseña en este archivo. Si el valor de la función local-infile en su archivo /etc/mysql/my.cnf es 1, entonces el acceso está abierto. Para que pueda acceder al archivo secretfile.txt.

El valor de la función local-infile es 1. Reinicie la base de datos MySQL para que se realicen los cambios. Ahora, conéctese a MySQL con el siguiente comando y verifique si puede ver el archivo secretfile.txt:

SELECCIONARCARGAR ARCHIVO("/etc/archivosecreto.txt");

No es difícil capturar la información en cualquier archivo en su computadora.

Para resolver este problema, cambie el valor del archivo local en su archivo /etc/mysql/my.cnf de la siguiente manera:

[mysqld]
local-infile=0

Reinicie el servicio MySQL. Vuelva a conectarse a MySQL y repita el paso anterior; ya no debería poder ver el contenido del archivo.

Si los usuarios aún no tienen permisos de lectura y escritura en archivos locales, no podrán ver este archivo. Sin embargo, todavía es algo que debe verificar en las pruebas de penetración y la seguridad de la base de datos.

3. Establecer usuarios y contraseñas de la aplicación

El usuario de administración de la base de datos y el usuario de MySQL que accede a la base de datos deben ser diferentes entre sí. En otras palabras, conectar aplicaciones a MySQL con usuarios root es extremadamente peligroso. Si es posible, defina los usuarios de las aplicaciones que no realizan Operaciones UPDATE o INSERT por separado.

Otra cosa a considerar en este punto son las contraseñas de los usuarios. Como en casi todos los campos, las contraseñas de los usuarios de MySQL deben ser complejas e impredecibles. Si necesita ayuda con esto, hay excelentes sistemas generadores de contraseñas que puede usar.

4. Eliminar usuarios anónimos

Cuando instala MySQL de forma predeterminada, se producen algunos usuarios anónimos. Debe eliminarlos y bloquear su acceso. Para un servidor MySQL seguro, no debería obtener ninguna respuesta como resultado de la siguiente consulta:

SELECCIONAR * DE mysql.usuario DÓNDEUSUARIO="";
# Salida de ejemplo
Vacío colocar (0.001 seg)

Si hay algún resultado, debe eliminar estos usuarios anónimos. Por ejemplo, si hubiera una cuenta anónima llamada "anonuser" en un entorno llamado "localhost", tendría que usar un comando como el siguiente para eliminar esta cuenta:

ELIMINAR USUARIO 'anónimo'@'servidor local';

5. Comprobar los permisos de archivos locales de MySQL

Imagine que es administrador de una base de datos y desea volver a los datos de hace una semana. En este caso, es posible que deba conectarse al servidor de la base de datos a través de SSH y cambiar los archivos MySQL que desee. Al hacer esto, es posible que haya utilizado los privilegios de usuario raíz de Linux; es decir, la propiedad y los permisos de los archivos de datos pueden cambiar. No quieres eso.

Mire el directorio /var/lib/mysql para verificar los permisos otorgados. Lo que debe verificar aquí es si el propietario de todos los archivos es el usuario de MySQL. El siguiente comando hará el truco:

sudo ls -al /variable/lib/mysql

Los permisos de lectura y escritura de los archivos deben ser solo para el usuario de MySQL. Ningún otro usuario debe tener ningún permiso.

6. Usar MySQL SSL

Pensar en un ejemplo concreto es la mejor manera de entender el uso de MySQL y SSL. Imagine que uno de los servidores en la región ABC, donde hay muchos servidores diferentes, es tomado por piratas informáticos malintencionados. Los piratas informáticos realizarán un escaneo interno en la región ABC. De esta manera, recopilan información sobre los servidores.

Si detectan un servidor MySQL durante este proceso, pueden realizar una Ataque Man-in-the-Middle (MitM) en el servidor de destino, lo que significa que pueden robar la información de la sesión de las aplicaciones y los usuarios que se conectan a este servidor. Una de las mejores maneras de evitar esto es habilitar SSL en el servidor MySQL.

7. Archivos de registro e historial

Utiliza los registros de MySQL para analizar y encontrar errores. Puede editar dónde se guardan estos registros ingresando my.cnf de la siguiente manera:

# /etc/mysql/my.cnf
[mysqld]
registro =/var/registro/mylogfiles

Puede cambiar el nombre o la ubicación de mis archivos de registro como desee. Hay un archivo más que necesita verificar. Cuando se conecta al servidor MySQL en una terminal Linux y escribe varios comandos, estas consultas se guardan en el archivo mysql_history. Si ejecuta el siguiente comando, puede ver las consultas que está utilizando en la terminal de MySQL:

gato ~/.mysql_history

Debe eliminar el contenido de este archivo si no desea proporcionar información sobre qué tipo de consultas está realizando dentro del servidor. Utilice el siguiente comando para eliminar el contenido del archivo:

eco sudo "limpiado"> ~/.mysql_history

A continuación, puede comprobar el contenido del archivo de nuevo.

Quien posee la base de datos posee el sistema

No importa en qué industria trabaje, su base de datos siempre contiene información importante. Estos pueden ser sus clientes, cuentas bancarias y contraseñas. Los atacantes malintencionados conocen la importancia y el valor de estos. Los desarrolladores y administradores de bases de datos deben conocer al menos los conceptos básicos que encontrarán en las pruebas de penetración para vencer a los piratas informáticos.