Logotipo de Kiuwan

Vulnerabilidades comunes

Desbordamiento del búfer, inyecciones de comandos, cross-site scripting e inyecciones SQL son los tipos comunes de vulnerabilidades. Aprenda qué son, cómo se pueden explotar y estrategias para prevenir este tipo de ataques en su aplicación.

Ataques de desbordamiento del búfer

¿Qué son?
Al igual que la crecida de un río, el desbordamiento de un búfer puede causar daños considerables. Para entender por qué, empecemos por el origen del problema. En los lenguajes de bajo nivel que acceden a la memoria y escriben en ella, una parte de esta memoria permanece asignada para datos temporales que deben guardarse durante el tiempo de ejecución. Esta parte de la memoria se denomina búfer. Un desbordamiento del búfer se produce cuando los datos que hay que guardar superan el espacio de memoria asignado en el búfer.
Ejemplos de desbordamiento del búfer
Como puedes ver en la imagen de la derecha, la memoria se compone de diferentes partes. Entre la pila y el montón hay una zona de memoria intermedia, que permite que ambas crezcan durante el tiempo de ejecución. Si observamos una pila en detalle, podemos ver diferentes secciones:
  • Función: La función de llamada escrita por el desarrollador
  • Parámetros: Los parámetros que necesita la función.
  • Retorno: Indica al programa qué hacer después de ejecutar la función
  • Puntero base: Marca el inicio del marco de pila de una función
  • Búfer: El espacio asignado a los datos

Tipos de desbordamiento del búfer

  • Desbordamiento de pila: Esto implica el desbordamiento de un búfer en la pila de llamadas, como se ha descrito anteriormente.
  • Desbordamiento de la pila: Igual que el desbordamiento de pila, pero tiene lugar en un pool de memoria abierto.
  • Desbordamiento de enteros: Una operación aritmética da como resultado un entero demasiado grande para su tipo entero.
  • Desbordamiento de enteros: Se insertan caracteres Unicode en una entrada que espera caracteres ASCII.

Prevención de ataques de desbordamiento del búfer

  • Evite C/C++, estos lenguajes de programación son propensos al desbordamiento del búfer.
  • Aleatorización de la disposición del espacio de direcciones.
  • Aumentar la seguridad de los programas ejecutables mediante la detección de desbordamientos de búfer en las variables asignadas a la pila.
  • Marcar regiones de memoria como no ejecutables.
  • Evite las funciones de la biblioteca estándar que no tienen límites comprobados, como gets, scanf y strcpy.
  • Escanee su código en busca de vulnerabilidades de desbordamiento de búfer.

Ataques de inyección de código

¿Qué son?
Inyección de código es un término general para un tipo de vulnerabilidad de software donde la entrada no validada es evaluada por una aplicación. Es bastante común en aplicaciones web que se basan en la entrada del usuario a través de formularios que carecen de una validación adecuada de los datos de entrada/salida. Este fallo puede ser explotado por los atacantes mediante la inyección de código malicioso en la aplicación, que luego será ejecutado por el intérprete del lado del servidor para ese lenguaje.

Las consecuencias de la inyección de código pueden ser nefastas:
  • Pérdida de datos
  • Corrupción de datos
  • Falta de responsabilidad
  • Denegación de acceso

Tipos de inyecciones de código

  • Inyección SQL
  • Secuencias de comandos en sitios cruzados
  • Inyección de Objetos PHP
  • Inyección remota de archivos (vulnerabilidad de inclusión de archivos)
  • Inyección de especificador de formato (ataque de cadena de formato)

Prevención de ataques de inyección de código

  • Validar y desinfectar las entradas: aceptar sólo un conjunto limitado de valores.
  • Utilice una solución SAST.
  • Dé a la cuenta que las llamadas a la base de datos se ejecuten sólo con privilegios limitados.
  • Evite las construcciones de evaluación vulnerables.

Ataques de secuencia de comandos en sitios cruzados

¿Qué es el Cross-Site Scripting?

Según Top 10 de OWASPXSS es el segundo problema más frecuente en la mayoría de las aplicaciones web. Mediante el uso de XSS, los atacantes pueden eludir la Política del Mismo Origen (SOP) en una aplicación vulnerable introduciendo código malicioso que se interpreta erróneamente como entrada del usuario. Esto puede hacerse con tecnologías como VBScript, ActiveX, Flash e incluso CSS, pero los ataques con JavaScript son los más comunes.

El XSS difiere del SQL en que no se dirige a la base de datos de las aplicaciones web, sino que se limita principalmente a su parte frontal.

Estos ataques pueden ser no persistentes, persistentes y basados en DOM. Las consecuencias de los ataques XSS pueden ser muy perjudiciales, especialmente cuando se combinan con ingeniería social.

Los sitios o interfaces web pueden corromperse y volverse inseguros. Las cookies y la información de autenticación pueden ser robadas, dando lugar al robo de identidad. Al piratear un sitio web empresarial vulnerable, los atacantes pueden hacerse con el control de los clientes informáticos de la empresa.

Ejemplos de ataques de secuencia de comandos en sitios cruzados

  • Robo de galletas
  • Daños en el sitio web
  • Phishing
  • Registro de teclas
  • Acceso de clientes

Prevención de ataques de secuencia de comandos en sitios cruzados

  • Especifique qué etiquetas se diseñan como "seguras" en los documentos HTML creados por entradas de usuario.
  • Codifica los datos a la salida.
  • Utilice la política de seguridad de contenidos (CSP).
  • Utilice una solución de pruebas estáticas de seguridad de aplicaciones.

Los peligros de los ataques de inyección SQL

¿Qué son?
De noviembre de 2017 a marzo de 2019, el 65% de los ataques a aplicaciones web en todo el mundo utilizaron inyección SQL (SQLi). Así que no es de extrañar que los ataques de inyección fueran nombrados como la amenaza número uno para las aplicaciones web por el Open Web Application Security Project (OWASP).

Si te estás preguntando por qué los ataques SQLi son tan frecuentes, es porque los formularios web que utilizan consultas SQL para recuperar datos son comunes. Desde páginas de inicio de sesión a consultas de búsqueda, formularios de pedidos en línea, etc., estos formularios web suelen estar conectados a bases de datos con información potencialmente valiosa, como datos personales y registros financieros.

Al atacar formularios web, los atacantes pueden eludir otros tipos de seguridad, como cortafuegos y defensas de punto final. Los conocimientos necesarios para llevar a cabo un ataque de inyección están fácilmente disponibles en línea.

Los atacantes utilizan SQLi para extraer datos, como contraseñas e información de tarjetas de crédito. Pueden añadir, modificar o eliminar registros en la base de datos, realizar operaciones de base de datos como cambiar credenciales o eliminar tablas enteras, y mucho más. Cualquier base de datos que utilice lenguaje de consulta estructurado (SQL) es vulnerable a SQLi, incluidos Microsoft SQL Server, Oracle, MySQL, PostgreSQL y MongoDB.

Prevención de ataques de inyección SQL

  • Evite construir consultas dinámicas.
  • Utilice procedimientos almacenados y llámelos utilizando la sintaxis canónica.
  • Desinfecte los datos del usuario eliminando los caracteres especiales y las palabras reservadas.
  • Suprima los mensajes de error de la base de datos para no revelar detalles.
  • Limitar los permisos de usuario de las aplicaciones.
  • Utilice una solución SAST.

Vea Kiuwan en acción

Las brechas en aplicaciones y software pueden tener consecuencias duraderas. Además, no van a desaparecer. Es fundamental detectar a tiempo las vulnerabilidades de su aplicación y su código. Mantener unas prácticas de seguridad sólidas durante y después del desarrollo es esencial para proteger tu negocio.
2024 Kiuwan. Todos los derechos reservados.