Por Jorge Esperón. Security architect. Continuum Security
A menudo asociamos el diseño como una propiedad visible, algo que entra por los ojos. Sin embargo, el diseño de cualquier sistema está estrechamente relacionado con su funcionamiento. Y un buen diseño debe incluir la seguridad, porque muy a menudo un sistema tendrá que operar bajo condiciones adversas, sobre todo en nuestro mundo hiperconectado.
Fallos de seguridad en el diseño
Existen fundamentalmente dos tipos de fallos de seguridad en las aplicaciones:
• Fallos de seguridad en la implementación. Por ejemplo, construyendo una consulta de base de datos que concatena texto SQL con variables que pueden ser modificadas por el usuario.
• Fallos de seguridad en el diseño. Por ejemplo, confiar controles de seguridad únicamente en el lado cliente de una aplicación web.
Las herramientas de análisis estático (SAST) y dinámico (DAST) de seguridad no son suficientes a la hora de detectar fallos de seguridad en el diseño de las aplicaciones. Estos fallos, en promedio, son los causantes de algo más de la mitad de las vulnerabilidades detectadas cuando una aplicación llega a producción, y suelen ser los más caros de corregir en términos de recursos y tiempo invertidos. Con el objetivo de concienciar acerca de esta problemática, en los últimos años se han lanzado varias iniciativas de ámbito internacional:
• El Instituto de Ingeniería Eléctrica y Electrónica creó su propio centro para el diseño seguro (IEEE Center for Secure Design). Como parte de sus iniciativas de comunicación, en 2015 publicó una lista1 con los diez fallos de seguridad en el diseño más comunes.
• La Organización Internacional de Normalización (ISO) publicó en 2017 un catálogo de principios de diseño y arquitectura orientados a mejorar la seguridad de productos, sistemas y aplicaciones.
El modelado de amenazas comienza con la arquitectura
A nivel de diseño tendremos que plantearnos algunas preguntas para definir el nivel de servicio de nuestra aplicación (con los usuarios legítimos), mientras actores externos pueden estar intentando abusar de cada una de sus funcionalidades. En estas preguntas y en las soluciones de compromiso alcanzadas para responderlas se encuentra el núcleo del modelado de amenazas como proceso. Se trata de un análisis sistemático de la arquitectura de un sistema para detectar y corregir fallos de seguridad en el diseño. El objetivo es obtener una serie de requisitos de seguridad que permitan contener el nivel de riesgo por debajo de un valor previamente acordado.
Una de las principales ventajas del modelado de amenazas es que nos permite empujar la seguridad hacia la izquierda dentro del ciclo de desarrollo (tal como se puede observar en la Ilustración. De este modo, podremos incluir importantes principios de seguridad en el diseño, como la defensa en profundidad, antes de que se haya escrito la primera línea de código de la aplicación.
Lea el artículo íntegro en Cuadernos de Seguridad