Si bien hay un gran número de riesgos de seguridad en el mundo del comercio electrónico,los ataques de inyección SQL son una de las técnicas más comunes para atacar los sitios Web, intentando robar los datos de los clientes tales como números de tarjetas de crédito, lo que obliga a mantener los datos de los clientes encriptados o, directamente, a destruirlos.
Mientras un servidor web sólo entiende y "habla" el protocolo HTTP , la "lengua nativa" de una base de datos es el Structured Query Language (SQL), que básicamente es un conjunto de comandos que le indican a la base de datos que ejecute ciertas acciones. Cada servidor de BB.DD. tiene un conjunto de instrucciones muy similares para consultar las tablas de sus BB.DD, reduciendo los resultados a un conjunto de pocas entradas y combinando la información de una tabla con otra.
Un ejemplo de consulta SQL es el siguiente:
SELECT -- FROM users WHERE Email = '" + Email + "' AND Password = '" + Password + "';
El comando WHERE especifica una condición, que en combinación con Email y Password busca datos presentes en la tabla "users". Cuando pasamos esta consulta al servidor de BB.DD., éste nos devuelve "true" si encuentra correspondencia y "false" en caso contrario.
Cuando los clientes envían datos vía Web usan URLs y formularios para construir las consultas. La siguiente URL representa un ejemplo de página de login para una aplicación web:
GET /shopping_cart/login.asp?Email= Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla &Password=$ecret123 HTTP/1.1
Esta URL muestra que la aplicación de destino es una página ASP y que está aceptando dos parámetros, uno llamado "Email" y otra llamada "Password". Si las credenciales del usuario son correctas, el resultado de esta consulta representará una autentificación correcta y será usada por el cliente para mostrar la página Web correspondiente.
Los desarrolladores de aplicaciones generalmente confían en la veracidad de los datos introducidos por los usuarios. Piensan que las consultas a las bases de datos provienen de una fuente de confianza en lugar de un navegador web de un usuario "malicioso". La inyección SQL es una técnica donde un usuario "malicioso" inserta una consulta SQL dentro de los campos de datos y los envía a la base de datos, en un intento de engañar a la misma y conseguir que ejecute los comandos.
El firewall de la aplicación web del ejemplo estaba configurado en modo "sólo detección", por lo que sólo generó alertas y eventos, no bloqueando el ataque. La página web resultante del ataque dio numerosa información, incluyendo la versión exacta y el usuario de la base de datos. Con estos datos, un atacante podría afinar más el ataque, consiguiendo incluso la estructura de la base de datos. Después de unos cuantos intentos, un atacante tendría numerosa información para intentar conseguir los datos de los clientes.
Los cibercriminales han gastado mucho tiempo en crear programas que pudieran explotar masivamente este defecto, puesto que la mayoría de los sitios ejecutan aplicaciones personalizadas. Sin embargo, el panorama cambió en 2007 con la aparición de los bots de inyección SQL. Estos programas usan un complejo script SQL para inyectar datos automáticamente en cualquier sitio vulnerable, sin ningún conocimiento de la estructura de la base de datos. Cuando consiguen el acceso, insertan código malicioso que apunta a
Malware de sitios de terceros. El código Javascript es usado dinámicamente en la página HTML que se presenta a los clientes e intenta explotar las vulnerabilidades de algunos navegadores web para instalar troyanos o puertas traseras.
El proyecto OWASP (Open Web Application Security Projec) se considera una excelente orientación para mitigar este tipo de ataques aconsejando, entre otros:
- Validación de las entradas: Usar un mecanismo de validación estándar para validar la longitud, tipo, sintaxis y reglas de la organización antes de aceptar y mostrar cualquier dato. Rechazar entradas incorrectas en lugar de intentar "sanear" posibles datos hostiles.
- Configuración de la base de datos: Usar APIs de consulta fuertemente parametrizadas con sustitución de marcadores, incluso cuando llamamos a procedimientos almacenados; forzar menores privilegios cuando nos conectemos a las bases de datos y a otros sistemas de back-end; no usar interfaces de consultas dinámicas como mysql_query() o similar.
- Evitar mensajes de error detallados: son muy valiosos para un atacante.
Los ataques de inyección SQL son los más usados por los cibercrimales profesionales, pero medidas de seguridad como una configuración correcta de la base de datos, código seguro aislado de la aplicación Web y un firewall en la aplicación Web son unas medidas extremadamente efectivas para mitigar estos ataques.
Fuentes: Pcworld



Twitter
Digg
Del.icio.us
Slashdot
Furl
Yahoo
Technorati
Googlize this
Blinklist
Facebook
Wikio
Meneame



