Situación
Descubrimos que una de nuestras bases de datos (MySQL) se ha comprometido a través de la inyección de SQL. El vector de inyección fue una consulta que era vulnerable a la inyección de SQL debido a la concatenación de cadenas en su cláusula WHERE
.
El usuario MySQL para la aplicación web en cuestión se ejecutó con privilegios bastante limitados ( SELECT
, DELETE
, UPDATE
, INSERT
) en una sola base de datos junto con la base de datos information_schema
. Solo se puede acceder al servidor de la base de datos desde las máquinas incluidas en la lista blanca (sin acceso a internet sin restricciones).
Por lo que podemos ver, el atacante realizó todas las interacciones con nuestra base de datos a través de las solicitudes HTTP GET
a la aplicación web vulnerable. Hemos asegurado el acceso al servidor web y los registros de errores que muestran claramente todos los intentos de consulta. Lo lamentable es que el atacante tuvo acceso a nuestra base de datos durante aproximadamente 3 días. Como tal, creo que debemos asumir que toda nuestra base de datos se ha mapeado y la mayoría de los datos de interés han sido descargados por el atacante.
En el momento del descubrimiento, el ataque aún estaba en curso; se ha detenido y la vulnerable cláusula WHERE
ha sido reemplazada por un marcador de posición de declaración preparado (como debería haber sido todo el tiempo). Dado que el ataque todavía estaba en curso, creo que puedo asumir que aún no lograron obtener todos datos. Una vez que la vulnerabilidad se solucionó, rotamos las "contraseñas" 1 para todos los usuarios que tuvieron acceso a este servidor de base de datos.
Los datos
La base de datos en cuestión es el almacén de datos para una tienda web. No hay información de pago en la base de datos (todas las transacciones de pago son manejadas por un proveedor de pago (ThirdPary)) y las contraseñas de los usuarios se han bloqueado con BCrypt con un factor de trabajo bastante decente.
La base de datos contiene pedidos de clientes (junto con información de dirección), productos, stock, etc.
Preguntas
-
El orificio se ha tapado, ¿qué pasos técnicos 2 se deben tomar ahora (aparte de rotar las credenciales de usuario de MySQL, lo que ya hemos hecho)?
-
Como tenemos los archivos de registro con todos los intentos de consulta, debería ser posible averiguar exactamente qué tablas se han volcado.
¿Qué es una herramienta viable para extraer esta información de 1 GB de acceso a servidores web y archivos de registro de errores? -
¿Cuáles son los usos maliciosos comunes de los datos robados como este? ¿Ataques de phishing dirigidos a los clientes de la tienda online?
1 : ASCII imprimible de 32 caracteres, cadenas aleatorias.
2 : Definitivamente hay una parte judicial, de comunicaciones y relaciones públicas para este problema , pero esta pregunta se centra únicamente en la parte técnica del incidente.