Al hablar de Inyección SQL, inmediatamente nuestra mente realiza un símil acerca de una inyectadora con SQL suministrándonos ciertos cc en nuestro organismo con efectos devastadores; sin embargo, si realizamos un paralelismo aplicados a los sistemas informáticos, nos llevamos la sorpresa, no tan grata, de que una Inyección SQL (Inglés: SQL Injection) aplicado a un sistema que este en internet, si tendría efectos devastadores.
Muchos desarrolladores de aplicaciones web pasan por alto, ya sea por desconocimiento o por flojera, este tipo de ataque que se realiza a los sistemas que están en la red, y lo ejecutan para poder tener acceso indebido a los datos de una organización, institución o simplemente un comercio que maneja sus operaciones por esa vía.
También existen los mal llamados “webmaster” que “administran” páginas web, estos señor@s cuando le indican sus jefes que se deben remozar o tener cierto componente la página, googlean buscando la tarea y los instalan en los manejadores de contenidos, sin saber que realmente están instalando, muchos de estos componentes poseen puertas traseras que dejan la bandeja servida a ataques de Inyección SQL de forma más fácil (los menos maliciosos), o los scripts más potentes que instalan consolas web para tener acceso a distancia y dañar la estructura física, lógica de la base datos y/o servidor.
¿Cómo funciona?
Su modus operandi se basa en detectar vulnerabilidades vía peticiones POST o GET, estas peticiones, son patrones de SQL pensados para anular o deshabilitar la acción original y en base a esta, generar nuevas sentencias que permitan obtener información acerca de cualquier cosa, principalmente cuando se ataca por esta vía, lo primero que se busca es tener acceso a la aplicación objetivo.
Esta sería una de las acciones menos nocivas del ataque, son múltiples las acciones que se podían realizar, una vez detectado que la aplicación objetivo es vulnerable, estas acciones pueden pasar desde corromper la base de datos, borrar registros, borrar tablas completas hasta borrar toda la base de datos e inclusive comprometer la seguridad total del servidor donde se aloja la aplicación.
¿La practica supera la teoría, no?
Existen muchas maneras de realizar un ataque, a continuación se muestra un ejemplo de la forma más sencilla de realizarlo, pero que se entienda que por ser las más sencilla no deja de ser nociva.
Supongamos que se tiene un simple formulario de acceso a una aplicación que pide “Login de Usuario” y “Clave de Usuario” , a la cajita de usuario se coloca cualquier nombre: petronila y en la cajita de clave se coloca la siguiente expresión de SQL: ‘ or 1=1 —
Para ver el caso práctico se muestra la siguiente imagen:
Al hacer el envío de los datos, estos pasarían a realizar una consulta SQL para poder verificar si los datos son correctos, con los datos comentados anteriormente el SQL se conformaría de la siguiente forma:
select * from usuarios where usuario = ‘pretonila‘ and clave = ‘‘ or 1=1 —
Los caracteres en verde, realizan la inyección del código sql pasando a desactivar la sentencia y agregando un operador lógico or más una comparación de igualdad que es cierta 1=1.
La comparación lógica final del or, permite inhabilitar el sql a su izquierda y proporcionar una operación lógica verdadera que da como resultado que el sql traiga valores de base de datos, dando acceso final a la aplicación.
Este es un simple ejemplo de cómo actúa este tipo de ataques.
¿Cómo evitarlo?
El desarrollador que se haga a cargo de la parte de seguridad de un sistema, debe validar por todas vías, tanto POST como GET, que cada una de las entradas no contengan código malicioso SQL (como el explicado anteriormente), que permita romper la seguridad de los datos del sistema.
Suena fácil, pero si un sistema está creado y no tiene nada de seguridad, pasar a ser una tarea ardua que se debe hacer por cada una de variables que maneja la aplicación con el mundo exterior, lo más sano, es que a medida que se va desarrollando una aplicación, se vaya validando cada una de las entradas.
Existen múltiples programas libres que permiten realizar pruebas a las aplicaciones, también es una buena opción para mantener tu seguridad de sistema al día, ya que a medida que pasa el tiempo, las técnicas de ataques se van perfeccionando.
Existe una premisa en el mundo de la informática que reza de la siguiente manera: “Ningún sistema o aplicación es completamente seguro mientras este conectado a algún tipo de red”, por eso la tarea de los desarrolladores es ardua, se debe estudiar todos los días para mantener los sistemas de información de forma “segura”.
DesdeLaPlaza.com / Víctor Suárez