¿Por qué deben estar securizadas las aplicaciones?

Una aplicación insegura es un “caramelo” para cualquiera que quiera conseguir información confidencial de algún tipo (contraseñas, cuentas bancarias, etc…), suplantar la identidad de alguien para llegar a otra persona, realizar cualquier acto delictivo, realizar compras/retirar dinero, etc.

Las aplicaciones deben estar securizadas para tratar de prevenir  toda posibilidad de intento de intrusión y, en caso de que suceda, poder tener constancia de ello lo antes posible y que sea aislado y erradicado cuanto antes.


¿Deben estar cifradas la información y las comunicaciones que emplean las aplicaciones?

Existen multitud de ataques conocidos tanto para escuchar las comunicaciones de red y las comunicaciones inalámbricas como para aprovechar vulnerabilidades de las aplicaciones y acceder a información de éstas.

Teniendo en cuenta esto, al final la necesidad de cifrado de la información o de las comunicaciones en realidad depende de la criticidad o nivel de confidencialidad que pueda tener la información en sí:

  • Cuando se trate información que pueda ser considera confidencial o delicada de alguna manera, debe pensarse siempre en utilizar canales de comunicación seguros que cifren al menos todo dato intercambiado.
  • Y cuando se trate de información que pueda ser considerada muy confidencial, secreta o extremadamente delicada, además de proteger la comunicación, también se debería pensar en almacenarla de manera cifrada.


¿Qué debemos tener en cuenta a la hora de desarrollar una aplicación?

A continuación vamos a nombrar algunos puntos a tener en cuenta para el desarrollo seguro de aplicaciones:

  1. Controlar y filtrar tanto la entrada como la salida de datos (validarlas, reducir al mínimo la información que se le presenta al usuario ante fallos, etc…).
  2. Gestionar los accesos a memoria (prevenir desbordamiento de buffers).
  3. Emplear control de acceso multi-nivel (separación de privilegios y tratar de trabajar siempre con los mínimos posibles).
  4. Considerar las necesidades de cifrado y protección de la información y de sus conexiones.


¿Por qué se debe prevenir un desbordamiento de buffer (Buffer Overflow)?

Un desbordamiento de buffer se produce cuando los datos que se escriben en un buffer corrompen aquellos datos en direcciones de memoria adyacentes a los destinados para el buffer. Es decir, si se envía una cantidad superior a la capacidad pre-asignada, los bytes sobrantes se almacenan en zonas de memoria adyacentes, sobrescribiendo su contenido original, que probablemente pertenecían a datos o código almacenados en memoria.

Estos fallos son utilizados para lograr ejecutar código arbitrario en un equipo, de manera que en muchos casos logran tomar control del equipo de la víctima o ejecutar un ataque de Denegación de Servicios (DoS).


¿Qué es la inyección de código? ¿Qué tipos hay? ¿Cómo prevenirla?

Inyectar código es enviar datos inesperados a un intérprete de comandos. Con él se intenta forzar a la aplicación a conseguir una serie de situaciones: que devuelva información de los servicios que la componen, que devuelva información de la propia base de datos que maneja y contra la que realiza las consultas, conseguir accesos con privilegios desconociendo las credenciales necesarias para ello, etc…

Dentro de las inyecciones de código tenemos varios tipos, entre los más destacados y los que más frecuentemente se emplean para explotar vulnerabilidades son: SQL injection, LDAP injection y OS injection donde se emplean los lenguajes SQL y LDAP para  realizar las consultas a través del intérprete, y los comandos para ejecutarlos dentro de la propia aplicación.

La mejor manera para tratar de prevenir este tipo de ataques es filtrar todas las entradas que el usuario pueda enviar a la aplicación, filtrando los símbolos más comunes en este tipo de consultas, capturando estos malintencionados envíos y anulando todo el efecto que podría causar en nuestras aplicaciones.


¿Por qué se produce la rotura de autenticación y los fallos en la gestión de sesión?

Las vulnerabilidades relacionadas con la pérdida de autenticación y gestión de sesiones son críticas en la seguridad de las aplicaciones y en especial de las aplicaciones WEB.

 

Una mala gestión de las contraseñas, la expiración de sesiones o el proceso de cierre de sesión, son algunas de las causas que permiten a un atacante suplantar la información de un usuario, pudiendo llegar a obtener una cuenta con privilegios que le permita sabotear los controles de autorización y registro de la aplicación. Esta situación podría causar un acceso no autorizado a cualquier tipo de información que se encuentre almacenada en el servidor o los servicios que han sido comprometidos.

 

¿Qué son los Cross-Site-Scripting (XSS)? ¿Qué tipos hay? ¿Cómo prevenirlos?

Los XSS son ataques basados en inyección de código script en cualquiera de los campos de una aplicación.

Dentro de los XSS podemos encontrar los XSS-persistentes y los XSS-no persistentes, donde la principal diferencia que se puede apreciar es que la inyección en el XSS persistente queda almacenada en la propia aplicación y cualquiera que acceda a esa parte donde está almacenada puede “contagiarse” y en el XSS no persistente debe hacerse llegar dicha parte de la aplicación (un link a la parte citada) por medio de ingeniería social.

Para prevenir este tipo de ataques, lo principal es filtrar las entradas a los diferentes campos de la aplicación (limitando el número de caracteres de entrada, controlando los caracteres especiales de este tipo de lenguajes, etc…) y tratar de concienciar a los usuarios para que estén más prevenidos y no confíen en cualquier cosa que les pueda llegar.


 

¿Por qué se producen  las referencias directas a objetos de manera insegura? ¿Cómo podemos prevenirlo?

En las aplicaciones, se debe comprobar los accesos a los recursos a los que los usuarios pueden acceder a través de ella, y también,  si realmente tiene los privilegios necesarios para acceder a ese recurso en concreto. Si no prevenimos esto en nuestras aplicaciones, se está dando la posibilidad al atacante de acceder a cualquier tipo de recurso simplemente cambiando la ruta o el nombre del recurso en la petición.


¿Una mala configuración de las aplicaciones implica un mayor riesgo?

Una buena seguridad requiere tener definida e implementada una configuración segura para la aplicación. Todas estas configuraciones deben ser definidas, implementadas y mantenidas, dado que por lo general, no son seguras por defecto.

Debemos mantener todo el software actualizado, ya que si ya fueron detectados defectos de seguridad se habrán implementado parches y, por tanto, tendremos un menor riesgo de acceso a las aplicaciones.

 


¿Deberíamos exponer datos sensibles en las aplicaciones?

Muchas aplicaciones web muestran más información de la debida y no protegen adecuadamente los datos sensibles. Por esta causa, los atacantes pueden robar o modificar tales datos para llevar a cabo fraudes, robos de identidad, etc…

Una manera de prevenir esto es emplear métodos de protección adicionales como el cifrado de datos, no almacenar información innecesaria, etc… y también tener precaución especial en los intercambios de datos con el navegador.

 


¿Qué implica la ausencia de control de acceso a funciones?

La ausencia de control en las funciones cuando realizas solicitudes al servidor puede provocar que un atacante modifique el nombre de acceso a dicha función y acceda a cualquiera otra para realizar peticiones sin la autorización apropiada, e incluso, llegar a conseguir privilegios de administrador.

 


​¿Qué es el Cross-Site Request Forgery (CSRF)?

Un ataque CSRF fuerza al navegador web de una víctima a enviar una petición a una aplicación web vulnerable (incluyendo la sesión del usuario y cualquier otra información de autenticación incluida automáticamente) y esta realiza la acción elegida a través de la víctima, es decir, el atacante realiza cualquier petición a la aplicación vulnerable a través de la víctima, que es quién queda reflejado como solicitante.


 

¿Qué implica tener alguna vulnerabilidad en los componentes que se emplean?

Si contamos en nuestra estructura con componentes (librerías, frameworks y otros módulos de software) con vulnerabilidades, si se le ataca directamente se podría facilitar la intrusión en el servidor o una perdida seria de datos. Si se emplean este tipo de componentes con vulnerabilidades ya conocidas, veremos reducida en gran medida la defensa de nuestra aplicación.

 

¿Cómo afecta al usuario la falta de control en las redirecciones y reenvíos no validados?

Las aplicaciones web frecuentemente redirigen y reenvían a los usuarios hacia otros sitios web. Sin una validación apropiada, las víctimas pueden estar siendo redirigidas hacia sitios donde los atacantes puedan obtener información personal de estos y poder realizar un phising, o simplemente infectarles con un malware.​
Ministerio de Economía y Competitividad - Fondo Europeo de Desarrollo Regional