A04: Diseño inseguro (by OWASP)

Visión general

Una nueva categoría para 2021 se centra en los riesgos relacionados con los defectos de diseño y arquitectura, con un llamado a un mayor uso del modelado de amenazas, patrones de diseño seguro y arquitecturas de referencia. Como comunidad, debemos ir más allá de “cambiar a la izquierda” en el espacio de codificación para precodificar actividades que son críticas para los principios de Secure by Design. Las Enumeraciones de debilidades comunes (CWE) notables incluyen CWE-209: Generación de mensaje de error que contiene información confidencial , CWE-256: Almacenamiento desprotegido de credenciales , CWE-501: Violación de límites de confianza y CWE-522: Credenciales insuficientemente protegidas .

Descripción

El diseño inseguro es una categoría amplia que representa diferentes debilidades, expresadas como “diseño de control faltante o ineficaz”. El diseño inseguro no es la fuente de todas las demás categorías de riesgo Top 10. Hay una diferencia entre el diseño inseguro y la implementación insegura. Diferenciamos entre fallas de diseño y defectos de implementación por una razón, tienen diferentes causas y soluciones. Un diseño seguro aún puede tener defectos de implementación que den lugar a vulnerabilidades que pueden ser explotadas. Un diseño inseguro no puede solucionarse con una implementación perfecta ya que, por definición, los controles de seguridad necesarios nunca se crearon para defenderse de ataques específicos. Uno de los factores que contribuyen al diseño inseguro es la falta de perfiles de riesgo empresarial inherentes al software o sistema que se está desarrollando.

Gestión de requisitos y recursos

Recopile y negocie los requisitos comerciales para una aplicación con la empresa, incluidos los requisitos de protección relacionados con la confidencialidad, la integridad, la disponibilidad y la autenticidad de todos los activos de datos y la lógica comercial esperada. Tenga en cuenta qué tan expuesta estará su aplicación y si necesita segregación de inquilinos (además del control de acceso). Compilar los requisitos técnicos, incluidos los requisitos de seguridad funcionales y no funcionales. Planifique y negocie el presupuesto que cubra todo el diseño, la construcción, las pruebas y la operación, incluidas las actividades de seguridad.

Diseño Seguro

El diseño seguro es una cultura y una metodología que evalúa constantemente las amenazas y garantiza que el código esté diseñado y probado de manera sólida para evitar métodos de ataque conocidos. El modelado de amenazas debe integrarse en las sesiones de perfeccionamiento (o actividades similares); busque cambios en los flujos de datos y control de acceso u otros controles de seguridad. En el desarrollo de la historia de usuario, determine el flujo correcto y los estados de falla, asegúrese de que las partes responsables e impactadas los entiendan bien y los acepten. Analice los supuestos y las condiciones para los flujos esperados y de fallas, asegúrese de que sigan siendo precisos y deseables. Determinar cómo validar las suposiciones y hacer cumplir las condiciones necesarias para los comportamientos adecuados. Asegúrese de que los resultados estén documentados en la historia del usuario. Aprenda de los errores y ofrezca incentivos positivos para promover mejoras.

Ciclo de vida de desarrollo seguro

El software seguro requiere un ciclo de vida de desarrollo seguro, alguna forma de patrón de diseño seguro, metodología de camino pavimentado, biblioteca de componentes seguros, herramientas y modelado de amenazas. Póngase en contacto con sus especialistas en seguridad al comienzo de un proyecto de software durante todo el proyecto y el mantenimiento de su software. Considere aprovechar el Modelo de Madurez de Software Assurance (SAMM) de OWASP para ayudar a estructurar sus esfuerzos de desarrollo de software seguro.

Como prevenir

  • Establezca y use un ciclo de vida de desarrollo seguro con profesionales de AppSec para ayudar a evaluar y diseñar controles relacionados con la seguridad y la privacidad.

  • Establezca y utilice una biblioteca de patrones de diseño seguros o componentes de caminos pavimentados listos para usar

  • Utilice el modelado de amenazas para la autenticación crítica, el control de acceso, la lógica empresarial y los flujos de claves

  • Integre el lenguaje y los controles de seguridad en las historias de los usuarios

  • Integre verificaciones de plausibilidad en cada nivel de su aplicación (desde el frontend hasta el backend)

  • Escriba pruebas unitarias y de integración para validar que todos los flujos críticos sean resistentes al modelo de amenazas. Compile casos de uso y casos de uso indebido para cada nivel de su aplicación.

  • Separe las capas de niveles en las capas del sistema y de la red según las necesidades de exposición y protección

  • Separe a los inquilinos de manera sólida por diseño en todos los niveles

  • Limite el consumo de recursos por usuario o servicio

Ejemplos de escenarios de ataque

Escenario n.º 1: un flujo de trabajo de recuperación de credenciales puede incluir “preguntas y respuestas”, lo cual está prohibido por NIST 800-63b, OWASP ASVS y OWASP Top 10. No se puede confiar en las preguntas y respuestas como prueba de identidad de más de una persona. pueden saber las respuestas, por eso están prohibidas. Dicho código debe eliminarse y reemplazarse con un diseño más seguro.

Escenario n.º 2: una cadena de cines permite descuentos por reserva de grupo y tiene un máximo de quince asistentes antes de solicitar un depósito. Los atacantes podrían amenazar con modelar este flujo y probar si pueden reservar seiscientas butacas y todos los cines a la vez en unas pocas solicitudes, lo que provocaría una pérdida masiva de ingresos.

Escenario n.º 3: el sitio web de comercio electrónico de una cadena minorista no tiene protección contra los bots de los revendedores que compran tarjetas de video de alta gama para revender sitios web de subastas. Esto genera una publicidad terrible para los fabricantes de tarjetas de video y los dueños de las cadenas minoristas, y genera mala sangre entre los entusiastas que no pueden obtener estas tarjetas a ningún precio. Las reglas cuidadosas de lógica de dominio y diseño anti-bot, como las compras realizadas a los pocos segundos de disponibilidad, pueden identificar compras no auténticas y rechazar tales transacciones.

Referencias

Lista de CWE mapeados

CWE-73 Control externo de nombre de archivo o ruta

CWE-183 Lista permisiva de entradas permitidas

CWE-209 Generación de mensaje de error que contiene información confidencial

CWE-213 Exposición de información confidencial debido a políticas incompatibles

CWE-235 Manejo inadecuado de parámetros adicionales

CWE-256 Almacenamiento desprotegido de credenciales

CWE-257 Almacenamiento de contraseñas en un formato recuperable

CWE-266 Asignación de privilegios incorrecta

CWE-269 Gestión de privilegios inadecuada

CWE-280 Manejo inadecuado de permisos o privilegios insuficientes

CWE-311 Falta el cifrado de datos confidenciales

CWE-312 Almacenamiento de texto sin cifrar de información confidencial

CWE-313 Almacenamiento de texto claro en un archivo o en disco

CWE-316 Almacenamiento de texto sin cifrar de información confidencial en la memoria

CWE-419 Canal primario desprotegido

CWE-430 Implementación de controlador incorrecto

CWE-434 Carga sin restricciones de archivo con tipo peligroso

CWE-444 Interpretación inconsistente de solicitudes HTTP (‘Contrabando de solicitudes HTTP’)

CWE-451 Interfaz de usuario (UI) Tergiversación de información crítica

CWE-472 Control externo de parámetro web supuestamente inmutable

CWE-501 Violación de límites de confianza

CWE-522 Credenciales insuficientemente protegidas

CWE-525 Uso de la memoria caché del navegador web que contiene información confidencial

CWE-539 Uso de cookies persistentes que contienen información confidencial

CWE-579 Malas prácticas de J2EE: Objeto no serializable almacenado en sesión

CWE-598 Uso del método de solicitud GET con cadenas de consulta confidenciales

CWE-602 Aplicación del lado del cliente de la seguridad del lado del servidor

CWE-642 Control externo de datos de estado crítico

CWE-646 Dependencia del nombre de archivo o extensión de archivo suministrado externamente

CWE-650 Confiar en los métodos de permisos HTTP en el lado del servidor

CWE-653 Compartimentación insuficiente

CWE-656 Confianza en la seguridad a través de la oscuridad

CWE-657 Violación de los principios de diseño seguro

CWE-799 Control inadecuado de la frecuencia de interacción

CWE-807 Dependencia de entradas no confiables en una decisión de seguridad

CWE-840 Errores de lógica de negocios

CWE-841 Aplicación incorrecta del flujo de trabajo conductual

CWE-927 Uso de intenciones implícitas para comunicaciones confidenciales

CWE-1021 Restricción incorrecta de marcos o capas de interfaz de usuario renderizados

CWE-1173 Uso inadecuado del marco de validación

Más información: OWASP ORG

Relacionado

ForEach de Javascript: Array para bucles

Como una de las estructuras de control básicas en la programación, los bucles son casi una adición diaria al código que escribimos. El bucle forEach clásico es uno de los primeros fragmentos de código que aprendemos a escribir como programadores. Si fueras un desarrollador de Javascript, sabrías que Javascript no es ajeno a la iteración a través de los elementos de una matriz o un mapa ¡SEGUIR LEYENDO!

10 Mejores alternativas de Sci-hub para descargar artículos de investigación gratis

Como sabemos, Sci-hub es un sitio web increíble con millones de artículos de investigación para todos los estudiantes universitarios y académicos. El sitio web de Sci-Hub se encarga de obtener los artículos de investigación y artículos de pago utilizando las credenciales que se filtran. La fuente de credenciales utilizada por este sitio web no está clara. Sin embargo, se supone que muchas de ellas son donadas, ¡SEGUIR LEYENDO!

10 Características Sorprendentes de Windows que Deberías Conocer en 2024

Aunque haya sido usuario de Windows durante décadas, el sistema operativo es tan amplio y complejo que siempre existen características útiles, pero menos conocidas, que podrían sorprenderte. En este sentido, he identificado diez funciones poco conocidas de Windows que pueden potenciar su eficiencia, comodidad e incluso su experiencia de uso lúdico en su PC.

¡REBAJADO!
Microsoft Surface Go 2 - Portátil 2 en 1 de 10.5 pulgadas Full HD, Wifi, Intel...
  • Procesador Dual-Core Intel Pentium Gold 4425Y (2...
  • Memoria RAM de 8 GB LPDDR3
  • Disco SSD de 128 GB
Todas estas características deberían ser compatibles tanto con Windows 10 ¡SEGUIR LEYENDO!

10 Criptomonedas con Potencial de Crecimiento de Futuro

El rumor en torno a las criptomonedas no se desvanece por mucho que existan grandes pesimistas alrededor de los malos rumores. Entonces, si consideras invertir en el mundo de las criptomonedas, deberías estar atento a las criptomonedas que se espera que tengan un buen desempeño para el resto de 2021. En los últimos tiempos, los tokens DeFi están recibiendo toda la atención y es más que ¡SEGUIR LEYENDO!

10 Empresas de robótica más importantes del mundo

Los cambios de paradigma revolucionarios debido a los desarrollos de la robótica en todo el mundo están generando nuevos puntos de vista en muchos sectores, entre ellos en los de la industria y la tecnología. Con la ayuda de la Inteligencia Artificial, la tecnología produce resultados innovadores cada segundo y el campo de la robótica define y reconfigura su uso a cada instante. Cada día que ¡SEGUIR LEYENDO!

10 Frameworks que los Desarrolladores de Software deberían Aprender 2024

Bienvenidos desarrolladores web y de software, estamos en los inicios de 2023 y es posible que muchos se esten planteado sus objetivos para lo largo del año. Con anterioridad ya he compartidos las rutas de aprendizaje para un desarrollador front-end, un desarrollador full-stack o un desarrollador back-end entre otros muchos contenidos más. En este artículo, me gustaría compartir algunos de los mejores frameworks y bibliotecas para ¡SEGUIR LEYENDO!

10 Repositorio de GitHub que todo Desarrollador Web debería conocer

GitHub es el lugar que debes buscar cuando intentas mejorar como desarrollador, toda la información que necesitas está disponible en algún repositorio que alguien ya se ha molestado en indexar. Sin embargo, la parte complicado es encontrar el repositorio más adecuado. Es fácil sentirse perdido en todos los repositorios disponibles dentro de GitHub. Para ayudarte, he elaborado una lista de 10 repositorios de GitHub que pueden ¡SEGUIR LEYENDO!

Deja un comentario