top of page
Foto del escritorIng. Derman Alva

DevSecOps: El rediseño de DevOps

Actualizado: 22 feb 2021

Desde la introducción del término DevOps en 2008 por Yhens Wasna y Patrick Debois, Devops ha necesitado de un resideño en su enfoque en el desarrollo de software, gestión de software y entrega de software a través de DevSecOps.

DevSecOps

DevOps ha resuelto varios problemas de ingeniería de software, incluida la fricción y el retraso en la entrega del software y la resolución de problemas. La planificación puede ayudar a resolver las lagunas en su aplicación y los ciclos en DevOps. Las necesidades de desarrollo de software utilizan a DevOps como una respuesta rápida para las necesidades o errores de los usuarios y menos fricción entre los equipos, generalmente los equipos de Desarrollo y Operativos. Aunque DevOps aborda estos problemas de manera bastante justa, lo que pasa por alto es el aspecto importante del software moderno: el mantenimiento del software.


Un enfoque moderno para el desarrollo de software requiere que el producto tenga suficiente seguridad, rendimiento y eficiencia, y una mejor UX (user experience) para permitir a los usuarios y/o cliente realizar sus tareas. Los usuarios también deben saber cómo la aplicación utiliza los datos que recibe.

Uno de los principales énfasis que se le da al software moderno es en la seguridad y la privacidad de los datos. La seguridad ahora viene en todas las colores, formas y tamaños. Ahora un desarrollo de software se enfrenta cara a cara con las interacciones no deseadas del usuario en la interfaz y los ataques a los servidores que pueden comprometer no solo la solución sino también los datos de las empresas o entidades sin distinción alguna.

DevSecOps no se trata solo de seguridad y corrección de errores. Más bien, DevSecOps es un término común que conduce a un producto seguro, mejora el rendimiento y la eficiencia de ese producto y mejora la productividad general del desarrollador.

Ejecutar DevOps con seguridad

Debemos de enfocarnos en los requisitos de seguridad de los entornos DevOps, por lo cual aconsejo lo siguiente:

  • Introducir controles de calidad de código para nuevos desarrollos de código.

  • Creación de estándares para la verificación y comprobación del código implementados por la empresa para mejorar la legibilidad del código desarrollado.

  • Realizar el análisis de código estático para detectar la complejidad del código no deseado o repetido.

  • Gestionar y verificar el proceso de compilación seguro con Docker y contenedores.

  • Ejecutar una rigurosa Inspección y análisis de la plataforma de host para detectar posibles gaps de seguridad.

Escribir código para aplicaciones seguras

Cuando se realiza una canalización normal de DevOps, los equipos de desarrollo dejan las responsabilidades de creación de código y administración de paquetes a la herramienta DevOps, como GitLab, AWS DevOps (AWS CodeStar) o Azure DevOps.


DevSecOps espera mucho más que eso y requiere que cada desarrollador y personal de TI asuman la responsabilidad de la seguridad, la calidad y las revisiones del código.


Independientemente de la plataforma de automatización que usemos, se pueden introducir scripts y paquetes en la canalización que requieran una solicitud de fusión para ser revisado por pares. Incluso antes de que se cree una solicitud de fusión, un pipeline DevOps bien definido puede notificar al personal involucrado sobre los problemas potenciales que podría tener un cambio.

Las canalizaciones deben de notificar a los desarrolladores sobre lo siguiente :

  • Degradación del rendimiento de la solución.

  • Vulnerabilidades en el código

  • Complejidad del código

  • Posible desestandarización del código y el uso de antipatrones

  • La cantidad de casos de prueba que fallan o son ignorados por los desarrolladores y el código que no está siendo cubierto por los casos de prueba.

Inmunizando las Inyecciones SQL

Muchas aplicaciones web utilizan base de datos para ofrecer información tanto de los usuarios como de la propia herramienta, por lo que se accede a los datos por medio del lenguaje SQL, para un desarrollo seguro recomiendo lo siguiente:

  • Diseñar tus bases de datos relacionales de acuerdo con las reglas de normalización.

  • Siempre debe de escribir sentencias SQL lo más legible y comprensible posible.

  • Agrupar o filtrar los datos en columnas individuales y evitar el uso de varias columnas en una sola cláusula.

  • Debe evitar usar asterisco o seleccionar todo "*" en las consultas SELECT y debe intentar escribir los nombres de las columnas para los datos.

  • Nunca debe concatenar las consultas y siempre usar parámetros para las entradas.

  • Puede usar una cláusula JOIN o consultas INNER para devolver los datos, y luego su base de datos puede decidir cómo devolver los datos.

  • Utilizar funciones para evitar caracteres especiales como por ejemplo \ .

  • Delimitar los valores de los queries.

  • Verificar y validar los datos que introduce el usuario.

  • Asignar mínimos privilegios al usuario que ingrese al sistema.


Utilice SAST, DAST, IAST y RASP para la calidad del código fuente


Para realizar el análisis del código fuente y la detección de vulnerabilidades, en mi artículo "DevOps: Integración y Entrega Continua" (2020) que se puede consultar en el URL https://dermanalvac.wixsite.com/resume/post/devops-integraci%C3%B3n-y-entrega-continua

mostré el pipeline donde describo los procesos y las herramientas, para lo cual podemos realizar las siguientes técnicas de análisis del código fuente:

  • SAST: Pruebas de seguridad de aplicaciones estáticas

  • DAST: Pruebas de seguridad de aplicaciones dinámicas

  • IAST: Pruebas de seguridad de aplicaciones interactivas

  • RASP: Autoprotección de la aplicación en tiempo de ejecución

Pipeline DevOps

El análisis de código estático no tiene que realizarse solo en una canalización de CI. Se puede aplicar a un IDE para informes de análisis en tiempo real.

El análisis dinámico o el análisis en tiempo real es que funcionan en aplicaciones que ya se encuentran en el entorno de producción.

En producción, es menos importante encontrar un error y es más importante corregirlo. En este escenario, RASP ofrece una función mejor para parchear los errores y aplicar un firewall en la aplicación web. La mayoría de los proveedores de la nube ofrecen una opción de firewall web que protege su aplicación web de intentos maliciosos y de piratería y aplica un parche temporal en su sitio web. Este parche puede proteger su sitio web contra errores comunes. WAF de AWS y Microsoft Azure admiten Web Firewall, que puede prevenir cualquier ataque de inyección XSS o SQL en una aplicación web.


Capacitación de programadores

Para una empresa o cualquier entidad es importante capacitar a sus programadores y evaluadores de acuerdo con los estándares de la industria para el desarrollo de código y la seguridad que debe de tener. Esto puede diferir de una empresa a otra, y la importancia de la capacitación puede variar de un programador a otro. El objetivo de esto es garantizar que el código que genere el programador sea de calidad. Esto ayuda a mejorar la experiencia de desarrollo y minimiza el número de revisiones y los recursos de compilación innecesarios.


Analizadores de código seguro

Los paquetes de análisis de código pueden ayudar al desarrollo de software y mejorar la calidad del código. A medida que aumenta la complejidad del código, incluso los programadores e ingenieros de software más experimentados a veces no detectan errores en el código.

Actualmente hay analizadores de paquetes que están disponibles como descargas NuGet; Resharper entre otros que hay en el mercado.


Es mejor utilizar estas herramientas para notificar a los programadores sobre posibles errores de código antes de que se registre el código. Esto ocurre antes de DevOps y ayuda a reducir los costos de infraestructura.




Ing. Derman Alva


52 visualizaciones0 comentarios

Entradas Recientes

Ver todo

Comments


bottom of page