SQL Injection (I)

SQL Injection (SQLi) es una vulnerabilidad que afecta las aplicaciones y servicios Web que hacen uso de servicios de Bases de Datos (consultas, creación/modificación de registros) a través de datos de entrada (parámetros, headers, cookies) que son incluidos o utilizados para ejecutar sentencias o comandos, los cuales se pueden manipular para ejecutar acciones no autorizadas sobre la Base de Datos.

De acuerdo a OWASP Top 10 2017, SQL Injection ocupa el primer lugar dentro de las vulnerabilidades que afectan las aplicaciones y servicios Web, por lo que es importante su identificación, así como el diseño de controles para prevenir su explotación.

El impacto que puede ocasionar este ataque depende principalmente del tipo de dato que almacena la Base de Datos (datos personales, financieros, privados), así como los privilegios que tiene el usuario que utiliza la aplicación para ejecutar acciones sobre la Base de Datos, los cuales van a permitir acceder a diferentes recursos del sistema.

En un ataque exitoso esta vulnerabilidad permite ejecutar sentencias y comandos de manera no autorizada sobre la Base de Datos, diferentes a las que estaban previstas por el programador del sistema.

Aunque actualmente existen diferentes arquitecturas Web (MVC, REST, etc.) podríamos definir los siguientes componentes en una aplicación Web.

enter image description here

El ataque de SQLi se ejecuta desde la capa de aplicación, por lo que si no existen controles de seguridad en las distintas capas del sistema, un atacante podrá ejecutar acciones no autorizadas sobre los recursos de la Base de Datos.

El proceso general para identificar este tipo de vulnerabilidades es el siguiente:

enter image description here

Seguridad Aplicaciones y Servicios Web (Introducción)

Introducción

El creciente uso de aplicaciones y servicios Web para soportar negocios, redes sociales, servicios financieros, hacen que las vulnerabilidades en esta capa impacten de manera significativa a los usuarios, negocios y sociedad.

Adicionalmente el uso de nuevas tecnologías (IoT, microservicios, cloud, etc) y de metodologías ágiles, hace que la mitigación de riesgos sea más compleja.

Por lo anterior es importante considerar controles de seguridad en todo el ciclo del desarrollo del software para minimizar los riesgos. La validación e implementación de controles de seguridad desde las fases iniciales del ciclo de desarrollo del software hace más eficiente y menos costosa la corrección de errores y vulnerabilidades.

La capa de aplicación regularmente es la más expuesta, ya que por naturaleza está abierta a diferentes usuarios y aplicaciones que acceden para obtener recursos, es por ello que esta capa representa un vector de ataque importante.

75% de los ataques ocurren en la capa de aplicación.

Por otro lado regularmente los programadores están más enfocados al desarrollo de las funcionalidades del sistema y que este cumpla con los requerimientos establecidos, por lo que no se consideran mejores prácticas de seguridad en el ciclo de desarrollo, lo que al final provoca que la aplicación exponga vulnerabilidades o huecos de seguridad en producción que pueden ser explotados por atacantes, impactando los procesos que soporta la aplicación, y la información que se almacena, procesa o transmite. Adicionalmente las aplicaciones están en constante actualización para poder soportar los objetivos del negocio, y utilizando metodologías ágiles o DevOp, por lo que la validación de controles y seguridad también se debe ajustar a estas necesidades.

Por lo anterior es importante considerar al menos los siguientes factores, para mitigar los riesgos de seguridad en el desarrollo de aplicaciones y servicios Web:

  • Tecnología.
  • Personas.
  • Procesos.