En los vertiginosos entornos de desarrollo actuales, la seguridad puede quedar relegada a un segundo plano. Las aplicaciones que carecen de controles de seguridad eficaces son fruta fácil para las amenazas. Por lo tanto, es importante ser consciente del inevitable subproducto del desarrollo de software moderno: los riesgos de seguridad y las vulnerabilidades que pueden liberarse con las aplicaciones.
Las empresas deben adoptar un enfoque sofisticado de la gestión de la seguridad en las primeras fases del SDLC. De lo contrario, requeriría mucho esfuerzo modificar las decisiones fundamentales más adelante. No evaluar adecuadamente el riesgo empresarial en la fase de diseño conduce a un nivel insuficiente de seguridad, lo que hace que su aplicación sea susceptible a vulnerabilidades denominadas diseño inseguro.
Comprender el panorama actual de las amenazas es un buen punto de partida para fomentar una cultura de desarrollo seguro. En esta entrada del blog, vamos a profundizar en los detalles de la vulnerabilidad del diseño inseguro, los posibles impactos y los métodos de prevención.
¿Qué es el diseño inseguro?
El diseño inseguro es un nuevo añadido a la familia OWASP Top 10 de 2021 que debuta en lo alto de la lista. Situada directamente en el cuarto puesto, es una categoría increíblemente amplia que cubre los riesgos relacionados con el diseño y los defectos arquitectónicos de las aplicaciones web que los malos actores pueden aprovechar.
Las vulnerabilidades del diseño inseguro son el resultado de la no adhesión a las mejores prácticas de seguridad durante el proceso de diseño. Hoy en día, es una de las principales causas de fallos de funcionalidad, violaciones de datos, políticas incumplidas y reputaciones empañadas.
La siguiente categoría refleja la conciencia de que aunar el desarrollo y las pruebas en una fase temprana del diseño del sistema puede mejorar la calidad, legibilidad y seguridad del código. Este es el ejemplo definitivo del movimiento de pruebas “shift left”: menos despilfarro y más eficacia.
¿Cómo pueden aprovechar las amenazas un diseño defectuoso?
Cuando se considera la seguridad de una aplicación, a menudo se pasa por alto el diseño. Si los desarrolladores, los ingenieros de control de calidad y los equipos de seguridad no adoptan las prácticas adecuadas durante la fase de diseño del código, la aplicación se convierte en un objetivo seguro para los actores maliciosos. Un diseño inseguro permitiría a los atacantes:
- Eludir los mecanismos de autenticación utilizados por una aplicación web
- Modificar determinados parámetros de URL a través de canales no autorizados
- Acceder a los sistemas para minarlos en busca de información sensible
- Asumir cuentas de usuario legítimas y obtener acceso no autorizado a recursos protegidos por contraseña para explotar aún más el sistema
- Obtener acceso a cualquier entorno y ampliar el alcance del ataque a otros entornos
- Suplantar un sistema objetivo para sobrecargar servidores y redes con múltiples peticiones para colapsarlos.
- Enviar consultas dirigidas para extraer información sobre vulnerabilidades del sistema que puedan fomentar un ataque
- Hacerse con el control total de la cuenta
- Ejecutar otros ataques como secuencias de comandos en sitios cruzados, inyección SQL, inyección LDAP, falsificación de petición en sitios cruzados y path transversal.
Las aplicaciones sin un diseño seguro pueden dar lugar a ramificaciones potencialmente graves y daños inconmensurables en términos de datos filtrados, reputación arruinada y horas de limpieza.
Ejemplos de diseño inseguro
Las situaciones que se describen a continuación ilustran cómo las vulnerabilidades de un diseño inseguro pueden ser aprovechadas por agentes malintencionados para sembrar el caos y arruinar la confianza de los consumidores:
- WordPress y la mayoría de las demás plataformas CMS no establecen límites para los intentos fallidos de inicio de sesión en el panel de administración, lo que las deja expuestas a ataques de fuerza bruta. Con toda probabilidad, un hacker intentaría una gran cantidad de combinaciones sobre un objetivo. Para mitigar y defenderse de estos ataques, sería necesario instalar extensiones de seguridad de terceros.
- Una cadena de cines ofrece descuentos para reservas de grupo con un depósito de hasta quince personas. Los actores malintencionados podrían aprovecharse de este defecto e intentar reservar todas las butacas del cine a la vez con unos pocos clics. Si un sitio web permite realizar un gran número de reservas sin exigir un depósito ni información sobre la tarjeta de crédito, acabará enfrentándose a una pérdida masiva de ingresos.
- Un número considerable de sitios web de comercio electrónico carecen de sistemas de defensa contra los bots que utilizan los revendedores para comprar tarjetas de vídeo de primera categoría. Esto brinda una gran oportunidad a los estafadores para vender las exhibiciones a un precio mayor en los sitios web de subastas, lo que hace extremadamente difícil o incluso imposible que los entusiastas obtengan las tarjetas al precio de venta recomendado.
Los siguientes ejemplos demuestran que es primordial tener plena observabilidad en cada aspecto de la seguridad a lo largo del ciclo de vida de desarrollo.
Cuando se trata de seguridad, no existe el “configúralo y olvídate”. Sin diseños seguros, las aplicaciones quedan vulnerables a los ciberataques y podrían no resistir el peor de los escenarios.
¿Cómo detectar y corregir un diseño inseguro?
Identificar los puntos débiles en la fase de diseño es el lugar más rentable para atajar los peligros de raíz. Ejecutar pruebas o análisis automatizados minimiza la exposición de su aplicación a vulnerabilidades de seguridad y reduce la probabilidad de que un ataque tenga éxito.
Cambiar a la izquierda es mucho más fácil con la automatización de pruebas. Las pruebas suelen realizarse antes, durante y después del proceso de desarrollo. Los especialistas en TI pueden utilizar herramientas de automatización de pruebas para recibir información sobre la estabilidad de su producto lo antes posible.
Modelización de amenazas
Adoptando la perspectiva de los actores maliciosos, el modelado de amenazas descubre eventos maliciosos/incidentales potenciales o reales, identifica las necesidades de seguridad, evalúa la criticidad de las amenazas y prioriza las mejoras de seguridad. Permite tomar decisiones racionales sobre cómo hacer frente a los riesgos de seguridad de las aplicaciones.
Pruebas de penetración
Con las herramientas de pruebas de penetración adecuadas, los equipos de desarrollo pueden establecer entornos ágiles y seguros. Las pruebas periódicas garantizan la calidad del producto y también le ahorran el dolor de cabeza de las correcciones costosas y que requieren mucho tiempo. El equipo de QAwerk puede ayudar a descubrir brechas de seguridad en las defensas del sistema y mitigar vulnerabilidades antes de que un hacker de la vida real las explote.
Pensar “como un hacker” le permite identificar la forma en que pueden infiltrarse en su aplicación. Con ese conocimiento en la mano, puede aplicar todas las medidas necesarias para evitar el ataque.
Escaneado
Las herramientas de exploración más avanzadas permiten a las empresas evaluar y supervisar continuamente sus sistemas para detectar las últimas amenazas a la seguridad. Las exploraciones de seguridad pueden ayudar a los desarrolladores a detectar problemas en una fase temprana, de modo que puedan abordarse y solucionarse antes de la publicación del software. Es una de las mejores formas de priorizar las vulnerabilidades para su corrección, teniendo en cuenta el tipo de ataque, la gravedad de la exposición y el nivel de acceso.
Dado que el número de ciberamenazas aumenta día tras día, es crucial que los ingenieros comprendan que la seguridad no es lo que se puede comprometer cuando la velocidad está en juego. Para lanzar aplicaciones seguras al mercado, los desarrolladores deben disponer de las herramientas necesarias para realizar su trabajo de forma segura, sin impedimentos ni esfuerzos adicionales.
Prevención y mitigación de diseños inseguros
A menudo es fácil quedar atrapado en el intento de proporcionar funcionalidad y hacer que las cosas funcionen, que la seguridad se deja como un elemento de casilla de verificación con poco o ningún pensamiento. El proceso de desarrollo debe incluir la seguridad en cada paso, desde el diseño hasta la implantación, pasando por el despliegue y el mantenimiento.
A diferencia de otras vulnerabilidades críticas, los diseños inseguros no pueden arreglarse con una implementación perfecta. Requieren controles de seguridad para mitigar las amenazas. Los especialistas en TI pueden tomar algunas medidas para minimizar la aparición de estos riesgos y protegerse lo mejor posible contra los ciberataques. Entre las opciones para prevenir el diseño inseguro se incluyen:
- Pase de DevOps a DevSecOps
- Implemente un modelado detallado de amenazas para la autenticación crítica, el control de acceso, la lógica empresarial y los flujos clave para descubrir posibles amenazas que puedan afectar a su sistema.
- Utilice procedimientos de desarrollo seguros
- Asóciese con profesionales de AppSec que puedan ayudarle a evaluar la seguridad del diseño y los controles relacionados con la privacidad
- Utilice una completa biblioteca estándar con patrones de diseño seguros y componentes listos para usar
- Incorpore el lenguaje y los controles de seguridad en las historias de usuario
- Configure firmas de bots para que su sistema distinga entre bots benignos y maliciosos y trate el tráfico de forma diferente.
- Implemente el nivel adecuado de segregación en las capas del sistema y de comunicación segura
- Limitar el consumo de recursos por usuario o servicio
- Configurar el cumplimiento de HTTP para que el sistema realice comprobaciones de validación en las solicitudes HTTP para garantizar que las solicitudes tienen el formato adecuado.
- Filtrar a fondo todas las salidas
El diseño seguro tiene que ver con la prevención más que con el “tratamiento”. Si las organizaciones adoptan los más altos estándares de codificación y adoptan precauciones de seguridad a su debido tiempo, esto les ayuda a prevenir los riesgos y evitar errores costosos.
Este nuevo número 4 anima a los equipos de desarrollo a tomarse en serio la seguridad y a dedicar el tiempo suficiente a crear nuevas aplicaciones con arquitecturas sencillas, robustas y concisas.
Resumen
Dado que el diseño de un sistema dicta su proceso de desarrollo, es crucial que las organizaciones garanticen que el diseño sea tan impecable e impermeable a los ataques maliciosos como sea posible. De hecho, un enfoque eficaz de la seguridad informática debe ser defensivo para garantizar que las vulnerabilidades de seguridad web nunca lleguen al código.
La conclusión que se desprende de la cuarta categoría de la lista OWASP Top Ten es que el modelado de amenazas de aplicaciones ya no es opcional. Mediante la ejecución de modelos de amenazas a través del SDLC, las organizaciones pueden determinar las amenazas potenciales temprano para eliminar los problemas y minimizar los posibles daños.
Las vulnerabilidades de diseño inseguras pueden evitarse por completo mediante la inclusión de un modelado de amenazas planificado con diligencia, una gestión proactiva de las vulnerabilidades, unos patrones arquitectónicos probados y un SDLC adecuado. La realización de pruebas de seguridad puede aumentar significativamente la seguridad inherente de la aplicación.