Saltar al contenido principal

Los ataques de inserción de SQL son una de las vulnerabilidades de aplicaciones web más antiguas, ya que se analizan desde finales de los años 90, pero siguen siendo relevantes en la actualidad. En este artículo se explica qué son, cómo funcionan y cómo se pueden prevenir.

Inserción de SQL: significado y definición

Una inserción de SQL, que a veces se abrevia como SQLi, es un tipo de vulnerabilidad en la que un atacante utiliza un fragmento de código SQL (Structured Query Language, lenguaje de consulta estructurado) para manipular una base de datos y obtener acceso a información potencialmente valiosa. Es uno de los tipos de ataque más frecuentes y amenazadores, porque puede atacar prácticamente cualquier aplicación o sitio web que utilice una base de datos basada en SQL (que son la mayoría).

¿Cómo funcionan los ataques de inserción de SQL?

Para entender la inserción de SQL, es importante saber qué es el lenguaje de consulta estructurado. SQL es un lenguaje de consulta que se utiliza en programación para acceder a datos almacenados en bases de datos relacionales, modificarlos y eliminarlos. Debido a que la gran mayoría de los sitios y aplicaciones web dependen de bases de datos SQL, un ataque de inserción de SQL puede tener graves consecuencias para las organizaciones.

Una consulta SQL es una solicitud que se envía a una base de datos para que se realice algún tipo de actividad o función, como consultas de datos o ejecuciones de código SQL. Un ejemplo es cuando la información de inicio de sesión se envía a través de un formulario web para permitir que un usuario acceda a un sitio. Normalmente, este tipo de formulario web está diseñado para aceptar solo ciertos tipos de datos, como un nombre o una contraseña. Cuando se añade dicha información, se contrasta con una base de datos y, si coincide, se permite la entrada al usuario. Si no coincide, se deniega el acceso.

Surgen posibles problemas porque la mayoría de formularios web no pueden evitar de ninguna manera que se introduzca información adicional en los formularios. Los atacantes pueden aprovechar esta debilidad y usar las casillas de entrada del formulario para enviar sus propias solicitudes a la base de datos. De esta manera, podrían realizar una amplia gama de actividades perversas, desde el robo de datos confidenciales hasta la manipulación de la información de la base de datos para sus propios fines.

Dado el predominio de sitios web y servidores que utilizan bases de datos, las vulnerabilidades de inserción de SQL son uno de los tipos de ciberataques más antiguos y extendidos. Varios acontecimientos en la comunidad hacker han aumentado el riesgo de este tipo de ataque, sobre todo la aparición de herramientas para detectar y aprovechar la inserción de SQL. Estas herramientas, disponibles de forma gratuita por medio de desarrolladores de código abierto, permiten a los cibercriminales realizar ataques automáticamente en unos minutos, ya que les brindan acceso a cualquier tabla o columna de la base de datos con un sencillo proceso de clic y ataque.

Síntomas de la SQLi

Es posible que un ataque de inserción de SQL exitoso no muestre ningún síntoma. Sin embargo, a veces hay algunas señales externas, entre las que se incluyen:

  • Recepción de un número excesivo de solicitudes en un corto plazo de tiempo. Por ejemplo, muchos correos electrónicos del formulario de contacto de tu página web.
  • Anuncios que redirigen a sitios web sospechosos.
  • Ventanas emergentes y mensajes de error extraños. 

Tipos de inserción de SQL

Según la forma de acceso a los datos del back-end y el alcance del posible daño que provocan, las inserciones de SQL se dividen en tres categorías:

SQLi en banda: 

Este tipo de ataque de SQLi es sencillo para los atacantes, porque utilizan el mismo canal de comunicación para lanzar los ataques y obtener los resultados. Este tipo de ataque de SQLi tiene dos subvariantes:

  • SQLi basada en errores: la base de datos genera un mensaje de error debido a las acciones del atacante. El atacante obtiene información sobre la infraestructura de la base de datos en función de los datos generados por estos mensajes de error.
  • SQLi basada en unión: el atacante utiliza el operador UNION SQL para obtener los datos deseados mediante la fusión de varias declaraciones select en una única respuesta HTTP.

SQLi inferencial (también conocida como inserción de SQL ciega): 

En este tipo de SQLi, los atacantes utilizan los patrones de respuesta y comportamiento del servidor después de enviar cargas útiles de datos para obtener más información sobre su estructura. Los datos no se transfieren desde la base de datos del sitio web al atacante, por lo que este no ve la información sobre el ataque en banda (por eso se utiliza el término “SQLi ciega”). La SQLi inferencial puede clasificarse en dos subtipos:

  • SQLi basada en el tiempo: los atacantes envían una consulta SQL a la base de datos, de modo que la base de datos espere unos segundos antes de responder si la consulta es verdadera o falsa.
  • SQLi booleana: los atacantes envían una consulta SQL a la base de datos, de modo que la aplicación responda generando un resultado verdadero o falso.

SQLi fuera de banda: 

Este tipo de ataque de SQL tiene lugar en dos situaciones:

  • Cuando los atacantes no pueden utilizar el mismo canal para lanzar el ataque y recopilar la información; o
  • cuando un servidor es demasiado lento o inestable para llevar a cabo estas acciones.
Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

Impacto de los ataques de inserción de SQL

Un ataque de inserción de SQL exitoso puede tener graves consecuencias para una empresa. Esto se debe a que mediante un ataque de inserción de SQL se puede hacer lo siguiente:

  • Exponer datos confidenciales. Los atacantes pueden extraer datos, lo que supone el riesgo de la exposición de datos confidenciales almacenados en el servidor SQL.
  • Comprometer la integridad de los datos. Los atacantes pueden alterar o eliminar información del sistema.
  • Comprometer la privacidad de los usuarios. En función de los datos almacenados en el servidor SQL, un ataque puede exponer información confidencial de los usuarios, como direcciones, números de teléfono y datos de tarjetas de crédito.
  • Conceder al atacante acceso de administrador al sistema. Si un usuario de la base de datos tiene privilegios de administrador, un atacante puede obtener acceso al sistema a través de un código malicioso.
  • Conceder al atacante acceso general a tu sistema. Si utilizas comandos SQL débiles para comprobar los nombres de usuario y las contraseñas, un atacante podría acceder a tu sistema sin conocer las credenciales de ningún usuario. De esta forma, el atacante puede causar problemas al acceder a información confidencial y manipularla.

El coste de un ataque de inserción de SQL no es solo económico: también puede suponer la pérdida de la confianza de los clientes y daños en la reputación si se roba información personal como nombres, direcciones, números de teléfono y datos de tarjetas de crédito. Cuando se pierde la confianza del cliente, es difícil recuperarla.

Ejemplos de inserción de SQL

A lo largo de los años, muchas organizaciones han sido víctimas de SQLi. Estos son algunos ejemplos destacados:

Fortnite, 2019

Fortnite es un juego en línea con más de 350 millones de usuarios. En 2019, se descubrió una vulnerabilidad de inserción de SQL que permitía a los atacantes acceder a las cuentas de los usuarios. La vulnerabilidad se corrigió.

Cisco, 2018

En 2018, se encontró una vulnerabilidad de inserción de SQL en Cisco Prime License Manager. La vulnerabilidad permitía a los atacantes obtener acceso shell a los sistemas en los que estaba implementado el gestor de licencias. Cisco ya corrigió la vulnerabilidad.

Tesla, 2014

En 2014, los investigadores de seguridad anunciaron que podían quebrantar el sitio web de Tesla con una inserción de SQL, lo que permitía obtener privilegios de administrador y robar datos de los usuarios en el proceso.

Preguntas frecuentes sobre los ataques de inserción de SQL

Estas son algunas de las preguntas frecuentes sobre SQLi:

¿Qué es un ataque de inserción de SQL?

Un ataque de inserción de SQL utiliza código SQL malicioso para manipular la base de datos de back-end y acceder a información privada. Esta información puede incluir información confidencial de la empresa, listas de usuarios o detalles de los clientes. SQL es la sigla de "Structured Query Language", que significa "lenguaje de consulta estructurado", e inserción de SQL a veces se abrevia como SQLi.

¿Qué hace una inserción de SQL?

Los ataques de inserción de SQL permiten a los atacantes suplantar la identidad, alterar los datos existentes, revelar datos del sistema, destruir datos o hacer que no estén disponibles, y convertirse en administradores del servidor de la base de datos. Los ataques de inserción de SQL pueden provocar daños graves a las empresas, como la pérdida de confianza de los clientes si se filtran los datos confidenciales de los usuarios.

¿Cómo son los ataques de inserción de SQL habituales?

Debido a que son relativamente fáciles de implementar y la posible recompensa es grande, los ataques de inserción de SQL son frecuentes. Las estadísticas varían, pero se estima que los ataques de inserción de SQL constituyen la mayoría de los ataques en las aplicaciones de software. Según el Open Web Application Security Project (Proyecto abierto de seguridad de aplicaciones web), los ataques de inserción, que incluyen inserciones de SQL, fueron el tercer riesgo de seguridad más grave en las aplicaciones web en 2021.

Cómo prevenir los ataques de inserción de SQL

Para las empresas interesadas en la prevención de las inserciones de SQL, los principios clave para ayudar a proteger los sitios y las aplicaciones web son los siguientes:

Formar al personal:Capacita al equipo responsable de tu aplicación web sobre los riesgos basados en SQLi y brinda la formación necesaria a todos los usuarios en función del puesto.

Controlar los datos que ingresan los usuarios:Cualquier entrada de usuario utilizada en una consulta SQL genera un riesgo. Trata las entradas de los usuarios autenticados e/o internos de la misma manera que las entradas públicas hasta que se comprueben. Concede a las cuentas que se conectan a la base de datos SQL solo los privilegios mínimos necesarios. Utiliza listas blancas como práctica habitual en lugar de listas negras para verificar y filtrar las entradas de los usuarios.

Utilizar las versiones más recientes:Es importante utilizar la versión más reciente del entorno de desarrollo para maximizar la protección, ya que es posible que a las versiones más antiguas les falten funciones de seguridad. Asegúrate de instalar el software y los parches de seguridad más recientes cuando estén disponibles.

 

Analizar de forma continua las aplicaciones web:

Utiliza herramientas integrales de administración del rendimiento de las aplicaciones. Analizar con regularidad las aplicaciones web permite identificar y abordar posibles vulnerabilidades antes de que provoquen daños graves.

Usar un firewall:Un firewall de aplicaciones web (WAF, por su sigla en inglés) a menudo se utiliza para filtrar SQLi, así como otras amenazas en línea. Un WAF confía en una amplia lista de firmas que se actualiza con frecuencia y permite filtrar consultas SQL maliciosas. Por lo general, la lista contiene firmas para hacer frente a vectores de ataque específicos y se corrige regularmente en respuesta a las vulnerabilidades descubiertas recientemente.

Productos relacionados:

Más artículos:

¿Qué es la inserción de SQL? Definición y explicación

La inserción de SQL permite que los atacantes obtengan acceso no autorizado a las bases de datos y provoquen daños a las empresas. Obtén más información sobre cómo funcionan las inserciones de SQL.
Kaspersky Logo