Recibe alertas instantáneas si tu sitio web cae
SMS Llamada Correo
Empezar a monitorizar

¿Qué son las inyecciones SQL y cómo protegerse?

Autor: Redacción HOSTTEST   | 17 sept 2021

SQL Injections wirksam bekämpfenDesde 2017 el número de ciberataques a nivel mundial ha aumentado de forma drástica - solo de 2019 a 2020 el Internet Crime Complaint Center del FBI estadounidense registró un incremento de aproximadamente 465.000 a casi 800.000 por año. Un patrón de ataque ya conocido y relativamente antiguo, pero aún muy extendido y a menudo exitoso, son las llamadas inyecciones SQL. Aunque hoy en día están bien documentadas y figuran entre las amenazas más comunes, los hackers criminales las siguen usando con diversos fines como ataques de denegación de servicio distribuido (DDoS), extorsión, robo de datos, fraude o la intrusión en infraestructuras TI ajenas.

Contenido:

¿Qué es SQL y qué importancia tiene para un servidor web?
¿Cómo funcionan las inyecciones SQL?
¿Qué ataques pueden llevarse a cabo mediante inyecciones SQL?
¿Cómo son las inyecciones SQL en la práctica?
¿Cómo se pueden prevenir las inyecciones SQL en un servidor?

¿Qué es SQL y qué importancia tiene para un servidor web?

Para comprender el funcionamiento de las inyecciones SQL es necesario poseer conocimientos básicos sobre bases de datos, su estructura y el funcionamiento de un servidor web. El término SQL es la abreviatura de Lenguaje de consulta estructurado (Structured Query Language) y se trata de un lenguaje técnico con el que se puede crear, leer, manipular y eliminar información en una base de datos. Define comandos específicos y la sintaxis con los que se organizan y se complementan mediante parámetros adicionales como datos.

En sitios web dinámicos, la base de datos contiene toda la información temporal como, por ejemplo, textos o enlaces y además contenidos críticos para el sistema —como nombres de usuario y contraseñas. La recuperación la realiza el intérprete de PHP en virtud de instrucciones en numerosos scripts y de permisos de acceso como la autenticación mediante inicios de sesión para bases de datos específicas. Para esta tarea debe comunicarse con programas externos como el servidor de bases de datos y el servidor web y poder acceder a ellos a nivel del sistema. Con un aseguramiento correcto del software, p. ej. del PHP-Framework Symfony y del código PHP, estos requisitos no representan un problema —sin embargo, también pueden ser explotados.

¿Cómo funcionan las inyecciones SQL?

El principio de las inyecciones SQL consiste en inyectar comandos adicionales a través de una interfaz pública, como una petición de página o un acceso directo a un servidor de base de datos, que recuperan información que normalmente no está accesible o incluso permiten la ejecución directa de código. La causa suele ser un error de programación que no aísla suficientemente los parámetros de las órdenes y provoca que funciones o comandos peligrosos puedan «inyectarse» en el servidor de base de datos. Tales vulnerabilidades suelen ocultarse en miles de líneas de código fuente de un Sistema de Gestión de Contenidos (CMS) o en excepciones en el funcionamiento del intérprete de PHP o del servidor de base de datos.

Como la causa de las inyecciones SQL se esconde en el propio código fuente, incluso en un sistema seguro pueden introducirse continuamente nuevas vulnerabilidades de seguridad. Dado que los desarrolladores de CMS populares ya han implantado amplias medidas contra tales fallos, hoy el mayor riesgo procede de plugins antiguos o mal programados, que a menudo provienen de desarrolladores individuales y, en ocasiones, inexpertos. También resultan problemáticas las extensiones cuyo desarrollo no se mantiene activamente por falta de tiempo o interés, y que por ello no reciben actualizaciones periódicas, por ejemplo tras la publicación de nuevas vulnerabilidades.

¿Qué ataques se pueden llevar a cabo mediante inyecciones SQL?

Las posibilidades de las inyecciones SQL son diversas, ya que el servidor web, el intérprete de PHP y el servidor de base de datos son procesos del sistema que poseen privilegios de acceso globales. Además, el servidor de base de datos gestiona todos los contenidos críticos, incluyendo el sitio web, así como datos sensibles como inicios de sesión, contraseñas e información personal. Los peligros que plantea un ataque de este tipo son, por tanto, considerables e incluyen numerosos escenarios críticos:

  • Obtención de información sensible
  • Alteración de los contenidos de un sitio web (defacement)
  • Infiltración de un servidor y escalada de privilegios
  • Ataques DDoS para interrumpir un sistema en producción
  • Extorsión mediante datos robados o introducción de ransomware
  • Creación de puertas traseras (backdoors) para posteriores intrusiones en el sistema
  • Abuso de recursos como la capacidad de procesamiento
  • Inserción de código malicioso, troyanos o correos electrónicos falsificados

Su versatilidad y amplia difusión son dos de las razones decisivas por las que muchos cibercriminales llevan más de una década empleando preferentemente las inyecciones SQL para atacar un servidor. En estos casos, es casi exclusivamente grupos profesionales los que actúan de forma dirigida contra un objetivo concreto; en cambio, muchos hackers individuales o bandas exclusivamente orientadas al beneficio buscan víctimas potenciales de forma aleatoria, escaneando grandes porciones de Internet en busca de vulnerabilidades existentes y explotándolas cuando las encuentran.

¿Cómo se manifiestan las inyecciones SQL en la práctica?

Para poder ejecutar funciones y consultas que en realidad no están autorizadas, un atacante modifica la URL generada automáticamente y pasa parámetros que provocan un comportamiento no deseado. Así, por ejemplo, es posible añadir una acción adicional a una petición legítima —por ejemplo una búsqueda— utilizando el separador punto y coma empleado en SQL entre dos comandos. Para ello basta, en el caso más simple, con añadir manualmente otro segmento de texto a una dirección como

https://example.com/search?query=abc

para, por ejemplo, modificar la contraseña o los permisos de acceso de un usuario determinado, incluido el administrador.

Otra táctica consiste en manipular una petición de modo que una determinada condición sea siempre verdadera. En el pasado se ha podido sortear, por ejemplo, un inicio de sesión mal programado porque mediante el nombre de usuario o la contraseña se cerraba el parámetro anterior e insertaba otra condición. Al tratarse de una conexión mediante O o (OR), el servidor de la base de datos interpreta el resultado siempre como verdadero y, en consecuencia, devuelve un acceso exitoso.

Un tercer procedimiento consiste en complementar una consulta legítima con otra que accede a datos en principio confidenciales y protegidos. Para ello se utiliza la extensión UNION, que permite combinar varias consultas de tablas distintas. Esto posibilita la obtención de información oculta, incluidas listas de direcciones de correo electrónico, nombres de usuario o contraseñas, y otros detalles sensibles como la estructura de la base de datos.

La variante de inyecciones SQL con diferencia más grave incluso permite ejecutar código directamente o acceder al sistema de archivos. Por ejemplo, es posible sobrescribir un programa estándar de uso habitual con código malicioso o con una versión infectada por un troyano, con lo que se consigue un acceso completo al sistema.

No menos importante, las inyecciones SQL también pueden utilizarse para ataques DDoS , cuando el atacante inunda el servidor de bases de datos con tareas intensivas en cálculo para consumir todos los recursos de un servidor virtual o servidor dedicado. Una forma sencilla de lograrlo es la ejecución de múltiples benchmarks realizados en paralelo o el cálculo de algoritmos criptográficos que generan una alta carga de procesamiento. Esto puede provocar que las peticiones habituales queden bloqueadas y que el servidor web responda a las conexiones entrantes con mensajes de error como el Error HTTP 500 (Internal Server Error) o el código de estado 504 Gateway Timeout.

¿Cómo se pueden prevenir las inyecciones SQL en un servidor?

La base de las inyecciones SQL, como en otras vulnerabilidades —por ejemplo un desbordamiento de variables (Buffer Overflow)—, radica en un error de programación. En equipos de desarrollo profesionales existe hoy en día una alta concienciación sobre estos riesgos, por lo que revisan de forma continua el código fuente en busca de estas vulnerabilidades. La protección más segura contra las inyecciones SQL la constituyen, por tanto, algunas medidas sencillas que deberían tenerse en cuenta y aplicarse en todos los servidores conectados a Internet:

  • Actualización periódica del software, como CMS y programas del sistema
  • Evitar plugins, plantillas y otras extensiones procedentes de fuentes no oficiales
  • Monitorización automática de los logs para detectar actividades inusuales
  • Sistemas sencillos y mínimos para reducir posibles vectores de vulnerabilidad
  • Asignación estricta de permisos para el acceso al sistema de ficheros
  • Uso de usuarios específicos en lugar de root para la base de datos y el servidor web

El factor determinante para una seguridad máxima frente a las inyecciones SQL reside, no obstante, en la capa del software utilizado y, en particular, en las rutinas empleadas en los scripts PHP. Si éstas no están suficientemente protegidas contra este tipo de ataques, no bastan medidas alternativas. Estas solo pueden limitar el daño o bien detectar los ataques realizados a tiempo para poder reaccionar con rapidez.

Foto: TheDigitalWay en Pixabay

Escribe un comentario


Más proveedores de hosting


Más artículos interesantes

Los mejores consejos para contraseñas seguras

Para proteger sus datos en Internet, es imprescindible establecer una contraseña segura. Aquí encontrará los mejores con...

Comprobar la versión de MySQL - así de fácil

También la versión de MySQL no debe estar desactualizada. Os mostramos cómo podéis consultarla.