02 abril 2009

Protégete contra el SQL Injection


GreenSQL es un firewall de aplicación, que se interpone a modo de proxy entre el servidor de MySQL y la aplicación web. Es capaz de filtrar las sentencias y proteger las bases de datos de ataques de tipo SQL Injection.

Las peticiones que llegan a nuestra aplicación web, se envían al puerto por el que escucha GreenSQL, que las analiza y las reenvía al servidor MSQL. GreenSQL puede instalarse en el mismo sistema donde reside la base de datos o en otro diferente.

Para encontrar sentencias sospechosas, GreenSQL utiliza varios métodos: la búsqueda de comandos SQL administrativos o comandos que soliciten información sensible, y el cálculo del riesgo de la sentencia.

Para buscar comandos SQL administrativos o que soliciten información sensible, se utiliza un motor de reconocimiento de patrones. Si determina que una sentencia debe ser bloqueada, genera un resultado vacío que devuelve a la aplicación, para que ésta continúe de forma correcta.

Para cada sentencia se calcula el riesgo. Básicamente se trata de un subsistema de detección de anomalías. Por ejemplo, el acceso a tablas sensibles aumenta el riesgo de la consulta (usuarios, cuentas, información de crédito), encontrar "or" dentro de la consulta o expresiones SQL que siempre devuelven true (tautología).

Las consultas pueden ser bloqueadas, o simplemente se puede enviar un mensaje de advertencia (depende del modo de aplicación). Cada vez que GreenSQL considera una sentencia SQL como un riesgo de seguridad - la bloquea. Se puede cambiar el comportamiento añadiendo la consulta a la whitelist.

El firewall puede ser utilizando de los siguientes modos:
  • Modo simulación (a modo de IDS)
  • Bloqueando sospechosos comandos (a modo de IPS)
  • Modo aprendizaje
  • Protección activa para queries desconocidas
Recomiendan habilitar el modo aprendizaje y después de un período cambiar a protección activa. Durante el modo de aprendizaje todas las queries se añaden de forma automática a la whitelist.

Si habilitamos el modo de protección activa de queries desconocidas, todos los comandos desconocidos serán bloqueados. Esto es básicamente el modo firewall de base de datos. Cuando se detecta un comando SQL desconocido, se bloquea automáticamente.

GreenSQL proporciona una consola web con un conjunto de herramientas para configurar el firewall GreenSQL.


Instalando GreenSQL

Se debe tener instalado MySQL, ya que GreenSQL lo utiliza para guardar alertas e información de configuración.

Para trabajar con GreenSQL es necesario descargar dos aplicaciones: greensql-fw y greensql-console.

# wget PACKAGE_NAME

La aplicación es soportada por las siguientes distribuciones: Debian, Ubuntu, FreeBSD, Fedora y SuSe.

Se instala el firewall greenSQL y se ejecuta el script de bbdd:

# rpm -ihv PACKAGE_NAME

# /usr/sbin/greensql-create-db.sh

Puede que haya que modificar alguna passwd el script o en el fichero de configuración /etc/greensql/greensql.conf

Lo arrancamos:

# /etc/init.d/greensql-fw start
Starting greensql-fw: [ OK ]


Para monitorizar el log:

# tail -100 /var/log/greensql.log
[01/Apr/2009 0:08:17] INFO Application started


Para verificar que todo funciona correctamente se puede ejecutar el siguiente comando:

# mysql -h 127.0.0.1 -P 3305 -u root -p


Con esto conectamos con el puerto por defecto de GreenSQL 3305. GreenSQL filtra todas las queries SQL y redirecciona las "buenas" hacia 127.0.0.1:3306 (3306 - es un puerto de MySQL). Todas estas opciones se pueden modificar usando la Consola-GreenSQL.

Para ello instalamos la consola web que proporciona GreenSQL:


Finalmente se debe modificar la configuración de la aplicación web (127.0.0.1:3305), para que utilice el servidor GreenSQL en lugar del MySQL.

Probando GreenSQL




MySQL recibe las peticiones por el puerto 3306.





GreenSQL recibe las peticiones por el puerto 3305. Podemos ver como no permite el DROP de una tabla, y estima el riesgo para determinadas consultas:







Se cuantifica el riesgo de las consultas.



Por cierto, nos enteramos de la existencia de GreenSQL, en el mas que recomendable blog un lugar en el mundo.

9 comments :

Anónimo dijo...

Lo primero que pensé al ver esto fue, ¡genial!, esto es lo que necesito.

Lo segundo... ¿quitará mucho rendimiento?

En esta página hay un documento sobre el rendimiento de GreenSQL:

http://www.greensql.net/publications/greensql-performance-test

josemaria dijo...

No somos dignos Laura :-)
Gracias por la cita pero, sobre todo, por el tutorial.

Anónimo dijo...

Genial. Una perfecta guia.

Gracias Laura!

Anónimo dijo...

¿Y no es mejor utilizar Mod_Security? que soporta cualquier plataforma web y base de datos

Saludos

Muy buen post!!

Laura García dijo...

Anónimo (16:41) -->

Mod_security es una aproximación más generalista al problema. Hay escenarios donde se requiere algo mas especifico.

Greensql tiene un juego de protecciones mucho mayor (borrado de tablas etc)

mod security = web y "algo" de SQL injection

Sin embargo, greenSQL es un producto especifico que sirve para mas escenarios / arquitecturas y ofrece mas protecciones.

Laura García dijo...

josemaria --> Muchas gracias :)

El Duque dijo...

Hola Laura, gracias por el post. Muy útil.

Una pregunta: ¿dónde puedo conseguir el set de iconos para arquitectra de redes que se ha utilzado en la primera imagen? Me vendría muy bien.

Gracias!!

Anónimo dijo...

Esto no está mal para hacer diagramas de red sencillos.

http://www.gliffy.com/

Laura García dijo...

@El Duque: lo hice con MS Visio 2003

Salu2