DevSecOps el nuevo paradigma para la mejora de procesos en nuestras aplicaciones móviles

Andres Felipe Ocampo
6 min readMar 14, 2021

Para tener más contexto, voy a ir aportando una serie de conceptos sobre DevOps y DevSecOps, para eso voy a explicar como surge esa transición a esta metodología, así que sin más preámbulos, vamos a ello, DevOps surge de una necesidad de el creciente auge de las prácticas del desarrollo ágil, basicamente Lean, Scrum, Kanban, Agile, esto condiciona que las organizaciones deseen lanzar su software con mas rapidéz y con más frecuencia, en la medida que supone una presion para los procesos de gestion de versiones entre otras, es necesario adoptar patrones de automatización de releases de las aplicaciones utilizando herramientas de Integración continua o procedimientos de entrega continua y es así que nace DevOps.

¿Pero más concretamente qué es DevOps?

Lo entendemos como un movimiento, una metodolgía de trabajo que aborda cinco ámbitos principales:

  1. Cultura que fomenta la colaboración entre los equipos de desarrollo y de operaciones.
  2. Rotura de Silos- Responsabilidad compartida entre todos los miembros del equipo
  3. Equipos autónomos por otro lado, al fin y al cabo si se comparte el conocimiento entre todos los integrandes del squad, se pierde ese miedo en el momento de los despliegues y las puestas en producción.
  4. Automatización apoyada fuertemente en tecnologías, entra directamente con con que es el diseño y la arquitectura aqui podemos hablar de microservicios que encaja perfectamente con la metoglía Agile como con la metodología DevOps que es la que nos interesa.
  5. Construcción y despliegue con practicas de ingeniería, las son tan conocidas con la Integración continua y el despliegue continuo (Continuous Servicing), lo que implica la monitorización con tecnolgía de computación en la nube, gestion de configuración automatizada y por último la seguridad y la verificación.

¿Que requiere DevOps?

Lo más importante es que lo que se busca finalmente es la puesta en producción del código fuente para que DevOps tenga sentido, para eso tenemos que tener dentro de las prácticas de ingeniería que comentabamos antes relativa a la monitorización, la automatización o la verificación(QA- Testing), pues es necesario abordar como mínimo los siguientes puntos para que DevOps funcione:

  1. Incorporar controles de calidad al ciclo de desarrollo
  • Rendimiento.
  • Seguridad.

2. Reducir el riesgo de los despliegues

  • Testing (QA)-Test Automático.
  • CI/CD-Automatizando la integración, entrega y despliegue.

3. Incorporar Fededback-Monitorización(para los proceso de iteración futuros)

4. Automatización de configuración(siempre y cuando tenga sentido, no hay que caer en la modad de automatizar por automatizar, asi reinvertimos en innovación con ese tiempo que hemos ganado en el proceso de automatización)-Documentación siempre actualizada.

Las ventajas de DevOps

Con esta metodología tenemos beneficios y ventajas como:
1. Mejora en los procesos de desarrollo del software y operaciones mas rápidos y estandarizados.

2. Reducir el time to market

  • Reducción de tiempo y coste de operaciones
  • Reducción de tiempos de restauración (Mid Time To Recover-MTTR)

3. Entregas más rapidas y frecuentes

4. Incremento de calidad del software e infraestructura

  • Reducción de errores humanos
  • Software mas fiable que aumente la confianza de los equipos de desarrollo

5. Escalabilidad

6. Seguridad

Si unimos estos procesos y las estandarizaciones de las que hemos comentado y definido a los nuevos paradigmas arquitectónicos como el de los microservicios o las arquitectura cloud native, pues permititá un escalado tanto horizontal como vertical, más eficiente y sencillo, intersante que le echéis un vistazo a la web Twelve Factor que resume perfectamente todas las características que debe reunir una aplicación para encajar perfectamente en esta metodología y aprovechar al máximo de sus ventajas.

La seguridad en DevOps el gran Problema

Comentabamos no obstante que DevOps mejora el panorama en cuanto a seguridad, seguimos teniendo lagunas con respecto a muchos otros aspectos de la seguridad de las aplicaciones, por que en un contexto en el que las soluciones de software integre por ejemplo software de terceros, librerías, herramientas open-source cada vez más heterogéneas y además que cada vez se realiacen puestas en producción muchísimo mas frecuentes y mas rápidas, pues la introducción de riesgos y vulnerabilidades se incrementa de manera exponencial y es bastante preocupante, aqui es clave potenciar la seguridad, minimizando estos riesgos, pero claro el desafío es conseguir esto sin sumar obstáculos a la velocidad en el lanzamiento de nuestro software en el despliegue en producción y esto es precisamente lo que hace DevSecOps agregando las mejores prácticas de seguridad en todas las etapas del desarrollo del software.

Tenemos que tener en cuenta el aspecto organizacional, aqui los equipos de seguridad están centrados más en la fase operacional del ciclo de vida de las aplicaciones, directamente en la fase de explotación y son muchas vistos por parte del equipo de desarrollo como un muro a superar para poner en producción los desarrollos, pues esto son los “Silos” o intereses divididos que tambien existian previamente entre los equipos de desarrollo y de operaciones.

¿DevSecOps es la gran solución?

El objetivo principal de la incorporacion de la capa de seguridad en DevSecOps es que se sume la seguridad sin perder velocidad y como lo propone:

  1. Detección temprana y automática de vulnerabilidades (la automozación como uno de los pilares fundamentales)
  2. Colaboración entre los squad’s de DEV, SEC y OPS (incorporación de nuevos perfiles a los squad’s)
  3. Formación y aprendizaje (fundamental que todos los squad’s sean consciente de la seguridad y que se transmitan)
  4. Evangelistas en seguridad-Cultura
  5. Transparencia de la información-Dashboards y métricas
  6. Incorporar seguridad en SDLC-Shift left (incorporar test de seguridad del lado del squad de desarrollo, en una etapa temprana).

DevSecOps en SDLC

Distribución en las etapas de planificación y codificación

  1. Fase de planificación (PLAN)
  • Modelo de amenazas (haciendo uso de herramientas para identificar las posibles amenzas, en función de la tipología y la arquitectura de los proyectos)
  • Security and privacy by default

2. Fase de codificación (CODE)

  • Security and privacy by design (Evaluación de los componentes desarrollados si se detecta en una fase temprana alguna vulnerabilidad)
  • Evaluación de vulnerabilidades-Análisis estático en el IDE y asesoramiento (Sonarlint, swiftlint, SonarQube, etc)
  • Gestión de cambios-Peer Reviews

3. Fase de Construcción de la aplicaciones (BUILD)

  • Análisis estático de código-Vulnerabilidades (SAST)
  • Análisis de dependencias de código
  • Vulnerabilidades
  • Licenciamiento (SCA)
  • Análisis estático de contenedores

4. Fase de Monitorización (TEST)

  • Test automáticos de seguridad y rendimiento (por ejemplo un ataque bastante conocido como el DDoS-Distributed Denial of Service, denegación del servicio, para hacer colapsar nuestra app y provoque una caída del sistema y por ende una app que no funciona).

5. Fase de Lanzamient (RELEASE)

  • Gestión de configuración y verisionado
  • Gestión de líneas base
  • SAST-Aplicación de reglas de calidad(Quality Gates), Rendimiento y Puertas de seguridad(Performance and Security Gates).

6. Fase de despliegue (DEPLOY)

  • Gestión de secretos
  • Parametrización de entornos
  • DAST-Análisis dinámico de vulnerabilidades

7. Fase de operaciones y explotación(OPERATE)

  • Gestión de secretos
  • Seguridad perimetral
  • Auditorías de seguridad
  • Pentesting
  • ITSM

8. Fase de Monitorización (MONITOR)

Pensar que es recomendable desarrollar nuestras aplicaciones también incorporando login significativo esto es muy importante que nos permita hacer este análisis y aportar datos de cara a facilitar una análisis forence que pueda realizarse ante incidentes de seguridad y por último pues toda la información relativa a seguridad que podamos recopilar aquí en esta fase de monitorización pues podemos utllizarla para aprender de ella y poder planificar mejoras en las siguientes iteraciones.

Este Landscape está dividido en las distintas fases de nuestro desarrollo
Cadena de herramientas en el ciclo de operaciones de nuestras apps

--

--