mysql-proxy es una ligera aplicación binaria entre uno o más clientes de MySQL y un servidor. Los clientes se conectan al proxy en lugar de conectar con el servidor. El proxy funciona como un intermediario entre el cliente y el servidor. En su forma básica, el proxy es sólo una redirección. Se pone un cubo vacío desde el cliente (una consulta), lo lleva al servidor, llena el cubo con los datos, y se lo pasa al cliente. Si eso fuese todo, el proxy como tal seria una herramienta inútil. Pero, dicha herramienta provee consigo una utilidad importante, el interprete LUA. Usando el lenguaje Lua, puede definir qué hacer con una consulta o un conjunto de resultados antes de retornar la respuesta consultada. El Proxy puede modificar consultas SQL y sus resultados. El poder del proxy es su flexibilidad, según lo permitido por el interprete de Lua.Puede interceptar la consulta antes de su llegada al servidor, y hacer todo lo imaginable con esta: * Pasar toda la data enviada sin modifcaciones o cambios * Corregir errores de ortografía * Filtro hacia fuera, es decir, eliminar por completo * Reescribir la consulta de acuerdo con algunas políticas establecidas * Agregar instrucciones olvidadas * Entre muchas cosas mas.... De la misma manera, se puede interceptar el conjunto de resultados. Por lo que se puede: 1.- Hacer un Log de todas las consultas que recibe el Servidor 2.- Denegar consultas peligrosas que puedan dañar nuestra base de datos 3.- Generar Alias de comandos comunes por ejemplo SLE se podria convertir en SELECT 4.- Balancear la carga entre varios servidores de MySQL en un esquema de Master/Slave 5.- Dar prioridad a ciertas consultas para acelerar la respuesta del servidor CONCEPTOS MySQL Proxy se construye con una infraestructura orientada a objetos. La clase principal expone tres funciones de miembros públicas. Puede reemplazar en un script LUA el comportamiento preestablecido en el Proxy. * Connect_server (). Funcion que realiza la coneccion, usted puede trabajar dentro de esta función para cambiar los parámetros de conexión. * Read_query (paquete). Esta función se llama antes de enviar la consulta al servidor. Usted puede intervenir para cambiar la sentencia original o para inyectar más a la cola. También puede decidir saltar el servidor back-end por completo y enviar de vuelta al cliente el resultado que desea. (Por ejemplo, dado un SELECT * FROM big_table usted podria establecer que se retorne una respuesta tipo "big_table tiene 20 millones de discos. ¿Ha olvidado la cláusula WHERE?") * Read_query_result (injection_packet). Esta función se llama antes de retornar el resultado para una consulta de inyección. Usted puede hacer algo aquí para decidir qué hacer con el conjunto de resultados (ignorar, modificar, enviar sin cambios). Mediante la combinación de estas tres puertas de nuevo al servidor se puede lograr un alto grado de maniobrabilidad en el servidor. INSTALACION La instalación del proxy es bastante fácil. El paquete de distribución contiene un solo binario (ya partir de 0.5.1, también algunos ejemplos de scripts LUA). El paquete solo esta disponible para sistemas operativos tipos unix y unix, aunque se esta trabajando para liberar un binario para sistemas operativos Microsoft. Luego de descomprimir el paquete, la instalacion es un proceso rapido:::: . / autogen.sh . / configure & & make sudo make install # Copia el ejecutable a / usr / local / sbin Inyecciones SQL Como funcionan los ataques (inyecciones SQL) con el proxy MySQL: En la imagen, el servidor recibe 3 consultas SQL, y porsupuesto retorna el resultado de estas 3 peticiones. Cuando ocurre una inyeccion SQL, la consulta es analizada y procesada por otra funcion del interprete del proxy (read)query_result) donde el programador puede asignar una excepcion a retornar de acuerdo al ID asignado a la respuesta retornada por el servidor. Imagen que muestra el proceso realizado al recibir una inyeccion SQL. El resultado retornado por la consulta realizada por un cliente es previamente analizada, todo este proceso es transparente para el cliente, pero todo los detalles realizados por el Proxy se muestran en la consola Proxy. Veamos un ejemplo de un script en LUA que guardar todas nuestras consultas en un archivo llamado mysql.log assert(proxy.PROXY_VERSION >= 0x00600, Este ejemplo lo tome de este articulo Getting started with MySQL-Proxy les recomiendo se den una vuelta por ahi para que vean la informacion que dan. |