Seguridad en el Desarrollo de Software
¿Qué entendemos por Software Seguro?
Entendemos por un software (SW) seguro aquel que está diseñado, construido y probado para su seguridad. Además, continúa ejecutándose correctamente bajo ataque y fue diseñado con el fallo en mente.
Propiedades de un Software Seguro
- Ejecución predecible: confiamos en que cuando ejecutamos nuestro software, funciona de la manera en la que esperamos.
- Fiabilidad: se minimiza en el mayor grado posible el número de vulnerabilidades explotables de manera intencional.
- Conformidad: se realizan actividades planificadas, sistemáticas y multidisciplinarias que aseguran que los componentes, productos y sistemas de software conforman los requerimientos y los estándares aplicables.
¿Qué es la Seguridad del Software?
El concepto de seguridad, según la ISO/IEC 15408-1, se refiere a la capacidad de los productos de software para proteger los datos e información, de manera que personas o sistemas no autorizados no puedan leerla o modificarla, y para que el acceso no sea denegado a personal autorizado.
Componentes de la Seguridad
- Confidencialidad: previene el descubrimiento de información. Se refiere a la protección de datos implicados en el entorno protegido.
- Integridad: previene la modificación inadecuada de información.
- Disponibilidad: previene la denegación inadecuada del acceso a servicios ofrecidos por el sistema.
Tipos de Amenazas a la Información
- Interrupción: el mensaje no puede llegar a su destino; un recurso del sistema es destruido o temporalmente inutilizado. Este ataque va contra la disponibilidad.
- Interceptación: una persona o programa sin autorización logra el acceso a un recurso controlado. Este ataque va contra la confidencialidad.
- Modificación: la persona sin autorización, además de lograr el acceso, modifica el mensaje. Este ataque va contra la integridad.
- Fabricación: una persona sin autorización inserta objetos falsos en el sistema. Este ataque va contra la autenticidad.
Objetivos de la Seguridad del Software
- Minimizar y gestionar los riesgos, y detectar los posibles problemas y amenazas a la seguridad.
- Garantizar la adecuada utilización de los recursos y de las aplicaciones del sistema.
- Limitar las pérdidas y conseguir la adecuada recuperación del sistema en caso de un incidente de seguridad.
- Cumplir con el marco legal y con los requisitos impuestos por los clientes en sus contratos.
Funciones de la Seguridad
- Confidencialidad: se garantiza que cada mensaje transmitido o almacenado en un sistema informático solamente podrá ser leído por su legítimo destinatario.
- Autenticación: garantiza que la identidad del creador de un mensaje o documento sea legítima.
- Integridad: se encarga de garantizar que un mensaje o archivo no ha sido modificado desde su creación o durante su transmisión a través de una red informática.
- No repudio: consiste en implementar un mecanismo probatorio que permita demostrar la autoría y envío de un determinado mensaje, de tal modo que el usuario que lo ha creado no pueda negar dicha circunstancia posteriormente.
- Disponibilidad: se debe garantizar su correcto funcionamiento, de manera que pueda estar permanentemente a disposición de los usuarios que deseen acceder a sus servicios, entre otras.
Pilares de la Seguridad de Software
Manejo del Riesgo
Las actividades requeridas para un análisis de riesgo son:
- Aprender todo lo posible del sistema a analizar.
- Discutir los aspectos de seguridad relevantes para el producto.
- Realizar un análisis de impacto.
- Priorizar los riesgos.
- Desarrollar una estrategia de mitigación.
Puntos de Contacto en Seguridad (Touchpoints)
Las actividades para mantener puntos de contacto con la seguridad son:
- Conocer y entender los riesgos de seguridad.
- Diseñar pensando en seguridad.
- Análisis y pruebas de los artefactos principales desde el punto de vista de seguridad.
Conocimiento
Involucra la recolección, encapsulamiento y el compartir el conocimiento sobre seguridad que puede usarse para proporcionar un fundamento sólido de prácticas de seguridad de software.
Sistema de Gestión de la Seguridad
El Sistema de Gestión de la Seguridad de la Información (SGSI) es la parte del sistema de gestión de una empresa que es capaz de establecer, implementar, operar, monitorear, mantener y mejorar la seguridad de la información.
El ciclo PHVA (Planificar, Hacer, Verificar, Actuar) es el modelo utilizado para establecer, implementar, monitorear y mejorar el SGSI.
Gestión de Riesgos
El proceso de gestión de riesgos se trata de definir un plan para la implantación de ciertas salvaguardas o contramedidas para el sistema informático que permita:
- Disminuir la probabilidad de que se materialice una amenaza.
- Permitir la recuperación del sistema o la transferencia del problema a un tercero.
La administración de riesgos es el conjunto de acciones específicamente ejecutadas para reducir las posibilidades de que algo vaya mal durante el proyecto, identificando y moderando los riesgos que aparecen durante todo el ciclo de vida del proyecto.
Calidad del Software
¿Qué es Calidad?
Es la totalidad de las características y aspectos de un producto o servicio en los que se basa su aptitud para satisfacer una necesidad dada (EOQ).
- Grado en el que un conjunto de características inherentes cumple con los requisitos (ISO 9000:2000).
Vistas de la Calidad
- Trascendental: excelencia innata.
- Basada en el usuario: adecuación al propósito.
- Basada en el fabricante: conformidad con requisitos.
- Basada en el producto: económica.
- Basada en el valor: precio asequible.
Calidad del Producto
El objetivo no es necesariamente una calidad perfecta, sino la necesaria y suficiente para cada contexto de uso a la hora de la entrega y del uso por parte de los usuarios.
Es necesario comprender las necesidades reales de los usuarios con tanto detalle como sea posible.
Diferentes Aspectos de la Calidad
- Interna: medible a partir de las características intrínsecas, como el código fuente.
- Externa: medible en el comportamiento del producto, como una prueba.
- En uso: durante la utilización efectiva por parte del usuario.
En donde:
- Efectividad: capacidad del producto de software para permitir a los usuarios alcanzar objetivos especificados con exactitud y completitud.
- Productividad: capacidad del producto de software para permitir a los usuarios gastar una cantidad adecuada de recursos con relación a la efectividad alcanzada.
- Seguridad de acceso: capacidad del producto de software para alcanzar niveles aceptables del riesgo de hacer daño a las personas, al negocio, al software, a las propiedades o al medio ambiente.
- Satisfacción: capacidad del producto de software para satisfacer a los usuarios.
Para Producir un Plan de Evaluación de Calidad
- Definir el dominio.
- Determinar subcaracterísticas de calidad.
- Definir una jerarquía de subcaracterísticas.
- Descomponer subcaracterísticas en atributos.
- Descomponer atributos en atributos básicos.
- Establecer relaciones entre entidades de calidad.
- Determinar métricas para los atributos.
Calidad del Proceso
Está compuesto por dos procesos interrelacionados:
- Proceso de producción: relacionado con la construcción y mantenimiento del producto de software.
- Proceso de gestión: que es el encargado de estimar, planificar y controlar los recursos necesarios para poder llevar a cabo y poder controlar el proceso de producción.
Elementos relacionados:
- Tecnologías del desarrollo de software.
- Métodos y técnicas del desarrollo de software.
- Comportamiento organizacional.
- Economía y marketing.
Estimaciones en Ingeniería de Software
¿Qué podemos medir en Ingeniería de Software?
- Procesos.
- Productos.
- Recursos.
- Las mediciones para el proceso corresponden a costo y esfuerzo incurridos a lo largo del tiempo necesario en el desarrollo hasta el fin del proyecto.
- Las mediciones para el producto corresponden a líneas de código o puntos de función producidos, páginas de documentación escritas, velocidad de ejecución de los programas, entre otros.
- Las mediciones para los recursos corresponden a cantidad de personal involucrado, tamaño, experiencia del equipo de desarrollo, costo y disponibilidad de las herramientas utilizadas.
¿Por qué necesitamos medir estos atributos?
- Mejoras en la calidad y productividad.
- Planificación y estimación de proyectos con precisión.
- Disposición del personal adecuado, bien utilizado y motivado.
- Existencia de una adecuada estructura organizacional.
- Uso de técnicas y herramientas efectivas para el proceso.
- Obtención de un espacio físico y ambiente de trabajo óptimo.
Estimación
Para estimar se necesita experiencia, acceso a información histórica y hacer uso de métricas cuantitativas cuando existan los datos para ello.
Los componentes principales de costo son:
- Hardware.
- Entrenamiento (RR. HH.).
- Esfuerzo.
Estimaciones de Líneas de Código
Miden en forma directa el tamaño del producto de software. Se calculan simplemente contando las instrucciones de código fuente de cada componente del producto de software, excluyendo generalmente los comentarios y blancos.
Estimaciones de Punto de Función (PF)
Los puntos de función son una medida natural de consumo que intenta calcular la funcionalidad de un producto de software, ya que esto es lo que le interesa al consumidor.
Componentes del modelo de puntos de función:
- Entradas externas.
- Salidas externas.
- Consultas externas.
- Archivos internos lógicos.
- Archivos de interfaz externos.
Cálculo de los Puntos de Función No Ajustados (PFNA)
Se debe multiplicar el número de componentes por su factor correspondiente, sumar todos los totales para obtener los PFNA.
Los PF se obtienen al ponderar los PFNA por un factor de complejidad técnica (FCT) asociado a 14 características de la aplicación.
Cálculo de Esfuerzos
El esfuerzo de desarrollo de un proyecto significa básicamente cuántas personas se van a ocupar en el desarrollo de un proyecto, y dependiendo del número de personas, se puede reducir el tiempo de desarrollo.