Notas de estudio de CISSP: seguridad del desarrollo de software

Capítulo 20 Seguridad del desarrollo de software

20.1 Descripción general del control del desarrollo del sistema

Para prevenir vulnerabilidades, es fundamental introducir seguridad durante todo el ciclo de vida del desarrollo del sistema.

20.1.1 Desarrollo de software

En las primeras etapas de un proyecto de desarrollo de software, es mucho más fácil incorporar seguridad a un sistema que agregar seguridad a un sistema existente.

  1. Voz de programación:
    • lenguaje ensamblador
    • lenguaje de alto nivel
    • lenguaje interpretativo
    • Pros y contras del idioma:
      • El código codificado generalmente es menos susceptible a la clonación por parte de terceros y también es más fácil incorporar puertas traseras y otras fallas de seguridad en el código compilado y evadir la inspección.
      • Los lenguajes interpretados no son fáciles de insertar código, pero cualquier instrucción que pueda cambiar el programador puede agregar código malicioso en un lenguaje interpretado.
  2. Programación orientada a objetos
    • Mensaje: comunicación o entrada de un objeto.
    • Método: definir el código interno que realiza operaciones en respuesta al mensaje.
    • Comportamiento: el resultado de procesar un mensaje mediante un método.
    • Clase: una colección de métodos públicos de un conjunto de objetos que representan el comportamiento del objeto.
    • Instancia: una instancia o instancia de una clase que contiene métodos de objeto.
    • Herencia: La herencia ocurre cuando un método de una clase es integrado por otra subclase
    • Delegación: un objeto solicita ser reenviado a otro objeto o a un objeto delegado. Si el objeto no tiene un método para manejar un mensaje específico, se requiere un delegado.
    • Polimorfismo: permitir diferentes comportamientos en respuesta al mismo mensaje o método cuando cambian las condiciones externas.
    • Cohesión: la fuerza de la relación entre el propósito de los métodos de la misma clase
    • Acoplamiento: el nivel de interacción entre objetos.
  3. asegurar
    • El proceso de aseguramiento es simplemente el proceso formal mediante el cual se genera confianza durante el ciclo de vida del sistema.
  4. Evitar y mitigar fallas del sistema
    • Validación de entrada: Verifique que el valor proporcionado por el usuario coincida con las expectativas del programador. Asegúrese de que el número esté dentro de un rango aceptable a través del código. Esto se llama detección de límite. La validación de entrada debe existir en el lado del servidor del procesamiento de transacciones.
    • Desarrollo a prueba de fallos y de emergencia
      • Hay dos opciones básicas cuando un sistema falla
        • Coloque el sistema en seguridad de alto nivel hasta que el administrador pueda diagnosticar el problema y devolver el sistema a un estado normal.
        • Los entornos abiertos de emergencia permiten a los usuarios eludir los controles de seguridad fallidos en los que el usuario tiene privilegios excesivos.
      • Una vez que ocurre una operación de protección de seguridad, los programadores deben concentrarse en las siguientes actividades.

20.1.2 Ciclo de vida del desarrollo del sistema

La seguridad se planifica y gestiona durante todo el ciclo de vida de un sistema o aplicación, y la seguridad es la acción más eficaz y segura del ciclo de vida del desarrollo.

  1. Definición del concepto: crear una declaración de concepto básico para el sistema, que es una vida simple negociada por todas las partes interesadas, estipulando el propósito del proyecto y los requisitos de respuesta del sistema. 2. Determinación de los requisitos funcionales: las funciones específicas del sistema se agotan y los desarrolladores comienzan a considerar este aspecto de el sistema Cómo deben cooperar las partes entre sí para cumplir con los requisitos funcionales 3. Desarrollo de especificaciones de control: Analizar el sistema desde muchas perspectivas de seguridad
  2. Revisión del diseño: el diseñador determina correctamente cómo funcionarán entre sí las diferentes partes del sistema y cómo diseñar la estructura modular del sistema.
  3. Tutoriales de revisión de código: los gerentes de proyecto programan reuniones de revisión de código para buscar problemas en el flujo lógico u otras fallas de diseño/seguridad.
  4. Pruebas de aceptación del usuario: la mayoría de las organizaciones hacen que los desarrolladores realicen pruebas iniciales del sistema para detectar errores obvios.
  5. Mantenimiento y gestión de cambios: cualquier cambio de código debe realizarse a través de un proceso de cambio formal.

20.1.3 Modelo de ciclo de vida

  1. Modelo en cascada: Hay 7 etapas de desarrollo. Después de completar cada etapa, el proyecto pasa a la siguiente. La principal crítica del modelo en cascada es que solo permite a los desarrolladores retroceder una etapa y no hay ninguna disposición para responder a errores encontrados más adelante en el ciclo de desarrollo.
  2. Modelo en espiral: permite que el proceso del modelo en cascada se repita varias veces
  3. Desarrollo ágil de software: énfasis en las necesidades del cliente y desarrollo rápido de nuevas funciones, y satisfacción de estas necesidades de manera iterativa.
  4. Modelo de madurez de capacidad de software: aboga por que todas las organizaciones involucradas en el desarrollo de software pasen por diferentes etapas al mismo tiempo, las diferentes etapas de SW-CMM
    • Nivel inicial: Poco o ningún proceso de desarrollo organizacional definido
    • Nivel repetible: surge el proceso de gestión del ciclo de vida y comienza la reutilización organizada del código.
    • Nivel de definición: Operar de acuerdo con una serie de procesos de desarrollo de software formales y documentados.
    • Nivel de gestión: se utilizan medidas cuantitativas para obtener una comprensión detallada del proceso de desarrollo.
    • Optimización y: Utilizando un proceso de mejora continua, se ha establecido un proceso de desarrollo de software maduro.
  5. Modelo IDEAL: 5 etapas del modelo IDEAL:
    • Inicio: describa las razones comerciales del cambio para respaldar la iniciativa.
    • Diagnóstico: Los ingenieros analizan el estado actual de la organización y hacen recomendaciones generales.
    • Establecer: La organización toma las recomendaciones generales de la clase de diagnóstico y desarrolla planes de acción específicos para ayudar a implementar esos cambios.
    • Acción: La organización desarrolla la solución y luego prueba, mejora e implementa la solución.
    • Aprendizaje: La organización analiza continuamente los resultados de sus esfuerzos para determinar si se han logrado las metas deseadas.

20.1.4 Diagrama de Gantt y PERT

  • Un diagrama de Gantt es un diagrama de barras que muestra las interrelaciones entre proyectos y cronogramas a lo largo del tiempo. Proporciona un diagrama de programación que ayuda a planificar, coordinar y realizar un seguimiento de tareas específicas del proyecto.
  • La tecnología de revisión de programas (PERT) se utiliza para mejorar directamente la gestión de proyectos y la codificación de software.

20.1.5 Gestión de cambios y configuración

  • Componentes básicos del cambio.
    • Solicitar cambios: proporciona un marco organizado dentro del cual los usuarios pueden solicitar cambios, los gerentes pueden realizar análisis de costo/beneficio y los desarrolladores pueden optimizar las tareas.
    • Control de cambios: recrear situaciones específicas encontradas por los usuarios y analizar los cambios apropiados que se pueden realizar para remediarlas.
    • Control de lanzamiento: Aprobación de lanzamiento a través del proceso de control de lanzamiento, cumpliendo e identificando cualquier código insertado como ayuda de programación durante el proceso de cambio.
    • Identificación de la configuración: los administradores registran la configuración de los productos de software en toda la organización.
    • Control de configuración: asegúrese de que los cambios en las versiones de software sean consistentes con las políticas de control de cambios y gestión de configuración.
    • Estadísticas de estado de configuración: un proceso formal para rastrear todos los cambios de autorización que ocurren
    • Auditoría de configuración: las auditorías de configuración periódicas pueden garantizar que el entorno de producción real sea coherente con el entorno estadístico y que no se hayan producido cambios de configuración no autorizados.

20.1.6 Enfoque DevOps

  • DevOps trabaja en estrecha colaboración con métodos de desarrollo ágiles y tiene como objetivo reducir significativamente el tiempo necesario para desarrollar, probar e implementar cambios de software.

20.1.7 Interfaz de programación de aplicaciones

  • Las API permiten a los desarrolladores de aplicaciones evitar las páginas web tradicionales e interactuar directamente con los servicios subyacentes a través de llamadas a funciones.
  • Las API deben probarse exhaustivamente para detectar fallas de seguridad

20.1.8 Pruebas de software

  • Cualquier software debe probarse minuciosamente antes de distribuirse dentro de una organización. La mejor práctica para realizar pruebas es al diseñar módulos.
  • Al probar el software, debe probar cómo el producto de software maneja datos de entrada normales y válidos, tipos incorrectos, valores fuera de límites y otros límites y condiciones.
  • Al probar el software, se deben aplicar las mismas reglas de separación de funciones utilizadas en otros aspectos de la organización.
  • Métodos de prueba de software
    • Prueba de caja blanca: verifique la lógica interna del programa y ejecute el código línea por línea para detectar si hay algún error.
    • Prueba de caja negra: proporcione una amplia gama de escenarios de entrada y vea la salida para detectar el programa desde la perspectiva del usuario.
    • Pruebas de caja gris: tratar el software desde la perspectiva del usuario, analizar la entrada y la salida, pero también observar el código fuente.
  • Modo de prueba:
    • Pruebas dinámicas: evaluación de la seguridad del software en su entorno de ejecución
    • Pruebas estáticas: análisis del código fuente o aplicaciones mutadas para evaluar la seguridad del software sin ejecutarlo.

20.1.9 Repositorio de código

  • Los repositorios de código son excelentes herramientas de colaboración que facilitan el desarrollo de software, pero conllevan sus propios riesgos de seguridad.

20.1.10 Acuerdo de nivel de software

  • Un acuerdo de nivel de software es un método utilizado tanto por los proveedores de servicios como por los proveedores de servicios para garantizar que se proporcionen los servicios y se mantengan los niveles de servicio adecuados para los clientes internos o externos de la organización.

20.1.11 Adquisición de software

20.2 Crear base de datos y almacén de datos

20.2.1 Arquitectura de gestión de bases de datos

  1. Base de datos jerárquica y base de datos distribuida.
    • El modelo de base de datos jerárquico combina registros y campos relacionados en una estructura de árbol lógica para acomodar uno a muchos.
    • El modelo de base de datos distribuida almacena datos en múltiples bases de datos y el mapeo de bases de datos distribuidas es de muchos a muchos.
  2. base de datos relacional
    • Una base de datos relacional es una tabla bidimensional plana compuesta de filas y columnas. La estructura fila-columna proporciona una relación de mapeo de datos uno a uno.
    • El número de filas se llama tecnología, el número de columnas se llama grado y el dominio de una relación es el conjunto de valores permitidos que puede tomar un atributo.
    • Tres tipos de claves en la base de datos.
      • Clave candidata: un subconjunto de atributos utilizados para identificar de forma única un registro en una tabla.
      • Clave primaria: la clave que identifica de forma única un registro en una tabla se llama clave primaria.
      • Clave externa: utilizada para forzar una relación entre dos tablas
    • Todas las bases de datos relacionales utilizan un lenguaje estándar, el lenguaje de consulta estructurado (SQL), para almacenar, detectar y cambiar datos para los usuarios.
    • SQL proporciona a administradores, desarrolladores y usuarios finales la funcionalidad completa necesaria para interactuar con bases de datos.

20.2.2 Transacciones de datos

  • Las bases de datos relacionales admiten el uso explícito e implícito de transacciones, garantizando la integridad de los datos.
  • Todas las transacciones de la base de datos tienen 5 características requeridas:
    • Atomicidad: las transacciones de la base de datos deben originarse, lo que significa que deben ser todo o nada.
    • Consistencia: Todo debe comenzar a operar en un entorno consistente con todas las reglas de la base de datos.
    • Aislamiento: Requiere que las cosas funcionen independientemente unas de otras.
    • Durabilidad: las transacciones de la base de datos deben ser duraderas, lo que significa que una vez confirmadas en la base de datos, se conservarán.

20.2.3 Seguridad de bases de datos multinivel

La base de datos de seguridad multinivel contiene una gran cantidad de información clasificada varias veces, y las etiquetas asignadas al usuario deben verificarse y solo se debe proporcionar la información adecuada según la solicitud del usuario.

Los administradores agregan múltiples niveles de seguridad a los DBMS heredados o inseguros mediante la implementación de una interfaz confiable

  1. Concurrencia: es un mecanismo de seguridad preventivo que intenta mantener correcto el reloj de los datos almacenados en la base de datos, o al menos proteger su integridad y disponibilidad
    .
  2. Otros mecanismos de seguridad:
    • Integridad semántica: garantizar que las acciones del usuario no violen ninguna regla estructural
    • Hora y fecha para sellar y mantener la integridad y disponibilidad de los datos.
    • Capaz de controlar objetos de forma detallada dentro de la base de datos, como el control de acceso relacionado con el contenido.
    • Los administradores pueden utilizar la tecnología de partición de bases de datos para evitar vulnerabilidades de agregación, inferencia y contaminación.
    • Métodos y medidas de instancias múltiples para ciertos tipos de ataques de inferencia
    • Explotar el ruido y las interferencias para insertar datos falsos o falsificados en el BDMS para redirigir o frustrar ataques a la confidencialidad de la información.

20.2.4 ODBC

  • Conectividad abierta de bases de datos (ODBC): permite que las aplicaciones se comuniquen con diferentes tipos de bases de datos sin tener que codificar directamente para cada tipo de base de datos con el que interactúan.

20.3 Almacenamiento de datos e información

20.3.1 Tipos de memoria

  • Memoria principal: Consiste en los principales recursos de almacenamiento a los que la CPU del sistema puede acceder directamente. La RAM es generalmente el recurso de almacenamiento de mayor rendimiento que el sistema puede utilizar.
  • Almacenamiento auxiliar: compuesto por muchos recursos de almacenamiento económicos y no volátiles que el sistema puede utilizar durante mucho tiempo, como cintas, discos, discos duros y almacenamiento de CD/DVD.
  • Memoria virtual: el sistema utiliza almacenamiento secundario para simular los recursos del almacenamiento principal adicional, lo que proporciona un sistema de archivos extremadamente rápido para una variedad de aplicaciones, pero no proporciona capacidades de recuperación.
  • Memoria de acceso aleatorio: permite que el sistema operativo solicite el contenido de cualquier ubicación en el medio. Tanto la RAM como los discos duros son memorias de acceso aleatorio.
  • Acceso secuencial a la memoria: escanea todos los medios desde el principio hasta la dirección especificada
  • Memoria volátil: el contenido almacenado se perderá cuando se apague el recurso.
  • Memoria no volátil: no depende de la energía de una fuente de energía para mantener el contenido almacenado

20.3.2 Amenazas a la memoria

  • Dos amenazas al almacenamiento de datos
    • Independientemente del tipo de memoria que se utilice, existe un acceso ilegal a un recurso de memoria.
    • Los canales de almacenamiento encubiertos permiten compartir medios de almacenamiento a través de operaciones directas o indirectas.

20.4 Comprender los sistemas basados ​​en el conocimiento

20.4.1 Sistema experto

  • Los sistemas expertos intentan concretar el conocimiento acumulado por los humanos en un tema particular y aplicarlo de manera consistente a decisiones futuras.
    • Base de conocimientos: contiene reglas conocidas por el sistema experto.
    • Motor de inferencia: analiza la información de la base de conocimiento para tomar decisiones correctas.
  • Ventajas de los sistemas expertos: la toma de decisiones no implica influencia emocional

20.4.2 Red neuronal

  • Establezca largas cadenas de decisiones computacionales que se interpolan entre sí y, en última instancia, se suman para producir el resultado deseado.

20.4.3 Sistema de apoyo a las decisiones

  • Sistema de soporte a la decisión (DSS): una aplicación basada en el conocimiento que analiza datos comerciales y los presenta a los usuarios en una forma que facilita la toma de decisiones comerciales.

20.4.4 Aplicaciones de seguridad

  • La principal ventaja de los sistemas expertos y sistemas neuronales es: la capacidad de tomar decisiones consistentes rápidamente

Supongo que te gusta

Origin blog.csdn.net/Runnymmede/article/details/133364244
Recomendado
Clasificación