Está en la página 1de 36

Desarrollo Seguro y

Modelado de Amenazas en
SDLC
Aprende a desarrollar aplicaciones seguras y a modelar
amenazas en el Ciclo de Vida del Desarrollo de Software

Empezar

D i ió g l
Descripción general
En este curso, aprenderás los principales modelos de desarrollo de software y cómo
modelar amenazas para abordar las vulnerabilidades existentes. Además, te
enseñaremos a analizar, explotar y solucionar falencias en el desarrollo de
aplicaciones desde el inicio de cualquier proyecto. Al finalizar el curso, serás capaz de
entender el ciclo de desarrollo seguro de aplicaciones, reconocer las amenazas y
vulnerabilidades, diseñar modelos de amenazas, desarrollar aplicaciones seguras y
evitar vulnerabilidades.

11 Prueba

Introducción al desarrollo
seguro y modelado de
amenazas

01 Introducción al desarrollo seguro y modelado de amenazas


La seguridad del software es un aspecto fundamental en el desarrollo de aplicaciones.
Garantizar la protección de los datos y los sistemas contra posibles amenazas es
primordial para mantener la confidencialidad, integridad y disponibilidad de la
información.

En este contexto, el desarrollo seguro y el modelado de amenazas se presentan


como técnicas fundamentales para identificar, analizar y prevenir posibles
vulnerabilidades en el ciclo de vida del desarrollo del software (SDLC, por sus siglas
en inglés).

El desarrollo seguro implica adoptar un enfoque proactivo en la implementación de


medidas de seguridad desde el inicio del proyecto. Se basa en principios y prácticas
que aseguran que las aplicaciones sean diseñadas, desarrolladas y mantenidas con
controles de seguridad adecuados.

Por otro lado, el modelado de amenazas es una técnica estructurada y repetible que
permite identificar y evaluar los riesgos a los que estará expuesta una aplicación.
Consiste en analizar el sistema desde la perspectiva del atacante y determinar las
posibles vulnerabilidades y los impactos que podrían tener en la seguridad de la
aplicación.

Durante el desarrollo seguro y el modelado de amenazas se utilizan diferentes


metodologías y enfoques, como el Secure Software Development Lifecycle (S-SDLC),
el Threat Modeling (modelado de amenazas) y los principios de diseño seguros. Estas
técnicas permiten realizar una evaluación exhaustiva de la seguridad en todas las
etapas del ciclo de vida del software, desde la planificación hasta el mantenimiento.
En este curso, se explorarán los principales modelos de desarrollo de software y
modelado de amenazas, así como las vulnerabilidades más comunes en las
aplicaciones. Se aprenderá a reconocer y detectar de manera proactiva las fallas en
el desarrollo de las aplicaciones, y se adquirirán habilidades para diseñar, desarrollar
y mantener aplicaciones seguras que minimicen las vulnerabilidades.

El conocimiento básico sobre análisis de sistemas y programación es un requisito


previo para este curso. Está dirigido a desarrolladores, administradores de bases de
datos, líderes de proyectos, analistas de sistemas y todas aquellas personas
involucradas en el análisis, diseño, arquitectura y desarrollo de aplicaciones.

Durante este curso teórico/práctico de 32 horas, se abordarán temas como los


principios del diseño de software seguro, los diferentes modelos de desarrollo, la
identificación de amenazas, el modelado de amenazas utilizando diferentes
metodologías como el modelo STRIDE y el modelo DREAD de Microsoft, y se
explorarán prácticas de desarrollo seguro como la programación defensiva y la
revisión de código.

En resumen, este curso de "Desarrollo Seguro y Modelado de Amenazas en SDLC"


brindará a los participantes las herramientas y conocimientos necesarios para
comprender el ciclo de desarrollo seguro de aplicaciones, identificar y evaluar
amenazas, y desarrollar aplicaciones seguras que minimicen las vulnerabilidades y
protejan la información.

Conclusión - Introducción al desarrollo seguro y modelado de amenazas


En la introducción al desarrollo seguro y modelado de amenazas,
los participantes aprenderán los conceptos básicos de la
seguridad en el desarrollo de software y comprenderán la
importancia de identificar y mitigar las amenazas en cada etapa
del ciclo de vida del software.

Principios del diseño de


software seguro

02 Principios del diseño de software seguro

Principios del diseño de software seguro

El diseño de software seguro es una disciplina fundamental para desarrollar


aplicaciones seguras desde su concepción inicial. Está orientado a minimizar y mitigar
los riesgos y amenazas a los que puede estar expuesto el software, garantizando así
la protección de los datos y la integridad del sistema.

A continuación, se presentan los principales principios del diseño de software seguro:

1. Principio de mínimos privilegios: Este principio establece que los usuarios y componentes del
sistema deben tener únicamente los privilegios necesarios para llevar a cabo sus funciones.
De esta manera, se reducen las posibilidades de que un usuario malintencionado o una falla
en el sistema puedan comprometer la seguridad de la aplicación.

2. Principio de separación de responsabilidades: Este principio tiene como objetivo dividir las
diferentes funcionalidades del sistema en módulos independientes, de manera que cada uno
tenga un propósito específico y no se superpongan entre sí. Esto permite limitar el impacto
de posibles vulnerabilidades o fallos en un componente del sistema y facilita su corrección y
mantenimiento.

3. Principio de defensa en profundidad: Este principio propone implementar múltiples capas de


seguridad en la aplicación, de manera que si una capa es comprometida, existan otras capas
que puedan detectar y mitigar el impacto de dicho compromiso. Esto implica utilizar distintos
mecanismos de seguridad, como firewalls, cifrado de datos, autenticación, entre otros, que
actúen de manera complementaria.

4. Principio de validación y sanitización de datos: Antes de procesar cualquier dato proveniente


de fuentes externas, es fundamental realizar una validación y sanitización exhaustiva, a fin de
evitar la ejecución de código malicioso o la entrada de datos no esperados. Esto incluye el
uso de técnicas como la validación de formato, la detección de inyecciones de código y la
protección contra ataques de scripting.

5. Principio de manejo seguro de errores: El manejo adecuado de errores es esencial para


mantener la confidencialidad e integridad de los datos. Se deben implementar mecanismos
que impidan la revelación de información sensible en mensajes de error y que registren y
notifiquen de manera segura los errores ocurridos en la aplicación.

6. Principio de actualización y parcheo frecuente: El software seguro debe estar siempre


actualizado, incluyendo las últimas correcciones y parches de seguridad. Esto implica contar
con un proceso de actualización regular y una respuesta rápida ante la detección de nuevas
vulnerabilidades.
7. Principio de pruebas exhaustivas: Antes de la implementación de una aplicación, es
necesario realizar pruebas exhaustivas para identificar y corregir posibles vulnerabilidades.
Estas pruebas pueden incluir pruebas de penetración, pruebas de estrés y pruebas de
seguridad en general.

Implementar estos principios en el diseño de software garantiza una mayor resistencia


frente a amenazas y ataques, y contribuye a la construcción de aplicaciones seguras
desde su concepción. Es fundamental que los desarrolladores y profesionales
involucrados en el ciclo de vida del desarrollo del software sean conscientes de la
importancia de estos principios y los apliquen de manera efectiva en sus proyectos.

Conclusión - Principios del diseño de software seguro

Los principios del diseño de software seguro brindan a los


desarrolladores las bases fundamentales para crear
aplicaciones seguras y protegidas contra posibles ataques.
Durante este tema, los participantes aprenderán los principios y
mejores prácticas para desarrollar software seguro desde el
inicio del proyecto.
Modelos de desarrollo de
software

03 Modelos de desarrollo de software

Los modelos de desarrollo de software son enfoques sistemáticos para llevar a cabo
el proceso de desarrollo de software de manera organizada y estructurada. Estos
modelos proporcionan un conjunto de reglas y directrices que guían a los
desarrolladores a través de todas las etapas del ciclo de vida del desarrollo de
software (SDLC) y les ayudan a crear aplicaciones de alta calidad y confiables.

Existen varios modelos de desarrollo de software, cada uno con sus propias
características y ventajas. A continuación, se describen algunos de los modelos más
comunes:

Modelo en Cascada

El modelo en cascada es uno de los primeros y más tradicionales modelos de


desarrollo de software. En este modelo, las etapas del desarrollo de software (como
el análisis de requisitos, el diseño, la implementación y las pruebas) se llevan a cabo
de forma secuencial, donde cada etapa depende del resultado de la etapa anterior.
Una vez que una etapa está completa, no se puede volver atrás. Este modelo es útil
cuando los requisitos del proyecto son claros y estables.

Modelo en Espiral

El modelo en espiral es un enfoque iterativo e incremental para el desarrollo de


software. En este modelo, el desarrollo de software se lleva a cabo en ciclos
repetitivos, cada uno de los cuales incluye actividades de planificación, análisis de
riesgos, desarrollo, pruebas y evaluación. Cada ciclo del modelo en espiral va
mejorando el producto final basándose en lo aprendido en ciclos anteriores. Este
modelo es adecuado para proyectos de desarrollo de software de gran envergadura y
complejidad.

Modelo en V

El modelo en V es una extensión del modelo en cascada. En este modelo, cada


etapa del desarrollo de software tiene una etapa de prueba asociada, lo que garantiza
que cada aspecto del software se pruebe de manera exhaustiva. A medida que las
etapas del desarrollo se van completando, las pruebas se van realizando en la
dirección opuesta, en espejo, lo que da lugar a la forma de "V". Este modelo es
especialmente útil en proyectos donde la calidad y la fiabilidad son aspectos críticos.

Modelo Ágil

El modelo ágil es un enfoque flexible y colaborativo para el desarrollo de software. Se


basa en la colaboración continua entre los miembros del equipo de desarrollo y los
clientes, y se enfoca en la entrega temprana y frecuente de funcionalidades. En lugar
de seguir un plan estricto, este modelo permite adaptarse a medida que se va
desarrollando el software. Algunos métodos ágiles populares incluyen Scrum, Kanban
y Extreme Programming (XP).

Estos son solo algunos ejemplos de modelos de desarrollo de software. Cada modelo
tiene sus propias ventajas y desafíos, y es importante elegir el modelo adecuado
según las necesidades del proyecto. La comprensión de estos modelos es
fundamental para abordar las principales vulnerabilidades y amenazas en el desarrollo
seguro de software.

Referencias:

Segu-Info: Educación en Seguridad de la Información. (20140501). Desarrollo Seguro y


Modelado de Amenazas. Recuperado de http://educacion.segu-info.com.ar

Este material fue creado como parte del curso "Desarrollo Seguro y Modelado de
Amenazas en SDLC" dictado por Segu-Info.

Conclusión - Modelos de desarrollo de software

En el tema de modelos de desarrollo de software, los


participantes conocerán los distintos enfoques y metodologías
de desarrollo, así como las ventajas y desafíos de cada uno.
Además, aprenderán a seleccionar el modelo más adecuado
para garantizar la seguridad y la calidad del software.
Etapas del desarrollo del
software

04 Etapas del desarrollo del software

El desarrollo del software se compone de diferentes etapas o fases que permiten


llevar a cabo la creación de una aplicación de manera estructurada y organizada.
Estas etapas son fundamentales para garantizar que el resultado final sea un
software de calidad y seguro.

A continuación, se describen las principales etapas del desarrollo del software:

1. Requerimientos

En esta etapa se analizan y documentan los requerimientos del cliente o usuario final.
Es importante entender las necesidades y expectativas del sistema a desarrollar, así
como los objetivos y funcionalidades que debe cumplir.
2. Diseño

En la etapa de diseño se crea una representación visual del sistema que se va a


desarrollar. Se definen la arquitectura, las interfaces y los componentes del software.
También se especifican los estándares de codificación y las herramientas a utilizar.

3. Implementación

Durante la etapa de implementación, los diseñadores y desarrolladores comienzan a


programar el software de acuerdo con las especificaciones del diseño. Se utilizan
diferentes lenguajes de programación y se siguen buenas prácticas de programación
para garantizar la calidad y seguridad del código.

4. Pruebas

En esta etapa se realizan pruebas exhaustivas para identificar posibles errores o


problemas en el software. Se prueban cada una de las funcionalidades, se realizan
pruebas de rendimiento y se comprueba que el software cumpla con los
requerimientos establecidos.

5. Despliegue

Una vez que el software ha pasado todas las pruebas satisfactoriamente, se procede
a su despliegue. Esta etapa puede incluir la instalación del software en los servidores
o dispositivos finales y la configuración necesaria para su correcto funcionamiento.

6. Mantenimiento
El mantenimiento del software es una etapa continua que se lleva a cabo después de
su despliegue. Durante esta etapa se realizan actualizaciones o mejoras, se corrigen
posibles errores o se implementan nuevas funcionalidades según las necesidades del
usuario.

Es importante destacar que estas etapas no son lineales y se pueden realizar de


forma iterativa, es decir, puede ser necesario volver a alguna de las etapas anteriores
para realizar ajustes o mejoras en el software.

En conclusión, las etapas del desarrollo del software son fundamentales para
garantizar la calidad y seguridad de un software. Cada etapa cumple una función
específica en el proceso de desarrollo y contribuye a la obtención de un producto final
exitoso.

Conclusión - Etapas del desarrollo del software

Las etapas del desarrollo del software son fundamentales para


garantizar la creación de aplicaciones seguras y libres de
vulnerabilidades. En este tema, los participantes aprenderán las
distintas etapas del ciclo de vida del software y cómo aplicar
buenas prácticas de seguridad en cada una de ellas.
Identificación de amenazas

05 Identificación de amenazas

La identificación de amenazas es un proceso crucial en el desarrollo seguro de


software. Consiste en determinar y evaluar las posibles amenazas a las que estará
expuesta una aplicación y sus sistemas asociados. Este proceso nos ayudará a
comprender y anticiparnos a los riesgos y vulnerabilidades a los que nuestra
aplicación puede estar expuesta.

Gestión de riesgos según NIST SP 800-30

Una de las metodologías utilizadas para identificar y gestionar riesgos es la descrita


en el NIST SP 800-30. Esta metodología se basa en cuatro etapas clave:
identificación de riesgos, evaluación de riesgos, mitigación de riesgos y supervisión
continua.

Identificación de riesgos

En esta etapa, se identifican todas las posibles amenazas y se determina su


probabilidad de ocurrencia y su impacto potencial. Se pueden utilizar diferentes
técnicas, como la revisión de la documentación existente, entrevistas con expertos,
análisis de incidentes anteriores, entre otros.

Evaluación de riesgos

Una vez identificadas las amenazas, se procede a evaluar la importancia de cada una
de ellas. Para ello, se analiza la probabilidad de ocurrencia de cada amenaza y su
impacto en caso de que ocurra. También se tiene en cuenta la efectividad de los
controles existentes para mitigar los riesgos.

Mitigación de riesgos

En esta etapa, se definen y aplican medidas para reducir o eliminar los riesgos
identificados. Estas medidas pueden incluir el diseño e implementación de controles
de seguridad adicionales, la actualización de software, la corrección de
vulnerabilidades, entre otros.

Supervisión continua

Una vez que se han implementado las medidas de mitigación de riesgos, es


importante tener un seguimiento constante para garantizar su efectividad y realizar los
ajustes necesarios. Esto implica monitorear y evaluar regularmente los controles de
seguridad implementados, así como estar al tanto de nuevas amenazas y
vulnerabilidades que puedan surgir.

Modelado de amenazas
Otra técnica utilizada para identificar amenazas es el modelado de amenazas.
Consiste en analizar y diagramar los diferentes componentes de una aplicación,
identificando las posibles amenazas que puedan afectar a cada uno de ellos.

El modelado de amenazas se basa en el uso de diferentes modelos y en la aplicación


de diferentes técnicas, como el análisis de riesgos, la revisión de diseño y
arquitectura, y la evaluación de código. Algunos de los modelos utilizados en el
modelado de amenazas son:

ISAM (The Integral Secure Agile Methodology): Método que permite identificar y evaluar
amenazas en cada fase del ciclo de vida del desarrollo.

OWASP Development Guide: Guía desarrollada por la Open Web Application Security Project
(OWASP) que proporciona pautas y buenas prácticas para la seguridad en el desarrollo de
aplicaciones web.

CLASP (Comprehesive, Lightweight Application Security Process): Proceso de seguridad de


aplicaciones ligeras y completas que proporciona orientación paso a paso para la
construcción de software seguro.

El modelado de amenazas nos ayuda a comprender mejor los posibles riesgos a los
que está expuesta nuestra aplicación y a tomar decisiones informadas sobre la
implementación de controles de seguridad.

En resumen, la identificación de amenazas es un proceso esencial en el desarrollo


seguro de software. Nos permite comprender y evaluar los riesgos y vulnerabilidades
a los que está expuesta nuestra aplicación, y nos brinda las herramientas necesarias
para implementar controles de seguridad efectivos y mitigar los riesgos identificados.
Conclusión - Identificación de amenazas

La identificación de amenazas es un paso crucial en el desarrollo


seguro. Durante este tema, los participantes aprenderán a
identificar y evaluar los posibles riesgos y amenazas que pueden
afectar la seguridad de una aplicación, permitiendo tomar
medidas de mitigación adecuadas.

Modelado de amenazas

06 Modelado de amenazas

El modelado de amenazas es una técnica formal, estructurada y repetible que permite


determinar y ponderar los riesgos y amenazas a los que estará expuesta una
aplicación durante su ciclo de vida de desarrollo de software (SDLC). Esta técnica nos
ayuda a identificar las posibles vulnerabilidades y a diseñar medidas de seguridad
adecuadas para mitigar o eliminar riesgos.

El proceso de modelado de amenazas consta de varias etapas que nos permiten


comprender y evaluar la seguridad de una aplicación desde su concepción hasta su
implementación. A continuación, se describirán las principales etapas del modelado
de amenazas:

1. Gestión de riesgos según NIST SP 800-30: En esta etapa se lleva a cabo una evaluación
exhaustiva de todos los posibles riesgos y amenazas a los que se enfrentará la aplicación.
Se utilizan métodos y estándares reconocidos, como el NIST SP 800-30, para identificar,
analizar y valorar los riesgos.

2. Identificación de amenazas: En esta etapa se identifican las amenazas específicas a las que
estará expuesta la aplicación. Se realizan investigaciones sobre las amenazas conocidas y
se evalúa su probabilidad de ocurrencia y su impacto en la seguridad de la aplicación.

3. Threat Modeling (modelado de amenazas): En esta etapa se utiliza el concepto de


"modelado de amenazas" para representar las posibles amenazas de manera gráfica. Se
identifican los activos de la aplicación, como datos sensibles, y se visualizan las diferentes
formas en que pueden ser atacados o comprometidos.

4. ISAM (The Integral Secure Agile Methodology): Esta técnica combina el desarrollo ágil de
software con la seguridad. Se enfoca en la incorporación de medidas de seguridad desde las
primeras etapas del desarrollo y promueve la colaboración entre los diferentes roles del
equipo de desarrollo.

5. OWASP Development Guide: OWASP (Open Web Application Security Project) es una
comunidad de expertos en seguridad de aplicaciones web. Su guía de desarrollo seguro
ofrece pautas y mejores prácticas para garantizar la seguridad de las aplicaciones desde el
inicio del ciclo de vida.

6. CLASP (Comprehensive, Lightweight Application Security Process): CLASP es un enfoque


de seguridad de aplicaciones liviano y completo. Proporciona una metodología estructurada y
pragmática para integrar la seguridad en todas las fases del ciclo de vida del desarrollo de
software.
Una vez que se han realizado estas etapas de modelado de amenazas, el equipo de
desarrollo puede diseñar y desarrollar medidas de seguridad adecuadas para mitigar
los riesgos identificados. Estas medidas pueden incluir implementación de controles
de acceso, encriptación de datos, validaciones de entrada y salida, entre otras.

El modelado de amenazas es una parte crucial del desarrollo seguro de aplicaciones.


Permite a los desarrolladores comprender y abordar las posibles vulnerabilidades
desde el inicio del ciclo de vida del desarrollo de software, lo que resulta en
aplicaciones más seguras y confiables.

Nota: Este contenido es parte del curso "Desarrollo Seguro y Modelado de Amenazas
en SDLC" y está diseñado para desarrolladores, administradores de bases de datos,
líderes de proyecto, analistas de sistemas y personas vinculadas al análisis, diseño,
arquitectura y desarrollo de aplicaciones.

Conclusión - Modelado de amenazas

El modelado de amenazas es una herramienta poderosa para


comprender y prevenir los posibles ataques. En este tema, los
participantes aprenderán a realizar un modelado de amenazas
eficaz, analizando diferentes técnicas y metodologías para
identificar y mitigar las vulnerabilidades en el software.
Desarrollo seguro
utilizando metodologías y
buenas prácticas

07 Desarrollo seguro utilizando metodologías y buenas prácticas

El desarrollo seguro de software es una disciplina que busca garantizar la integridad,


confidencialidad y disponibilidad de las aplicaciones, evitando la explotación de
vulnerabilidades que pongan en riesgo la seguridad de la información. Para lograr
esto, es necesario implementar metodologías y seguir buenas prácticas que permitan
mitigar los riesgos y asegurar la calidad del código.

Una de las metodologías más utilizadas en el desarrollo seguro de software es el


Ciclo de Vida del Desarrollo del Software (SDLC, por sus siglas en inglés). El SDLC
es un proceso estructurado que consta de varias etapas, desde la concepción de la
idea hasta el mantenimiento del software. En cada una de estas etapas, se deben
aplicar prácticas de seguridad que permitan identificar y mitigar los riesgos desde el
inicio del desarrollo.
Para asegurar un desarrollo seguro, es fundamental seguir buenas prácticas en todas
las etapas del SDLC. Esto incluye:

Diseño seguro: En esta etapa, se debe tener en cuenta la arquitectura segura del software,
definiendo los controles de seguridad que se implementarán. Además, es importante realizar
un modelado de amenazas para identificar los posibles riesgos y establecer medidas de
mitigación adecuadas.

Desarrollo seguro: Durante la etapa de desarrollo, se deben aplicar buenas prácticas de


programación segura, como validar y sanitizar todas las entradas de datos, utilizar bibliotecas
actualizadas y seguras, implementar controles de acceso y autenticación, entre otros.
Además, es importante llevar a cabo pruebas de seguridad, como pruebas de penetración y
análisis estático de código, para identificar posibles vulnerabilidades.

Pruebas de seguridad: En esta etapa, se realizan pruebas exhaustivas para detectar y


corregir vulnerabilidades antes de la puesta en producción del software. Estas pruebas
pueden incluir pruebas de penetración, análisis de código estático y dinámico, pruebas de
fuzzing, entre otras.

Implementación y configuración segura: Para garantizar la seguridad en la implementación y


configuración de la aplicación, es necesario seguir buenas prácticas, como utilizar certificados
SSL/TLS válidos, asegurar la configuración de los servidores y aplicar políticas de seguridad
adecuadas.

Mantenimiento seguro: Durante el ciclo de vida del software, es fundamental mantenerlo


actualizado y aplicar parches de seguridad regularmente. Además, se deben realizar
auditorías de seguridad periódicas para identificar posibles vulnerabilidades y aplicar medidas
correctivas.

El desarrollo seguro utilizando metodologías y buenas prácticas no solo contribuye a


garantizar la seguridad de la información, sino también a mejorar la calidad del
software, reducir los riesgos de explotación y minimizar el impacto de posibles
brechas de seguridad.

En resumen, el desarrollo seguro de software requiere la implementación de


metodologías y la adopción de buenas prácticas en todas las etapas del SDLC. Este
enfoque proactivo permite identificar y mitigar los riesgos de seguridad desde el inicio
del desarrollo, asegurando la integridad, confidencialidad y disponibilidad de las
aplicaciones.

Conclusión - Desarrollo seguro utilizando metodologías y buenas prácticas

El desarrollo seguro utilizando metodologías y buenas prácticas


es fundamental para garantizar la creación de aplicaciones
resistentes a los ataques. Durante este tema, los participantes
aprenderán a implementar procesos y prácticas seguras en
todas las etapas del ciclo de vida del software.

Análisis y práctica de
desarrollo seguro
08 Análisis y práctica de desarrollo seguro

El análisis y la práctica de desarrollo seguro es una parte fundamental en el ciclo de


vida del desarrollo de software (SDLC). Esta etapa tiene como objetivo evaluar y
mejorar la seguridad de las aplicaciones, identificando posibles vulnerabilidades y
implementando buenas prácticas de seguridad. En esta sección del curso, se
abordarán diversas técnicas y herramientas que permitirán a los desarrolladores
diseñar y desarrollar aplicaciones seguras, reduciendo así el riesgo de
vulnerabilidades y ataques.

CMM y OSSTMM

En esta primera parte, se introducirán dos enfoques importantes para el desarrollo


seguro: el Modelo de Madurez de Capacidades (CMM) y la Metodología Abierta de
Pruebas de Seguridad de Sistemas de Información (OSSTMM). El CMM describe
diferentes niveles de madurez en el desarrollo de software y proporciona pautas para
mejorar la seguridad en cada etapa del proceso. Por otro lado, OSSTMM es una
metodología de prueba de seguridad que se centra en encontrar y corregir
vulnerabilidades en los sistemas de información.

Programación "defensiva"

En esta sección, se explorarán los principios de la programación "defensiva". Esto


implica escribir código que tenga en cuenta posibles amenazas y vulnerabilidades
desde el principio, evitando así la aparición de fallos de seguridad. Se discutirán
buenas prácticas de programación, como la validación de entradas, la gestión
adecuada de excepciones y el uso de funciones criptográficas seguras.

Certificación de productos

La certificación de productos es otra estrategia importante en el desarrollo seguro. En


esta parte del curso, se examinarán las diferentes certificaciones disponibles y cómo
pueden ayudar a garantizar la seguridad de las aplicaciones. Se hablará de
estándares y normativas como ISO/IEC 27001, Common Criteria y OWASP ASVS.

Testing Black y White Box

El testing de aplicaciones es esencial para identificar y corregir posibles


vulnerabilidades. En esta sección, se estudiarán dos enfoques de testing: black box y
white box. El testing black box implica probar la aplicación sin conocer su estructura
interna, simulando ataques reales. Por otro lado, el testing white box implica tener
acceso al código fuente y realizar pruebas más exhaustivas en función de ese
conocimiento.

Análisis de código estático y dinámico

El análisis de código estático y dinámico es otra herramienta clave en el desarrollo


seguro. El análisis de código estático permite identificar posibles vulnerabilidades en
el código fuente sin ejecutar la aplicación, mientras que el análisis dinámico se realiza
durante la ejecución de la aplicación para identificar posibles vulnerabilidades y
comportamientos inesperados.

Fuzzing
El fuzzing es una técnica de prueba de seguridad que consiste en enviar entradas
inesperadas o incoherentes a una aplicación para encontrar posibles vulnerabilidades.
En esta sección del curso, se examinará cómo se puede implementar el fuzzing como
parte de la estrategia de desarrollo seguro y cómo puede ayudar a identificar y
corregir vulnerabilidades en una aplicación.

Hashing y HMAC

El uso adecuado de hashing y HMAC (Hash-based Message Authentication Code)


también es esencial para garantizar la seguridad de una aplicación. En esta parte del
curso, se abordarán los conceptos fundamentales de hashing y HMAC y cómo se
pueden utilizar para proteger los datos y verificar la integridad de la información
transmitida.

Benito López Instructional Designer

Conclusión - Análisis y práctica de desarrollo seguro

El análisis y práctica de desarrollo seguro permitirá a los


participantes aplicar los conocimientos adquiridos en
situaciones reales. A través de ejercicios y casos prácticos, los
participantes mejorarán sus habilidades en la identificación y
solución de vulnerabilidades en el desarrollo de software.
Ejercicios Practicos
Pongamos en práctica tus conocimientos

09 Ejercicios Practicos

En esta lección, pondremos la teoría en práctica a través de actividades prácticas.


Haga clic en los elementos a continuación para verificar cada ejercicio y desarrollar
habilidades prácticas que lo ayudarán a tener éxito en el tema.

Análisis de brechas de seguridad

Realizar un análisis de brechas de seguridad en un sistema de información y


proponer medidas de mitigación para cada una de ellas.

Análisis de principios de diseño seguro


Analizar los principios de diseño seguro y aplicarlos en la creación de un
sistema de información, considerando aspectos como la autenticación, la
autorización y el control de acceso.

Comparación de modelos de desarrollo de software

Realizar una comparación entre diferentes modelos de desarrollo de software


(por ejemplo, cascada, ágil, iterativo) y identificar sus fortalezas y debilidades
desde el punto de vista de la seguridad.

Identificación de amenazas en cada etapa del desarrollo

Identificar las amenazas de seguridad asociadas a cada etapa del desarrollo


del software (por ejemplo, requisitos, diseño, implementación, pruebas) y
proponer medidas de protección para mitigar dichas amenazas.

Modelado de amenazas en un sistema de información

Realizar un modelo de amenazas para un sistema de información teniendo


en cuenta los activos involucrados, las vulnerabilidades identificadas y las
posibles amenazas que podrían afectar su seguridad.
Análisis de riesgos en un sistema de información

Realizar un análisis de riesgos en un sistema de información utilizando


técnicas de modelado de amenazas y evaluar el impacto potencial de cada
amenaza identificada.

Implementación de buenas prácticas de desarrollo seguro

Implementar buenas prácticas de desarrollo seguro en la creación de un


sistema de información, como el uso de validación de entradas, el
aseguramiento de la confidencialidad de los datos y la protección contra
ataques conocidos.

Análisis de código seguro

Realizar un análisis de código seguro en un sistema de información,


identificando posibles vulnerabilidades y proponiendo soluciones para mitigar
dichas vulnerabilidades.
Resumen
Repasemos lo que acabamos de ver hasta ahora

10 Resumen

En la introducción al desarrollo seguro y modelado de amenazas, los


participantes aprenderán los conceptos básicos de la seguridad en el desarrollo
de software y comprenderán la importancia de identificar y mitigar las amenazas
en cada etapa del ciclo de vida del software.

Los principios del diseño de software seguro brindan a los desarrolladores las
bases fundamentales para crear aplicaciones seguras y protegidas contra
posibles ataques. Durante este tema, los participantes aprenderán los principios
y mejores prácticas para desarrollar software seguro desde el inicio del proyecto.

En el tema de modelos de desarrollo de software, los participantes conocerán


los distintos enfoques y metodologías de desarrollo, así como las ventajas y
desafíos de cada uno. Además, aprenderán a seleccionar el modelo más
adecuado para garantizar la seguridad y la calidad del software.

Las etapas del desarrollo del software son fundamentales para garantizar la
creación de aplicaciones seguras y libres de vulnerabilidades. En este tema, los
participantes aprenderán las distintas etapas del ciclo de vida del software y
cómo aplicar buenas prácticas de seguridad en cada una de ellas.

La identificación de amenazas es un paso crucial en el desarrollo seguro.


Durante este tema, los participantes aprenderán a identificar y evaluar los
posibles riesgos y amenazas que pueden afectar la seguridad de una aplicación,
permitiendo tomar medidas de mitigación adecuadas.

El modelado de amenazas es una herramienta poderosa para comprender y


prevenir los posibles ataques. En este tema, los participantes aprenderán a
realizar un modelado de amenazas eficaz, analizando diferentes técnicas y
metodologías para identificar y mitigar las vulnerabilidades en el software.

El desarrollo seguro utilizando metodologías y buenas prácticas es fundamental


para garantizar la creación de aplicaciones resistentes a los ataques. Durante
este tema, los participantes aprenderán a implementar procesos y prácticas
seguras en todas las etapas del ciclo de vida del software.

El análisis y práctica de desarrollo seguro permitirá a los participantes aplicar los


conocimientos adquiridos en situaciones reales. A través de ejercicios y casos
prácticos, los participantes mejorarán sus habilidades en la identificación y
solución de vulnerabilidades en el desarrollo de software.
Prueba
Comprueba tus conocimientos respondiendo unas preguntas

11 Prueba

1. ¿Qué es el modelado de amenazas?

Una técnica formal, estructurada y repetible que permite determinar y ponderar los riesgos y
amenazas a los que estará expuesta una aplicación.

Una técnica formal pero no estructurada que permite determinar y ponderar los riesgos y
amenazas a los que estará expuesta una aplicación.

Una técnica informal, sin estructura y no repetible que permite determinar y ponderar los riesgos y
amenazas a los que estará expuesta una aplicación.

2. ¿Cuál es uno de los objetivos del curso?

Entender el ciclo de desarrollo seguro de aplicaciones

Entender cómo solucionar las vulnerabilidades en las aplicaciones


Entender cómo explotar las vulnerabilidades en las aplicaciones

3. ¿Quiénes son el público objetivo de este curso?

Ingenieros de hardware y consultores de negocios

Desarrolladores y administradores de redes

Líderes de proyecto y analistas de sistemas

4. ¿Cuál es un tema abordado en el curso?

Implementación de bases de datos

Identificación de amenazas

Diseño de interfaces de usuario

5. ¿Cuál es uno de los modelos de desarrollo de software mencionados en el curso?

Waterfall (Cascada)

SCRUM (Agile Software Development)

CMMI (Capability Maturity Model Integration)

6. ¿Qué es el S-SDLC (Secure Software Development Lifecycle)?

Un modelo de desarrollo de software que se enfoca únicamente en el rendimiento de la


aplicación.

Un modelo de desarrollo de software que se enfoca únicamente en la usabilidad de la aplicación.


Un modelo de desarrollo de software que incorpora prácticas de seguridad desde el inicio del ciclo
de vida.

7. ¿Cuál es un caso de (ab)uso que se presenta en el curso?

Encryption

Eavesdropping

Authentication

8. ¿Qué es el modelo de Microsoft STRIDE?

Un modelo que enumera los principios del diseño de software seguro

Un modelo que enumera los tipos de amenazas a la seguridad de una aplicación: Spoofing,
Tampering, Repudiation, Info Disclosure, DoS, Elevation of Privilege

Un modelo de desarrollo de software creado por Microsoft

9. ¿Qué es CMM en el contexto de desarrollo seguro?

Common Modeling Methodology, una metodología para diseñar software seguro

Capability Maturity Model, un modelo que describe la madurez y capacidad de una organización
para realizar el desarrollo seguro de software.

Certified Management Model, una certificación para profesionales de la seguridad informática

10. ¿Cuál es uno de los principios de seguridad según NIST 800-27?

Least Privilege (Principio de privilegio mínimo)


Code Obfuscation (Ofuscación de código)

Open Source (Código abierto)

11. ¿Cuál es uno de los tipos de ataque mencionados en el curso?

Cross-site Scripting (XSS)

Regular Expression Denial of Service (ReDoS)

SQL Injection

12. ¿Cuál es una técnica de análisis de código estático?

Fuzzing

Review de código

Penetration Testing

13. ¿Cuál es una debilidad según NIST 800-268?

Encryption

Buffer Overflow

Authentication

14. ¿Qué es la ingeniería reversa?

Proceso de examinar y comprender el funcionamiento interno de un producto de software.

Proceso de encontrar y explotar vulnerabilidades en un producto de software.


Proceso de ocultar el código fuente de un producto de software.

15. ¿Cuál es uno de los principios del diseño de software seguro?

Minimize attack surface area (Minimizar el área de superficie de ataque)

Maximize code complexity (Maximizar la complejidad del código)

Ignore security best practices (Ignorar las mejores prácticas de seguridad)

16. ¿Cuál es una técnica de desarrollo seguro mencionada en el curso?

Creating backdoors

Testing Black y White Box

Using insecure libraries

17. ¿Cuál es uno de los temas abordados en el curso?

Deploying virtual machines

Building user interfaces

Certificación de productos

Entregar
Conclusión

Felicidades!
¡Felicitaciones por completar este curso! Has dado un paso importante para
desbloquear todo tu potencial. Completar este curso no se trata solo de adquirir
conocimientos; se trata de poner ese conocimiento en práctica y tener un impacto
positivo en el mundo que te rodea.

Comparte este curso

Created with LearningStudioAI


v0.4.8

También podría gustarte