Entre los posibles ataques informáticos de los que se puede ser víctima está la inyección SQL, una técnica que permite a los atacantes introducir código maligno con el que poder alterar el funcionamiento de un programa o una página web para que funcione de forma muy distinta.
Así, con un ataque de inyección SQL, los atacantes pueden manipular las consultas a la base de datos y conseguir acceso no autorizado a datos sensibles, lo que a su vez les permite modificar o eliminar información importante. ¡Aprende a protegerte!
¿Qué es la inyección SQL?
Antes de nada, hablamos de qué es SQL. Structured Query Language, por sus siglas en inglés, es un lenguaje utilizado en programación que sirve para administrar y recuperar información que está recogida en un sistema de gestión de bases de datos relacionales.
A grandes rasgos, es un lenguaje que se gestiona a través de cuatro operaciones básicas denominadas CRUD (Create, Read, Update y Delete, es decir: Crear, Leer, Actualizar y Borrar). Además, existen otras cuatro instrucciones para hacer tareas, cada una asociada a una de las operaciones indicadas antes:
- INSERT, para insertar filas en una tabla, correspondiéndose con la “C” de CRUD.
- SELECT, para mostrar información sobre los datos almacenados en la base de datos, buscando en una o más tablas, según sea necesario. Se corresponde con la “R”.
- UPDATE, con la que podremos actualizar información de una tabla. Viene a ser la “U”.
- Por último, DELETE, que permite borrar filas de una tabla, siendo obviamente la “D”.
Con esto, podemos hacer una consulta SQL, es decir, solicitar que se realice algún tipo de acción sobre una base de datos. La más habitual (y por la cual es posible que alguna vez te ataquen) es saber el nombre de usuario y la contraseña de acceso a la administración de una página web. Los hackers saben cómo acceder a estos procesos de introducción de datos y pueden, al igual que el los inyectores de un motor le llevan combustible, introducir código malicioso en tu base de datos para recabar toda la información que quieran.
Si consiguen entrar en tu web, pueden manipular toda la información que alojes a su antojo. Pueden hacerse con datos confidenciales, como números de la Seguridad Social, datos de tarjetas de crédito o información sobre contabilidad de las empresas.
Dado que un ataque por inyección SQL puede afectar a cualquier web con una base de datos SQL, tiene como “ventaja” que al ser tan conocido este ataque es combatible y prevenible, aunque si consiguen acceder una vez será muy difícil quitarse de encima a tus atacantes, puesto que sabrán cómo volver a intentar tomar el control de tu web. Por si fuera poco existen varias aplicaciones que trabajan de forma automática, ahorrando recursos a los ciberdelincuentes y facilitándoles la tarea.
Otro problema recurrente en este tipo de ataques es que no es fácil detectarlo hasta que se ve claro el robo cometido, sobre todo cuando no se tiene experiencia y no está claro saber qué base de datos han atacado.
Cómo funciona un ataque por inyección SQL
Una inyección SQL empieza casi siempre cuando la persona que quiere entrar en tu web introduce su código malicioso en un formulario de acceso que tengas habilitado, por ejemplo, el clásico formulario de nombre de usuario y contraseña, o cuando envías por correo electrónico la contraseña a un cliente para que éste la ponga en la web y se inicie una búsqueda en la base de datos. Si no aparece esa cuenta de correo no habrá envío de contraseña, pero si aparece sí se enviará la nueva contraseña o la información necesaria para activar o restaurar la cuenta de tu cliente.
Para que actúe el código malicioso, en lugar de usar una cuenta de correo válida lo que se busca es colar las líneas de texto en SQL que sepa encontrar la información deseada, bien para modificar determinados datos o directamente eliminarlos.
Un comando estándar de búsqueda en SQL sería el siguiente:
SELECT data FROM table WHERE email = '$email';
En este punto, antes de iniciar el ataque, el hacker necesita conocer sí o sí cómo la propia aplicación gestiona los errores a la hora de introducir los datos en los campos. Una vez analizado este comportamiento con el correo electrónico, puede también que se eliminen aquellos caracteres no reconocidos (comillas, guiones, etc.) antes de buscar el dato requerido, o bien directamente que no se elimine nada, haciendo la búsqueda en bruto.
Llegado el caso se producirá un error de sintaxis, que en función de la aplicación que utilices para tu web gestione estos errores los mostrará o no, pero si los muestra se verá un mensaje del estilo Internal Error.
De todos modos, si quieres ver más ejemplos, Google es tu amigo. Hay innumerables páginas web con modelos claros, como el proyecto OWASP, cuyo organismo matriz (la Fundación OWASP) es una organización sin ánimo de lucro que ayuda a publicar toda información práctica e imparcial sobre seguridad en la red y de las aplicaciones informáticas.
Tipos de inyección SQL
Ahora que tienes claro qué es un ataque de inyección SQL, debes saber que existen de varios tipos y que cada uno de ellos tiene sus propias características y métodos para hacer daño.
- La inyección SQL clásica es el ataque de este tipo más común. En este caso, el atacante usa el mismo canal de comunicación para inyectar código malicioso y obtener los datos que necesita.
- La inyección SQL ciega se denomina así porque el atacante no puede ver directamente los resultados de sus consultas maliciosas. En vez de eso, consigue información basada en el comportamiento de la aplicación o los mensajes de error.
- Otro método de SQL injection es la inyección SQL basada en errores, técnica que explota los mensajes de error devueltos por la base de datos para obtener información sobre su estructura. Es decir, los atacantes provocan errores de forma intencionada para extraer los datos que desean.
- Además, la inyección SQL basada en tiempo es un tipo de inyección SQL ciega en la que el atacante envía consultas que provocan retrasos en las respuestas de la base de datos. Después, basta con medir estos tiempos de respuesta para deducir información sobre los datos y la estructura de la base de datos.
Vulnerabilidades asociadas a la inyección SQL
Ya hemos comentado que la inyección SQL aprovecha ciertas vulnerabilidades en el código de las aplicaciones para hacer daño. Por eso, si buscas cómo evitar una inyección SQL, te interesa conocerlas.
- Falta de validación y sanitización de entradas de datos por parte de los usuarios, lo que permite a los atacantes introducir código malicioso.
- El uso de consultas SQL construidas dinámicamente con datos de los usuarios puede provocar vulnerabilidades de inyección. Por eso se recomienda utilizar consultas parametrizadas y procedimientos almacenados..
- Dar a los usuarios permisos excesivos en la base de datos puede aumentar el impacto de un ataque de inyección SQL.
Ahora que sabes cuáles son las principales debilidades que los ciberatacantes pueden usar contra ti, podemos pasar a cómo prevenir una de estas indeseables intromisiones.
Cómo prevenir la inyección SQL
Prevenir la inyección SQL requiere de prácticas de codificación seguras y de un monitoreo constante. ¡Descubre algunas claves para conseguirlo!
- Validación y saneamiento de entradas, haciendo que todos los datos ingresados por los usuarios sean validados y sanitizados para evitar la inclusión de código malicioso.
- Uso de sentencias preparadas y consultas parametrizadas, técnicas que garantizan que las entradas del usuario sean tratadas como datos y no como código ejecutable.
- Utilizar bibliotecas ORM para interactuar con la base de datos utilizando el lenguaje de programación que prefieras, lo que reduce la necesidad de escribir consultas SQL en bruto.
- Configurar los permisos adecuados en la base de datos, siendo recomendable partir de un privilegio mínimo para los usuarios.
Ejemplos de inyección SQL y su prevención
Los ataques de inyección SQL pueden tener graves consecuencias, y con los siguientes ejemplos te quedará clarinete.
- Un atacante puede manipular una consulta de inicio de sesión para conseguir acceso a datos de usuario sin necesidad de autenticación. Para prevenir esto, una buena opción es usar consultas parametrizadas que traten todas las entradas de usuario como datos y no como parte de la consulta.
- Otro atacante podría usar una inyección SQL para cambiar información en la base de datos, como precios de productos. Para evitarlo, habría que utilizar procedimientos almacenados y validar las entradas de forma estricta.
Herramientas y recursos para la protección contra inyección SQL
Si quieres protegerte contra una inyección SQL, te interesa conocer algunas de las mejores herramientas y recursos para conseguirlo.
- Acunetix es una herramienta que escanea aplicaciones web en busca de vulnerabilidades como la inyección SQL.
- OWASP ZAP, un proyecto Open Source que ayuda a encontrar y solucionar vulnerabilidades de seguridad en aplicaciones web.
- SQLMap, herramienta de pruebas de penetración que automatiza la detección y explotación de fallos de inyección SQL.
Además, preocupaciones cotidianas como mantener el software actualizado, realizar auditorías de seguridad de forma recurrente y proporcionar formación en seguridad a los desarrolladores son importantes para reducir al mínimo el riesgo de recibir ataques de inyección SQL. ¡No descuides tus proyectos y no tendrás nada de lo que lamentarte!
Conclusión
La seguridad lo es todo en tu negocio, más cuando cualquier con un mínimo de conocimiento te puede destrozar todo el esfuerzo depositado. Nunca está de más cubrirse las espaldas, proteger todos tus archivos con las medidas necesarias y, si hiciese falta, contactar con un profesional que analice y controle todos los puntos débiles de tu página web.
No olvides también que, si echas un vistazo a los productos de seguridad web de GoDaddy, podrás darle un plus en materia de protección mostrando que tienes una web de confianza con un SSL o eliminando malware de tus archivos.