Aplicar el acceso de mínimo privilegio, sanear las entradas de los usuarios y restringir los procedimientos de las bases de datos puede ayudar a evitar la inyección de código SQL y la posterior fuga de datos.
Después de leer este artículo podrás:
Contenido relacionado
¿Qué es la inyección de código SQL?
¿Qué es una API?
¿Cómo funcionan las API?
¿Qué es la seguridad de la API?
Seguridad de aplicaciones web
Suscríbase a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.
Copiar enlace del artículo
La inyección de lenguaje de consulta estructurada (SQLi) es un ataque de inyección de código que permite al atacante recuperar, manipular o destruir información confidencial ubicada en bases de datos SQL. Estos ataques funcionan al insertar comandos especializados en campos de consulta SQL. Cuando se ejecutan, los comandos pueden permitir al atacante suplantar la identidad de usuarios legítimos, ver o recuperar datos protegidos e incluso obtener acceso root a servidores.
A menudo, los atacantes llevan a cabo ataques SQLi aprovechando vulnerabilidades en las interfaces de programación de aplicaciones (API) que no pueden diferenciar correctamente entre código legítimo y no fiable. Sin la capacidad de detectar comandos o consultas alterados, estas API pueden utilizarse para ejecutar solicitudes maliciosas, como eludir los firewalls de aplicaciones web (WAF) o las medidas de autenticación.
Normalmente, el SQLi se realiza al usar uno de estos tres métodos:
Para ver ejemplos reales de consultas de SQL benignas y maliciosas, lee ¿Qué es la inyección de código SQL?
Aunque la inyección de código SQL es una de las amenazas más frecuentes de API, puede evitarse eficazmente con las estrategias de prevención adecuadas. Algunos métodos útiles para evitar la inyección de código SQL incluyen restringir los procedimientos de la base de datos, sanear las entradas de la base de datos y aplicar el acceso con menos privilegios.
La inyección de código SQL depende en gran medida de la capacidad de un atacante para manipular las entradas de datos y funciones de la base de datos. Al restringir estas entradas y limitar el tipo de procedimientos de base de datos que se pueden realizar, las organizaciones pueden minimizar el riesgo de consultas no autorizadas o maliciosas. Las formas de hacerlo incluyen:
Las entradas de usuario en cualquier base de datos SQL se deben supervisar, validar y sanear periódicamente para eliminar el código malicioso. La validación de la entrada garantiza que los datos se inspeccionen y formateen correctamente según criterios predeterminados, mientras que el saneamiento de la entrada modifica (o "sanea") la entrada al eliminar los caracteres no válidos o no seguros y al reformatearla según sea necesario. Entre las formas en que pude garantizarse la validación de las entradas están:
El acceso con menos privilegios es el principio de dar a los usuarios únicamente el acceso necesario a los recursos protegidos que requiera su función. Por ejemplo, esto puede significar limitar el número de usuarios a los que se conceden privilegios de nivel administrador a una base de datos o incluso dar a los usuarios un acceso temporal de nivel administrador que pueda revocarse posteriormente.
Restringir el acceso de los usuarios a un nivel basado en funciones también ayuda a minimizar el impacto de una violación, ya que los atacantes que accedan a una base de datos mediante credenciales robadas verán igualmente limitada su capacidad de ver, modificar, robar o destruir datos protegidos. Por el misma motivo, las organizaciones deben limitar el acceso compartido a las bases de datos en varios sitios web y aplicaciones.
Cloudflare ayuda a las organizaciones a mejorar su resistencia frente a los ataques SQLi con una potente cartera de seguridad API y de aplicaciones:
Las consultas parametrizadas separan el código SQL de la entrada del usuario al tratar los parámetros como valores literales en lugar de código ejecutable. Esta técnica ayuda a evitar que los atacantes inyecten sentencias SQL maliciosas.
El mínimo privilegio restringe a los usuarios de la base de datos a solo los permisos que son absolutamente necesarios para sus funciones específicas. Esto limita el daño potencial que pueden causar los atacantes. Si los atacantes llevan a cabo ataques de inyección de código SQL con éxito y obtienen credenciales de inicio de sesión legítimas, el principio de mínimos privilegios ayuda a contener el daño que pueden causar con una cuenta robada.
La creación de listas de permitidos valida las entradas respecto a un conjunto específico de caracteres o patrones aceptados, en lugar de solo buscar contenidos maliciosos. Este enfoque solo permite entradas explícitamente permitidas en lugar de intentar detectar todos los posibles patrones de ataque, lo que limita la cantidad de posibles vectores de ataque.
Los procedimientos almacenados ejecutan sentencias SQL predefinidas con parámetros que se pasan de forma segura al servidor de la base de datos. Evitan que las partes malintencionadas ejecuten código directamente en la propia base de datos.
Los métodos de prevención de inyección de segundo orden incluyen la aplicación del principio de privilegio mínimo, el uso de consultas parametrizadas y la implementación de la validación y el saneamiento de las entradas.