Laboratorio 3: Seguridad del Sistema de Transmisión de Documentos Electrónicos
Detalles de la Tarea
Completar las siguientes tareas en openEuler (recomendado) o Ubuntu o Windows (no recomendado):
- Revisar los libros adjuntos sobre seguridad del software y ciclo de vida de desarrollo seguro, resumir notas de lectura, enfocándose en SDL (Security Development Lifecycle). Cada miembro del grupo debe presentar sus propias notas en documento markdown.
- Discutir cómo aplicar SDL para fortalecer el sistema de transmisión de documentos electrónicos, presentar un plan de fortalecimiento que incluya: análisis de recursos del sistema, análisis de amenazas basado en el modelo STRIDE, y análisis de riesgos basado en el modelo DREAD, distribución de tareas, plan de desarrollo (al menos un informe de progreso semanal).
- Consultar los estándares nacionales GM/T 0007-2012, GM/T 0054-2018 y GB/T 39786-2021 para presentar un informe de diseño de seguridad del sistema, enfocado en la aplicación de esquemas criptográficos.
- Bibliotecas de algoritmos criptográficos:
- Longmai uKey
- Bouncy Castle (soporte para Java)
- GMSSL API (soporte para Java, Go, PHP)
- OpenSSL
Notas de Lectura
Capítulo 2: Ciclo de Vida de Desarrollo Seguro
2.1 Superando los Desafíos en Seguridad del Software
El SDL representa un paso crítico en la evolución de la seguridad del software, ayudando a establecer un ciclo de vida de desarrollo que prioriza la construcción de sistemas seguros. Históricamente, se creía que una infraestructura de red segura proporcionaría el nivel de protección necesario contra ataques maliciosos. Sin embargo, años recientes han demostrado que la seguridad de red por sí sola es insuficiente para prevenir estos ataques. Los atacantes han logrado penetrar mecanismos de autenticación efectivos utilizando técnicas como Cross-Site Scripting (XSS), inyección SQL y explotación de desbordamientos de búfer. En tales escenarios, los activos del sistema son comprometidos, y la integridad de los datos y la organización se ve comprometida.
La industria de seguridad ha intentado abordar los problemas de seguridad del software mediante medidas correctivas: primero seguridad de plataforma (SO), luego seguridad de red/perímetro, y ahora seguridad de aplicaciones. Aunque defense-in-depth es necesario para proteger activos, fundamentalmente es una vulnerabilidad de seguridad del software que debe remediarse mediante el enfoque SDL.
SDL incorpora todas las actividades y controles de seguridad necesarios para fortalecer el software según las mejores prácticas de la industria y estándares gubernamentales. La seguridad ya no es simplemente un requisito de red; ahora es un requisito de tecnologías de la información (TI) que abarca todas las intenciones de desarrollo, almacenamiento y procesamiento de información.
El modelo SDL más reconocido es el Ciclo de Vida de Desarrollo Seguro de Computación Confiable, implementado por Microsoft en el desarrollo de software resistente a ataques maliciosos. El SDL de Microsoft ha evolucionado durante más de una década y se considera uno de los tres modelos más maduros.
2.2 Modelos de Madurez de Seguridad del Software
Dos modelos de madurez de seguridad del software han sido desarrollados y continúan madurando rápidamente. El primero es el Modelo de Madurez de Seguridad Integrada (BSMM) de Cigital, y el segundo es el Modelo de Madurez de Aseguramiento de Software (SAMM) de OWASP.
BSIMM es un estudio orientado a medidas reales de seguridad del software, ayudando a determinar las prácticas de seguridad y cómo organizar el tiempo de trabajo. El BSMM analiza datos reales de nueve organizaciones líderes en seguridad del software y crea un marco basado en mejores prácticas exitosas. Las actividades se organizan en 12 prácticas agrupadas en 4 dominios:
- Estrategia y Métricas
- Cumplimiento y Políticas
- Capacitación
- Modelos de Ataque
- Características y Diseño de Seguridad
- Estándares y Requisitos
- Análisis de Arquitectura
- Revisión de Código
- Pruebas de Seguridad
- Pruebas de Penetración
- Entorno de Software
- Gestión de Configuración y Vulnerabilidades
2.3 ISO/IEC 27034: Tecnología de la Información - Seguridad - Seguridad de Aplicaciones
En 2011, la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC) publicaron la primera parte de ISO/IEC 27034, que comprende 6 estándares de seguridad de aplicaciones. Este estándar proporciona un método conciso y reconocido internacionalmente para obtener transparencia en los procesos de gestión de seguridad del software de proveedores.
2.4 Recursos de Mejores Prácticas SDL
SAFECode
El Foro de Aseguramiento de Software para la Excelencia en Código (SAFECode) es una organización sin fines de lucro dedicada a aumentar la confiabilidad de productos y servicios de tecnología de la información mediante métodos avanzados de aseguramiento de software.
Programa de Aseguramiento de Software del Departamento de Seguridad Nacional de EE.UU.
Desde 2004, el Programa de Aseguramiento de Software del Departamento de Seguridad Nacional de EE.UU. ha financiado el desarrollo de Build Security In (BSI), cuyos contenidos se basan en el principio de que la seguridad del software es inherentemente un problema de ingeniería de software que debe gestionarse de manera sistemática en todo el SDLC.
NIST
El Instituto Nacional de Estándares y Tecnología de EE.UU. (NIST) proporciona investigación, información y herramientas a la comunidad de seguridad de información del gobierno y empresas. Las contribuciones clave incluyen el proyecto SAMATE (Software Assurance Metrics And Tool Evaluation) y la Publicación Especial 800-64 sobre consideraciones de seguridad en el ciclo de vida de desarrollo de sistemas.
2.5 Herramientas y Personal Clave
2.5.1 Herramientas de Pruebas de Seguridad
Pruebas de Fuzzing
Las pruebas de fuzzing son una técnica de prueba automatizada o semi-automatizada que proporciona datos inválidos, inesperados o aleatorios como entrada a un programa de software. El objetivo es descubrir errores o defectos de seguridad. Esta técnica se ha convertido en un elemento crítico para probar problemas de seguridad del software.
Análisis Estático
El análisis estático de programas es un método de análisis de software que se realiza sin ejecutar realmente el programa. Se dirige principalmente al código fuente de versiones específicas. En contraste, el análisis dinámico requiere que el programa se esté ejecutando. El análisis estático se realiza mediante herramientas automatizadas y no debe confundirse con el análisis manual.
Análisis Dinámico
El análisis dinámico se refiere al análisis de software mediante la ejecución del programa en un procesador real o virtual. El objetivo es encontrar errores de seguridad durante la ejecución del programa, en lugar de revisar el código repetidamente de manera offline.
2.5.2 Roles de Personal de Seguridad
Arquitecto de Seguridad del Software
El arquitecto de seguridad del software es responsable de proporcionar orientación arquitectónica y técnica para la seguridad de los productos de la empresa. Las responsabilidades incluyen:
- Impulsar la arquitectura general de seguridad del software
- Proporcionar guía técnica en la planificación y desarrollo
- Colaborar con equipos de desarrollo de productos
- Monitorear tendencias y requisitos de tecnología de seguridad
- Desarrollar y ejecutar planes de seguridad
- Crear políticas, procesos y prácticas de seguridad
- Proporcionar capacitación al personal
- Dirigir al equipo de desarrollo a través del SDL
Profesional de Seguridad del Software
Un profesional de seguridad del software debe tener al menos 3-5 años de experiencia en desarrollo de software, disposición para trabajar en seguridad del software, y la capacidad de "pensar como un atacante" para identificar todas las posibles formas en que un atacante podría explotar el software.
2.6 Principio de Mínimo Privilegio
El principio de mínimo privilegio establece que cada módulo (como proceso, usuario o programa) solo debe tener acceso a la información y recursos necesarios para cumplir su propósito legítimo. Este principio es una parte importante del modelado de amenazas y es un componente central de la fase de arquitectura SDL. La restricción de elevación de privilegios es crítica porque los ataques de elevación de privilegios pueden permitir a un atacante obtener más allá de los privilegios otorgados a un usuario normal.
2.7 Privacidad
La protección de la privacidad del usuario es otro componente importante del proceso SDL y debe considerarse como un principio de diseño de sistema crítico en todas las fases del SDLC. Los problemas de privacidad pueden llevar a crisis de confianza, cobertura negativa de medios y litigios.
2.8 Importancia de las Métricas
Las métricas de seguridad son recursos valiosos para evaluar la efectividad del programa de seguridad del software de una organización. Las métricas significativas pueden utilizarse para mejorar continuamente el rendimiento del programa de seguridad, demostrar cumplimiento, mejorar la concienciación de la gerencia y facilitar la toma de decisiones informadas.
2.9 Mapeo del SDL al Ciclo de Vida de Desarrollo
Independientemente del modelo SDL utilizado, debe mapearse al SDLC actual para ser efectivo. La seguridad puede incorporarse en cada fase del SDLC. Si la seguridad está integrada en cada fase, el software tendrá una mayor probabilidad de ser seguro por defecto.
2.10 Metodologías de Desarrollo de Software
Desarrollo en Cascada
El desarrollo en cascada es un método tradicional de desarrollo de software. Este enfoque típicamente implica alto riesgo, altos costos y es menos eficiente que los métodos ágiles. El método en cascada utiliza requisitos conocidos donde cada fase termina antes de que comience la siguiente.
Desarrollo Ágil
Los métodos ágiles se basan en el desarrollo iterativo e incremental. Los requisitos y soluciones avanzan mediante la colaboración entre equipos auto-organizados y multifuncionales. Los métodos ágiles son enfoques iterativos controlados por tiempo que permiten una respuesta rápida y flexible a los cambios.
Fase de Evaluación de Seguridad (A1)
Esta es la primera fase del ciclo de vida de desarrollo seguro, donde se abordan cuatro principios:
- ¿Qué tan crítico es el software para la misión del cliente?
- ¿Cuáles son los objetivos de seguridad requeridos del software?
- ¿Qué regulaciones y políticas se aplican para determinar qué necesita protección?
- ¿Qué amenazas pueden existir en el entorno donde operará el software?
Fase de Arquitectura (A2)
En la segunda fase del ciclo de vida de desarrollo seguro, las consideraciones de seguridad se incorporan al ciclo de vida del software para asegurar que todas las amenazas, requisitos, funcionalidades y factores restrictivos de integración sean considerados.
Los cinco pasos del modelado de amenazas:
- Determinar objetivos de seguridad
- Investigar la aplicación
- Descomponer la aplicación
- Identificar amenazas
- Determinar vulnerabilidades
El modelo DREAD evalúa: Potencial de Daño, Reproducibilidad, Explotabilidad, Usuarios Afectados y Descubribilidad, utilizando una escala del 1 al 10.
Fase de Diseño y Desarrollo (A3 y A4)
Esta fase es la más importante para los usuarios finales del software. Las actividades incluyen análisis de consistencia de políticas, creación de documentos de plan de pruebas, actualización de modelos de amenazas, análisis de diseño de seguridad y evaluación de implementación de privacidad.
Técnicas de pruebas de seguridad:
- White-box: Pruebas desde una perspectiva interna, incluyendo análisis de código fuente e inyección de errores en código fuente
- Gray-box: Diseño de casos de prueba para analizar código fuente mientras se utilizan técnicas black-box
- Black-box: Pruebas desde una perspectiva externa sin conocimiento del software
Fase de Lanzamiento (A5)
Esta es la fase final del ciclo de vida de desarrollo de software, donde se debe asegurar que el software sea seguro y los problemas de privacidad se hayan resuelto a un nivel aceptable para el lanzamiento. Las actividades incluyen escaneo de vulnerabilidades, pruebas de penetración, revisión de software de código abierto, revisión final de seguridad y revisión final de privacidad.
Esquema de Diseño de Seguridad
1. Análisis de Recursos del Sistema
- Recursos de hardware: Servidores, equipos de red, etc.
- Recursos de software: Sistemas de bases de datos, sistemas operativos, aplicaciones, etc.
- Recursos humanos: Desarrolladores, personal de operaciones, etc.
2. Análisis de Amenazas (Modelo STRIDE)
- Spoofing (Suplantación): Usuarios no autorizados suplantando usuarios legítimos
- Tampering (Manipulación): Datos modificados que pueden导致 información comprometida
- Repudiation (Repudio): Usuarios negando sus acciones
- Information Disclosure (Divulgación de Información): Filtración de información sensible
- Denial of Service (Denegación de Servicio): Ataques que impiden acceso legítimo
- Elevation of Privilege (Elevación de Privilegios): Atacantes obteniendo permisos más altos
3. Análisis de Riesgos (Modelo DREAD)
- Damage Potential (Potencial de Daño): Impacto de la filtración de datos
- Reproducibility (Reproducibilidad): Facilidad de explotar la vulnerabilidad
- Exploitability (Explotabilidad): Facilidad con que el atacante puede aprovechar
- Affected Users (Usuarios Afectados): Número de usuarios afectados
- Discoverability (Descubribilidad): Facilidad de encontrar la vulnerabilidad
4. Distribución de Tareas
- Desarrollador principal: Coding y pruebas del sistema
- Administrador de sistema: Despliegue, mantenimiento y documentación
- Especialista en seguridad: Análisis de vulnerabilidades y diseño criptográfico
5. Plan de Desarrollo
Semana 1:
- Completar lectura de materiales de seguridad y resumir notas
- Discutir aplicación de SDL para fortalecer el sistema
- Consultar estándares para diseñar informe de seguridad
- Repasar algoritmos criptográficos (SM2, SM3, SM4)
Semana 2:
- Finalizar esquema de seguridad del sistema
- Revisar código existente y ejecutar pruebas
- Establecer规范 y estilo de codificación
- Implementar módulo de cifrado
Semana 3:
- Perfeccionar código de cifrado e integrar al sistema
6. Esquema de Seguridad
- Implementar mecanismos de autenticación y autorización
- Utilizar técnicas de cifrado para proteger transmisión y almacenamiento de datos
- Implementar auditoría para registrar operaciones de usuarios y eventos del sistema
- Aplicar hash a contraseñas con sales para prevenir ataques de tablas arcoíris
- Gestión de claves en tres capas: clave de cifrado de datos, clave de cifrado de claves, clave de sesión
- Utilizar algoritmos criptográficos comerciales
Informe de Diseño de Seguridad del Sistema
1. Introducción
Contexto del Proyecto
Los métodos tradicionales de gestión de documentos en papel son ineficientes y consumen muchos recursos. Con el desarrollo de la tecnología de información y la promoción de la transformación digital del gobierno, establecer un sistema de documentos electrónicos eficiente, seguro y conveniente se ha convertido en una necesidad urgente.
Objetivos
- Mejorar eficiencia: Procesamiento electrónico de documentos acelera el flujo de información
- Optimizar procesos: Diseñar flujos de trabajo razonables para gestión documental
- Fortalecer seguridad: Utilizar técnicas de cifrado avanzadas y control de acceso
- Mejorar servicios: Proporcionar funciones de búsqueda y recuperación de documentos
- Ahorrar costos: Reducir uso de papel y costos de almacenamiento
2. Resumen de Estándares y Guías
- GMT 0007-2012: Guía de Aplicación de Servicios de Certificación Electrónica para Gobierno Electrónico
- GMT 0054-2018: Requisitos Básicos de Aplicación de Criptografía para Sistemas de Información
- GB/T 39786-2021: Requisitos Básicos de Aplicación de Criptografía para Sistemas de Información de Seguridad
3. Diseño del Esquema Criptográfico del Sistema
3.1 Autenticación y Verificación de Identidad
- Utilizar algoritmos estándar como SHA-256 para hash de contraseñas
- Implementar autenticación multifactor combinando contraseña y biometría
3.2 Gestión de Claves
- Utilizar algoritmos seguros de generación de claves como RSA, ECC
- Implementar actualización periódica de claves y políticas de distribución
3.3 Cifrado y Descifrado de Datos
- Utilizar algoritmos simétricos estándar como AES para datos sensibles
- Utilizar protocolos de comunicación seguros como HTTPS
3.4 Políticas de Seguridad de Contraseñas
liEstablecer requisitos de complejidad de contraseñas - Implementar bloqueo de cuenta y límites de reintentos
4. Evaluación de Seguridad
Realizar evaluación de seguridad del sistema incluyendo análisis de vulnerabilidades y pruebas de penetración.
5. Plan de Implementación y Gestión
- Desarrollar plan de implementación del esquema criptográfico
- Actualizar y mejorar el esquema de cifrado existente
6. Conclusión
La aplicación de esquemas criptográficos basados en estándares relevantes es de gran importancia para la seguridad, confiabilidad y cumplimiento de los sistemas de gobierno electrónico. Los departamentos gubernamentales y organizaciones relacionadas deben priorizar la aplicación razonable de esquemas criptográficos y mejorar continuamente las medidas de garantía de seguridad del sistema.
Progreso del Proyecto - Informe 1
Tarea Completada la Semana Anterior
1. Diseño del Marco del Sistema
Se diseñó el marco general del sistema de transmisión segura de documentos electrónicos, identificando los principales módulos funcionales:
- Módulo de envío de documentos
- Módulo de recepción de documentos
- Módulo de mantenimiento de lista de organizaciones
- Módulo de recuperación de documentos
- Módulo de administración del sistema
2. Mecanismos de Seguridad del Sistema
Se estudiaron los principales mecanismos de seguridad:
- Firma digital y verificación basadas en PKI
- Tecnología de control de acceso completo
- Sobre digital para cifrado
- Monitoreo de seguridad del sistema
- Sistema de autorización por niveles
3. Auditoría de Seguridad y Control de Acceso
Se estudió la auditoría de seguridad y mecanismos de control de acceso para garantizar la transmisión segura de documentos.
Plan de la Semana
- Estudiar cifrado de archivos y flujo de transmisión
- Estudiar código relacionado: gestión de certificados PKI, firma digital
- Mejorar el diseño de módulos funcionales
- Estudiar tecnología de auditoría de seguridad del sistema
- Diseñar e implementar control de acceso y gestión de autenticación
Progreso del Proyecto - Informe 2
Tarea Completada la Semana Anterior
1. Inserción de Datos de Prueba
Se insertaron datos de prueba en la base de datos para 14 documentos y se probó el rendimiento del frontend.
2. Diseño de Función de Control de Acceso
Se diseñó una función inicial de control de acceso donde los usuarios no clasificados no pueden ver documentos clasificados. Los usuarios no clasificados no tendrán acceso a ningún conocimiento de la existencia de archivos clasificados.
3. Instalación del Entorno y Pruebas
Se instaló el entorno requerido localmente y se realizaron pruebas:
pip3 install filetype
pip3 install django-sslserver
pip3 install gmssl
pip3 install secrets
Código de Prueba de Cifrado
import time
import base64
from gmssl import sm2, sm4
import codecs
# Claves de prueba para SM2
CLAVE_PRIVADA_SM2 = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'
CLAVE_PUBLICA_SM2 = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'
# Configuración SM4
CLAVE_SM4 = b'3l5butlj26hvv313'
VECTOR_IV = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
sm2_crypto = sm2.CryptSM2(
public_key=CLAVE_PUBLICA_SM2,
private_key=CLAVE_PRIVADA_SM2
)
sm4_crypto = sm4.CryptSM4()
def codificar_base64(archivo_origen, archivo_destino):
"""Codifica archivo a formato base64"""
with open(archivo_origen, 'rb') as f:
datos_base64 = str(base64.b64encode(f.read()), encoding='utf-8')
with open(archivo_destino, 'wt') as f_salida:
f_salida.write(datos_base64)
def decodificar_base64(archivo_origen, archivo_destino):
"""Decodifica desde formato base64"""
with open(archivo_origen, "r") as f:
datos = base64.b64decode(f.read())
with open(archivo_destino, 'wb+') as f_salida:
f_salida.write(datos)
def cifrar_sm4(archivo_origen, archivo_destino):
"""Cifra archivo usando SM4"""
sm4_crypto.set_key(CLAVE_SM4, sm4.SM4_ENCRYPT)
tiempo_inicio = time.time()
with open(archivo_origen, 'rb') as f:
datos_base64 = base64.b64encode(f.read())
datos_cifrados = str(sm4_crypto.crypt_ecb(datos_base64))
with open(archivo_destino, 'wt') as f_salida:
f_salida.write(datos_cifrados)
tiempo_fin = time.time()
print(f"Tiempo de cifrado: {tiempo_fin - tiempo_inicio} segundos")
def descifrar_sm4(archivo_origen, archivo_destino):
"""Descifra archivo usando SM4"""
sm4_crypto.set_key(CLAVE_SM4, sm4.SM4_DECRYPT)
with open(archivo_origen, "r") as f:
datos_cifrados = codecs.escape_decode(
bytes(f.read()[2:-1], encoding="utf-8"),
"hex-escape"
)[0]
datos_descifrados = sm4_crypto.crypt_ecb(datos_cifrados)
datos_originales = base64.b64decode(datos_descifrados)
with open(archivo_destino, 'wb') as f_salida:
f_salida.write(datos_originales)
if __name__ == '__main__':
archivo_original = 'documento_ejemplo.pdf'
archivo_cifrado = 'documento_seguro.txt'
archivo_recuperado = 'documento_recuperado.pdf'
tiempo_inicio = time.time()
cifrar_sm4(archivo_original, archivo_cifrado)
tiempo_medio = time.time()
print(f"Tiempo total de cifrado: {tiempo_medio - tiempo_inicio} segundos")
descifrar_sm4(archivo_cifrado, archivo_recuperado)
tiempo_final = time.time()
print(f"Tiempo total: {tiempo_final - tiempo_medio} segundos")
Plan de la Semana
- Integrar cifrado al código principal
- Mejorar interfaz de usuario
Acceptación del Laboratorio
Activos de Información a Proteger
- Información de usuarios: cuentas, contraseñas, niveles de permisos
- Información de archivos: ubicaciones de almacenamiento, departamentos emisores/receptores, información de firmas
Funciones Implementadas
Módulo de Gestión de Usuarios
- Registro de usuarios
- Inicio de sesión
- Gestión de permisos
Módulo de Gestión de Documentos
- Creación de documentos
- Edición de documentos
- Eliminación de documentos
Módulo de Flujo de Aprobación
- Aprobación departamental
- Aprobación de dirección
- Aprobación completada
Requisitos de Seguridad Implementados
- Cumplimiento con GM/T0054 y GB39786
- Algoritmos criptográficos comerciales utilizados
- Uso correcto de algoritmos simétricos, asimétricos y hash
- Gestión adecuada de claves
- Almacenamiento seguro de información sensible
- Ciclo de vida de gestión de claves
- Autenticación con contraseña + PIN
- Almacenamiento de PIN usando método "hash + salt"
- Control de acceso basado en roles
- Soporte de auditoría