Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Si hay algo que les encanta a los ciberdelincuentes, son los datos. Los datos robados son muy valiosos en los mercados ilícitos, y el acceso a bases de datos privadas puede ser una excelente manera para que los actores maliciosos obtengan ganancias de sus empresas. Una forma de acceder a datos privados es a través de una inyección SQL. Pero, ¿qué es exactamente una inyección SQL, cómo funciona y se puede prevenir tal ataque?

¿Qué es una inyección SQL?

Los programas de software dependen del código para funcionar. El código también es el lenguaje que usan las máquinas para realizar operaciones y puede presentarse en muchas formas (Python, JavaScript, C++, etc.). A menudo, los ciberdelincuentes pueden atacar a las víctimas a través del código, y las inyecciones de SQL (o SQLis) no son diferentes. Estos permiten a los actores maliciosos "inyectar" código dañino en una declaración SQL.

instagram viewer

Primero repasemos lo que significa SQL.

SQL significa lenguaje de consulta estructurado. Este es otro tipo de lenguaje de programación. se utiliza específicamente cuando se trata de bases de datos. Desarrollado en la década de 1970 por IBM, SQL puede manipular, almacenar y recuperar información de bases de datos. Muchos sistemas de comunicación de bases de datos en todo el mundo usan SQL, por lo que no sorprende que los actores de amenazas hayan ideado formas de abusar de él para apuntar a las bases de datos.

Las declaraciones SQL forman una parte clave de la comunicación de la base de datos. Una instrucción SQL es un comando que viene en muchas formas diferentes. Algunos alteran los datos, algunos los recuperan o los eliminan, y algunos pueden cambiar la estructura de la base de datos en sí. Cuando ocurre una inyección SQL, el código malicioso se inyecta en una declaración SQL.

Por supuesto, un sitio web o una aplicación debe utilizar el lenguaje de programación SQL para que sea posible una inyección de SQL. Pero, ¿cómo funciona este vector de ataque?

Supongamos que tiene una línea de código regular utilizada por una aplicación. Cuando un ciberdelincuente inserta una inyección SQL maliciosa, se agrega una línea de código que puede interferir con las consultas que la propia aplicación envía a su base de datos. Al hacer esto, la base de datos se puede explotar de una manera que permite al actor de amenazas ver datos a los que de otro modo no tendría acceso.

A partir de aquí, el ciberdelincuente podría sustraer datos para explotarlos directamente o venderlo en la web oscura o en otro lugar. También podrían modificar, agregar o eliminar datos de la base de datos de destino. Dependiendo del grado del ataque de inyección SQL, se podría causar mucho daño. Si se accede a detalles de pago, números de seguro social u otros tipos de datos privados, muchas personas podrían correr el riesgo de ser explotadas.

Por otro lado, si el atacante logra alterar significativamente la base de datos, grandes cantidades de datos podrían perderse de forma permanente. Con todo, las inyecciones de SQL pueden destruir bases de datos completas con un solo ataque. Si bien existen desde 1998, siguen siendo relevantes y peligrosos en la actualidad.

Como lo encontró el Proyecto de seguridad de aplicaciones web abiertas (OWASP), se identificaron 274 000 instancias de inyecciones de SQL al probar aplicaciones para detectar la presencia de dicho ataque en 2021.

Los tipos de inyección SQL

Hay algunos tipos diferentes de inyección SQL, siendo los tres principales inyecciones ciegas, dentro de banda y fuera de banda.

Una inyección SQL ciega (o inferencial) ocurre cuando la aplicación o el sitio es atacado por el inyección, pero las respuestas HTTP (protocolo de transferencia de hipertexto) proporcionadas no contienen el resultado de la Consulta SQL. En otras palabras, ningún dato de la base de datos atacada se entrega al ciberdelincuente. Entonces, ¿cuál es el punto de esto?

Usando una inyección SQL ciega, un atacante envía datos al servidor de destino y luego puede discernir ciertas cosas sobre una base de datos a través de la naturaleza de la respuesta HTTP en sí. Además de esto, los factores asociados con la respuesta HTTP pueden ayudar al atacante a crear otra inyección SQL más efectiva para acceder a la base de datos.

Hay dos tipos clave de inyección SQL ciega, conocidas como basadas en el tiempo y booleanas. Estas dos variantes son bastante similares en su naturaleza. Tanto una inyección SQL booleana como una basada en el tiempo envían una serie de preguntas de respuesta sí o no, aunque la última requerirá que la base de datos espere un poco antes de responder a las consultas.

A continuación, hay inyecciones de SQL en banda. Las inyecciones de SQL en banda permiten al operador llevar a cabo el ataque y obtener el resultado deseado utilizando el mismo canal. Las inyecciones de SQL en banda son las más utilizadas, simplemente porque son las más fáciles de realizar debido al hecho de que solo requieren un canal.

Por último, tiene una inyección de SQL fuera de banda. Esta es esencialmente la versión alternativa de una inyección de SQL en banda, en la que el atacante no puede llevar a cabo el ataque en total utilizando un solo canal. Alternativamente, un ataque puede necesitar recurrir a una inyección de SQL fuera de banda si el servidor de destino simplemente no es lo suficientemente rápido para proporcionar resultados.

Estos factores hacen que el proceso sea un poco más difícil, lo que significa que debe depender de ciertas características para estar activo en la base de datos de destino para el éxito. Por ejemplo, la plataforma que está siendo atacada debe tener una falta de saneamiento de entrada. Debido a esto, las inyecciones de SQL en banda son mucho más comunes que las inyecciones de SQL fuera de banda. Pero todavía suceden.

¿Se pueden evitar las inyecciones de SQL?

Las inyecciones de SQL preocupan más a las empresas y organizaciones que a las personas normales. Pero hay cosas que estos objetivos potenciales pueden hacer para reducir la posibilidad de ser alcanzados por un ataque de este tipo.

El saneamiento de entrada es la práctica común clave para evitar las inyecciones de SQL. Este es un proceso de filtrado que escanea y limpia la entrada de caracteres peligrosos. Si el código SQL se procesa antes de ser desinfectado, la posibilidad de una inyección SQL aumentará naturalmente.

Además, las consultas parametrizadas pueden ayudarlo a mantenerse alejado de las inyecciones de SQL. Estas son consultas que requieren al menos un parámetro para su ejecución. La aplicación de parámetros dificulta que los ciberdelincuentes lleven a cabo con éxito un ataque de inyección SQL.

Pero no existe una forma segura de evitar una inyección SQL. Como ocurre con muchos ciberataques, es prácticamente imposible mantener sus dispositivos y sistemas totalmente herméticos. Cuando se trata de inyecciones de SQL, lo mejor que puede hacer es desinfectar todas las entradas y establecer consultas parametrizadas.

Las inyecciones de SQL son antiguas, pero siguen siendo una amenaza

Si bien las inyecciones de SQL existen desde hace más de 20 años, aún representan un riesgo para muchos sitios web y aplicaciones. Por lo tanto, es una buena idea tener en cuenta esta forma de ataque y tomar las medidas necesarias para intentar prevenirlo, ya que podría representar una amenaza para sus bases de datos en algún momento en el futuro.