Prevencion de inyeccion de codigo
¿COMO PREVIR LA INYECCION SQL?
¿Qué son los ataques de inyección SQL?La inyección SQL es un ataque de inyección de código utilizado para atacar aplicaciones basadas en datos en las que se insertan sentencias SQL maliciosas en un campo de entrada para su ejecución.
Los ataques de inyección SQL son el tipo más común de violación de la seguridad de las bases de datos. SQL (Structured Query Language) es un lenguaje de programación para acceder y manipular bases de datos. Una aplicación web utiliza una base de datos SQL para almacenar, recuperar y manipular datos.
Estos ataques pueden producirse cuando usuarios malintencionados envían comandos a una base de datos introduciéndolos en cuadros de entrada de sitios o aplicaciones web. El objetivo del ataque es modificar o destruir la información almacenada en la base de datos, ya sea por razones maliciosas o simplemente por el placer de ver cómo se queman las cosas. El objetivo del atacante es hacer que la base de datos se comporte de forma no intencionada, de modo que se pueda recuperar de ella información que no estaba prevista por sus creadores.
Tanto si elige MariaDB o MySQLninguna base de datos es completamente inmune a las innumerables tácticas de los hackers modernos. Por lo tanto, es necesario ser proactivo para evitar que tengan éxito.
Consejos para evitar ataques de inyección SQLLos ataques de inyección SQL pueden prevenirse aplicando las siguientes buenas prácticas:
Enfoque de confianza ceroA confianza cero es un enfoque de la seguridad en el que una organización asume que todos los usuarios, incluidos los administradores, socios externos y proveedores, no son de confianza y son atacantes potenciales. La organización debe aplicar controles estrictos al acceso y uso de la información.
Esto incluye eliminar o reducir las dependencias de conexiones externas a bases de datos, aplicaciones o servicios.
Los procedimientos almacenados son una forma de minimizar el riesgo de ataques de inyección SQL, ya que son más seguros que las consultas SQL dinámicas. Sin embargo, si se utilizan procedimientos almacenados además de consultas dinámicas, hay que tener cuidado durante las pruebas para asegurarse de que no existen vulnerabilidades en los procedimientos almacenados.
Limitar privilegiosAl crear cuentas nuevas, lo mejor es asignar sólo los privilegios mínimos necesarios para que la cuenta funcione correctamente. Por ejemplo, cree dos cuentas diferentes con privilegios distintos si necesita una cuenta que pueda crear informes pero no eliminarlos. De este modo, los piratas informáticos tendrán más dificultades para acceder a datos confidenciales o hacerse con el control de las cuentas aprovechando cualquier vulnerabilidad del código de tu aplicación o de los archivos de configuración.
Utilizar procedimientos almacenadosLos procedimientos almacenados pueden ejecutar varios comandos SQL en una sola sentencia. Ayudan a prevenir los ataques de inyección SQL porque no permiten a los usuarios acceder directamente al servidor de base de datos a través de campos de entrada de código como "nombre de usuario" o "contraseña". En su lugar, utilizan funciones predefinidas que pueden llamarse desde el código de la aplicación, utilizando parámetros pasados por el usuario (el desarrollador de la aplicación web).
He aquí cómo crear un procedimiento almacenado en MySQL. Por ejemplo, usted tiene una tabla como esta:
CREAR TABLA salario (empid int(11) NO NULL,sal int(11) DEFAULT NULL,PRIMARY CLAVE ('empid)) MOTOR=InnoDB DEFAULT CHARSET=utf8;
De esta forma, si un atacante intenta inyectar código malicioso en dicho parámetro, fallará porque no hay conexión entre la aplicación y tu servidor de base de datos. ¡Todo ocurre localmente en tu máquina!
Utilizar consultas parametrizadasLos ataques de inyección SQL se producen porque la información proporcionada por el usuario se utiliza en consultas SQL sin haber sido desinfectada previamente. Una forma de evitarlo es utilizar consultas parametrizadas, es decir, consultas que utilicen variables en lugar de constantes en la cadena de consulta. Por ejemplo:
SELECCIONE * DE tabla WHERE columna =?En lugar de:
SELECCIONE * DE tabla WHERE columna = valorSeguridad multicapaLas inyecciones SQL se producen cuando se inserta código malicioso en las sentencias SQL de una aplicación. A continuación, el código inyectado es ejecutado por el servidor web, lo que provoca que devuelva datos de la base de datos que el desarrollador no pretendía.
Debes aplicar múltiples capas de defensa contra este tipo de ataques para evitar que esto ocurra. Esto incluye la configuración de cortafuegos y la implantación de mecanismos de autenticación fuerte para todos tus usuarios, como la autenticación de dos factores (2FA).
Tipos de ataques de inyección SQLExisten tres tipos de inyección SQL:
Entrada no saneada - Este tipo de inyección SQL se produce cuando una aplicación no filtra o desinfecta su entrada y la utiliza directamente en una consulta sin realizar la validación o codificación. Esto puede tener consecuencias no deseadas, como la ejecución de consultas inesperadas, la llamada a funciones que deberían estar restringidas, la modificación del contenido de tablas, etc.
Inyección fuera de banda - Este tipo de inyección SQL se produce cuando se envían datos maliciosos a una aplicación a través de canales distintos de los especificados para la entrada interactiva del usuario (por ejemplo, correo electrónico). Esto puede incluir canales de comunicación no textuales como la mensajería instantánea o la carga de archivos.
Inyección SQL ciega - Este tipo de inyección SQL se produce cuando un atacante no puede ver lo que está sucediendo entre bastidores porque el sistema de destino no devuelve mensajes de error cuando se proporcionan valores no válidos como entrada.
Pruebas de inyección SQLLa prueba de inyección SQL está diseñada para detectar vulnerabilidades de inyección SQL en aplicaciones web. Es especialmente valioso para los desarrolladores web.
La prueba se creó utilizando el OWASP Zed Attack Proxy (ZAP).
La Prueba de Inyección SQL es un servicio gratuito proporcionado por la Fundación OWASP para ayudarle a evaluar la postura de seguridad de su aplicación contra ataques de Inyección SQL. La prueba destaca cualquier vulnerabilidad de SQL Injection encontrada en su aplicación, junto con recomendaciones para remediarlas.
Sqlmap es una herramienta de pruebas de penetración de código abierto que automatiza la detección y explotación de fallos de inyección SQL y el control de servidores de bases de datos. Viene con un motor de detección de gran alcance, muchas características de nicho para el probador de penetración final, y una amplia gama de interruptores que van desde huellas dactilares de base de datos sobre la obtención de datos de la DB para acceder al sistema de archivos subyacente y ejecutar comandos en el sistema operativo a través de conexiones fuera de banda.
¿Qué son los ataques de inyección SQL?
La inyección SQL es un ataque de inyección de código utilizado para atacar aplicaciones basadas en datos en las que se insertan sentencias SQL maliciosas en un campo de entrada para su ejecución.
Los ataques de inyección SQL son el tipo más común de violación de la seguridad de las bases de datos. SQL (Structured Query Language) es un lenguaje de programación para acceder y manipular bases de datos. Una aplicación web utiliza una base de datos SQL para almacenar, recuperar y manipular datos.
Estos ataques pueden producirse cuando usuarios malintencionados envían comandos a una base de datos introduciéndolos en cuadros de entrada de sitios o aplicaciones web. El objetivo del ataque es modificar o destruir la información almacenada en la base de datos, ya sea por razones maliciosas o simplemente por el placer de ver cómo se queman las cosas. El objetivo del atacante es hacer que la base de datos se comporte de forma no intencionada, de modo que se pueda recuperar de ella información que no estaba prevista por sus creadores.
Tanto si elige MariaDB o MySQLninguna base de datos es completamente inmune a las innumerables tácticas de los hackers modernos. Por lo tanto, es necesario ser proactivo para evitar que tengan éxito.
Consejos para evitar ataques de inyección SQL
Los ataques de inyección SQL pueden prevenirse aplicando las siguientes buenas prácticas:
Enfoque de confianza cero
A confianza cero es un enfoque de la seguridad en el que una organización asume que todos los usuarios, incluidos los administradores, socios externos y proveedores, no son de confianza y son atacantes potenciales. La organización debe aplicar controles estrictos al acceso y uso de la información.
Esto incluye eliminar o reducir las dependencias de conexiones externas a bases de datos, aplicaciones o servicios.
Los procedimientos almacenados son una forma de minimizar el riesgo de ataques de inyección SQL, ya que son más seguros que las consultas SQL dinámicas. Sin embargo, si se utilizan procedimientos almacenados además de consultas dinámicas, hay que tener cuidado durante las pruebas para asegurarse de que no existen vulnerabilidades en los procedimientos almacenados.
Limitar privilegios
Al crear cuentas nuevas, lo mejor es asignar sólo los privilegios mínimos necesarios para que la cuenta funcione correctamente. Por ejemplo, cree dos cuentas diferentes con privilegios distintos si necesita una cuenta que pueda crear informes pero no eliminarlos. De este modo, los piratas informáticos tendrán más dificultades para acceder a datos confidenciales o hacerse con el control de las cuentas aprovechando cualquier vulnerabilidad del código de tu aplicación o de los archivos de configuración.
Utilizar procedimientos almacenados
Los procedimientos almacenados pueden ejecutar varios comandos SQL en una sola sentencia. Ayudan a prevenir los ataques de inyección SQL porque no permiten a los usuarios acceder directamente al servidor de base de datos a través de campos de entrada de código como "nombre de usuario" o "contraseña". En su lugar, utilizan funciones predefinidas que pueden llamarse desde el código de la aplicación, utilizando parámetros pasados por el usuario (el desarrollador de la aplicación web).
He aquí cómo crear un procedimiento almacenado en MySQL. Por ejemplo, usted tiene una tabla como esta:
CREAR TABLA salario (
empid int(11) NO NULL,
sal int(11) DEFAULT NULL,
PRIMARY CLAVE ('empid)
) MOTOR=InnoDB DEFAULT CHARSET=utf8;
De esta forma, si un atacante intenta inyectar código malicioso en dicho parámetro, fallará porque no hay conexión entre la aplicación y tu servidor de base de datos. ¡Todo ocurre localmente en tu máquina!
Utilizar consultas parametrizadas
Los ataques de inyección SQL se producen porque la información proporcionada por el usuario se utiliza en consultas SQL sin haber sido desinfectada previamente. Una forma de evitarlo es utilizar consultas parametrizadas, es decir, consultas que utilicen variables en lugar de constantes en la cadena de consulta. Por ejemplo:
SELECCIONE * DE tabla WHERE columna =?
En lugar de:
SELECCIONE * DE tabla WHERE columna = valor
Seguridad multicapa
Las inyecciones SQL se producen cuando se inserta código malicioso en las sentencias SQL de una aplicación. A continuación, el código inyectado es ejecutado por el servidor web, lo que provoca que devuelva datos de la base de datos que el desarrollador no pretendía.
Debes aplicar múltiples capas de defensa contra este tipo de ataques para evitar que esto ocurra. Esto incluye la configuración de cortafuegos y la implantación de mecanismos de autenticación fuerte para todos tus usuarios, como la autenticación de dos factores (2FA).
Tipos de ataques de inyección SQL
Existen tres tipos de inyección SQL:
Entrada no saneada - Este tipo de inyección SQL se produce cuando una aplicación no filtra o desinfecta su entrada y la utiliza directamente en una consulta sin realizar la validación o codificación. Esto puede tener consecuencias no deseadas, como la ejecución de consultas inesperadas, la llamada a funciones que deberían estar restringidas, la modificación del contenido de tablas, etc.
Inyección fuera de banda - Este tipo de inyección SQL se produce cuando se envían datos maliciosos a una aplicación a través de canales distintos de los especificados para la entrada interactiva del usuario (por ejemplo, correo electrónico). Esto puede incluir canales de comunicación no textuales como la mensajería instantánea o la carga de archivos.
Inyección SQL ciega - Este tipo de inyección SQL se produce cuando un atacante no puede ver lo que está sucediendo entre bastidores porque el sistema de destino no devuelve mensajes de error cuando se proporcionan valores no válidos como entrada.
Pruebas de inyección SQL
La prueba de inyección SQL está diseñada para detectar vulnerabilidades de inyección SQL en aplicaciones web. Es especialmente valioso para los desarrolladores web.
La prueba se creó utilizando el OWASP Zed Attack Proxy (ZAP).
La Prueba de Inyección SQL es un servicio gratuito proporcionado por la Fundación OWASP para ayudarle a evaluar la postura de seguridad de su aplicación contra ataques de Inyección SQL. La prueba destaca cualquier vulnerabilidad de SQL Injection encontrada en su aplicación, junto con recomendaciones para remediarlas.
Sqlmap es una herramienta de pruebas de penetración de código abierto que automatiza la detección y explotación de fallos de inyección SQL y el control de servidores de bases de datos. Viene con un motor de detección de gran alcance, muchas características de nicho para el probador de penetración final, y una amplia gama de interruptores que van desde huellas dactilares de base de datos sobre la obtención de datos de la DB para acceder al sistema de archivos subyacente y ejecutar comandos en el sistema operativo a través de conexiones fuera de banda.
Comentarios
Publicar un comentario