¿Las aplicaciones desarrolladas bajo un modelo DevOps son más seguras que las construidas bajo un modelo tradicional más riguroso, por ejemplo, una cascada?

No hay una respuesta correcta aquí.

Me gusta recurrir al modelo de calidad de Philip Crosby para medir cosas como esta. Si no estás familiarizado:

  1. La definición de calidad es conformidad con los requisitos (requisitos que significan tanto el producto como los requisitos del cliente)
  2. El sistema de calidad es la prevención.
  3. El estándar de rendimiento es cero defectos (en relación con los requisitos)
  4. La medida de la calidad es el precio de la no conformidad

Veamos esto en dos partes: la primera, especifica los requisitos de seguridad por adelantado; segunda parte, descubre que los requisitos de seguridad no están en la especificación original después de la implementación.

Primera parte: ha definido completamente el comportamiento de seguridad del conjunto de programas, las API, las interfaces de red, la implementación del servidor, el modelo de seguridad de datos tanto en reposo como en tránsito, las partes de identificación y autenticación, todo está bien entendido y completamente modelado , y cree que no hay casos límite que no se hayan considerado.

Cascada: usted escribe código, en fases típicamente, tiene revisiones de código, prueba de unidad, prueba integrada, ya que tiene código listo para implementar la prueba de regresión para que el nuevo código no rompa el código anterior y los ciclos de lanzamiento por etapas. En cada etapa de desarrollo, tiene a alguien que verifica y valida todos los requisitos funcionales, de rendimiento y seguridad que se cumplen, y no se envía ningún código hasta que lo haga.

Precio de incumplimiento: bajo, nada se escapa sin ser examinado. En palabras del comercial ’86 Gallo Wind “no se envía ningún código antes de tiempo”.

Precio de implementación: alto, porque solo puede estimar líneas de tiempo, y tendrá intervalos de tiempo a medida que las cosas se retrasen debido a que no pasa la prueba.

Precio de cumplimiento obligatorio: bajo, porque no hay código no conforme en el sistema.

DevOps: usted escribe código en un modelo de integración continua, y para cada unidad de código el escritor de código es el probador y el implementador de código. Los objetivos finales están definidos, el producto de trabajo provisional mucho menos; a medida que el código llega a la prueba de la unidad (tal vez antes, dependiendo de qué tan bien esté la tienda) se implementa en producción. El nuevo código se implementa contra el código antiguo, y los requisitos funcionales del código se incrementan desde la línea de base hasta el máximo con el tiempo sin lanzamientos programados.

Todo el comportamiento del programa está en flujo ya que toda la base de código está en flujo. Tiene algunas líneas de base (generalmente el modelo de seguridad de datos, el modelo de red, los modelos de autenticación e identificación y una API inicial) que son relativamente inmutables, pero la API crece con el tiempo a medida que se agrega más función de back-end o la interfaz necesita cosas que no son Se puede hacer fácilmente a través de la API actual.

Precio de no conformidad: alto. En cualquier momento dado, el código puede o no cumplir con los requisitos porque la publicación es continua.

Precio de despliegue: bajo. El código ocurre a medida que sucede, y aunque la disponibilidad de funciones puede seguir la trayectoria deseada, no existe una situación en la que al menos los componentes principales del sistema no estén disponibles.

Precio de cumplimiento obligatorio: moderado. El código se está adaptando para una integración continua, se puede inyectar código nuevo y el código antiguo se puede deshacer de manera muy simple.

Parte dos: como en la Parte uno: ha definido completamente el comportamiento de seguridad del conjunto de programas, las API, las interfaces de red, la implementación del servidor, el modelo de seguridad de datos tanto en reposo como en tránsito, las porciones de identificación y autenticación, todo bien entendido y totalmente modelado, y cree que no hay casos límite que no se hayan considerado. Y luego, a mitad del ciclo, o más tarde en el ciclo posterior a la implementación, algo cambia y debe revisar el modelo, las especificaciones, los requisitos, la medida del éxito y crear un nuevo código para que coincida.

Cascada: ahora debe volver a analizar la base de código existente, descubrir cómo modificarla para cumplir con los nuevos requisitos. Habrá una cantidad significativa de tiempo haciendo esto antes de que incluso puedas tocar escribir código. Dependiendo del tamaño de la base del código, esto puede medirse en años, y no es extraño que un gerente de proyecto asignado a tal tarea ejerza presión para una versión “2.0” que cumpla con los nuevos requisitos que de hecho es un nueva construcción desde cero, no basada en código anterior.

Una vez que se acuerda el proceso, se define un ciclo de lanzamiento, se establece la funcionalidad de lanzamiento por etapas, continúa como en la Parte Uno.

Precio de incumplimiento: según Crosby, este sería un nuevo proyecto en el que dejaría de lado el hecho de que anteriormente tiene un sistema en funcionamiento, por lo que el costo aún sería bajo a cero. En realidad, tendría que tomarse el tiempo dedicado a descubrir cómo modificar el sistema para cumplir con los nuevos requisitos más el tiempo de modificación, por lo que será minucioso. Que Dios te ayude si acabas de “perder algo” en lugar de un cambio importante en el regulador que forzó los nuevos requisitos.

Precio de despliegue: masivo. Debe cortar un sistema de producción completo a un nuevo sistema de producción. Puede usar algunas técnicas de DevOps, en particular el uso de equilibradores de carga para dividir la carga, una vez que tenga un almacén de datos de backend unificado que pueda usar tanto los sistemas antiguos como los nuevos, pero aún así es doloroso.

Precio de cumplimiento obligatorio: igual que en la primera parte.

DevOps:

Tiene un nuevo conjunto de requisitos que agrega a su conjunto anterior de requisitos y, como antes, las cosas se implementan a medida que se implementan y se implementan a medida que se hacen. Las pruebas de regresión se vuelven más importantes ya que no desea romper el comportamiento esperado anterior contra el nuevo código que impone nuevos requisitos, y el análisis de cómo los nuevos requisitos cambian la interacción del usuario generará mucho código.

Nuevamente, en ausencia de cambios en el almacén de datos del backend que afectan tanto la implementación hacia adelante como hacia atrás, el código simplemente se implementa.

Precio de no conformidad: alto. en cualquier momento dado, solo una parte de la base del código cumplirá con los requisitos, y el código que cumple con los requisitos de hoy puede revertirse mañana.

Precio de despliegue: bajo. el código se implementa con el tiempo, cambia a nuevas instancias administradas por división de carga.

Precio de cumplimiento obligatorio: moderado, mucho más bajo que la cascada. Una vez más, el despliegue del código ocurre de manera incremental y se puede inyectar un nuevo código y revertir el viejo frío simplemente.

Por lo tanto, si cree que los requisitos funcionales y de seguridad pueden entenderse y definirse y probarse por completo, y el tiempo para la primera implementación no es un problema, la cascada plana mata todo lo demás.

Es por eso que aún así es como construimos sistemas seguros, sistemas integrados, firmware de dispositivos y todo lo demás que puede encapsularse y reducirse.

Si, por otro lado, cree que solo comprende parcialmente los requisitos completos y sus implicaciones y espera que antes de que el proyecto se entregue por completo que habrá cambios, sería un idiota si no usara otra cosa que no sea cascada.

Tenga en cuenta que existe una alternativa, pionera en Cisco para sus lanzamientos de código de enrutador IOS, llamada “tren de código”, que proporciona todo el rigor de la cascada con algo de la flexibilidad de DevOps, al dividir el código general en partes más pequeñas con un lanzamiento calendario y un conjunto de reglas para modificar lo que hay en cada fragmento de lanzamiento progresivo.

Si tiene inquietudes acerca de mantener un control estricto sobre la calidad del código pero mantener algo cercano a la velocidad de liberación de la integración continua, estudie eso en orden.

Nota adicional: debe ser capaz de comprender y articular los requisitos funcionales y de seguridad en todos los casos de uso anticipados para que todo esto sea más que una conjetura, y ahí es donde falla el 90% + del código moderno.

Existe una extensión de DevOps llamada DevSecOps que hace que la seguridad forme parte de todo lo que hace en el ciclo de vida de desarrollo de productos o servicios.

¿Qué es DevSecOps?

DevOps es una pieza crítica de un ciclo de vida de desarrollo.

Tener líderes y desarrolladores conscientes de la seguridad mejorará en gran medida la seguridad del producto o ciclo de vida.

Necesita lo siguiente para garantizar la seguridad de sus aplicaciones, productos y servicios (externos o internos):

  • Tener un líder capacitado en seguridad.
  • Siga un estricto proceso de desarrollo que incluye revisiones de código, análisis estático y dinámico de código. Su entorno de integración continua puede tener complementos para hacer el análisis de código estático / dinámico.
  • Tenga un proceso de parchear sus sistemas y software adquiridos regularmente. (Por ejemplo: el famoso ‘Patch Tuesday’ de Microsoft)
  • Si no tiene suficiente experiencia en seguridad o talento en la empresa, no escatime en la consulta de expertos. Es mejor estar preparado que lamentar. En particular, si opera en una industria altamente regulada, como la atención médica o las finanzas, debe tener la seguridad como la prioridad número 1.

No dude en enviarme un mensaje si necesita algún consejo, sugerencia o evaluación.

La metodología SDLC no tiene relación real con la seguridad de las aplicaciones.

La seguridad de la aplicación depende del nivel de experiencia de los desarrolladores con los problemas de seguridad y de qué tan temprano en el ciclo se ponga en juego la seguridad.

En metodologías tradicionales como la cascada, la seguridad es una ocurrencia tardía, ni siquiera parte del SDLC, sino un equipo que examina la seguridad de la aplicación DESPUÉS de que la aplicación ya está en producción.

En las metodologías modernas, DevOps (o SecDevOps / DevSecOps) permite equipos integrados, por lo que la seguridad puede involucrarse mucho antes en el proceso de desarrollo de aplicaciones.

Si no es obvio por mi respuesta, los métodos más antiguos son MUCHO MENOS seguros.

La metodología lo ayuda a garantizar que implementó los requisitos y lo consiguió todo documentado, etc. Los métodos ayudan con las pruebas, etc. Seguir una metodología debería ayudar a no introducir código incorrecto / roto.

Si no tiene requisitos para implementar la seguridad, no importa la metodología de desarrollo.

Primero comenzaría contratando ingenieros que entiendan la seguridad. La comprensión proviene de haber implementado la seguridad. También debe tener a alguien que pueda reclutar ingenieros que entiendan la seguridad.

Creo que la metodología tiene poco impacto.

More Interesting

¿Cuáles son las mejores aplicaciones para chatear con amigos desconocidos?

¿Cuál es el mejor software gratuito de recuperación de datos USB?

¿Qué puedo hacer para tener control de calidad de video en los videos autohospedados de mi sitio web como lo que hace YouTube?

¿Cuál es la mejor herramienta de gestión de inventario disponible en el mercado?

Cómo utilizar un software de creación de sitios web y, al mismo tiempo, realizar un seguimiento y control de mi programación respaldada

¿Deben los departamentos gubernamentales y las empresas dejar de usar el software de Microsoft?

¿Cuál es la mejor aplicación para llamadas internacionales gratuitas?

¿Cuáles son los mejores programas para el diseño de carteles? ¿Cómo se hacen los carteles?

¿Cuánto es el costo promedio de una aplicación?

¿Es posible ser un diagnóstico, un cirujano, un matemático, un biólogo, un experto en literatura, ser bueno en defensa personal y artes marciales, ser bueno para hablar y escribir al menos 5 idiomas y poder escribir programas de computadora fácilmente ?

¿Cómo funciona la aplicación 'HootSuite'?

¿Cuáles son las diferencias entre CRM, SMM y software de colaboración? Tengo datos y quiero administrar a todas las personas en un solo lugar. ¿Cuál de estos prefieres y por qué?

¿Debo hacer llamadas API cuando un usuario abre mi aplicación para generar menús seleccionados, etc.?

¿Cómo entrar en una empresa después de aprender el software CAD 3D?

¿Cuáles son las principales aplicaciones que debes tener en tu móvil instalado?