Estas sencillas instrucciones muestran cómo proceder después de una instalación por defecto, asegurando la base de datos MySQL de accesos no deseados.
Una vez instalada la base de datos MySQL, para establecer la contraseña del usuario root hay que teclear desde la shell o línea de comandos de su directorio:
mysqladmin -u root password ‘contraseña’
De forma predeterminada MySQL tiene dos usuarios definidos y una base de datos ‘test’. Los usuarios no tiene predefinida ninguna contraseña y las tablas de la base de datos, que comienzan por ‘test’, tienen permisos de escritura para todo el mundo. Para deshabilitar estos usuarios y eliminar las tablas mencionadas hay que escribir:
DELETE FROM user WHERE User = »;
DELETE FROM db WHERE Host = ‘%’;
Si la base de datos solo necesita estar accesible desde la máquina local se debería deshabilitar el TCP Networking. De esta forma eliminaremos la posibilidad de conectarse al demonio sin una cuenta en la máquina en la que esté alojado. Para llevar ésto a cabo se deberá editar el script de arranque ‘safe_mysqld‘ y modificar las siguientes lineas (se incluyen los números de línea siendo la primera aparición el formato actual y la segunda el formato definitivo):
119: –skip-locking >> $err_log 2>&1
119: –skip-networking –skip-locking >> $err_log 2>&1
122: –skip-locking «$@» >> $err_log 2>&1
122: –skip-networking –skip-locking «$@» >> $err_log 2>&1
Se debería iniciar MySQL con el parámetro –skip-symlink. Con esto se estáría preveyendo la posibilidad de una ‘escalada de privilegios’ mediante la sobrescritura de archivos en el sistema.
Para prevenir la posibilidad de sufrir un ataque por ‘denegación de servicio’ se debería restringir las conexiones a un único usuario, estableciendo la variable max_user_connections. Pueden comprobarse los valores actuales de las variables con el comando SHOW VARIABLES, y pueden establecerse mediante el comando SET.
También se debería deshabilitar la posibilidad de utilizar el comando LOAD DATA LOCAL INFILE, lo que eliminará la posibilidad de accesos no autorizados en modo lectura a los ficheros locales. Para ello se deberá agregar el siguiente parámetro al fichero de configuración de MySQL: my.cnf:
set-variable-local-infile=0
Es recomendable renombrar la cuenta del administrador de MySQL (root). De esta forma estaremos disminuyendo la posibilidad de éxito de un ataque de fuerza bruta contra la contraseña del administrador. Para ello deberemos ejecutar:
UPDATE user SET user = «nuevonombre» WHERE user = «root»; flush privileges;
Para los usuarios de Linux es aconsejable que tras una sesión de línea de comandos con MySQL se vacíe el contenido del archivo .mysql_history, ya que puede contener información sensible (en él se almacena un histórico con los comandos ejecutados). Para proceder con ello ejecutaremos:
:> /home/usuario/.mysql_history
Hay dos herramientas por ahí que sirven para comprobar la seguridad (ambas para Linux):
MySQL Network Scanner
Este programa permite auditar una red de clase C en busca de servidores MySQL que no tengan definida una contraseña para el usuario root. En el caso de encontrar alguna se conectará y volcará todos los pares de usuario/contraseña definidos en la tabla mysql.user, incluyendo la información sobre el host desde el que se le permite la conexión.
Descarga del código fuente:
http://www.securiteam.com/tools/6Y00L0U5PC.html
MySQL Brute Force Password Hash Cracker
Esta utilidad, complementaria a la anterior, admite como argumento el hash de una contraseña de un usuario de MySQL y, mediante fuerza bruta, intentará descifrarlo.
Descarga del código fuente:
http://www.securiteam.com/tools/6Y00L0U5PC.html
PasswordsPro (Windows)
Este programa recupera todo tipo de contraseñas, incluyendo hashes MD4, MD5, SHA-1, incluyendo usuarios de bases de datos MySQL. También descifra las contraseñas ocultas detrás de astericos en ventanas Windows. La utilidad ha sido traducida al español por el equipo de Seguridad0.
Descarga del programa:
http://www.insidepro.com/eng/passwordspro.shtml#450
Más información:
MySQL
http://dev.mysql.com/
Secure MySQL Database Design
http://www.securityfocus.com/infocus/1667
Securing MySQL: step-by-step
http://www.securityfocus.com/infocus/1726.
Securing Your MySQL Installation
http://www.kitebird.com/articles/ins-sec.html
Introducción a MySQL
http://www.mysql-hispano.org/page.php?id=4&pag=5
José Luis Morales & Carlos Mesa
Seguridad0.com