La inyección SQL (SQL injection) es una vulnerabilidad de seguridad web que permite a un atacante interferir con las consultas que una aplicación realiza a su base de datos. Por lo general, permite que un atacante vea datos que normalmente no se pueden mostrar. Esto puede incluir datos pertenecientes a otros usuarios o cualquier otro dato al que la propia aplicación pueda acceder. En muchos casos, un atacante puede modificar o eliminar estos datos, provocando cambios persistentes en el contenido o en el comportamiento de la aplicación.
En pocas palabras, podemos definir que un ataque de inyección SQL es cuando se le da a un atacante la capacidad de influir en una aplicación que pasa a una base de datos las consultas usando el lenguaje de consulta estructurado (SQL).
En algunas ocasiones, un atacante puede escalar un ataque de inyección SQL para comprometer el servidor u otra infraestructura de una BD o incluso realizar un ataque de denegación de servicio.
La inyección de SQL no es una vulnerabilidad que afecte exclusivamente a las aplicaciones web, cualquier código que acepte entradas de una fuente no confiable y luego use esa entrada para formar declaraciones SQL dinámicas podría ser vulnerable.
Esta importante vulnerabilidad se ha adjudicado a un hacker con el sobrenombre de “Rain Forest Puppy”, quién describió a inicios de los 2000’s como comprometió un popular sitio llamado PacketStorm. Desde entonces, muchos investigadores han desarrollado y perfeccionado técnicas para aprovechar la inyección SQL. Sin embargo, hasta el día de hoy, muchos de ellos todavía no lo entienden bien.
Las bases de datos vienen con varios usuarios predeterminados preinstalados. Microsoft SQL Server usa la infame cuenta de administrador del sistema de base de datos “sa”, MySQL usa las cuentas de usuario “root” y “anonymous”, y con Oracle, las cuentas SYS, SYSTEM, DBSNMP y OUTLN que a menudo se crean de forma predeterminada cuando se crea una base de datos.
Impacto de un ataque de inyección SQL
Un ataque de inyección SQL exitoso puede resultar en un acceso no autorizado de datos confidenciales, como contraseñas, detalles de tarjetas de crédito o información personal de los usuarios.
Se sabe que muchas violaciones de datos en los últimos años han sido resultado de ataques de inyección SQL, lo que ha generado a las empresas que se han visto envueltas en esta vulnerabilidad a multas reglamentarias y daños a su reputación. En algunos casos, un atacante puede haber descubierto una “puerta trasera” en los sistemas de la organización por un largo periodo de tiempo que puede pasar desapercibido, lo cual, hace a este ataque todavía más peligroso.
Ejemplos de SQL injection
Existe una amplia variedad de vulnerabilidades, ataques y técnicas de inyección de SQL, que surgen en diferentes situaciones. Algunos ejemplos pueden ser:
- Recuperando datos ocultos, donde se puede modificar una consulta SQL para devolver resultados adicionales.
- Perturbar la lógica de la aplicación, donde se puede cambiar una consulta para interferir con la lógica con la cual una aplicación fue diseñada.
- Ataques ‘UNION’, donde es posible recuperar datos de diferentes tablas de bases de datos.
- Examinar la base de datos, donde se puede extraer información sobre la versión y estructura de la base de datos.
- Inyección ciega de SQL, donde los resultados de una consulta que controlas no se devuelven en las respuestas de la aplicación
- En muchos dispositivos móviles y dispositivos embebidos se usan bases de datos locales para almacenar información., las cuales son vulnerables si el atacante tienes las condiciones idóneas para explotar una vulnerabilidad.
- Escalar privilegios, una vez que se ha tenido acceso a la base de datos, es posible hacer un escalamiento de privilegios del usuario en cuestión modificando sus permisos a través de la exploración de la propia base utilizando sentencias SQL.
Conclusión
Existen una variedad de técnicas que se pueden usar por si solas o en combinación para extraer la información de las bases de datos, es imprescindible para las compañías hoy en día invertir en métodos de seguridad que ayuden a prevenir este tipo de ataques, es por ello que no deben escatimar en prácticas de codificación seguras, tener firewalls bien configurados y un continuo seguimiento en evaluar las vulnerabilidades de sus propios sistemas para evitar estos ataques. Tener esto en cuenta, permitirá responder de manera eficiente y descartar un ataque de inyección de SQL sospechoso o limitarlo o incluso, si el ataque ya sucedió, recuperarse de manera oportuna para minimizar el impacto en el negocio.