INTRODUCCIÓN
En la actualidad, se vive en una sociedad donde cada vez se hace más evidente el uso de las tecnologías de información en todo ámbito (Proaño et al., 2017). El software se ha convertido en un producto vital, tanto para empresas, organismos, servicios y tareas cotidianas de los ciudadanos como para la toma de decisiones, el intercambio de información y la gestión del conocimiento (Marín et al., 2020). La ingeniería del software (ISW), según Pressman, permite la construcción de productos de software de alta calidad mediante un conjunto de procesos, colección de métodos y arreglos de herramientas. Desde sus inicios ha aplicado un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento del software, con el objetivo de alcanzar un software de alta calidad (Marín et al., 2018). El principal objetivo de la ingeniería de software es mejorar la calidad del producto final desde la calidad del proceso y del propio producto (Marín et al., 2018).
Según diversos autores en el área de calidad de software como Humphrey, Larman, Pressman, la calidad está altamente relacionada con los defectos en los productos y coinciden en que hay que invertir más en las actividades de control y aseguramiento de la calidad desde los inicios del desarrollo de software (Marín et al., 2020).
La industria del software reconoce hoy la importancia de llevar a cabo pruebas de software, como instrumento para asegurar la calidad de los productos desarrollados (Rojas et al., 2015). El concepto de pruebas de calidad de software permite en las empresas con áreas afines a los sistemas, la computación, la informática brindar productos con altos estándares de calidad y con una disminución de fallos en estos (Mera, 2016).
La implementación de un proceso de pruebas brinda las pautas para definir objetivos, analizar y viabilizar los requerimientos, diseñar, detallar, programar, implementar y asegurar la calidad de un producto de desarrollo software (Mera, 2016). Mediante las pruebas de software se puede garantizar la ejecución factible del producto, disminuyendo así la cantidad de posibles errores y vulnerabilidades que pueden existir.
En la actualidad es común que existan errores de programación que den origen a problemas de seguridad o vulnerabilidades. Los fallos de seguridad pueden afectar vidas humanas y causar daños en infraestructura industrial y social, poniendo en riesgo la confidencialidad y privacidad de la información y socavando la viabilidad de sectores completos de negocio (Yepes, 2017). La ligera realización y actualización de sistemas, conlleva al mal manejo de las pruebas de seguridad, exponiendo al cliente/usuario a un posible robo o manipulación de información, datos vinculados a su economía y/o a la sociedad.
La existencia de vulnerabilidades en las aplicaciones representa riesgos que afectan los objetivos de negocio de las organizaciones. Cuando existe una vulnerabilidad que permite que un atacante (amenaza) comprometa un activo de información (información valiosa para el negocio), se habla de riesgo o, en otros términos, la probabilidad de ocurrencia de un evento adverso y el impacto asociado en caso de que ocurra (Yepes, 2017; Vásquez, 2020). Los riesgos sobre la seguridad de la información pueden afectar sobremanera aspectos como integridad, confiabilidad y disponibilidad de la misma (Proaño et al., 2017; Casas, 2020). Para detectar estos riesgos se utilizan generalmente procedimientos, técnicas y herramientas que hacen de la seguridad informática un proceso automatizado y eficiente.
En la revisión bibliográfica realizada se pudo constatar que los autores consultados plantean la necesidad de las pruebas (Board (ISTQB), 2018; David Flores Mendoza, 2019; Fernández Pérez, 2018; Pressman, 2010) y de su correcto diseño, enmarcando las buenas prácticas que deben tenerse en cuenta para la realización exitosa de pruebas, pero no se hace una propuesta de qué probar y algunos elementos del cómo probar. Por tanto, se establece como problema a resolver para esta investigación: ¿Cómo evaluar la seguridad como característica de calidad del producto teniendo en cuenta las buenas prácticas recomendadas en los modelos, normas y estándares más utilizados y las experiencias de investigadores?
El objetivo de la investigación consiste en diseñar un procedimiento de pruebas para evaluar la seguridad como característica de calidad del producto que permita disminuir los riesgos de falla en operación.
MÉTODOS O METODOLOGÍA COMPUTACIONAL
Para el desarrollo de esta investigación se utilizaron los métodos que se mencionan a continuación. Además, se brinda una breve explicación de los fines para los que fueron utilizados.
Métodos teóricos:
Método dialéctico para el estudio crítico de los trabajos anteriores y para usar estos como fuente de referencia y comparación de los resultados.
El método analítico- sintético se utilizó para el estudio de la bibliografía acerca de los modelos de calidad más usados internacionalmente
El hipotético deductivo para la identificación de la situación problemática y de las soluciones.
Métodos empíricos:
Entrevista para obtener informaciones en pos de argumentar la situación problemática y la validación de los resultados.
La encuesta para obtener las experiencias de las organizaciones.
La observación participante para obtener la información necesaria para el planteamiento del problema, así como realizar la confrontación de los resultados obtenidos.
Métodos estadísticos para valorar el efecto de la propuesta.
El método experimental para comprobar la utilidad de los datos obtenidos a partir de la implementación del procedimiento para realizar pruebas de seguridad.
Un procedimiento es definido por la Real Academia Española como: acción de proceder; método de ejecutar algunas cosas. En el contexto de la Ingeniería de software es definido como:
El procedimiento para ejecutar las pruebas de seguridad cuenta con tres fases y está diseñado para mejorar y guiar el proceso con el objetivo de ejecutar unas pruebas más eficientes al software. Permite evaluar la seguridad de cualquier tipo de sistema, o sea, puede ser utilizado para sistemas sujetos a pruebas (SSP) con diferentes arquitecturas tecnológicas. Se recomienda comenzar el procedimiento luego de finalizada la primera evaluación a la característica de calidad del producto de adecuación funcional. Esto se recomienda debido a que es necesario establecer una estabilidad en el producto a evaluar para evitar que se realicen cambios grandes en el código, posteriores a la evaluación, que pueden insertar vulnerabilidades. El procedimiento se nutre de los requisitos no funcionales que se proponen para tener en cuenta la seguridad desde el inicio del desarrollo y de las experiencias. Los elementos que se proponen en el procedimiento son: fases, actividades y herramientas a utilizar.
Las fases del procedimiento contienen dentro de cada una de ellas las diferentes actividades que se definieron para la ejecución del proceso de pruebas de seguridad de la DC. Las fases son las siguientes: Figura 1
Fases del diseño de pruebas de seguridad
En las dos primeras fases están presentes el equipo de desarrollo y el equipo de pruebas, así el proceso se convierte en una tarea de comunicación constante entre ambos. Esta relación permite un mejor aprovechamiento del fondo del tiempo planificado para esta etapa. Siendo este elemento una de las principales fortalezas de este proceso.
Durante cada fase se realiza un grupo de actividades en correspondencia con la misma. Las actividades del procedimiento de manera general son las siguientes:
Identificar los datos necesarios de prueba y caracterizar los sistemas.
Preparar el entorno de prueba e identificación de cualquier infraestructura necesaria y las herramientas.
Registrar el resultado de la ejecución de pruebas y registrar la identidad y las versiones del software. Debemos saber exactamente la versión del software, tenemos que informar defectos con versiones específicas, y el registro de las pruebas para un informe final.
Evaluar como resultaron las actividades de pruebas y analizar las lecciones aprendidas.
A continuación, se realiza la definición de cada fase, y la especificación de las actividades dentro de cada una de ellas, modelando la forma de ejecutarlas:
Fase de inicio
En esta fase es donde se recopila información, se analizan los datos necesarios para las pruebas y se definen cuáles se le aplicaran al sistema, de forma que sean más eficaces sobre la aplicación de acuerdo con las características y especificaciones del sistema en prueba. Las actividades que se realizan en esta fase son: Identificar el sistema.
El equipo de desarrollo del software provee la información necesaria sobre el sistema, mediante una tabla con las tecnologías que fueron usados en el desarrollo de la versión actual del sistema en cuestión. La tabla de información puede variar de acuerdo con el tipo de aplicación (web, escritorio, video juego o aplicación para móvil). La información recopilada se ajusta al diseño de las pruebas con el objetivo de que sean más eficientes. (Ver Tabla 1).
Para terminar la recopilación de información se realiza un escaneo de la red con la herramienta Nmap y su interfaz Zenmap, con el objetivo de identificar qué puertos y servicios utiliza e inicia el sistema. El uso de Nmap automatiza esta actividad y hace posible encontrar vulnerabilidades en múltiples sistemas para la exploración de dominios, puertos, direcciones IP, país, región, entre otros datos.
Monitoreo tecnológico
Se realiza un estudio de las tecnologías en busca de vulnerabilidades que no han sido parcheadas o resueltas en las versiones utilizadas en desarrollo de los sistemas. Esta actividad genera un reporte de posibles vulnerabilidades y hallazgos a los cuales se puede enfrentar el equipo de probadores. El reporte se registra y almacena para posibles sugerencias y recomendaciones técnicas para el desarrollo seguro de un sistema, priorizando los principales aspectos de la Seguridad Informática (integridad, disponibilidad y confidencialidad). Permite tener registrados fallos y vulnerabilidades conocidas por tecnologías y las versiones de estas que pueden parchear o actualizar.
Preparar entorno de prueba
Esta actividad recibe la información recopilada de la caracterización, mediante la cual prepara el entorno de prueba, selecciona el tipo de prueba y las herramientas para ejecutarlas. Con la información de la tabla de caracterización y el escaneo de la red previo se realizarán las configuraciones específicas en las herramientas de pruebas, de tal forma que el análisis sea profundo, basándose principalmente en las tecnologías que se utilizaron en el desarrollo de la aplicación en prueba.
Tipo de prueba
Reactivas o basadas en experiencia:
Evaluación de vulnerabilidades: como prueba, es una evaluación de seguridad informática realizada por escáneres de vulnerabilidades web, que tienen como objetivo la detección y análisis de fallos y vulnerabilidades que afecten la confidencialidad, la integridad y la disponibilidad de los sistemas web.
Escaneo autorizado
Escaneo no autorizado
En el procedimiento se propone utilizar las dos clasificaciones de escaneo de evaluación de vulnerabilidades. Hasta ahora se han descrito las actividades a realizar que indican el qué hacer y el cómo se trabaja proponiendo herramientas específicas para llevar a cabo el procedimiento.
Fase de ejecución
La segunda fase del procedimiento es donde se ejecutan las pruebas y se recogen los resultados para el análisis posterior de las vulnerabilidades con el equipo de desarrollo. Las actividades en esta fase son las siguientes:
Ejecutar las pruebas
Se ejecutan las pruebas escogidas con las herramientas seleccionadas y configuradas de acuerdo a la caracterización de las aplicaciones en cuestión. Mientras se ejecutan las pruebas las herramientas van mostrando reportes sobre las vulnerabilidades encontradas en el camino.
Registrar vulnerabilidades
Finalizada la actividad de ejecución de las pruebas, se generan los reportes con las vulnerabilidades detectadas en las aplicaciones. Estas vulnerabilidades son guardadas para un análisis posterior y para evaluar con el equipo de desarrollo el impacto de las mismas en el sistema.
Evaluar resultados de reportes
El probador genera una descripción de las vulnerabilidades detectadas para analizar con los programadores o miembros de equipo de desarrollo del sistema. Se analiza el impacto, tipo de vulnerabilidad y una posible recomendación de solución.
Fase de cierre
Es la fase donde se verifican que se haya cumplido satisfactoriamente todo el proceso de pruebas. Se realiza una evaluación del impacto de las vulnerabilidades detectadas con el equipo de desarrollo y se informan de forma oficial, teniendo en cuenta los principios y valores con los que debe contar un probador como es la ética profesional y la sinceridad y honestidad. Los probadores deben ser capaces de informar las vulnerabilidades de forma constructiva.
Reconciliar resultados
En esta actividad, con los resultados obtenidos en las pruebas y los reportes de vulnerabilidades de que cada herramienta se comprueban la cantidad de estas incidencias que pasan la validación o no. Son definidos los Falsos positivos o Falsos negativos con el equipo de desarrollo y el impacto que pueden tener en el software si son explotados por ataques externos.
Falso positivo: vulnerabilidades detectadas por las herramientas, pero no representan una amenaza para el sistema.
Falso negativo: incidencias que no fueron detectadas por los escáneres pero que están presente en el sistema y son verdaderas amenazas para el software.Tabla 2
El impacto está dado por el daño que puede causar un incidente de seguridad explotando un aguajero y materializando una amenaza sobre alguna vulnerabilidad detectada en el sistema sujeto a prueba. Esta clasificación del impacto la emiten las herramientas de pruebas que se ejecutan.
Registrar No conformidad
Las vulnerabilidades detectadas que sean analizadas con el equipo de desarrollo y sean aceptadas como fallos en el software, pasan a ser registradas en la herramienta de gestión de proyectos que se decida utilizar, como No conformidades de tipo seguridad. Estas No conformidades deben ser monitoreadas y revisadas por un conjunto de pruebas de regresión (pueden ser manuales o automatizadas) en la siguiente iteración de las pruebas con el objetivo de verificar la solución de las vulnerabilidades en el sistema.
RESULTADOS Y DISCUSIÓN
Para la valoración de la propuesta en la solución del problema planteado, fue necesario realizar una encuesta para obtener los criterios de expertos. La selección de los expertos se hizo a través del análisis curricular. Participaron 17 expertos con más de diez años en la industria del software y de diferentes organizaciones desarrolladoras de software a nivel nacional.
Proceso de selección de expertos
Dada la variedad de instituciones que desarrollan software de la industria cubana y las características que esta posee, se hizo necesario tomar una muestra de expertos que tuviesen conocimientos amplios relacionados con la calidad, la gestión de la calidad y la evaluación de seguridad como característica de calidad del producto, en proyectos de software. Se realizó una valoración inicial de los posibles expertos para la validación del procedimiento, considerando la experiencia práctica como el principal factor en esta investigación. Los criterios iniciales para la selección de expertos se listan a continuación:
Experiencia laboral en la industria de software de 10 años.
Producción científica enfocada al objeto a evaluar.
Haber desempeñado roles relacionados con las pruebas de software.
Al tener en cuenta estos criterios se realizó un cuestionario para el resumen curricular. Como resultado se seleccionaron 37 expertos a nivel nacional, de instituciones como: DESOFT, XETID, UCI y CUJAE. Incrementando los que han participado en la investigación en etapas anteriores con expertos internacionales con más de diez años en la industria del software y más de cinco años como consultores de la mejora de procesos de software.
Luego de seleccionados los expertos, teniendo en cuenta los conocimientos que poseen y el origen de los mismos y con el objetivo de validar la propuesta, se aplicó el método Delphi, el cual tiene un amplio uso en varias áreas del conocimiento a nivel internacional y a nivel nacional, ha sido empleado fundamentalmente en investigaciones educativas y médicas, aunque en los últimos años se ha empleado en investigaciones de Ciencias Informáticas con el objetivo de socializar, externalizar y combinar el conocimiento de los expertos. El método aprovecha los elementos comunes en el grupo de expertos, preserva el anonimato mediante el uso de flujos de comunicación y permite la participación de expertos que se encuentren geográficamente dispersos (Trujillo, 2014).
A partir de los resultados arrojados se pudo contrastar que todas las categorías son evaluadas de Muy altas o Altas, validando la contribución del procedimiento en la solución del problema de investigación. Para todas las categorías se obtuvo una moda1 de Alta o Muy Alta. Los expertos no emitieron votos en la escala de Baja (2) o Ninguna (1). A partir de los votos emitidos por los expertos se obtiene una relevancia de 94.7, pertinencia de 94, coherencia de 88.3, comprensión de 96.7 y una exactitud de 64.7.
Teniendo en cuenta estos resultados se puede decir que los expertos coinciden en que el procedimiento propuesto incorpora las buenas prácticas propuestas en los modelos, normas y estándares más utilizados. Adicionalmente se recibieron sugerencias por parte de los expertos:
Retroalimentar el procedimiento a partir de su empleo en los proyectos.
Incorporar el diseño de cada una de las pruebas a ejecutar para evaluar la seguridad como característica de calidad del producto.
CONCLUSIONES
La realización de pruebas de software es importante para reducir el riesgo de fallo en operación, sin embargo, muchas veces se realizan luego de finalizado el producto y solo se ejecutan pruebas funcionales.
El procedimiento propone fases, actividades y herramientas que integra el qué hacer a partir de las actividades con el cómo probar a partir de proponer herramientas específicas para realizar las pruebas y tipos de pruebas.
Los resultados reafirman la necesidad de complementar el proceso de pruebas con un procedimiento para evaluar la seguridad como característica de calidad del producto y se obtienen criterios positivos de los expertos.