¿Cómo construir un software seguro?

El desarrollo seguro consiste en aplicar principios, metodologías y buenas prácticas de seguridad en cada fase del SDLC (Software Development Life Cycle / Ciclo de Vida del Desarrollo de Software). 

👉 La idea es que la seguridad no se agregue al final, sino que se integre desde: 

  • Requerimientos → definir requisitos de seguridad. 
  • Diseño → aplicar patrones seguros de arquitectura. 
  • Implementación → usar código seguro y librerías confiables. 
  • Pruebas → incluir pruebas de seguridad (SAST, DAST, pentesting). 
  • Despliegue → aplicar controles de configuración y monitoreo. 
  • Mantenimiento → gestionar parches y vulnerabilidades. 

En resumen: Desarrollo seguro = SDLC + seguridad integrada en todas sus fases. 

👉 Los tres pilares básicos son: 

  • Confidencialidad → proteger la información contra accesos no autorizados. 
  • Integridad → asegurar que la información no sea modificada de manera indebida. 
  • Disponibilidad → garantizar que la información esté accesible cuando los usuarios autorizados la necesiten. 

Ejemplo práctico de desarrollo de software seguro

Vamos a tomar el ejemplo del sistema de creación de notas (una app sencilla donde los usuarios crean, leen, actualizan y eliminan notas) y lo vamos a organizar en SCRUM, aplicando prácticas de desarrollo seguro y definiendo pruebas en cada sprint.

📌 Proyecto: Sistema de Notas Seguro

🔹 Roles SCRUM

  • Product Owner (PO): Define los requerimientos (seguridad incluida).

  • Scrum Master: Asegura que el equipo siga SCRUM.

  • Development Team: Desarrolladores, testers, devops.

🔹 Backlog del Producto (ejemplo inicial)

  1. Registro y autenticación de usuarios (login seguro).
  2. CRUD de notas (crear, leer, actualizar, eliminar).
  3. Cifrado de notas en la base de datos.
  4. Control de accesos por usuario.
  5. Logs de actividad (seguridad/auditoría).
  6. Pruebas automatizadas y revisión de seguridad.

📅 Planificación de Sprints

Sprint 1: Registro y autenticación segura

  • Historia de usuario: “Como usuario quiero registrarme e iniciar sesión de forma segura para proteger mis notas.”

  • Tareas:

    • Implementar registro con validaciones.

    • Autenticación con hash seguro de contraseñas (bcrypt/argon2).

    • Validación de entradas para prevenir SQL Injection y XSS.

    • Política de contraseñas seguras.

🔒 Pruebas en Sprint 1:

  • Pruebas funcionales: registro/login funcionan.

  • Pruebas de validación: no permite contraseñas débiles.

  • Pruebas de seguridad: ataque de fuerza bruta simulado, SQL Injection.


Sprint 2: CRUD de notas

  • Historia: “Como usuario quiero crear y gestionar notas para organizar mis ideas.”

  • Tareas:

    • Crear endpoints CRUD.

    • Validar entradas contra XSS (ej. sanitizar HTML).

    • Manejo de errores seguro (no mostrar stacktraces al usuario).

🔒 Pruebas en Sprint 2:

  • Pruebas unitarias: creación/lectura/edición/borrado funcionan.

  • Pruebas de validación: no acepta notas vacías o con scripts maliciosos.

  • Pruebas de seguridad: inyección de código/script en notas.


Sprint 3: Cifrado de notas

  • Historia: “Como usuario quiero que mis notas estén cifradas en la base de datos para que nadie más las lea.”

  • Tareas:

    • Implementar cifrado simétrico (AES-256).

    • Gestión de llaves segura.

    • Revisar políticas de acceso a la base de datos.

🔒 Pruebas en Sprint 3:

  • Pruebas unitarias: notas se guardan y recuperan correctamente.

  • Pruebas de seguridad: verificar que la DB no guarda texto plano.

  • Pentesting básico: acceso directo a BD → no se lee contenido.


Sprint 4: Control de accesos y auditoría

  • Historia: “Como usuario quiero que solo yo pueda acceder a mis notas y que exista un registro de actividad.”

  • Tareas:

    • Implementar control de acceso basado en roles (RBAC).

    • Logs de acceso y edición de notas.

    • Alertas ante intentos fallidos de login.

🔒 Pruebas en Sprint 4:

  • Pruebas funcionales: un usuario no accede a notas de otro.

  • Pruebas de seguridad: acceso directo con URL manipulada.

  • Pruebas de auditoría: logs registran intentos correctos/incorrectos.


Sprint 5: Pruebas automatizadas y hardening

  • Historia: “Como administrador quiero garantizar que la aplicación se mantenga segura con pruebas automatizadas y configuraciones seguras.”

  • Tareas:

    • Integrar tests automáticos de seguridad (CI/CD con OWASP ZAP/Snyk).

    • Configuración de cabeceras HTTP seguras (CORS, CSP, HSTS).

    • Documentación de buenas prácticas seguras.

🔒 Pruebas en Sprint 5:

  • Pruebas automatizadas: CI ejecuta pruebas de seguridad.

  • Pruebas de performance: ataques de carga (DoS básico).

  • Pruebas de revisión: checklist OWASP ASVS.


📊 Resultado: se obtiene una app de notas segura, con pruebas de seguridad en cada sprint, siguiendo SCRUM y aplicando buenas prácticas OWASP.