¿Se tiene acceso remoto a la cuenta 'root' @ 'localhost' de MySQL no segura?

8

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.

TFk
fuente
Sería más adecuado para ServerFault - fuera del tema aquí.
kapa
No estaba seguro: mi sensación personal era que, dado que se trata menos de problemas de configuración / administración del servidor y más de tratar de explotar un posible error en MySQL, podría encajar mejor aquí. Disculpas si la gente piensa que estoy en el sitio / sección equivocado para esto.
TFk
2
En realidad, probablemente pertenece a security.stackexchange.com
1
Usted dice "el único usuario de nivel raíz era root @ localhost", sin embargo, ¿había otros usuarios? No necesita un usuario de nivel raíz para agregar un registro. Además, debe buscar vulnerabilidades en FreePBX como esta .
Marcus Adams
El exploit en su enlace ha sido parcheado en mi versión de FreePBX, pero sí, estoy de acuerdo en que las vulnerabilidades de FreePBX son el punto de entrada más probable, excepto que no puedo encontrar nada en mis registros de acceso de Apache que coincida con ninguna de las vulnerabilidades conocidas (sin parchear) . Buen punto con otros usuarios: el único otro usuario en la base de datos era un asterisco, que tiene una contraseña (no predeterminada). Si este fue el punto de entrada, esto nuevamente apunta a una vulnerabilidad de FreePBX (posiblemente inédita). La "contraseña no root" parecía un agujero tan grande, en comparación con un nuevo exploit FreePBX no documentado. Por lo tanto, mi pregunta / publicación.
TFk

Respuestas:

1

No.

MySQL nunca lo conectará a un usuario con la especificación localhosto 127.0.0.1host 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.

Shane Madden
fuente
Eso es lo que sospeché, lo que significa que, a pesar de que una contraseña de root en blanco es mala, probablemente no fue el exploit. Siempre es bueno obtener opiniones informadas. Muchas gracias.
TFk
2

El nombre rootse 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 usuario root.

Debe cambiar rootel 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@ localhostque es bastante conocido por todos, por lo tanto, los hackers intentarán conectarlo, debe cambiarlo a algo específico como admin_db_name@ localhostpara una mayor seguridad.

Monitoree una variable de estado llamada Aborted_connectsperiódicamente para conocer la Refusedconexión a su servidor MySQL, debe ser 0 después del Flush status;comando y no debe aumentar más.

mostrar estado como 'Aborted_connects';

Mahesh Patil
fuente
2

¿ "Sin acceso no autorizado registrado" incluye intentos de inicio de sesión fallidos? Si no, podría ser CVE 2012-2122 .

[...] cuando se ejecuta en ciertos entornos con ciertas implementaciones de la función memcmp, (MySQL) permite a los atacantes remotos omitir la autenticación autenticándose repetidamente con la misma contraseña incorrecta, lo que eventualmente hace que una comparación de tokens tenga éxito debido a una comprobación incorrecta valor de retorno

samuirai
fuente
Mi "acceso no autorizado no registrado" era lamentablemente ambiguo; quería decir que ningún atacante había logrado obtener acceso de consola al servidor (por ejemplo, a través de SSH). Además, parece que las compilaciones de Centos no se ven afectadas (< community.rapid7.com/community/metasploit/blog/2012/06/11/… ), pero ciertamente el tipo de cosas que he estado buscando.
TFk