Un poco de historia: acabamos de hackear nuestro sistema PBX. El servidor en sí parece seguro (sin acceso a la consola no autorizado registrado - SSH, etc.), pero de alguna manera los hackers han logrado inyectar un nuevo usuario administrador en el software PBX (FreePBX, respaldado por MySQL). Los registros de Apache implican que los piratas informáticos lograron agregar al usuario sin usar la interfaz web (o cualquier exploit en la interfaz web).
Ahora, desde entonces descubrí que MySQL se estaba ejecutando sin una contraseña de root (!!) y estaba abiertamente vinculado a la dirección IP externa (Obviamente, he bloqueado esto ahora). Sin embargo, el único usuario de nivel raíz en MySQL era 'root'@'localhost'
y 'root'@'127.0.0.1'
, los cuales solo deberían haber sido accesibles localmente.
Así que mi pregunta es esta:
¿Hay alguna forma de falsificar una conexión a MySQL para que permita la conexión al usuario 'root' @ 'localhost' desde una dirección IP remota, SIN ejecutar ningún otro exploit localmente?
Como referencia, el cuadro es Centos 5 (Linux 2.6.10) que ejecuta Mysql 5.0.95.
Respuestas:
No.
MySQL nunca lo conectará a un usuario con la especificación
localhost
o127.0.0.1
host si no viene del sistema local. Tenga en cuenta que esto también cubre la vulnerabilidad de omisión de autenticación, CVE 2012-2122; la comparación de contraseña puede ser engañada, pero la comparación de host no lo es.Necesitaría algo en el sistema para desactivarlo para "engañar" la comprobación del host de origen. Me viene a la mente algo como phpmyadmin, o un equilibrador de carga como HAProxy que se ejecuta frente al puerto TCP de MySQL.
fuente
El nombre
root
se crea por defecto y es muy conocido. La raíz del valor literal no tiene ningún significado en el sistema de privilegios de MySQL. Por lo tanto, no es necesario continuar con el nombre de usuarioroot
.Debe cambiar
root
el nombre de usuario a otro para que el mundo exterior no pueda identificarlo (adivinarlo) fácilmente, esto reducirá los intentos de piratería.Por ejemplo: si tiene un usuario como
root
@localhost
que es bastante conocido por todos, por lo tanto, los hackers intentarán conectarlo, debe cambiarlo a algo específico comoadmin_db_name
@localhost
para una mayor seguridad.Monitoree una variable de estado llamada
Aborted_connects
periódicamente para conocer laRefused
conexión a su servidor MySQL, debe ser 0 después delFlush status;
comando y no debe aumentar más.fuente
¿ "Sin acceso no autorizado registrado" incluye intentos de inicio de sesión fallidos? Si no, podría ser CVE 2012-2122 .
fuente