Vamos a intentar dar una definición de qué es SecDevOps para que podamos entender en qué consiste. A grandes rasgos, podemos definir SecDevOps como una cultura o metodología de colaboración entre los distintos equipos de un producto software.
Vamos a ver un poco cómo se ha llegado a esta cultura y cómo ha conseguido mejorar mucho la calidad, no solo de los productos desarrollados, sino también la de vida de los que participan en ella.
El problema
Hace unos años (y por desgracia se sigue haciendo en muchos sitios), el proceso de desarrollo de una aplicación y su puesta en marcha en un entorno era un proceso que estaba muy separado. Los desarrolladores (dev) por un lado desarrollaban la aplicación en su entorno local, generaban un paquete y se entregaba al equipo de operaciones (ops) que se encargaba de desplegar la aplicación en la infraestructura correspondiente.
Al ser un proceso muy separado, los desarrolladores apenas tenían conocimiento de la arquitectura, los parámetros de configuración, etc. al igual que el equipo de operaciones no tenía claro qué archivos debían modificar para configurar la aplicación, qué requisitos necesitaba, etc. de manera que funcionase correctamente en el entorno en que se desplegaba.
Esto no solo provocaba muchos dolores de cabeza y retrasos en la puesta en marcha de una aplicación, sino que de manera casi forzosa hacía que existiera una rivalidad entre ambos equipos, culpándose los unos a los otros de los problemas que surgían y llegando a tener peleas dignas entrar en los libros de historia.
El paso intermedio
Con el creciente uso de metodologías ágiles, donde se busca hacer productos donde se vayan realizando pequeñas entregas funcionales de un producto, en lugar de esperar a tener un producto entero sin haber sido testeado al completo, y con la problemática existente entre los distintos equipos, empezó a ser necesario establecer un marco de colaboración, cuyo objetivo era tener un ciclo de vida más rápido, ágil y de mayor calidad.
El ciclo de vida ahora pasa por planificar cual va a ser el siguiente desarrollo a entregar, desarrollarlo (codificarlo), construir una nueva versión del producto, testearla, generar una nueva release (es decir, crear una nueva entrega para el equipo de operaciones), desplegar y configurar los parámetros necesarios según el entorno y por último monitorizar la aplicación.
Para realizar todo este proceso de una manera ágil y rápida, se empiezan a utilizar herramientas de automatización en cada una de las fases del ciclo de vida como jenkins, docker, maven, git, etc. tal y podemos ver en la imagen anterior.
Sin embargo, hay una parte muy importante en el desarrollo de un producto software que se suele olvidar o que, con suerte, se incluye al final del proceso, cuando ya tenemos un producto desarrollado: la seguridad.
El resultado
Como hemos comentado, un punto muy importante en el desarrollo de un producto software se estaba dejando de lado. Esto implica que el producto sea muy susceptible a tener fallos de seguridad, algo que podemos leer o escuchar a diario: «tal compañía ha tenido una importante brecha de seguridad dejando expuestos datos personales de miles de usuarios…».
Ante estos problemas de seguridad, se empezaron a introducir auditorías de seguridad, tanto internas como externas, realizando test de penetración, analizando redes, forense, etc. (aquí es donde empiezan a entrar los hackers, <ironic mode=»on»> esos seres oscuros, con los pelos largos, capas tipo Neo y escondidos en sus cuevas sin tener vida social <ironic mode=»off»>).
Sin embargo, este es un modelo que no es muy efectivo, ya que conllevan unos costes más altos y no permiten que se detecten problemas de vulnerabilidades desde las primeras fases de construcción de un producto software.
Es entonces cuando se introduce la seguridad dentro de todo el ciclo de vida sofware, dando lugar a la definición de qué es SecDevOps.
Ahora, desde las primeras fases del desarrollo, se pueden detectar vulnerabilidades y poner una solución es estas primeras fases.
Aquí también se empiezan a introducir herramientas automáticas para la detección de vulnerabilidades, herramientas que pueden ayudar a los desarrolladores a evitar fallos de seguridad en sus implementaciones, detección de vulnerabilidades en librerías conocidas, pentesting desde las primeras fases funcionales de una aplicación, etc.
Todo esto supone que desde un primer momento vamos a ser capaces de atajar muchos de los problemas de seguridad que nos vayamos encontrando, suponiendo no solo tener un producto más sólido, sino también tener un ahorro de costes.