¿Cómo debe encajar la seguridad en el ciclo de vida del desarrollo de software?

Esa es una pregunta bastante simple con una respuesta simple y no falsa. La seguridad encaja en todo el ciclo de vida del desarrollo.

Desde el principio, debe diseñar un sistema teniendo en cuenta la seguridad. Su diseño debe incluir algún tipo de diagrama de flujo de datos, y debe evaluar qué activos está tratando de proteger, dónde esos activos cruzan los límites de confianza, cuáles son las amenazas en esos límites y qué puede hacer para mitigar la amenaza. Busque en el modelado de amenazas para obtener más información aquí.

En el momento del desarrollo, debe establecer las mejores prácticas para su dominio. Si está desarrollando código C y C ++, la mayoría de los compiladores tendrán opciones para verificar si hay desbordamientos de búfer, llamadas de tiempo de ejecución inseguras, uso después de liberar y otros errores de codificación comúnmente explotados. Si está desarrollando una interfaz de base de datos, querrá adoptar prácticas que eviten los ataques de inyección SQL. Otros dominios tienen sus propias clases de vulnerabilidades; deberás averiguar qué amenazas viven en tu espacio.

Sus pruebas deben incluir casos que ejerciten todas las formas de entradas no válidas. Fuzzing es una técnica que los atacantes usan para encontrar vulnerabilidades. Investigue las herramientas de prueba de fuzz para su dominio; tus enemigos seguramente lo han hecho.

Y, por supuesto, después de la implementación, debe tener un plan de respuesta cuando surgen problemas de seguridad.

La seguridad es un tema bastante complejo y requiere mucho cuidado y atención durante todo el proceso de desarrollo. Los ejemplos que doy arriba no son ni siquiera completos. Si esto es algo que planea tomarse en serio en su producto (lo que debería hacer), recibir unos días o semanas de consulta de un experto en seguridad sería un dinero bien gastado.

  1. Lo primero que haría es asegurarme de que un equipo no siga el popular antipatrón: comenzar con la funcionalidad. ¡Vamos a hacerlo funcionar primero, mal! Siempre debe analizar varios aspectos del software, incluida la seguridad y el rendimiento.
  2. La palabra ‘prueba’ significa cualquier cosa que pueda salir mal, lo hayamos pensado o no. No significa verificar si funciona. Aparte: la mayoría de la gente no entiende la palabra ‘prueba’.
  3. Es muy difícil anticipar qué puede salir mal en el software. Debe tener urgencia y agresividad para anticipar problemas. Creo que hay mucho interés en los algoritmos y la programación. Deseo que la gente entienda los desafíos de la tecnología, los sistemas y los usuarios. Todo esto puede morderte en la parte trasera.
  4. Tiene que haber un cerebro detrás del uso de herramientas. Por supuesto, debe usar herramientas, pero no de manera mecánica y esperar grandes resultados.

Estos son los pasos concretos que seguiría:

  1. Me aseguraría de que el equipo tenga una capacitación en vulnerabilidades de seguridad básicas, es decir, XSS, concepto de hash, etc.
  2. Me aseguraría de que el equipo use la heurística para encontrar vulnerabilidades, por ejemplo, rastrear el flujo de datos en toda la aplicación. El punto es ser creativo sobre lo que puede salir mal.
  3. Debe haber acceso a alguien que entienda la seguridad, por ejemplo, que pueda buscar los algoritmos actuales para el cifrado.
  4. Cada persona debe seguir haciendo preguntas sobre seguridad, durante todo el ciclo de vida del desarrollo, no al final.

Resumen

Realmente lo que propongo es dar un entrenamiento básico. Pídale a las personas que sean creativas sobre lo que puede salir mal durante el ciclo de desarrollo.

Estoy seguro de que algunas personas propondrán contratar consultores. Puedes hacerlo si te lo puedes permitir. Sin embargo, siempre debe hacer lo mejor con sus recursos, es decir, los desarrolladores. Creo que la mayoría de los equipos son negligentes hacia la seguridad y siempre esperan que un caballero con una armadura brillante los rescate.

Con respecto al SDLC, es un enfoque recomendado que los aspectos de seguridad de un sistema tengan importancia en cada etapa.

Desde el inicio del ciclo de vida del software, las características de seguridad deben incorporarse dentro de la aplicación.

Miremos cada fase de SDLC y veamos las posibles actividades que se pueden incluir para desarrollar una aplicación segura.

Fase de recopilación de requisitos:
Durante esta fase, al enumerar varios requisitos funcionales, es esencial que los requisitos de seguridad también necesiten ser enumerados.
Por ejemplo, mientras discute sobre la funcionalidad de inicio de sesión, presenta los requisitos como la complejidad de la contraseña, máx. no de intentos fallidos de inicio de sesión.

Fase de diseño:
Durante esta fase, incluya los principios de diseño seguro, como Integridad y No repudio. Para validar el diseño desde la perspectiva de seguridad, un grupo selecto de expertos puede realizar revisiones de diseño de seguridad y prescribir recomendaciones de seguridad.

Fase de implementación:
En esta fase, se deben emplear los principios de codificación segura para garantizar que no haya vulnerabilidades de seguridad dentro de la aplicación. Se puede hacer una revisión segura del código para garantizar que el código esté libre de vulnerabilidades.

Fase de prueba:
A medida que se realizan pruebas funcionales para verificar los requisitos funcionales, se deben realizar pruebas de seguridad / evaluación de vulnerabilidad. Este VA garantiza que la existencia de la aplicación esté segura y libre de vulnerabilidades.

Fase de implementación / mantenimiento:
Asegúrese de que durante el despliegue, el entorno de preparación / producción esté asegurado por el endurecimiento de la plataforma y el sellado de los puertos no deseados. Además, cualquier código de mantenimiento agregado debe inducir un poco a las nuevas lagunas de seguridad.

La mayoría de los equipos de proyectos cometen un error al introducir la seguridad solo durante la etapa de prueba o más tarde. Esta no es una práctica recomendada ya que el costo incurrido para encontrar vulnerabilidades de reparación en la etapa posterior de SDLC es mucho mayor. Por lo tanto, es más sabio y seguro incluir principios de seguridad desde las primeras etapas y todas las etapas de SDLC.

More Interesting

¿Cuáles son las startups con sede en Kolkata, India?

Acabo de dejar mi trabajo de desarrollador de software para tratar de convertirme en cantante. Mis amigos y padres no me apoyan. ¿Qué tengo que hacer?

¿Cuál es la empleabilidad de los graduados de desarrollo de software de TI de SAIT?

¿Qué es el método ágil? ¿Cómo puedo desarrollar software usando el método Agile?

¿Es cierto que debería "fingirlo hasta que lo sepa" cuando solicito un trabajo de desarrollador de software que requiere habilidades que no conozco?

¿Por qué la gente de negocios siempre trata de fastidiar a los desarrolladores de software?

Para un rol de desarrollo de software, ¿cómo respondería a la pregunta de la entrevista, diseñaría un algoritmo de elevador y estructuras de datos para controlar y despachar los elevadores (de 1 a n elevadores)? No hay estadísticas disponibles.

¿Es posible formatear un almacenamiento externo para que ningún software pueda recuperarlo?

¿Los desarrolladores de software a menudo tienen que trabajar de viernes a domingo?

¿Por qué el desarrollo de software cuesta grandes cantidades de dinero?

¿Cuál es el potencial (monetario) de un negocio de desarrollo de software personalizado, una tienda de consultoría de software para ser precisos?

¿Dónde puedo calificar a los desarrolladores?

¿Cuántos ingenieros de software hay en el mundo?

¿Cómo debo prepararme para una entrevista de pasantía de desarrollador de software en Qualtrics?

¿Cuál es la mejor manera de emplear un desarrollador estrella en alta mar?