X
BLOG

Aproveche los contenedores para lograr seguridad rápidamente con pruebas continuas

Aproveche los contenedores para lograr seguridad rápidamente con pruebas continuas Tiempo de leer: 7 minutos

Prueba continua proporciona un marco para cambiar las pruebas al principio del ciclo de vida. Eso is posible agilizar las pruebas y hacerlas menos inhibidoras en procesos ágiles y continuos. ¿Qué se necesita? La correcta aplicación de la automatización y el enfoque en las áreas de mayor riesgo de la aplicación con el uso de contenedores para el desarrollo de software seguro.

Contenedores para el desarrollo de software seguro

Los contenedores juegan un papel importante en las pruebas de desplazamiento a la izquierda. Y en el éxito de las pruebas continuas y DevSecOps en general. También se están volviendo útiles en el desarrollo, ya que los entornos de prueba y desarrollo en contenedores brindan beneficios como los de la implementación. A continuación, presentamos algunos:

  • Configuraciones de herramientas de desarrollo consistentes y repetibles
  • Implementación "Trabajar desde cualquier lugar"
  • Control de versiones correcto de la herramienta

Los contenedores tienen un papel importante que desempeñar en el desarrollo moderno de DevSecOps, ya que los contenedores pueden ayudar a cambiar los procesos de seguridad a la izquierda en el desarrollo de software.

La Aceleración de DevSecOps con contenedores y pruebas continuas detalles del documento técnico que aprovechan los contenedores para el desarrollo de software seguro para lograr seguridad a gran velocidad. Esta publicación analiza las siguientes áreas clave discutidas en el documento técnico para integrar mejor los contenedores en las fases de desarrollo y prueba del desarrollo de software:

  • Incluya en contenedores las prácticas de seguridad.
  • Elimine las restricciones en la canalización de DevSecOps.
  • Incluya en contenedores el desarrollo seguro en el escritorio de cada desarrollador.

El objetivo es lograr una mayor seguridad mientras se minimiza el impacto en los flujos de trabajo diarios.

Poner en contenedores las prácticas de seguridad

Al aprovechar la coherencia y la capacidad de reutilización que brindan los contenedores, las pruebas de seguridad continuas funcionan mejor cuando cada desarrollador y evaluador del equipo trabaja con la misma configuración. Mover herramientas y configuraciones asociadas a contenedores asegura un uso consistente y cualquier cambio se propaga inmediatamente. Un flujo de trabajo de DevSecOps más inteligente significa que la seguridad está “incorporada” desde el principio.

Los requisitos de seguridad agregan una carga de trabajo adicional para los desarrolladores. La forma en que gestiona marca la diferencia entre un producto seguro y puntual y uno tardío e inseguro. Un requisito fundamental es integrar la seguridad en el proceso de desarrollo existente, haciéndolo menos una carga y parte de la calidad y el flujo de trabajo general.

Aprovechamiento de contenedores: flujo de trabajo de DevSecOps
Figura 1: Un flujo de trabajo de DevSecOps con la implementación en contenedores de controles y procesos de seguridad.

Flujo de Trabajo

El flujo de trabajo comienza con una política de codificación segura. El arquitecto o líder crea una configuración (posiblemente basada en pautas de codificación como CERT, CWE, OWASP impulsadas por estándares como UL-2900 o PCI DSS) para que el resto del equipo la aproveche directamente dentro de su IDE. Esto le da al desarrollador la capacidad de verificar el código localmente en su máquina antes de comprometerse con el control de fuente. Pueden detectar y corregir violaciones de seguridad donde y cuando sea más económico y fácil hacerlo.

Configuración

La misma configuración se replica a través de imágenes de contenedor, lo que proporciona consistencia y luego se aprovecha mediante el análisis ejecutado como parte del proceso de compilación. Este análisis integral va más allá del alcance del código modificado localmente por el desarrollador y proporciona una red de seguridad para controlar el proceso de entrega y asegurarse de que el código inseguro no se promueva a etapas posteriores.

Análisis

Por último, los resultados del análisis se envían de vuelta al IDE del desarrollador a través del panel centralizado de informes y análisis. Aquí es donde puede realizar un seguimiento del progreso, realizar correcciones de rumbo y generar informes de auditoría en tiempo real.

Los gerentes y los líderes de seguridad pueden evaluar proyectos basados ​​en estándares de seguridad como CWE Top 25, OWASP Top 10 o SEI CERT en paneles de control centrales. Estos paneles pueden mostrar información de tendencias y responder preguntas como:

  • ¿Está mejorando o empeorando el proyecto?
  • ¿Qué áreas del código están causando más problemas?
  • ¿Qué problemas tienen el mayor riesgo e impacto?

Ser capaz de responder a estas y otras preguntas, y actuar, transforma al equipo de desarrollo de DevOps con algo de seguridad a DevSecOps.

Eliminar restricciones en la canalización de DevSecOps

A pesar del deseo de acelerar la seguridad y la calidad, los procesos ágiles y continuos encuentran barreras en la adopción temprana y en las operaciones diarias. El culpable de ralentizar los procesos ágiles a menudo son las pruebas. El problema surge porque los equipos no entienden exactamente qué probar durante cada iteración. O intentan probar todo, no prueban lo suficiente o simplemente adivinan. Los tres resultados son inaceptables, especialmente desde el punto de vista de la seguridad. La ejecución inteligente de pruebas ayuda aún más a los equipos a enfocar sus esfuerzos de prueba, lo que realmente permite pruebas continuas.

La pirámide de prueba

La pirámide de prueba define dónde es mejor invertir tiempo y esfuerzo en un proyecto. En la pirámide ideal, invierte su valioso tiempo y esfuerzo en un conjunto completo de pruebas unitarias en la base de la pirámide, que está respaldado por API y pruebas de servicio. En la parte superior de la pirámide hay un número menor de pruebas basadas en el sistema y la GUI. Estas son pruebas que requieren intervención humana, como las pruebas de UX.

Aprovechamiento de contenedores: pirámide de prueba ideal
Figura 2: La pirámide de prueba ideal se construye sobre una base de pruebas unitarias en adelante. La pirámide invertida superpuesta refleja lo que muchas organizaciones están haciendo actualmente.

Esta pirámide a menudo se invierte en forma de cono de helado. Los equipos dedican demasiado tiempo y esfuerzo a pruebas de GUI a nivel de sistema frágiles y complejas que requieren implementar e integrar la funcionalidad completa. El resultado es probar que los equipos no pueden ejecutar continuamente durante las primeras etapas del SDLC.

Esto es especialmente problemático con la seguridad. Es costoso y arriesgado dejar las pruebas de seguridad en una etapa de desarrollo tan tardía. La clave para lograr una prueba continua exitosa es derretir el cono de helado. Centrarse en la creación de pruebas de API y unidades automatizadas para la funcionalidad y la seguridad que se puede ejecutar de forma continua a medida que los desarrolladores implementan la nueva funcionalidad.

Prueba de las mejores prácticas

El mejor enfoque para darle la vuelta a la pirámide de prueba, que se alinea muy bien con las mejores prácticas necesarias para DevSecOps, es adoptar estas mejores prácticas de prueba:

  • Utilice SAST lo antes posible para encontrar problemas profundos de confiabilidad y seguridad ocultos dentro del código. Estos problemas a menudo se pasan por alto en la inspección humana o en las pruebas unitarias.
  • Introducir las pruebas unitarias temprano para garantizar que el código sea funcional, esté bien diseñado y cumpla con los requisitos, incluidos los de seguridad.
  • Céntrese críticamente en las pruebas de API implementado en un entorno virtual o de producción a través de contenedores, según corresponda.

Las pruebas a nivel de API brindan la capacidad de probar la funcionalidad del sistema con más capacidad de reutilización y menos impacto de los cambios en el nivel de IU. Esto significa que el proceso automatizado genera una gran cantidad de datos. Para respaldar la toma de decisiones, estos datos deben agregarse en una vista centralizada de calidad. Los paneles gráficos proporcionan una vista de nivel superior del progreso de las pruebas. Puede crear elementos de trabajo adicionales basándose en la revisión de los datos, los defectos identificados y otros problemas.

Acelere la seguridad con la ejecución inteligente de pruebas

Falta una forma de enfocar las pruebas en las mejores prácticas enumeradas anteriormente. Pide una respuesta a la pregunta: "¿Qué probar?" Centrar las pruebas en exactamente lo que los desarrolladores necesitan revisar después de cada cambio de código es fundamental para acelerar las pruebas, permitir las pruebas continuas y acelerar la canalización de DevSecOps.

Para acelerar las pruebas en una canalización ágil o continua, los equipos necesitan una ejecución inteligente de pruebas por compilación. Reduce los conjuntos de pruebas requeridos que los equipos deben ejecutar para abordar el riesgo que presenta cada nueva iteración. Los análisis que proporciona el análisis de impacto de prueba son clave para enfocar las pruebas solo en lo que es absolutamente necesario probar en lugar del enfoque de escopeta.

Solo a través de una toma de decisiones inteligente y basada en datos se pueden realizar pruebas continuas. Centrar al equipo de desarrollo en el conjunto mínimo de pruebas para garantizar la cobertura adecuada en cada iteración es la clave para devolver la agilidad a los métodos de desarrollo ágiles.

Aprovechamiento de contenedores: gráfico de ejemplo de Parasoft DTP
Figura 3: Un gráfico de alto nivel de ejemplo proporcionado por Parasoft DTP que muestra la distribución de las pruebas que pasaron, fallaron, están incompletas y necesitan una nueva prueba. Los usuarios pueden hacer clic en el gráfico circular para ver más detalles.

Usos de ejecución de prueba inteligente análisis de impacto de prueba para rastrear la ejecución de pruebas manuales contra aplicaciones y la información de cobertura de código capturada asociada con esas pruebas. Las pruebas automatizadas utilizan una tecnología similar. Este análisis determina qué pruebas manuales deben ejecutarse para acceder a la funcionalidad modificada que se entrega con cada nueva compilación. Por lo tanto, la ejecución de pruebas inteligentes es fundamental a nivel de desarrollador y evaluador en sus IDE locales. Les permite enfocar las pruebas y eliminar las conjeturas y el trabajo adicional "por si acaso".

Incluya el desarrollo seguro en contenedores en el escritorio de cada desarrollador

Para lograr una canalización de DevSecOps eficiente, los desarrolladores necesitan acceso a la automatización que elimine los aspectos tediosos de su trabajo diario. El desarrollo exitoso de la seguridad (y la calidad y la seguridad) requiere comentarios rápidos de las pruebas unitarias, las pruebas de API, las pruebas de IU y los resultados de SAST. Además, el ajuste de los controles de seguridad se basa en los hallazgos más recientes del equipo de seguridad.

El beneficio de los contenedores para los equipos de desarrollo se extiende al escritorio del desarrollador. Los contenedores proporcionan una cadena de herramientas coherente y reutilizable (incluida la configuración de prueba / SAST) en los entornos de desarrollo, compilación, integración e implementación. Eliminan la necesidad de actualizar las estaciones de trabajo locales cada vez que se actualizan las configuraciones. En el desarrollo basado en contenedores, solo es necesario actualizar la imagen del contenedor. Todo el equipo se beneficia.

Implementaciones de herramientas basadas en equipos

Las implementaciones de herramientas basadas en equipos pueden usar contenedores para alojar repositorios, diferentes cadenas de herramientas (especialmente importantes para el desarrollo de software integrado), SAST y herramientas de prueba. A continuación se muestra un ejemplo ilustrativo de un posible entorno de desarrollo en contenedores.

Aprovechamiento de contenedores: entorno de pruebas y desarrollo coherente

Figura 4: Los contenedores proporcionan una forma eficiente para que los desarrolladores tengan un entorno de desarrollo y prueba coherente.

Donde los desarrolladores realmente comienzan a acelerar el desarrollo seguro es con la adopción de la ejecución de pruebas inteligentes en la “estación de trabajo” local. Reforzar las buenas prácticas de seguridad e ingeniería (para realizar análisis de seguridad y ejecución de pruebas de forma local y frecuente) entre modificaciones de código y antes de realizar cambios en el sistema de control de fuente. Este proceso reduce significativamente el ciclo de retroalimentación sobre la seguridad y la calidad del código modificado. Generalmente acelera el flujo de trabajo de "codificar, probar, enviar".

Elimina las pruebas innecesarias

Los equipos de desarrollo pueden usar un flujo de trabajo de prueba continuo para ayudar a enfocar los esfuerzos de prueba y asegurarse de que están realizando solo las pruebas necesarias. Además, el monitoreo constante de la seguridad del código con herramientas SAST es fundamental para garantizar que los equipos se adhieran a los estándares de codificación y que las vulnerabilidades delicadas no eludan las pruebas de seguridad.

La retroalimentación y el análisis rápidos de SAST y los resultados de las pruebas reducen la fricción en las pruebas continuas. La coherencia proporcionada por los entornos de desarrollo basados ​​en contenedores significa que los resultados son los mismos en todo el equipo. Reduce la necesidad de "depurar" diferentes entornos de desarrollo cuando los resultados no coinciden. Llevar el poder de la ejecución de pruebas inteligentes al escritorio del desarrollador acelera verdaderamente el desarrollo de software seguro.

Resumen

Los contenedores son un enfoque de implementación y ejecución bien establecido. También admiten una rápida implementación y portabilidad en diferentes entornos de host con soporte para control de versiones y control centralizado. Los CI / CD también son importantes para el desarrollo seguro en una canalización de DevSecOps, ya que es posible proporcionar un entorno de aplicación reproducible con controles de seguridad integrados.

Las pruebas continuas proporcionan un marco para cambiar las pruebas al principio del ciclo de vida. Con la aplicación correcta de la automatización y el enfoque en las áreas de mayor riesgo de la aplicación, es posible optimizar las pruebas para que sean menos inhibidores en los procesos ágiles y continuos. El uso de contenedores para el desarrollo de software seguro extiende los beneficios del control de versiones y la reutilización al escritorio del desarrollador al proporcionar una cadena de herramientas consistente, configuración de prueba / SAST, desarrollo e implementación (local) y entorno de prueba.

CTA-WP-Accelerating-DevSecOps-With-Containers-Continuous-Testing

Escrito por

Arthur Hicken

Arthur ha estado involucrado en seguridad de software y automatización de pruebas en Parasoft durante más de 25 años, ayudando a investigar nuevos métodos y técnicas (incluidas 5 patentes) mientras ayuda a los clientes a mejorar sus prácticas de software.

Reciba las últimas noticias y recursos sobre pruebas de software en su bandeja de entrada.

Prueba Parasoft