El desarrollo seguro y todo lo relacionado con el S-SDLC es algo que se debería tener en cuenta en cualquier equipo que pretenda desarrollar aplicaciones de cualquier tipo. Se trata de un modelo que define cada una de las etapas del desarrollo de software con un enfoque especial en la seguridad y aporta las pautas necesarias para crear componentes de software resistentes a diferentes tipos de ataques. Existen múltiples metodologías que adaptan las ideas del S-SDLC y definen formas de trabajar por parte de todos los integrantes del equipo. Una de dichas metodologías, que es precisamente de las que mejor aceptación tiene entre expertos y profesionales de la ciberseguridad es Microsoft SDL.
Esta metodología define un conjunto de prácticas en cada fase del desarrollo y es especialmente interesante ya que parte de dos bases importantes:
1- El equipo debe tener formación en temas de seguridad.
2- Debe existir un plan de respuesta ante incidentes.
Esto a efectos prácticos se traduce en que antes de empezar a hacer cualquier cosa, el equipo debe tener los conocimientos mínimos sobre seguridad para minimizar los errores que se podrían introducir por desconocimiento y que se debe de contar con un plan de actuación ante cualquier “desastre”. De esta manera se podrá actuar en consecuencia y no pillará a todo el mundo desprevenido sin saber exactamente qué hacer, que no sea necesario buscar soluciones improvisadas sobre la marcha.
Todo esto va de la mano con lo que se conoce como SecDevOps y cada vez más capta la atención de profesionales y empresas dedicadas al desarrollo. Por estos motivos surgen proyectos orientados a facilitar el trabajo de verificación de código o herramientas SAST/DAST que ayudan a identificar problemas existentes en componentes de software de una forma bastante efectiva y por supuesto, proyectos orientados al aprendizaje de estas cuestiones. En esta ocasión, se hablará de OWASP Secure Coding Dojo.
Se trata de un proyecto que recientemente ha sido donado por Trend Micro a la comunidad de OWASP y cuyo objetivo es el de proporcionar una plataforma de aprendizaje en temas de desarrollo seguro y buenas prácticas. Es una plataforma que está compuesta por dos componentes principales: Una aplicación web vulnerable por diseño y el portal donde se encuentra el código que implementa cada sección de la aplicación vulnerable con una explicación detallada. Es una plataforma de entrenamiento interesante que se basa en la lista de SANS Top 25 y se puede instalar o bien manualmente o utilizando Docker. A diferencia de otras plataformas similares como WebGoat, Secure Coding Dojo cuenta con algunas herramientas didácticas que están orientadas la detección de vulnerabilidades y posterior análisis de las contramedidas que se pueden implementar a nivel de código. Los desafíos que vienen incluidos por defecto se encuentran desarrollados en Java, por lo tanto todo el código que se enseña en cada una de las lecciones está orientado a rutinas de código que son habituales en Spring Framework o el uso de anotaciones habituales en Servlets. No obstante, aunque todo está en Java, las lecciones son perfectamente aplicables a cualquier otro lenguaje de programación ya que se trata de demostrar el impacto de ciertas prácticas de desarrollo que son peligrosas. Por otro lado, la plataforma cuenta con las herramientas necesarias para crear retos del tipo CTF que serían interesantes en competiciones orientadas al ataque y la defensa. Finalmente, tiene integraciones muy interesantes con Slack, Google y LDAP para controlar el acceso a la plataforma e implantarla como un entorno de entrenamiento para los empleados de una empresa o como se mencionaba antes, para los participantes en un CTF.
Se puede instalar fácil y rápidamente utilizando Docker y Docker-Compose. Solamente hace falta clonar el repositorio disponible en Github y a continuación, generar una variable de entorno en donde se almacenarán los detalles de configuración de la herramienta. Finalmente, como resulta habitual, se levantan los contenedores utilizando el fichero YAML correspondiente ubicado en el proyecto.
Ahora, se debe acceder desde un navegador web al puerto 8081 en local y se podrá ver la página “home” del proyecto, en donde se explican lo que son los “Attacks”, “Blocks” y “Rules”. A continuación se puede crear una cuenta de usuario en el sistema. Este paso puede resultar un poco “incómodo” ya que la contraseña debe ser bastante segura (mínimo de 16 caracteres con números, letras y caracteres especiales). Una vez se cuenta con un usuario registrado en el sistema se puede proceder a trabajar con el entorno.
Como se mencionaba anteriormente, se trata de una plataforma compuesta por dos componentes: La aplicación vulnerable y la aplicación donde se explican los retos y se crean los equipos (si se quiere montar un CTF).
A la fecha de redactar este post hay 2 grupos de lecciones predefinidas y cuando se carga cualquiera de ellas, aparecen un listado de retos que incluyen una explicación detallada, el tipo de vulnerabilidad que comprende cada reto, el código vulnerable, un link que apunta a la aplicación web vulnerable y una sección para introducir la “flag” cuando se descubre y explota la vulnerabilidad. Una vez resuelto el reto se puede ver el código fuente correspondiente a la solución o contramedida que se debe aplicar para mitigar la vulnerabilidad.
Uno de los recursos más interesantes de la plataforma son los “Code Blocks” ya que describen con un muy buen nivel de detalle, malas prácticas en desarrollo de software y las contramedidas que se pueden aplicar. Otro recurso útil se encuentra en el “Code Review 101” en el que el objetivo es medir tus conocimientos en temas de desarrollo seguro por medio de snippets de código y preguntas directas sobre dichos fragmentos. Se encuentra disponible en el siguiente enlace.
Si te interesa el desarrollo seguro y todo lo relacionado con buenas prácticas de codificación te recomiendo que estés atento a este proyecto no solo por lo interesante que es, sino porque probablemente la comunidad añadirá más lecciones y características en los próximos meses como ya ha ocurrido con otros proyectos. Esperemos que se convierta en un proyecto “FlagShip” de la comunidad OWASP.
Un saludo y Happy Hack!
Adastra.