La garantía de software ( SwA ) es un proceso crítico en el desarrollo de software que asegura la confiabilidad, la seguridad y la protección de los productos de software. [ 1 ] Incluye actividades como el análisis de requisitos , las revisiones de diseño, las inspecciones de código, las pruebas y la verificación formal . Un componente crucial de la garantía de software son las prácticas de codificación segura , que siguen estándares y mejores prácticas aceptadas por la industria, como las descritas por el Software Engineering Institute (SEI) en sus Estándares de Codificación Segura (SCS) de CERT. [ 2 ]
Otro aspecto vital de la garantía de software es la prueba , que debe realizarse en varias etapas del proceso de desarrollo de software y puede 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 asegurar que los productos de software satisfagan las necesidades y expectativas de las partes interesadas. [ 4 ] La garantía de calidad del software asegura el cumplimiento de los estándares pertinentes.
La garantía de software tiene como objetivo asegurar que el software esté libre de vulnerabilidades y funcione según lo previsto, cumpliendo con todos los requisitos y estándares que rigen el proceso de desarrollo de software. [3] Además, la garantía de software busca producir sistemas intensivos en software que sean más seguros. Para lograr esto, se requiere un análisis preventivo dinámico y estático de vulnerabilidades potenciales, y se recomienda una comprensión holística del software 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 simplemente revisando el código. [ 5 ]
Siguiendo los estándares y las mejores prácticas aceptadas por la industria, incorporando prácticas de prueba y gestión, y realizando análisis de riesgos arquitectónicos, la garantía de calidad del software puede minimizar el riesgo de fallos del sistema y brechas de seguridad.
Iniciativas
Las iniciativas de aseguramiento del 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 en el software pueden tener graves consecuencias.
Existen varios tipos de iniciativas de garantía de software, entre las que se incluyen:
- Certificación y acreditación: Estos programas establecen estándares y directrices para el desarrollo de software y verifican que los productos de software cumplan con dichos estándares. La certificación y la acreditación pueden ayudar a garantizar que los productos de software sean fiables, seguros y cumplan con las regulaciones y los estándares de la industria. [ 6 ]
- Formación y capacitación: Estas iniciativas proporcionan a los desarrolladores de software los conocimientos y las habilidades que necesitan para crear software seguro y de alta calidad. La formación y la capacitación pueden incluir cursos sobre pruebas de software , prácticas de codificación segura 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 del 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 fuzzing, entre otras técnicas. [ 8 ]
- Modelado de amenazas y evaluación de riesgos: Estas iniciativas evalúan los riesgos y amenazas potenciales para un sistema de software e identifican estrategias para mitigarlos. 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 ataques y otras amenazas. [21]
Objetivo
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, garantizar la fiabilidad, la seguridad y la protección de los productos de software es fundamental. Sin las pruebas y verificaciones adecuadas , el software puede contener defectos y vulnerabilidades que pueden provocar fallos del sistema, brechas 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 sean intencionadas o insertadas accidentalmente en cualquier momento de su ciclo de vida, y que funciona según lo previsto" [22] . Las organizaciones pueden reducir el riesgo de costosos fallos del sistema, filtraciones de datos y otros resultados negativos garantizando la garantía de software.
Además de los riesgos potenciales asociados con defectos y vulnerabilidades de software, existen requisitos legales y normativos relacionados con la garantía de calidad del software. El incumplimiento de estas normativas puede acarrear sanciones legales y económicas. Por ejemplo, las organizaciones que desarrollan software para determinados sectores pueden estar sujetas a regulaciones que les exigen garantizar la seguridad de sus productos.
Muchas funciones críticas, como la defensa nacional, la banca, la sanidad, 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 sustentan estas actividades fallan, podrían verse gravemente interrumpidos. Por lo tanto, es fundamental que las organizaciones implementen técnicas y herramientas de prueba y verificación de software para reducir el riesgo de fallos del sistema y brechas de seguridad.
Ejecución
La garantía de software se lleva a cabo mediante una serie de actividades que buscan asegurar la confiabilidad, la seguridad y la protección de los productos de software. Estas actividades incluyen el análisis de requisitos, las revisiones de diseño, las inspecciones de código, las pruebas y la 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 norma o reglamento pertinente que deba cumplirse. [ 11 ]
- Las revisiones de diseño implican evaluar el diseño del software para asegurar 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, la seguridad o la protección del software. [24]
- Las inspecciones de código implican revisar el código para asegurar que cumpla con los estándares y las mejores prácticas aceptadas en la industria. Esto incluye verificar la calidad, la legibilidad y la mantenibilidad 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 fiabilidad, seguridad o protección. 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 según lo previsto y no contiene defectos ni vulnerabilidades. Esto incluye técnicas como la verificació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 corregir defectos y vulnerabilidades en el código del 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 garantía de software para detectar problemas. Gracias a su capacidad para analizar grandes volúmenes de datos, el aprendizaje automático puede identificar patrones y anomalías que podrían pasar desapercibidos para los humanos. En última instancia, el uso del aprendizaje automático puede 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 fue diseñado. Este tipo de pruebas implica ejecutar el software y probar sus características y funcionalidades para asegurar que funcione según lo previsto. [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 reales para garantizar que el software pueda soportar la carga y funcionar correctamente 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 diversas técnicas para intentar vulnerar la seguridad del software, como las pruebas de penetración y el escaneo de vulnerabilidades. [3]
- Además de las pruebas, se utilizan técnicas de verificación para asegurar 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 verificar que el código cumpla con los estándares y las mejores prácticas aceptadas en la industria. Esto incluye comprobar la calidad, la legibilidad y la mantenibilidad del código, así como identificar 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 según lo previsto y no contiene defectos ni vulnerabilidades. Esto incluye técnicas como la verificación de modelos, la demostración de teoremas y el análisis estático. [1]
- El análisis estático consiste en 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 corregir defectos y vulnerabilidades en el código del software. Existen varios tipos de herramientas de prueba y verificación, entre las que se incluyen:
- La inteligencia artificial (IA) se utiliza cada vez más en la garantía de software para identificar y corregir defectos y vulnerabilidades en el código. Técnicas de IA como el aprendizaje automático y el procesamiento del lenguaje natural pueden utilizarse 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 podrían 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 memoria y la seguridad. [25]
- Herramientas de pruebas de fuzzing : Estas herramientas generan entradas aleatorias a una aplicación de software para probar su resistencia a datos inesperados o mal formados. Las herramientas de pruebas de fuzzing se pueden utilizar para detectar problemas relacionados con la validación de entradas, 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 atacantes. Las herramientas de pruebas de penetración se pueden utilizar para detectar problemas relacionados con la seguridad, como la inyección SQL, el cross-site scripting y los desbordamientos de búfer. [ 15 ]
- Herramientas de gestión de pruebas : Estas herramientas se utilizan para gestionar el proceso de pruebas de software, incluyendo la creación, ejecución e informe de casos de prueba. Las herramientas de gestión de pruebas pueden ayudar a garantizar que se realicen todas las pruebas requeridas y que se registren y resuelvan los defectos. [24]
Definiciones alternativas
Departamento de Seguridad Nacional de los Estados Unidos (DHS)
Según el DHS , la garantía de software aborda lo siguiente:
- Fiabilidad: no existen vulnerabilidades explotables, ya sean insertadas de forma maliciosa o involuntaria;
- Ejecución predecible: confianza justificada en que el software, al ejecutarse, funciona según lo previsto;
- Conformidad: conjunto planificado y sistemático de actividades multidisciplinarias que garantizan que los procesos y productos de software cumplan con los requisitos, estándares y procedimientos.
Disciplinas que contribuyen a la adquisición de software, 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, garantía de la información , pruebas y evaluación, seguridad, 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 nacional público-privado para promulgar mejores prácticas y metodologías que promuevan la integridad, la seguridad y la confiabilidad en el desarrollo de código de software, incluyendo procesos y procedimientos que disminuyan las posibilidades de código erróneo, código malicioso o puertas traseras 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 DoD , la SwA se define como "el nivel de confianza de que el software funciona solo según lo previsto y está libre de vulnerabilidades, ya sean intencionadas o no, diseñadas o insertadas como parte del software, a lo largo de su ciclo de vida". [ 19 ] El DoD está desarrollando la SwA como una práctica sólida de ingeniería de sistemas, como lo demuestran dos publicaciones recientes financiadas por el JFAC, cuyo desarrollo fue liderado por el Software Engineering Institute (SEI) y profesionales expertos de los Servicios Militares y la NSA. La Guía de SwA para el Gerente de Programa muestra cómo se debe planificar, dotar de recursos y gestionar la SwA, mientras que la Guía de SwA para el Desarrollador recomienda prácticas técnicas adaptables a lo largo del ciclo de vida. [ 20 ] Ambos documentos son los primeros de su tipo y han sido premiados. [ 21 ] Las dos organizaciones a escala empresarial del DoD que desarrollan capacidades de SwA son el Joint Federated Assurance Center (JFAC) [ 22 ] y la Comunidad de Práctica de SwA del DoD, que ha funcionado como un foro colegiado trimestral durante 32 reuniones consecutivas. Ambas son abiertas. a otras partes del Gobierno de los EE. UU. La Carta de JFAC está disponible en su sitio web. Para desarrollar una conciencia situacional más amplia de las familias de herramientas SwA disponibles comercialmente, JFAC financió al Instituto de Análisis de Defensa (IDA) para producir el Recurso de Estado del Arte (SOAR). [ 23 ] Una innovación reciente en la "ingeniería en" 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) y conduzcan la Autorización 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 descripción general de la aplicación de las técnicas está disponible en el sitio web de JFAC. Otras innovaciones disruptivas están en proceso.
Proyecto de Métricas de Garantía de Software y Evaluación de Herramientas (SAMATE)
Según el proyecto NIST SAMATE, [ 24 ] la garantía de software es "el conjunto planificado y sistemático de actividades que asegura 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 sean de origen malicioso o no intencional, y
- Ejecución predecible: confianza justificada en que el software, al ejecutarse, 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 de actividades planificadas y sistemáticas que aseguran que los procesos y productos de software cumplan con 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, así como 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 software se denomina garantía de software». [ 25 ]
Grupo de Gestión de Objetos (OMG)
Según la OMG , la garantía de software es “una 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 y el 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 permitirá:
- Establecer un marco común de propiedades de software que pueda utilizarse para representar cualquier clase de software, de modo que los proveedores y compradores de software puedan presentar sus afirmaciones y argumentos (respectivamente), junto con la evidencia correspondiente, empleando herramientas automatizadas (para abordar la escala).
- Verifique que los productos hayan cumplido suficientemente con estas características antes de su adquisición, de modo que los ingenieros/integradores de sistemas puedan utilizar estos productos para construir (componer) sistemas más grandes y seguros con ellos.
- Permitir que la industria mejore la visibilidad del estado actual de la garantía de software durante el desarrollo de su software.
- Capacitar a la industria para que 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 de 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., & van der Meyden, R. (2017). Software assurance: a roadmap . 60(1), 71-79: Communications of the ACM.
{{cite book}}: CS1 maint: ubicación ( enlace ) CS1 maint: nombres múltiples: lista de autores ( enlace ) - ↑ SEI (s.f.). 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 - Norma IEEE para procesos de garantía de calidad de software . IEEE.
- ↑ McGraw, Gary (2006). Seguridad del software: Construyendo seguridad en . Addison-Wesley. p. 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.
- ↑ "Marco de trabajo de ciberseguridad de NICE" . NIST . Instituto Nacional de Estándares y Tecnología. 13 de noviembre de 2019.
- ↑ "Garantía de software" . NIST . Instituto Nacional de Estándares y Tecnología (NIST). 30 de junio de 2016.
- ↑ "Garantía de Software" . Instituto de Ingeniería de Software (SEI).
- ↑ IEEE (2018). IEEE 1012-2016 - Norma IEEE para la 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 con múltiples variantes». 2019 IEEE International Systems Conference (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é es la prueba 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 . Communications of the ACM. p. 58(4), 66-75.
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Kim, J., Kantarcioglu, M., & Thuraisingham, B. (2016). Desafíos de seguridad y privacidad en big data . Journal of Big Data. p. 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 del 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 del 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 del 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 vanguardia" . 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 "Estándar de garantía de software", 10 de noviembre de 1992
- ↑ Grupo de Interés Especial (SIG) de Garantía de Software (SwA) de OMG 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 del original el 3 de diciembre de 2020. Recuperado el 8 de mayo de 2013 .
- ↑ Sistema informático compatible con CISQ omg.org
- ↑ "Garantía de software: una visión general de las mejores prácticas actuales de la industria" (PDF) . Archivado del original (PDF) el 13 de mayo de 2013. Consultado el 8 de mayo de 2013 .
Enlaces externos
- Recurso informativo del DHS "Integre la seguridad en"
- Portal de la comunidad de práctica del DHS SwA
- Proyecto SAMATE (NIST Software Assurance Metrics and Tool Evaluation)
- 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 (véase garantía de calidad en el glosario de terminología de ingeniería de software del estándar IEEE 610.12).
- Informe sobre el estado del arte en la garantía de seguridad del software (SOAR)
- Seguro de calidad
- Calidad del software