tipos de SQL INYECTION
Los ataques de SQL Inyection se pueden llevar a cabo de varias maneras.Los atacantes pueden observar el comportamiento de un sistema antes de seleccionar un vector de ataque en particular.
ENTRADA NO DESINFECTADA
La entrada no desinfectada es un tipo común de ataque SQLI en el que el atacante proporciona una entrada del usuario que no desinfecta correctamente para los caracteres que se deban escapar o a la entrada que no sea valida sea del tipo correcto.
Por ejemplo un sitio web utilizado para pagar facturas en linea puede solicitar el numero de cuenta del usuario en un formulario web y luego enviarlo a la base de datos para obtener la información de la cuenta asociada.Si la aplicación web esta creando dinamicamente una cadena de consulta SQL con el numero de cuenta que proporciono el usuario podría verse de la siguiente manera:
«SELECT FROM customers WHERE account=» + userProvidedAccountNumber +»
Si bien esto funciona para los usuarios que ingresan correctamente su numero de cuenta,deja la puerta abierta para los atacantes.Por Ejemplo si alguien decide proporcionar un numero de cuenta de 0 1= 1 eso daría una cadena de consulta de :
«SELECT FROM customers WHERE account=» or 1=1.
Debido a que 1 =1 siempre se evalúa como verdadero,el envió de esta declaración a la base de datos dará como resultado la devolución de los datos de todos los clientes en lugar de un solo cliente.
BLIND SQL INYECTION
Un ataque de Inyección SQL ciego no revela datos directamente de la base de datos a la que se dirige.Mas bien el atacante examina de cerca las pistas indirectas en el comportamiento.Los detalles dentro de las respuestas HTTP,las paginas web en blanco para cierta entrada del usuario y el tiempo que tarda la base de datos en responder a cierta entrada del usuario son cosas que pueden ser pistas dependiendo del objetivo del atacante. También podrían apuntar a otra vía de ataque SQLI para que el atacante lo intente.
OUT OF BAND INYECTION
Este ataque es un poco mas complejo y puede ser utilizado por un atacante cuando no puede lograr su objetivo en un solo ataque directo de consulta y respuesta. Tipicamente un atacante creara sentencias SQL que cuando se presenten a la base de datos para crear una conexión a un servidor externo que controla el atacante.De esta manera el atacante puede recolectar datos o potencialmente controlar el comportamiento de la base de datos.
Una inyección de segundo orden es un tipo de ataque de inyección fuera de banda.En este caso el atacante proporcionara una inyección SQL que se almacenara y ejecutara mediante un comportamiento separado del sistema de base de datos.Cuando se produce el comportamiento del sistema secundario y se ejecuta la Inyección SQL del atacante es entonces cuando el contacto con un sistema los controles del atacante se llevan a cabo.
COMO PREVENIR ATAQUES SQL INYECTION
Las siguientes sugerencias pueden ayudar a evitar que un ataque de SQL Inyection tenga éxito:
NO USAR SQL DINÁMICO
-Evite colocar la entrada proporcionada por el usuario directamente en las instrucciones SQL.
-Las declaraciones preparadas y consultas parametrizadas son mucho mas seguras.
-Los procedimientos almacenados también suelen ser mas seguros que el SQL dinámico.
DESINFECTAR LAS ENTRADAS PROPORCIONADAS POR LOS USUARIOS
-Verificar que el tipo de datos enviados coincide con el tipo esperado.
NO DEJAR DATOS CONFIDENCIALES EN TEXTO SIN FORMATO
-Cifre los datos privados o confidenciales que se almacenan en la base de datos.
-Esta medida proporciona otro nivel de protección en caso de que un atacante extraiga con éxito datos confidenciales.
EVITAR MOSTRAR ERRORES DE LA BASE DE DATOS DIRECTAMENTE AL USUARIO
-Los atacantes pueden usar estos mensajes de error para obtener información sobre la base datos.
USAR UN FIREWALL DE APLICACIONES WEB (WAF) PARA APLICACIONES WEB QUE ACCEDEN A BASES DE DATOS
-Esto proporciona protección a las aplicaciones web.
-Puede ayudar a identificar intentos de inyección SQL
-Según la configuración también puede ayudar a evitar que los intentos de SQL Inyection lleguen a la aplicación y por lo tanto a la base de datos.
USAR UNA SOLUCIÓN DE PRUEBA DE SEGURIDAD DE APLICACIONES WEB PARA PROBAR APLICACIONES QUE INTERACTUAN CON BASES DE DATOS
-Hacerlo puede ayudar a detectar nuevos errores o regresiones que podrían permitir la inyección de SQL.
MANTENER LAS BASES DE DATOS ACTUALIZADAS CON LOS ÚLTIMOS PARCHES DISPONIBLES
-Esto evitara que los atacantes puedan explotar las debilidades o errores conocidos presentes en versiones anteriores.
La inyección SQL es un método de ataque popular para los adversarios,pero al tomar las precauciones adecuadas,como garantizar que los datos estén encriptados,que se protejan y se prueben las aplicaciones web y que este actualizado con parches,hay que tomar medidas significativas para mantener los datos seguros.