OWASP - Tensho97/Aprende-a-Aprender GitHub Wiki

¿Qué es?

OWASP (acrónimo de Open Web Application Security Project, en inglés ‘Proyecto abierto de seguridad de aplicaciones web’) es un proyecto de código abierto dedicado a determinar y combatir las causas que hacen que el software sea inseguro.

Uno de los principios fundamentales de OWASP es que todos los materiales estén disponibles de forma gratuita y de fácil acceso en su sitio web, para que todas las personas puedan mejorar la seguridad de sus aplicaciones web. Los materiales que ofrecen incluyen documentación , herramientas, videos y foros.

Uno de sus proyectos más conocidos es "El Top 10 de OWASP"

¿Qué es el top 10 de OWASP?

Este proyecto cuenta con un informe actualizado en el que describe los problemas de seguridad para las aplicaciones web, y se centra en los 10 riesgos mas críticos.

Este informe es redactado por un grupo de expertos de seguridad en todo el mundo y su finalidad es la "sensibilización"

A continuación se muestas los riegos de seguridad informados en el Top 10 de 2017:

1.Inyección

Los ataques de la inyección se producen cuando se envían datos que no son de confianza y que se trata de un código de entrada. Por ejemplo, un atacante podría ingresar el código de la base de datos SQL en un formulario que espere un nombre de usuario de texto sin formato. Si esa es la entrada en el formulario no está asegurada como, esto será resultado de la ejecución de ese código SQL. Esto se conoce como un ataque de inyección SQL .


Los ataques de inyección pueden evitarse validar y / o sanear los datos enviados por el usuario. (La validación significa rechazar los datos de apariencia sospechosa, mientras que el saneamiento se refiere a la limpieza de las partes de los datos de apariencia sospechosa). Además, un administrador de datos puede configurar los controles para minimizar la cantidad de información que puede exponer un ataque de inyección.

2. Autenticación de rota

Las vulnerabilidades en los sistemas de autenticación pueden dar acceso a los atacantes acceso a las cuentas de usuario e incluso la capacidad de compromiso todo en un sistema con una cuenta de administrador. Por ejemplo, un atacante puede tomar una lista que contiene millas de las combinaciones de las funciones de nombre de usuario / de la contraseña de la redacción de la redacción de la información.


Algunas estrategias para minimizar las vulnerabilidades de autenticación requieren la autenticación de 2 factores (2FA), además de limitar o retrasar los intentos de inicio de sesión repetidos utilizando la limitación de velocidad .

3. Exposición a datos sensibles

Sin embargo, los atacantes pueden obtener acceso a esos datos y utilizarlos con multas. Un método popular para robar información confidencial es usar un ataque de hombre en el medio .


El riesgo de exposición a los datos puede minimizarse cifrando todos los datos confidenciales, así como desactivar el almacenamiento en caché * de cualquier información confidencial. Además, los desarrolladores de aplicaciones web no deben ser confidenciales.


El almacenamiento en caché es la práctica de almacenar los datos para su reutilización. Por ejemplo, los navegadores web a menudo almacenan páginas web en caché, de modo que si un usuario vuelve a visitar las páginas de un período de tiempo fijo, el navegador no tiene que recuperar las páginas de la web.

4.Entidades Externas XML (XEE)

Este es un ataque contra una aplicación web que analiza la entrada XML *. Esta entrada puede hacer referencia a una entidad externa, intentando explotar una vulnerabilidad en el analizador. Una 'entidad externa' en este contexto se refiere a una unidad de almacenamiento, como un disco duro. Un analizador XML puede ser engañado para que el envío de datos a una entidad externa no autorizada, que puede pasar datos confidenciales directamente a un atacante.


Las mejores formas de prevenir los ataques XEE son hacer que las aplicaciones web acepten un tipo de datos menos complejos, como JSON **, o al menos parchear los analizadores XML y deshabilitar el uso de las entidades externas en una aplicación XML.


XML o Extensible Markup Language es un lenguaje legible por humanos y por máquinas. Debido a su complejidad y vulnerabilidades de seguridad, ahora está eliminado de uso en muchas aplicaciones web.


JavaScript Object Notation (JSON) es un tipo de notación simple, legible por humanos, que se usa a menudo para transmitir datos a través de Internet. Aunque fue creado originalmente para JavaScript, JSON es independiente del lenguaje y puede ser interpretado por muchos lenguajes de programación diferentes.

5.Control de acceso roto

El control de acceso se refiere a un sistema que controla el acceso a la información o la funcionalidad. Los controles de acceso defectuosos permiten a los atacantes eludir la autorización y realizar tareas como si fueran usuarios privilegiados, como los administradores. Por ejemplo, una aplicación web podría permitir a un usuario cambiar la cuenta en la que inició sesión simplemente cambiando parte de una URL, sin ninguna otra verificación.


Los controles de acceso se pueden asegurar al garantizar que una aplicación web use tokens de autorización * y establezca controles estrictos en ellos.


Muchos servicios emiten tokens de autorización cuando los usuarios inician sesión. Cada solicitud privilegiada que realice un usuario requerirá que el token de autorización esté presente. Esta es una forma segura de garantizar que el usuario sea quien dice ser, sin tener que ingresar constantemente sus credenciales de inicio de sesión.

6. Mala configuración de la seguridad

La mala configuración de la seguridad es la vulnerabilidad más común en la lista y, a menudo, es el resultado del uso de configuraciones predeterminadas o la visualización de errores excesivamente detallados. Por ejemplo, una aplicación podría mostrar a un usuario errores excesivamente descriptivos que pueden revelar vulnerabilidades en la aplicación. Esto se puede mitigar eliminando cualquier característica no utilizada en el código y asegurando que los mensajes de error sean más generales.

7. Scripting entre sitios

Las vulnerabilidades de las secuencias de comandos entre sitios se producen cuando las aplicaciones web permiten a los usuarios agregar código personalizado en una ruta URL o en un sitio web que será visto por otros usuarios. Esta vulnerabilidad puede ser explotada para ejecutar código JavaScript malicioso en el navegador de una víctima.


Por ejemplo, un atacante podría enviar un correo electrónico a una víctima que parece provenir de un banco de confianza, con un enlace al sitio web de ese banco. Este enlace podría tener un código JavaScript malicioso etiquetado en el final de la URL. Si el sitio del banco no está protegido adecuadamente contra las secuencias de comandos entre sitios, el código malicioso se ejecutará en el navegador web de la víctima cuando haga clic en el enlace.


Las estrategias de mitigación para los scripts entre sitios incluyen el escape de solicitudes HTTP no confiables, así como la validación y / o desinfección del contenido generado por el usuario. El uso de marcos de trabajo de desarrollo web modernos como ReactJS y Ruby on Rails también proporciona cierta protección integrada de scripts entre sitios.

8. Deserialización insegura

Esta amenaza apunta a muchas aplicaciones web que frecuentemente serializan y deserializan datos. Serialización significa tomar objetos del código de la aplicación y convertirlos en un formato que se pueda usar para otro propósito, como almacenar los datos en un disco o transmitirlos. La deserialización es justo lo contrario: convertir los datos serializados de nuevo en objetos que la aplicación puede usar.


Una explotación de deserialización insegura es el resultado de la deserialización de datos de fuentes no confiables, y puede tener graves consecuencias, como ataques DDoS y ataques de ejecución remota de código. Si bien se pueden tomar medidas para tratar de atrapar a los atacantes, como monitorear la deserialización e implementar verificaciones de tipo, la única forma segura de protegerse contra ataques de deserialización inseguros es prohibir la deserialización de datos de fuentes no confiables.

9. Uso de componentes de vulnerabilidades conocidas

Muchos desarrolladores web modernos utilizan componentes como bibliotecas y marcos en sus aplicaciones web. Estos componentes son piezas de software que ayudan a los desarrolladores a evitar el trabajo redundante y proporcionan la funcionalidad necesaria; el ejemplo común incluye marcos front-end como React y bibliotecas más pequeñas que solían agregar íconos de uso compartido o pruebas a / b.


Para minimizar el riesgo de ejecutar componentes con vulnerabilidades conocidas, los desarrolladores deben eliminar los componentes no utilizados de sus proyectos, así como asegurarse de que están recibiendo componentes de una fuente confiable y asegurarse de que estén actualizados.

10. Insuficiente registro y monitoreo

Muchas aplicaciones web no están tomando suficientes pasos para detectar violaciones de datos. El tiempo promedio de descubrimiento para una brecha es de alrededor de 200 días después de que haya ocurrido. Esto les da a los atacantes mucho tiempo para causar daño antes de que haya alguna respuesta. OWASP recomienda que los desarrolladores web implementen el registro y la supervisión, así como los planes de respuesta a incidentes para garantizar que estén informados de los ataques en sus aplicaciones.



Autor : Julián