El aseguramiento de software ( SwA ) es un proceso crítico en el desarrollo de software que garantiza la confiabilidad, seguridad y protección de los productos de software. [1] Implica una variedad de actividades, que incluyen análisis de requisitos, revisiones de diseño, inspecciones de código, pruebas y verificación formal. Un componente crucial del aseguramiento de software son las prácticas de codificación segura, que siguen los estándares y las mejores prácticas aceptados por la industria, como los descritos por el Instituto de Ingeniería de Software (SEI) en sus Estándares de codificación segura (SCS) CERT. [2]
Otro aspecto vital de la garantía de software son las pruebas, que deben realizarse en varias etapas del proceso de desarrollo de software y pueden incluir pruebas funcionales , pruebas de rendimiento y pruebas de seguridad . [3] Las pruebas ayudan a identificar cualquier defecto o vulnerabilidad en los productos de software antes de su lanzamiento. Además, la garantía de software implica prácticas organizativas y de gestión como la gestión de riesgos y la gestión de la calidad para garantizar que los productos de software cumplan con las necesidades y expectativas de las partes interesadas. [4]
El aseguramiento del software tiene como objetivo asegurar que el software esté libre de vulnerabilidades y funcione como se espera, cumpliendo con todos los requisitos y estándares que rigen el proceso de desarrollo de software. [3] Además, el aseguramiento del software tiene como objetivo producir sistemas intensivos en software que sean más seguros. Para lograr esto, se requiere un análisis dinámico y estático preventivo de las vulnerabilidades potenciales, y se recomienda una comprensión holística a nivel de sistema. El análisis de riesgos arquitectónicos desempeña un papel esencial en cualquier programa de seguridad de software, ya que los fallos de diseño representan el 50% de los problemas de seguridad y no se pueden detectar observando solo el código. [5]
Al seguir los estándares y las mejores prácticas aceptados por la industria, incorporar prácticas de prueba y gestión y realizar análisis de riesgos arquitectónicos, la garantía de software puede minimizar el riesgo de fallas del sistema y violaciones de seguridad, lo que la convierte en un aspecto crítico del desarrollo de software.
Iniciativas
Las iniciativas de garantía de software son programas y actividades diseñados para garantizar la calidad, la fiabilidad y la seguridad de los sistemas de software. Estas iniciativas son importantes porque el software se utiliza en una amplia gama de aplicaciones, desde operaciones comerciales hasta infraestructuras críticas, y los defectos o vulnerabilidades del software pueden tener consecuencias graves.
Existen varios tipos de iniciativas de garantía de software, entre ellas:
- Certificación y acreditación: estos programas establecen estándares y pautas para el desarrollo de software y verifican que los productos de software cumplan con estos estándares. La certificación y la acreditación pueden ayudar a garantizar que los productos de software sean confiables, seguros y cumplan con las regulaciones y los estándares de la industria. [6]
- Capacitación y educación: estas iniciativas brindan a los desarrolladores de software los conocimientos y las habilidades que necesitan para crear software seguro y de alta calidad. La capacitación y la educación pueden incluir cursos sobre pruebas de software, prácticas de codificación seguras y estándares y mejores prácticas de la industria. [7]
- Análisis y pruebas de código: estas iniciativas utilizan herramientas y técnicas para analizar el código de software e identificar defectos o vulnerabilidades. El análisis y las pruebas de código pueden incluir análisis estático, análisis dinámico y pruebas de fuzz, entre otras técnicas. [8]
- Modelado de amenazas y evaluación de riesgos: estas iniciativas evalúan los riesgos y amenazas potenciales a los que se enfrenta un sistema de software e identifican estrategias para mitigar dichos riesgos. El modelado de amenazas y la evaluación de riesgos pueden ayudar a garantizar que los sistemas de software estén diseñados para ser resistentes a los ataques y otras amenazas. [21]
¿Por qué es importante la garantía del software?
En el mundo digital actual, el software se utiliza para controlar una amplia gama de dispositivos y sistemas, incluidos automóviles , dispositivos médicos , sistemas financieros y equipos militares . Por lo tanto, es fundamental garantizar la confiabilidad, la seguridad y la protección de los productos de software. Sin las pruebas y la verificación adecuadas, el software puede contener defectos y vulnerabilidades que pueden provocar fallas del sistema, violaciones de seguridad y otros problemas graves con consecuencias negativas para las personas, las empresas y la sociedad en su conjunto. [9]
El Instituto Nacional de Estándares y Tecnología (NIST) define la garantía de software como "el nivel de confianza de que el software está libre de vulnerabilidades, ya sea diseñadas intencionalmente en el software o insertadas accidentalmente en cualquier momento durante su ciclo de vida, y que el software funciona de la manera prevista" [22] . Las organizaciones pueden reducir el riesgo de costosas fallas del sistema, violaciones de datos y otros resultados negativos al garantizar la garantía de software.
Además de los posibles riesgos asociados a los defectos y vulnerabilidades del software, existen requisitos legales y reglamentarios relacionados con la garantía del software. El incumplimiento de estas regulaciones puede dar lugar a sanciones legales y financieras. Por ejemplo, las organizaciones que desarrollan software para determinadas industrias pueden estar sujetas a regulaciones que les exijan garantizar la seguridad de sus productos.
Muchas funciones críticas, como la defensa nacional, la banca, la atención sanitaria, las telecomunicaciones, la aviación y el control de materiales peligrosos, dependen del funcionamiento correcto y predecible del software. [10] Si los sistemas intensivos en software que respaldan estas actividades fallan, podrían verse gravemente afectados. Por lo tanto, es esencial que las organizaciones implementen técnicas y herramientas de prueba y verificación de software para reducir el riesgo de fallas del sistema y violaciones de seguridad.
Ejecución
La garantía de software se ejecuta a través de una serie de actividades que tienen como objetivo garantizar la confiabilidad, seguridad y protección de los productos de software. Estas actividades incluyen análisis de requisitos, revisiones de diseño, inspecciones de código, pruebas y verificación formal. [1]
- El análisis de requisitos implica identificar y definir los requisitos funcionales y no funcionales del producto de software. Esto incluye comprender el propósito del software, sus usuarios previstos y cualquier estándar o regulación relevante que se deba cumplir. [11]
- Las revisiones de diseño implican evaluar el diseño del software para garantizar que cumpla con los requisitos y sea implementable. Esto incluye verificar si existen fallas, errores u omisiones de diseño que puedan afectar la confiabilidad o la seguridad del software. [24]
- Las inspecciones de código implican revisar el código para garantizar que se ajuste a los estándares y las mejores prácticas aceptados por la industria. Esto incluye verificar la calidad, la legibilidad y la facilidad de mantenimiento del código, así como identificar posibles vulnerabilidades o problemas de seguridad. [2]
- Las pruebas implican la ejecución del software para identificar defectos o vulnerabilidades que podrían afectar su confiabilidad o seguridad. Esto incluye pruebas funcionales, pruebas de rendimiento y pruebas de seguridad, entre otros tipos de pruebas. [3]
- La verificación formal implica el uso de métodos matemáticos o lógicos para demostrar que el software se comporta como se espera y no contiene defectos ni vulnerabilidades. Esto incluye técnicas como la comprobación de modelos, la demostración de teoremas y el análisis estático. [1]
Técnicas
Las pruebas y la verificación de software son técnicas que se utilizan para identificar y abordar defectos y vulnerabilidades en el código de software. Existen varios tipos de técnicas de prueba y verificación, entre las que se incluyen las pruebas funcionales, las pruebas de rendimiento y las pruebas de seguridad. [3]
- El aprendizaje automático se utiliza cada vez más en la seguridad de software para detectar problemas de software. Con la capacidad de analizar grandes volúmenes de datos, el aprendizaje automático puede identificar patrones y anomalías que pueden pasar desapercibidas para los humanos. El uso del aprendizaje automático puede, en última instancia, mejorar la calidad y la seguridad del software. [12]
- Las pruebas funcionales se utilizan para garantizar que el software realice las funciones para las que está destinado. Este tipo de pruebas implica ejecutar el software y probar sus características y funcionalidades para garantizar que funcione como se espera. [4]
- Las pruebas de rendimiento se utilizan para medir la velocidad, la capacidad de respuesta y la estabilidad del software. Este tipo de pruebas implica simular escenarios del mundo real para garantizar que el software pueda soportar la carga y funcionar bien en diversas condiciones. [4]
- Las pruebas de seguridad se utilizan para identificar vulnerabilidades y debilidades en el software que podrían ser explotadas por atacantes. Este tipo de pruebas implica el uso de varias técnicas para intentar violar la seguridad del software, como pruebas de penetración y escaneo de vulnerabilidades. [3]
- Además de las pruebas, se utilizan técnicas de verificación para garantizar que el código del software sea correcto y esté libre de defectos. Esto incluye técnicas como revisiones de código, verificación formal y análisis estático. [1]
- Las revisiones de código implican la comprobación del código para garantizar que se ajuste a los estándares y las mejores prácticas aceptados por la industria. Esto incluye la comprobación de la calidad, la legibilidad y la facilidad de mantenimiento del código, así como la identificación de posibles vulnerabilidades o problemas de seguridad. [2]
- La verificación formal implica el uso de métodos matemáticos o lógicos para demostrar que el software se comporta como se espera y no contiene defectos ni vulnerabilidades. Esto incluye técnicas como la comprobación de modelos, la demostración de teoremas y el análisis estático. [1]
- El análisis estático implica analizar el código del software sin ejecutarlo, para identificar posibles defectos o vulnerabilidades. Esto incluye técnicas como herramientas de análisis de código e inspecciones de código. [2]
Herramientas
Las herramientas de prueba y verificación de software se utilizan para identificar y abordar defectos y vulnerabilidades en el código de software. Existen varios tipos de herramientas de prueba y verificación, entre ellas:
- La inteligencia artificial (IA) se utiliza cada vez más en la seguridad de software para identificar y abordar defectos y vulnerabilidades en el código de software. Las técnicas de IA, como el aprendizaje automático y el procesamiento del lenguaje natural, se pueden utilizar para automatizar los procesos de prueba y verificación, haciéndolos más rápidos y eficientes. [13]
- Herramientas de análisis estático : estas herramientas analizan el código fuente de una aplicación de software sin ejecutarlo, para identificar posibles defectos o vulnerabilidades. Las herramientas de análisis estático se pueden utilizar para detectar problemas relacionados con la calidad del código, la seguridad y el cumplimiento de los estándares de codificación. [14]
- Herramientas de análisis dinámico : estas herramientas analizan el comportamiento de una aplicación de software mientras se ejecuta, para identificar defectos o vulnerabilidades que pueden no ser evidentes en el código fuente. Las herramientas de análisis dinámico se pueden utilizar para detectar problemas relacionados con el rendimiento, el uso de la memoria y la seguridad. [25]
- Herramientas de prueba de fuzz: estas herramientas generan una entrada aleatoria en una aplicación de software para probar su resistencia a datos inesperados o malformados. Las herramientas de prueba de fuzz se pueden utilizar para detectar problemas relacionados con la validación de entrada, la gestión de memoria y la seguridad. [25]
- Herramientas de pruebas de penetración: estas herramientas simulan ataques a una aplicación de software para identificar vulnerabilidades que podrían ser explotadas por los atacantes. Las herramientas de pruebas de penetración se pueden utilizar para detectar problemas relacionados con la seguridad, como inyección SQL, secuencias de comandos entre sitios y desbordamientos de búfer. [15]
- Herramientas de gestión de pruebas : estas herramientas se utilizan para gestionar el proceso de pruebas de software, incluida la creación, ejecución y generación de informes de casos de prueba. Las herramientas de gestión de pruebas pueden ayudar a garantizar que se realicen todas las pruebas necesarias y que se realice un seguimiento y resolución de los defectos. [24]
Definiciones alternativas
Departamento de Seguridad Nacional de los Estados Unidos (DHS)
Según el DHS , la garantía del software aborda:
- Confiabilidad: no existen vulnerabilidades explotables, insertadas de forma maliciosa o involuntaria;
- Ejecución predecible: confianza justificable en que el software, cuando se ejecuta, funciona según lo previsto;
- Conformidad: conjunto planificado y sistemático de actividades multidisciplinarias que garantizan que los procesos y productos de software se ajusten a los requisitos, estándares y procedimientos.
Disciplinas contribuyentes de SwA, articuladas en cuerpos de conocimiento y competencias básicas: ingeniería de software, ingeniería de sistemas, ingeniería de seguridad de sistemas de información, aseguramiento de la información, pruebas y evaluación, seguridad, protección, gestión de proyectos y adquisición de software. [16]
La garantía de software es una iniciativa estratégica del Departamento de Seguridad Nacional de los Estados Unidos (DHS) para promover la integridad, la seguridad y la confiabilidad del software. El programa SWA se basa en la Estrategia nacional para la seguridad del ciberespacio: Acción/Recomendación 2-14:
“El DHS facilitará un esfuerzo público-privado nacional para promulgar las mejores prácticas y metodologías que promuevan la integridad, la seguridad y la confiabilidad en el desarrollo de códigos de software, incluidos procesos y procedimientos que reduzcan las posibilidades de código erróneo, código malicioso o trampas que podrían introducirse durante el desarrollo”. [17] Existen herramientas de software de código abierto para la garantía de software que ayudan a identificar posibles vulnerabilidades de seguridad. [18]
Departamento de Defensa de los Estados Unidos (DoD)
Para el Departamento de Defensa , SwA se define como "el nivel de confianza de que el software funciona únicamente como está previsto y está libre de vulnerabilidades, ya sea intencional o involuntariamente diseñadas o insertadas como parte del software, durante todo el ciclo de vida". [19] El Departamento de Defensa está desarrollando SwA como una práctica de ingeniería de sistemas sólida, como lo demuestran dos publicaciones recientes financiadas por JFAC con el desarrollo dirigido por el Instituto de Ingeniería de Software (SEI) y profesionales expertos dentro de los Servicios Militares y la NSA. La Guía SwA del Gerente de Programa muestra cómo se debe planificar, dotar de recursos y gestionar SwA, mientras que la Guía SwA del Desarrollador recomienda prácticas técnicas adaptables durante todo el ciclo de vida. [20] Ambos documentos son los primeros de su tipo y fueron premiados. [21] Las dos organizaciones a escala empresarial en el Departamento de Defensa que construyen la capacidad SwA son el Centro de Garantía Federada Conjunta (JFAC) [22] y la Comunidad de práctica SwA del Departamento de Defensa, que ha funcionado como un foro colegial trimestral en 32 reuniones consecutivas. Ambos están abiertos a otras partes del gobierno de los EE. UU. La Carta del JFAC está disponible en su sitio web. Para desarrollar un conocimiento más amplio de la situación de las familias de herramientas de SwA disponibles comercialmente, el JFAC financió al Instituto de Análisis de Defensa (IDA) para producir el Recurso de Estado de Arte (SOAR). [23] Una innovación reciente en la "ingeniería" de SwA a lo largo del ciclo de vida es acoplar controles NIST 800-53 seleccionados a tareas de ingeniería de modo que los resultados de ingeniería definan el Marco de Gestión de Riesgos (RMF) e impulsen la Autoridad para Operar (ATO). Un paquete que incluye Descripciones de Elementos de Datos (DID), formatos de informe de vulnerabilidad legibles por máquina y una breve aplicación general de las técnicas está disponible en el sitio web del JFAC. Otras innovaciones disruptivas están en proceso.
Proyecto de evaluación de herramientas y métricas de garantía de software (SAMATE)
Según el proyecto NIST SAMATE, [24] la garantía de software es "el conjunto planificado y sistemático de actividades que garantiza que los procesos y productos de software se ajusten a los requisitos, estándares y procedimientos para ayudar a lograr:
- Confiabilidad: No existen vulnerabilidades explotables, ya sea de origen malicioso o no intencional, y
- Ejecución predecible: confianza justificable en que el software, cuando se ejecuta, funciona según lo previsto.
Administración Nacional de Aeronáutica y del Espacio (NASA)
Según la NASA , la garantía de software es un "conjunto planificado y sistemático de actividades que garantizan que los procesos y productos de software se ajusten a los requisitos, estándares y procedimientos. Incluye las disciplinas de garantía de calidad, ingeniería de calidad, verificación y validación, informes de no conformidad y acciones correctivas, garantía de seguridad y garantía de protección y su aplicación durante el ciclo de vida del software". El Estándar de Garantía de Software de la NASA también establece: "La aplicación de estas disciplinas durante el ciclo de vida del desarrollo de un software se denomina garantía de software". [25]
Grupo de Gestión de Objetos (OMG)
Según la OMG , la garantía del software es “la confiabilidad justificable en el cumplimiento de los objetivos comerciales y de seguridad establecidos”. [26]
El Grupo de Interés Especial (SIG) de SwA de OMG, [27] trabaja con los Grupos de Trabajo de Plataforma y Dominio y otras entidades y grupos de la industria del software externos a OMG, para coordinar el establecimiento de un marco común para el análisis e intercambio de información relacionada con la confiabilidad del software, facilitando el desarrollo de una especificación para un Marco de Garantía de Software [28] que:
- Establecer un marco común de propiedades de software que pueda utilizarse para representar todas y cada una de las clases de software, de modo que los proveedores y compradores de software puedan representar sus afirmaciones y argumentos (respectivamente), junto con la evidencia correspondiente, empleando herramientas automatizadas (para abordar la escala)
- Verificar que los productos hayan satisfecho suficientemente estas características antes de su adquisición, de modo que los ingenieros/integradores de sistemas puedan utilizar estos productos para construir (componer) sistemas asegurados más grandes con ellos.
- Permitir que la industria mejore la visibilidad del estado actual de la garantía del software durante el desarrollo de su software.
- Permitir que la industria desarrolle herramientas automatizadas que respalden el marco común.
Foro de Garantía de Software para la Excelencia en el Código (SAFECode)
Según SAFECode, la garantía del software es “la confianza de que el software, el hardware y los servicios están libres de vulnerabilidades intencionales y no intencionales y que el software funciona según lo previsto”. [29]
Véase también
Referencias
- ^ Stavrou, A., Bos, H., Portokalidis, G., y van der Meyden, R. (2017). Garantía de software: una hoja de ruta . 60(1), 71-79: Comunicaciones de la ACM.
{{cite book}}
: Mantenimiento CS1: ubicación ( enlace ) Mantenimiento CS1: varios nombres: lista de autores ( enlace ) - ^ SEI (sin fecha). Estándares de codificación segura CERT. Instituto de Ingeniería de Software.
- ^ ISO (2015). ISO/IEC/IEEE 12207:2015 - Ingeniería de sistemas y software -- Procesos del ciclo de vida del software . ISO.
- ^ IEEE (2019). IEEE 730-2019 - Estándar IEEE para procesos de garantía de calidad de software . IEEE.
- ^ McGraw, Gary (2006). Seguridad del software: creación de seguridad en . Addison-Wesley. pág. 75. ISBN 0-321-35670-5.
- ^ "Garantía de software: ¿Qué es y por qué la necesito?" (PDF) . Departamento de Seguridad Nacional .
- ^ Modelado de amenazas. Microsoft.
- ^ "NICE Cybersecurity Workforce Framework". NIST . Instituto Nacional de Estándares y Tecnología. 13 de noviembre de 2019.
- ^ "Garantía de software". Instituto Nacional de Estándares y Tecnología (NIST).
- ^ "Garantía de software". Instituto de Ingeniería de Software (SEI).
- ^ IEEE (2018). IEEE 1012-2016 - Estándar IEEE para verificación y validación de sistemas y software . IEEE.
- ^ H. Guissouma, A. Lauber, A. Mkadem, E. Sax (2019). "Entorno de prueba virtual para la verificación eficiente de actualizaciones de software para sistemas automotrices ricos en variantes". Conferencia internacional de sistemas IEEE de 2019 (Sys Con ) . IEEE. págs. 1–8. doi :10.1109/SYSCON.2019.8836898. ISBN . 978-1-5386-8396-5.S2CID 199015634 .
{{cite book}}
: CS1 maint: varios nombres: lista de autores ( enlace ) - ^ J. Gao, C. Tao, D. Jie ĺ, S. Luĺ (2019). ¿Qué son las pruebas de software de IA? y por qué . Conferencia internacional IEEE de 2019 sobre ingeniería de sistemas orientados a servicios (SOSE).
{{cite book}}
: CS1 maint: varios nombres: lista de autores ( enlace ) - ^ Gligoric, M., Lopes, CV, & Pasareanu, CS Pruebas y análisis de software en el mundo real . Comunicaciones de la ACM. p. 58(4), 66-75.
{{cite book}}
: CS1 maint: varios nombres: lista de autores ( enlace ) - ^ Kim, J., Kantarcioglu, M. y Thuraisingham, B. (2016). Desafíos de seguridad y privacidad en big data . Journal of Big Data. pág. 3(1), 1-14.
{{cite book}}
: CS1 maint: varios nombres: lista de autores ( enlace ) - ^ Build Security In Home (2 de diciembre de 2011). "Portal web DHS Build Security In". Buildsecurityin.us-cert.gov. Archivado desde el original el 17 de mayo de 2006. Consultado el 8 de mayo de 2013 .
- ^ Build Security In Home (2 de diciembre de 2011). "Build Security In Home". Buildsecurityin.us-cert.gov. Archivado desde el original el 17 de mayo de 2006. Consultado el 8 de mayo de 2013 .
- ^ "Herramientas de garantía de (software) de código abierto". Archivado desde el original el 11 de septiembre de 2014.
- ^ LEY PÚBLICA 112–239—2 DE ENERO DE 2013, LEY DE AUTORIZACIÓN DE DEFENSA NACIONAL PARA EL AÑO FISCAL 2013, sección 933.
- ^ https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=538756 y https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=538771
- ^ y https://www.isc2.org/News-and-Events/Press-Room/Posts/2019/06/17/ISC2-Announces-2019-Information-Security-Leadership-Awards-Government-Winners
- ^ LEY PÚBLICA 113–66—26 DE DICIEMBRE DE 2013, LEY DE AUTORIZACIÓN DE DEFENSA NACIONAL PARA EL AÑO FISCAL 2014, artículo 937
- ^ "Recursos de última generación". IDA . Consultado el 27 de septiembre de 2023 .
- ^ "Página principal - Proyecto SAMATE". Samate.nist.gov . Consultado el 8 de mayo de 2013 .
- ^ NASA-STD-2201-93 Archivado el 2 de julio de 2006 en Wayback Machine "Software Assurance Standard", 10 de noviembre de 1992
- ^ OMG Software Assurance (SwA) Special Interest Group (SIG) http://adm.omg.org/SoftwareAssurance.pdf Archivado el 29 de septiembre de 2011 en Wayback Machine y http://swa.omg.org/docs/softwareassurance.v3.pdf Archivado el 12 de octubre de 2006 en Wayback Machine
- ^ "Omg Swa Sig". Swa.omg.org. 26 de febrero de 2010. Archivado desde el original el 3 de diciembre de 2020. Consultado el 8 de mayo de 2013 .
- ^ Sistema de TI compatible con CISQ omg.org [ enlace inactivo ]
- ^ "Software Assurance: An Overview of Current Industry Best Practices" (PDF) . Archivado desde el original (PDF) el 13 de mayo de 2013 . Consultado el 8 de mayo de 2013 .
Enlaces externos
- Recurso de información del DHS "Build Security In"
- Portal de la comunidad de práctica de DHS SWA
- Proyecto de evaluación de herramientas y métricas de garantía de software (SAMATE) del NIST
- Grupo de gestión de objetos SwA SIG Archivado el 3 de diciembre de 2020 en Wayback Machine .
- Foro de Garantía de Software para la Excelencia en el Código (SAFECode)
- Guía y estándar de garantía de software de la NASA (consulte la garantía de calidad en el estándar IEEE 610.12 Glosario de terminología de ingeniería de software).
- Informe sobre el estado del arte en materia de garantía de seguridad del software (SOAR)