Critical Security Update

To help protect your systems, customers using NI driver software 2026 Q2 or earlier should visit ni.com/ni-pal-update and follow the recommended actions.

NI LabVIEW y desarrollo seguro en un SDLC: un marco de trabajo

Información general

​​La seguridad en una aplicación de software requiere una metodología formal para incorporar una mentalidad segura a lo largo del ciclo de vida del desarrollo. Este ciclo de vida del desarrollo de software (SDLC) comienza antes de que comience el desarrollo con la preparación del equipo, la configuración de protecciones para el desarrollo del software, el seguimiento de las mejores prácticas de seguridad en el diseño del software y el soporte del software después del lanzamiento. Este documento proporciona recomendaciones para que los equipos de NI LabVIEW adopten un SDLC formal que incluya un marco de desarrollo de software seguro en sus proyectos.

Contenido

​​Introducción: Seguridad de LabVIEW y el SDLC

​Un ciclo de vida de desarrollo de software (SDLC) es una metodología formal o informal para diseñar, crear y mantener software (incluido el código integrado en hardware).

​Cada equipo de software ya tiene un proceso de desarrollo, ya esté o no formalmente documentado. El desarrollo seguro intencional añade actividades a lo largo de ese proceso para reducir vulnerabilidades, mejorar la mantenibilidad y reducir el costo de solucionar problemas de seguridad. Las vulnerabilidades incluyen no solo errores causados por fallos de codificación, sino también debilidades causadas por configuraciones de seguridad incorrectas, suposiciones de confianza erróneas y análisis de riesgos desactualizados.

​Cuanto antes se aborde la seguridad en el SDLC, menos esfuerzo y costo se requiere en última instancia para lograr el mismo nivel de seguridad. Este principio, conocido como "shifting left" (desplazamiento a la izquierda), es fundamental independientemente del modelo SDLC. El principio de desplazamiento a la izquierda es cierto para cualquier entorno de programación, incluido LabVIEW, un entorno de programación seguro que se puede utilizar para desarrollar aplicaciones seguras. Gran parte de la seguridad de la aplicación completada depende del SDLC adoptado por el equipo de desarrollo.

​Una nota importante sobre el SDLC y el cumplimiento: La mayoría de los programas regulatorios, como la Ley Europea de Resiliencia Cibernética (CRA), la Certificación del Modelo de Madurez de Ciberseguridad de EE. UU. (CMMC), la Certificación de Ciberseguridad de Defensa del Reino Unido (DCC) y otros, requieren evidencia de que un sistema fue diseñado siguiendo prácticas seguras como las de este SDLC, pero estos programas requieren mucho más que solo un SDLC. Para más detalles, consulte la documentación de esos programas. 

​Metodología

​Esta guía se basa principalmente en los principios y prácticas definidos en NIST Special Publication 800-218, Secure Software Development Framework (SSDF), que proporciona un marco agnóstico a la tecnología para desarrollar software seguro y es ampliamente reconocido por apoyar los requisitos de seguridad de software del gobierno de EE. UU. Cada práctica de SSDF ha sido interpretada y aplicada específicamente a las necesidades de los equipos de desarrollo de LabVIEW, con énfasis en la implementación práctica en entornos de prueba, medición, automatización e ingeniería.  

​Las recomendaciones presentadas en este documento también se compararon con otros marcos de desarrollo seguro establecidos y mejores prácticas de la industria, incluyendo la JKI Security Suite y el Ciclo de Vida de Desarrollo de Seguridad de Microsoft (SDL), para garantizar la coherencia con enfoques probados de seguridad de software, gestión de riesgos y protección de la cadena de suministro de software. El objetivo es proporcionar a las organizaciones de LabVIEW una hoja de ruta práctica para integrar la ciberseguridad en sus procesos de desarrollo, generando la evidencia y trazabilidad cada vez más requeridas por clientes, reguladores y programas de adquisición gubernamentales.

​Enfoque general

​El proceso descrito en NIST 800-218 cubre estas cuatro áreas del desarrollo de software:

  1. ​Preparar la organización (PO): las organizaciones deben asegurarse de que su personal, procesos y tecnología estén preparados para realizar un desarrollo de software seguro a nivel de organización. Muchas organizaciones encontrarán que algunas prácticas de PO también son aplicables a subconjuntos de su desarrollo de software, como grupos de desarrollo individuales o proyectos.
  2. ​Proteger el software (PS): las organizaciones deben proteger todos los componentes de su software contra manipulaciones y accesos no autorizados.
  3. ​Producir software bien asegurado (PW): las organizaciones deben producir software bien asegurado con mínimas vulnerabilidades de seguridad en sus lanzamientos.
  4. ​Responder a vulnerabilidades (RV): las organizaciones deben identificar vulnerabilidades residuales en sus lanzamientos de software y responder de manera apropiada para abordar esas vulnerabilidades y prevenir que ocurran vulnerabilidades similares en el futuro.

​En este artículo, utilizamos estos temas para guiar el desarrollo de un SSDF de LabVIEW.

​Preparar la organización

​Antes de comenzar el desarrollo, es importante tomar medidas para ayudar a su equipo a adoptar principios de desarrollo seguro, completar la capacitación necesaria y establecer los procesos y herramientas que respaldarán el desarrollo seguro. Esta fase incluye tomarse el tiempo para lograr los siguientes objetivos:

  • ​Asegurarse de que la organización tenga definidos y documentados requisitos de seguridad específicos.
  • ​Capacitar a los empleados en cada puesto para que comprendan esos requisitos.
  • ​Definir los procesos que se utilizarán para desarrollar software seguro.
  • ​Derivar los requisitos de seguridad a cualquier subcontratista o componente de terceros (incluido el de código abierto) que proporcione código.
  • ​Implementar herramientas para automatizar verificaciones de seguridad y calidad.
  • ​Proteger el código de compromisos externos.

Para equipos de LabVIEW

​Estos requisitos son genéricos para cualquier equipo de desarrollo de software, pero hay algunos pasos a seguir para adaptarlos a los equipos de pruebas y a los equipos de LabVIEW.

​Relaciones del equipo de seguridad

​Muchos equipos de prueba están aislados del equipo de seguridad de su empresa. Coordínese con ellos para construir una relación de confianza, de modo que sepan que su equipo se toma la seguridad en serio. Reúnase con su equipo de seguridad para comprender los requisitos para el código desarrollado. Muéstreles sus proyectos y sus áreas de prueba, y guíelos a través de sus procesos. Es útil que entiendan cómo opera un laboratorio de pruebas y sepan qué limitaciones enfrenta. Sus desafíos serán diferentes de los de otros sistemas de TI, y ayuda que el equipo de seguridad entienda esas diferencias.

​También es importante que entienda las preocupaciones del equipo de seguridad. Al comprender qué programas deben cumplir, podrá rastrear los mandatos de seguridad hasta los requisitos y podrá cumplir mejor la intención del programa original.

​Seguimiento y documentación de requisitos

​El seguimiento de requisitos es una parte importante de preparar a su equipo para entregar código seguro. Más que solo almacenar requisitos, un buen proceso de seguimiento proporciona trazabilidad de esos requisitos. Su equipo debería poder rastrear un requisito a lo largo del ciclo de vida:

​Definición de requisitos → Diseño → Implementación → Prueba → Remediación de defectos → Lanzamiento

​Esta trazabilidad se convierte en evidencia durante auditorías de clientes, declaraciones de seguridad (como CRA), evaluaciones (como CMMC) o revisiones de seguridad de proveedores.

​GitHub Issues + Projects + Milestones es el enfoque de seguimiento de requisitos más común para la mayoría de los equipos más pequeños. Otras opciones de seguimiento incluyen GitLab (con niveles gratuitos y de pago), Azure DevOps, JIRA y otras herramientas profesionales de desarrollo de software. Estas herramientas le permiten crear incidencias y hacer un seguimiento de ellas hasta su resolución.

​Dentro de su herramienta elegida, rastree sistemáticamente los requisitos de seguridad. Cada requisito debe cumplir con los siguientes criterios:

  • Identificado de forma única con un número de identificación, con un requisito por ID
  • ​Clasificado por tipo, como error funcional, vulnerabilidad de seguridad, problema de rendimiento
  • ​Asignado un nivel de gravedad que refleje su impacto, como crítico, alto, medio o bajo
  • ​Rastreado desde el descubrimiento hasta la resolución

​Después de identificar una herramienta de seguimiento de requisitos, documente su proceso para incluir el uso de estas herramientas en su desarrollo. Utilice el proceso de seguimiento de requisitos y seguimiento de incidencias a lo largo del ciclo de vida del sistema. Su proceso puede incluir los siguientes pasos:

  • Asignar un identificador único a cada requisito; no combinar los requisitos.
  • ​Hacer referencia directamente a los ID de requisitos en los documentos de diseño.
  • ​Identificar qué componentes en un diagrama de arquitectura satisfacen cada requisito.
  • ​Hacer referencia a los ID de requisitos en los comentarios de código, marcadores, etiquetas y documentación.
  • ​Capturar los ID de requisitos en las confirmaciones del repositorio.
  • ​Hacer referencia a los ID de requisitos en cada solicitud de incorporación o fusión.
  • ​Vincular los ID de los requisitos a las pruebas unitarias y asegurar que todos los requisitos estén probados.
  • ​Enumerar los ID de los requisitos en los resultados de las pruebas.
  • ​Documentar los ID de requisitos en las revisiones de seguridad y código.
  • ​Identificar los ID de requisitos implementados en la documentación de la versión.
  • ​Vincular las vulnerabilidades a los ID de requisitos afectados, cuando se descubran.

​Diseño para validación de seguridad

​Planifique modularizar el código. Este paso es especialmente útil en LabVIEW, ya que puede probar módulos individuales. Mientras planifica su arquitectura modular, planee desarrollar pruebas unitarias también. Estas mejoran la calidad de su código y proporcionan una forma más rápida de validar el código después de realizar actualizaciones, incluso después de que el sistema haya sido implementado.  

​Obtenga más información sobre el uso del NI Unit Test Framework

​Las herramientas de prueba de terceros proporcionan valor adicional; por ejemplo, los productos Caraya y LUnit de JKI amplían las pruebas de software para los equipos de LabVIEW.

​Terceros y subcontratistas

​Definir un proceso para verificar y aprobar trabajos subcontratados, software de terceros y componentes de código abierto. Su proceso debe incluir la verificación de bases de datos públicas como Common Vulnerabilities and Exposures (CVE) para identificar vulnerabilidades conocidas en los componentes que utiliza.

​Si utiliza componentes de código abierto, es responsable de escanear vulnerabilidades antes de usar el código en su aplicación.

​Capacitación basada en roles

​Definir roles específicos en su equipo, incluidos los roles específicos de seguridad. Identificar las responsabilidades y el acceso de cada uno de estos roles. Como mínimo, defina roles con acceso privilegiado (administradores) separados de los roles de usuario (desarrolladores y operadores).

​Crear capacitación de seguridad aplicable a esos roles. Asignar la capacitación a los miembros del equipo y rastrear la finalización de la capacitación. Esos registros se utilizarán como evidencia en una revisión de certificación.

​Considerar utilizar la capacitación de seguridad de NI disponible en línea: Curso de consideraciones de seguridad para integraciones de sistemas de pruebas.

​Los programas de certificación de la industria como ISC2 proporcionan certificaciones de nivel introductorio de bajo costo. El valor de estos programas para un equipo de pruebas es proporcionar un lenguaje común para comunicarse con los equipos de seguridad.

​Apoyo del liderazgo

​Después de definir su Ciclo de Vida de Desarrollo de Software (SDLC), preséntelo a la dirección de la empresa y obtenga su apoyo formal. Debería ser aprobado por al menos el nivel que aprueba el presupuesto de seguridad, para mostrar su compromiso con el programa.

​Gestión de datos y etiquetas

​Como organización, identifique los tipos de datos que puede encontrar y cree un sistema de etiquetado. Debería considerar los siguientes tipos de datos:

  • ​Datos clasificados o sensibles, si su organización está calificada para manejar ese nivel de datos.
  • ​Información no clasificada controlada (CUI): esta información no está clasificada, pero está obligada por regulación a ser protegida.
  • ​Información técnica ITAR: esta información requiere un manejo especial para garantizar que no se exporte la información sin una licencia.
  • ​Datos de las regulaciones de administración de exportaciones (EAR), información controlada para la exportación, NOFORN y otra información restringida a la exportación: esta información requiere controles para prevenir el acceso por parte de personas extranjeras no autorizadas de acuerdo con las regulaciones de exportación aplicables.
  • ​Información protegida por la empresa: esta información incluye información propietaria o confidencial que podría perjudicar a la empresa si se hace pública.
  • ​Información de identificación personal (IIP): estos datos están protegidos en algunos países y territorios y deben protegerse de maneras específicas.
  • ​Datos públicos: puede tener datos que estén disponibles libremente para el público.

​Tener un sistema claro de gestión y etiquetado de datos le permitirá proteger los datos de manera adecuada, aplicando las restricciones correctas a cada clasificación de datos. Definir esto como una organización antes de comenzar el desarrollo de su sistema ahorrará tiempo al aplicar los controles correctos a las áreas de riesgo adecuadas. Mapear a los sistemas de etiquetado corporativos y de TI existentes simplificará cómo los sistemas comparten datos entre sí.

​Herramientas de desarrollo y seguridad

​Identifique las versiones y configuraciones de software y controladores que estandarizará para fines de seguridad. Para LabVIEW, identifique la versión que utilizará para el desarrollo. Establezca una configuración segura para sus instalaciones. Puede seguir la Guía de configuración segura de LabVIEW. Puede encontrar otras guías de configuración segura en ni.com/security.

​Para la auditabilidad y para configurar rápidamente nuevos sistemas, automatice cómo se configuran las máquinas de desarrollo y de compilación. Establezca una instalación base y cree una imagen de dicha instalación.

​Establezca herramientas para usar en las comprobaciones de seguridad durante su desarrollo. Necesitará una herramienta de análisis de seguridad de aplicaciones estáticas (SAST) para analizar su código fuente sin ejecutar el programa y encontrar posibles vulnerabilidades de seguridad. Para el código gráfico de LabVIEW, recomendamos la JKI Security Suite, diseñada específicamente para proporcionar análisis estático del código de LabVIEW. Alternativamente, puede realizar un análisis estático de código manual buscando problemas de seguridad.

​Las herramientas SAST son una herramienta de seguridad importante para analizar código en busca de vulnerabilidades. Las herramientas de pruebas de seguridad de aplicaciones dinámicas (DAST) también son importantes y se utilizan para escanear el código en ejecución durante las pruebas. El análisis de composición de software (SCA) identifica el uso de bibliotecas de código abierto, paquetes de terceros y componentes de software y escanea en busca de vulnerabilidades conocidas y problemas de licencia con esos componentes.

​Hay muchos otros tipos de herramientas utilizadas para escanear código en busca de problemas de seguridad. La herramienta adecuada para su proyecto depende de su conjunto de herramientas, la naturaleza de su proyecto y los tipos de código que utiliza. Durante esta fase del ciclo de vida de desarrollo seguro, es importante investigar e identificar las herramientas que utilizará su equipo.

​Repositorio de Código

​El desarrollo seguro requiere que el código fuente se almacene, con múltiples versiones para que los equipos puedan volver a versiones anteriores en caso de que algo falle en el código. Como parte de la preparación de la organización para realizar desarrollo seguro, establezca un repositorio de código que almacene código, extraiga código para el desarrollo y mantenga el control de versiones del código fuente.

​La ramificación en el repositorio de código facilita el desarrollo paralelo y las versiones estables. Defina los tipos de rama que utilizará en su organización. Estos tipos de rama son estándar, pero pueden adaptarse a sus necesidades:

  • ​Rama de producción: la rama principal estable con código listo para producción.
  • ​Rama de lanzamiento: gestiona versiones de lanzamiento específicas, permitiendo parches y correcciones urgentes en versiones antiguas mientras el nuevo desarrollo continúa en la rama principal.
  • ​Rama de funciones: rama temporal utilizada para desarrollar nuevas características, corregir errores o realizar experimentación.
  • ​Rama de desarrollo: rama para integrar nuevas características antes de que se fusionen en la rama de producción. Esta rama puede incluir características en desarrollo y es un punto de integración para múltiples ramas de características.

​Utilice un repositorio que proporcione controles de seguridad adecuados. Asegúrese de que el repositorio mantenga un historial completo de archivos de commit y cambios para la trazabilidad.

​Seguridad de las computadoras de desarrollo

​Asegúrese de que las computadoras utilizadas para desarrollar código sigan las políticas básicas de ciberseguridad. Estos controles básicos incluyen protección con contraseña, protección contra código malicioso y otra higiene cibernética básica. Como ejemplo de estos controles básicos, consulte https://www.acquisition.gov/far/52.204-21.

​Para la trazabilidad, capture la configuración de la computadora utilizada para desarrollar el sistema. Los ajustes de configuración para capturar incluyen los siguientes ejemplos:

  • Versiones y arquitectura del sistema operativo (por ejemplo, Windows 10 x64)
  • ​Versión de LabVIEW (por ejemplo, LabVIEW 2023 Q3) y Bitness (32 bits/64 bits)
  • ​Versiones de controladores NI (por ejemplo, NI-DAQmx 23.8, NI-VISA 23.5)
  • ​Versiones específicas de módulos de complementos de NI (por ejemplo, LabVIEW Real-Time Module o LabVIEW FPGA Module)
  • ​Configuraciones de fuentes de NI Package Manager y versiones clave de paquetes
  • ​Versión de NI VI Package Manager (VIPM) y archivo VIPC (que enumera los paquetes y versiones VI requeridos)
  • ​Versiones de controlador de terceros requeridas
  • ​Versiones del motor de tiempo de ejecución requeridas para la implementación

​Evidencia de seguridad

​La mayoría de los programas de seguridad requerirán evidencia de que su equipo siguió las prácticas establecidas como parte del SSDF. Establezca un repositorio para rastrear la evidencia y manténgalo actualizado durante el desarrollo y la implementación del sistema. El sistema debe rastrear los siguientes elementos:

  • Registros de capacitación
  • ​Modelos de amenazas
  • ​Evaluaciones de riesgos
  • ​Registros de revisión de código
  • ​Resultados de las pruebas
  • ​SBOM
  • ​Resultados del escaneo de seguridad
  • ​Aprobaciones de lanzamiento
  • ​Registros de parches

​Muchos equipos realizan estas actividades de seguridad pero no pueden demostrar que las hicieron. Los equipos de cumplimiento querrán ver ambas cosas: que su equipo tiene procesos establecidos y que los sigue. Tener estos documentos en un solo lugar simplificará enormemente las auditorías y las revisiones de cumplimiento.

​Proteger el software

​Cuando la organización ha estado preparada para desarrollar código de forma segura, la siguiente tarea es proteger el software. Este paso asegura que el equipo mantenga el código seguro durante el desarrollo y el lanzamiento.

​Para equipos de LabVIEW

​Proteger el software durante el proceso de desarrollo es fundamental para cualquier software, independientemente del lenguaje de programación utilizado. A medida que los equipos de LabVIEW adoptan herramientas de flujo de trabajo profesionales para el desarrollo de software, esos equipos también deben adoptar procesos y herramientas de desarrollo seguros.

​Repositorios de código seguro

​Utilice los repositorios de código seguros identificados en la fase anterior para almacenar y gestionar su código. Un buen repositorio hace más que gestionar el código fuente. También contiene los requisitos, la documentación, los scripts de compilación, los artefactos de prueba y los historiales de lanzamiento. Debido a que el repositorio contiene tanto código y soporte, es importante usar un repositorio seguro; si el repositorio se ve comprometido, su software se ve comprometido.

​Dentro del repositorio, su rama principal es un activo crítico que debe estar protegido. Su equipo debe definir y seguir políticas para proteger el código. Estas políticas pueden incluir los siguientes ejemplos:

  • Reglas de protección de rama
  • ​Revisiones de solicitud de extracción
  • ​Requisitos de aprobación
  • ​Pruebas automatizadas antes de la fusión
  • ​Commits directos restringidos

​El repositorio también debe proporcionar trazabilidad desde la generación de un requisito, a través del desarrollo y hasta la publicación del producto. Algunos repositorios permiten la firma de commits (por ejemplo, en Git).

​El repositorio debe proporcionar un rastro de auditoría manteniendo un registro de los cambios de software. ¿Qué cambió, quién lo cambió, por qué se cambió, quién lo aprobó y cuándo se lanzó? Además, las imágenes de lanzamiento deben guardarse en un archivo seguro, para que el código pueda recuperarse incluso si el repositorio se ve comprometido.

​Lista de materiales de software (SBOM)

​Un SBOM proporciona una lista de software y componentes utilizados en el desarrollo del código. Generar un SBOM como parte del proceso de compilación asegura que tiene un registro de qué componentes se utilizan en el código, agilizando el proceso para identificar y solucionar vulnerabilidades.

​A partir de LabVIEW 2026 Q3, puede generar SBOM como parte del proceso de compilación de la aplicación. Para más información, consulte Generación de una lista de materiales de software para una aplicación independiente.

​Firma de código

​La firma de código proporciona un mecanismo para que los usuarios verifiquen que el software fue producido por una organización conocida, no ha sido modificado desde su lanzamiento y fue aprobado para su distribución. En una aplicación de LabVIEW, la firma de código debe aplicarse a ejecutables, instaladores, paquetes de implementación, DLL, controladores y paquetes de actualización.

​Puede firmar su aplicación durante el proceso de compilación siguiendo estas instrucciones. También puede firmar software usando SignTool.exe de Microsoft, que es lo mismo que firmar cualquier aplicación o archivo.

​Gestión de secretos

​Las aplicaciones frecuentemente requieren secretos como contraseñas, claves API, certificados, tokens, claves de cifrado, credenciales de base de datos y credenciales de cuenta de servicio. Estos secretos proporcionan acceso a sistemas y datos y deben protegerse durante todo el ciclo de vida del software.

​Nunca incluya contraseñas, claves API, certificados o claves de cifrado directamente en el código fuente, archivos de configuración, scripts de compilación o utilidades de prueba. Los secretos codificados en duro son difíciles de rotar, pueden copiarse en repositorios y pueden exponerse a través de revisiones de código fuente, copias de seguridad o ingeniería inversa de aplicaciones implementadas.

​Almacene secretos utilizando un sistema operativo seguro o almacenamiento protegido por hardware siempre que sea posible. Los ejemplos de almacenamiento seguro o protegido incluyen las siguientes opciones:

  • ​Administrador de credenciales en Windows
  • Microsoft SecretStore
  • ​Microsoft CryptProtectData (DPAPI)
  • ​Módulos de plataforma de confianza (TPM)
  • ​Módulos de seguridad de hardware (HSM)
  • ​Servicios de gestión de secretos en la nube seguros

​Aplique el principio de mínimo privilegio al otorgar acceso a secretos. Solo los usuarios, sistemas y servicios que requieran acceso a un secreto deben poder recuperarlo. Las credenciales administrativas deben separarse de las credenciales de usuario, y se deben evitar las cuentas compartidas siempre que sea posible.

​Las contraseñas, certificados, claves de API y claves de cifrado deben reemplazarse periódicamente de acuerdo con la política de la organización. Establezca un proceso que defina cómo se generan los secretos, dónde se almacenan, quién puede acceder a los secretos y cómo se revocan los secretos comprometidos.

​Los sistemas de prueba utilizan frecuentemente conexiones de red reales, bases de datos, servicios en la nube e instrumentos. Los equipos de prueba necesitan acceso a estos sistemas durante las pruebas. Utilice credenciales de prueba dedicadas en lugar de credenciales de producción siempre que sea posible. Los entornos de prueba separados reducen el riesgo de exponer los sistemas de producción durante las actividades de desarrollo y validación.

​Producir software bien protegido

​Esta fase se centra en diseñar, implementar, probar y validar el software de forma segura. Para realizar esta tarea de manera efectiva, un equipo debe evaluar los riesgos y los requisitos del uso previsto del software y diseñar para esos riesgos. Las mejores prácticas incluyen la reutilización de componentes seguros conocidos cuando sea posible, las pruebas durante el desarrollo y el escaneo del código de desarrollo en busca de vulnerabilidades. Los equipos planifican el uso seguro, incluido el uso de configuraciones seguras de forma predeterminada.

​Para equipos de LabVIEW

​Las aplicaciones de prueba y medición enfrentan desafíos de seguridad diferentes a las de las aplicaciones de software generales. Los equipos de LabVIEW están posicionados para comprender esos desafíos y desarrollar software que protegerá contra ataques centrados en sus aplicaciones. LabVIEW proporciona una serie de protecciones de seguridad inherentes, pero los equipos deben considerar los posibles ataques y preparar una defensa contra ellos.

​Modelado de amenazas y evaluación de riesgos

​OWASP (Open Worldwide Application Security Project) es una fundación sin fines de lucro que proporciona herramientas, guías y estándares gratuitos para ayudar a las personas a construir software seguro. OWASP proporciona una guía impulsada por la comunidad para el modelado de amenazas; su modelo proporciona una serie estructurada de pasos para delimitar su trabajo, determinar amenazas, determinar contramedidas y mitigación, y evaluar su trabajo.

​Para los equipos de prueba, esto comienza con una conversación para comprender el uso previsto y las amenazas del sistema que se está desarrollando. La conversación debe incluir al desarrollador principal, arquitecto de pruebas, ingeniero de sistemas, propietario de producto, representante de ciberseguridad y personal de operaciones.

​El enfoque de OWASP incluye una lista de amenazas que incluye suplantación, manipulación, repudio, divulgación de información, denegación de servicio y elevación de privilegios (STRIDE). Las categorías de amenazas STRIDE ayudan a guiar a un equipo a considerar todos los tipos de amenazas.

​Los equipos de prueba deben basarse en su experiencia en sesiones de lluvia de ideas para examinar específicamente cómo las amenazas impactarán sus sistemas en un entorno de prueba:

  • ¿Qué podría causar una pérdida de resultados de prueba y cómo nos recuperaríamos de este tipo de pérdida?
  • ​¿Cómo podría alguien corromper la calibración del sistema para hacer que el sistema genere datos erróneos?
  • ​¿Alguien puede obtener control no autorizado de cualquiera de los instrumentos o dispositivos del sistema?
  • ​¿Cómo podría un atacante causar tiempo de inactividad en la producción a través de nuestro sistema?

​Añadir estos riesgos específicos de la prueba a amenazas cibernéticas más tradicionales ayudará a identificar estrategias de defensa apropiadas para el sistema de prueba. El resultado del modelado de amenazas debe ser un conjunto de riesgos priorizados y los requisitos de seguridad necesarios para mitigar esos riesgos. Estos requisitos se convierten en entradas para las actividades de diseño y desarrollo del sistema descritas en la siguiente sección. Las revisiones periódicas de amenazas pueden ayudar a los equipos a identificar nuevas amenazas emergentes con el tiempo y pueden incluir una revisión de problemas que las amenazas anteriores no capturaron.

​Desarrollo de requisitos de seguridad

​El modelado de amenazas identifica riesgos para el sistema. El siguiente paso es convertir esos riesgos en requisitos de seguridad medibles que puedan implementarse, probarse y rastrearse a lo largo del ciclo de vida. Los requisitos de seguridad deben tratarse con el mismo nivel de rigor que los requisitos funcionales.

​Un requisito de seguridad define un control o comportamiento de seguridad que el sistema debe proporcionar. Los buenos requisitos de seguridad son específicos, medibles, comprobables y rastreables. La siguiente tabla muestra algunos ejemplos.


​Los requisitos de seguridad deben asignarse identificadores únicos y rastrearse a través de las mismas herramientas de gestión de requisitos utilizadas para los requisitos funcionales.

​Un requisito de seguridad bien definido debe ser rastreable a través de todo el ciclo de vida del desarrollo. La trazabilidad demuestra que los riesgos identificados fueron abordados y proporciona evidencia valiosa durante las auditorías de clientes, las evaluaciones de seguridad de proveedores y las revisiones regulatorias.

​Los sistemas de prueba y medición tienen requisitos de seguridad que a menudo se pasan por alto en los proyectos de software empresarial. Al desarrollar requisitos de seguridad, utilice categorías de seguridad estándar, pero también considere los siguientes datos:

  • Protección de resultados de pruebas contra modificaciones no autorizadas
  • ​Protección de datos de calibración y procedimientos de calibración
  • ​Protección de configuraciones de instrumentos
  • ​Manejo seguro de salidas de hardware en condiciones de apagado o fallo
  • ​Acceso controlado a la edición de secuencias y modificaciones de límites de prueba
  • ​Protección de bases de datos de producción y registros de fabricación
  • ​Validación de datos recibidos de instrumentos, dispositivos e interfaces de red externas

            ​Debido a que las mediciones inexactas y los resultados de las pruebas corruptos pueden tener consecuencias comerciales significativas, los requisitos de seguridad para la integridad son a menudo tan importantes como los requisitos de confidencialidad.

            ​Construir código modular

            ​El código modular limita el impacto de los defectos y vulnerabilidades al aislar la funcionalidad en componentes bien definidos con interfaces controladas. En un buen diseño modular, cada módulo expone solo las funciones que otros módulos necesitan. Esto proporciona menos puntos de entrada y reduce las oportunidades de uso indebido. El código modular también tiene la ventaja de que es más fácil de probar, por lo que es más fácil aplicar y validar actualizaciones al código.

            ​Al construir código modular, considere el principio de mínimo privilegio. Un módulo solo debe tener los permisos necesarios para realizar su función. Por ejemplo, una función de comunicación de instrumentos no necesita acceso a una base de datos, ya que esto lo maneja un módulo diferente. Evite pasar el manejador de la base de datos al módulo de comunicación del instrumento.

            ​A medida que los datos se pasan entre módulos, evalúe la confianza de la comunicación. Cuando sea aplicable, valide la fuente antes de aceptar datos de otro componente.

            ​El código modular debería facilitar las revisiones de seguridad. Cada módulo puede ser revisado, en lugar de revisar todo el conjunto de código con cada revisión. El revisor de código no necesita entender el conjunto completo de código para contribuir a la seguridad de un solo componente.

            ​Los módulos de código también simplifican la reutilización de código. Un módulo que ha sido desarrollado de forma segura y probado puede reutilizarse en otras aplicaciones con la confianza de que funciona como se pretende.

            ​Mejores prácticas de LabVIEW

            ​Establezca un conjunto de mejores prácticas y siga esas prácticas. Sus revisiones de código deben verificar el cumplimiento de estas prácticas. Si bien una revisión completa de las mejores prácticas está fuera del alcance de este documento, estas deben incluir como mínimo estas áreas:

            • ​Condiciones de carrera: las condiciones de carrera surgen cuando múltiples caminos de ejecución acceden a recursos compartidos sin una sincronización adecuada, lo que conduce a un comportamiento impredecible basado en variaciones de tiempo. El código debe diseñarse para ejecutarse de manera predecible independientemente de la disponibilidad de recursos del sistema y el tiempo. Los recursos y variables globales deben usarse con precaución para evitar estas condiciones. El acceso asíncrono a recursos compartidos requiere primitivas de sincronización apropiadas (notificadores, ocurrencias, colas) para garantizar operaciones seguras para hilos.
            • ​Regulación de recursos: el consumo de recursos sin control puede provocar bloqueos de software, fallos del sistema y un rendimiento degradado que compromete tanto la seguridad como la fiabilidad operativa. El modelo de ejecución paralela de LabVIEW y la gestión automática de memoria pueden enmascarar el agotamiento de recursos hasta que se superen umbrales críticos, haciendo que el estrangulamiento proactivo sea esencial para mantener la estabilidad del sistema. Implementar mecanismos de limitación específicos para prevenir ataques de agotamiento de recursos y asegurar un comportamiento predecible del sistema bajo diversas condiciones de carga. Los elementos específicos a buscar incluyen protección contra el crecimiento de arreglos, control de la tasa de bucle, prevención de bucles infinitos, lagunas en la conexión de red, monitoreo del uso de memoria, operaciones de archivos, capacidad de respuesta de la interfaz de usuario y límites de profundidad de cola.
            • ​Observabilidad: la observabilidad es la capacidad de determinar el estado interno, el comportamiento y la seguridad de un sistema a partir de sus salidas, como registros, eventos, métricas, alarmas y registros de auditoría. Mejorar la observabilidad de una aplicación requiere esfuerzo para diseñar el sistema de modo que proporcione esto sin exponer información sensible.
            • ​Gestión básica de memoria: LabVIEW maneja la mayor parte de la gestión de memoria automáticamente. Los desarrolladores deben gestionar ciertas funciones de memoria. Para bucles críticos en cuanto a rendimiento, preasigne memoria para arreglos y estructuras de datos. Revise la configuración de ejecución de VI para configurar correctamente la reentrada y otras configuraciones. Cierre explícitamente las referencias de valores de datos y otras referencias cuando ya no sean necesarias. Evite la asignación de memoria sin límites, como construir un array dentro de un bucle sin límites.
            • ​Segregación y encapsulamiento de datos: diseñar componentes con interfaces públicas bien definidas que expongan solo la funcionalidad mínima requerida por los clientes. Utilice ámbito privado para datos internos junto con métodos para aplicar el encapsulamiento. Los datos de la clase LabVIEW son privados; no cree accesores directos para los datos que deben permanecer privados. Segregar la funcionalidad según responsabilidades lógicas y controlar los niveles de acceso cuando sea apropiado.
            • ​Validación de entrada: validar estrictamente todos los datos de entrada, particularmente los datos que se originan de fuentes externas o usuarios, para garantizar la robustez y la integridad del sistema. La validación de entradas es un control de seguridad crítico que evita que los datos mal formados comprometan el funcionamiento del sistema o permitan ataques, protegiendo la integridad de los datos durante el procesamiento.
            • ​Manejo de enteros: seleccione tipos de enteros lo suficientemente grandes para la operación esperada y el crecimiento futuro. LabVIEW ofrece varios tipos de datos enteros (por ejemplo, I8, U64) con diferentes rangos y comportamientos de desbordamiento. Elija tipos de enteros basándose en el valor máximo esperado más un margen de seguridad, no solo en el rango operativo típico. Revisar contadores, temporizadores y acumuladores en condiciones de desbordamiento y probar explícitamente los casos límite.
            • ​Interfaces de hardware: cerrar, desbloquear, liberar o desconectar recursos o conexiones de hardware cuando ya no son necesarios activamente (por ejemplo, tareas DAQmx, sesiones VISA, referencias de archivos). Configurar las salidas de hardware para que transicionen a un estado seguro y conocido al apagar la aplicación o en condiciones de error.
            • ​Manejo de errores: implementar un manejo de errores integral diseñado para detectar, gestionar e informar fallos tanto esperados como inesperados. El clúster de errores incorporado en LabVIEW facilita esto. Utilice funciones de error para fusionar información de errores y mantener el error original y los errores siguientes en un camino.
            • ​Diseño a prueba de fallos: diseñar sistemas para manejar fallos de manera elegante, pasando a un estado seguro. Esto incluye diseñar la interfaz para que sea segura, validar todas las entradas de datos, comunicar claramente el estado de las conexiones críticas al usuario, y definir procedimientos para poner las salidas de hardware en un estado seguro conocido (por ejemplo, desenergizado o desconectado) en caso de error o apagado. Hacerlo asegura la desconexión adecuada de las interfaces de hardware, implementando mecanismos para vaciar los búferes de datos críticos al disco en caso de error o apagado, cerrando las referencias de archivos correctamente y desconectándose del hardware de adquisición de datos y otros instrumentos.
            • ​Seguridad de VI Server: al usar VI Server de LabVIEW para control remoto o comunicación, configure los ajustes para limitar la superficie de ataque potencial e implementar una identificación de usuario y una gestión de credenciales adecuadas.
            • ​Riesgos del ejecutable INI VI Server: los ejecutables creados con LabVIEW generan un archivo INI que controla los permisos del ejecutable, incluido el acceso a VI Server. Por ejemplo, my-app.exe genera my-app.ini en el mismo directorio. Con modificaciones simples de texto y conocimiento de la estructura de la aplicación, los atacantes externos pueden obtener acceso no autorizado a los controles del panel frontal de la aplicación y potencialmente ejecutar VIs arbitrarios. Para protegerse contra esto, gestione cuidadosamente la ubicación y los permisos del archivo de la aplicación implementada.
            • ​Endurecimiento de producción: las implementaciones de producción deben eliminar artefactos de desarrollo y capacidades de depuración que puedan exponer información sensible o proporcionar rutas de acceso no autorizadas. El entorno de desarrollo visual de LabVIEW facilita la inclusión involuntaria de VIs de depuración, datos de prueba e información de diagnóstico en las compilaciones de producción. El código almacenado en repositorios también puede incluirse inadvertidamente. Elimine VIs de depuración y prueba, deshabilite la depuración en las especificaciones de compilación del proyecto, borre valores predeterminados sensibles, elimine credenciales de prueba codificadas en duro y sanee las constantes del diagrama de bloques para eliminar rutas de desarrollo, nombres de servidor u otra información, y valide que el manejo de errores funciona correctamente.
            • ​Pruebas unitarias: las pruebas unitarias automatizadas son fundamentales para verificar la lógica central, el manejo de datos, las interfaces y la gestión de errores. Proporciona la garantía de que los componentes cumplen con los requisitos y mantienen su comportamiento a medida que evoluciona la base de código. Los desarrolladores deben crear pruebas unitarias junto con el código nuevo o modificado para respaldar las evaluaciones continuas de seguridad y privacidad a lo largo del ciclo de vida del desarrollo. Las pruebas unitarias implementan los procesos continuos de evaluación de seguridad, detección de fallos y remediación requeridos por los programas de cumplimiento, proporcionando evidencia de la ejecución y los resultados de las pruebas para la validación de controles de seguridad.

            ​Utilice un marco de pruebas unitarias reconocido de LabVIEW (NI Unit Test Framework, JKI Caraya o LUnit). Estas herramientas permiten a los desarrolladores definir entradas y salidas y validar que el código funciona correctamente. Esto se puede hacer sin ejecutar la aplicación completa, simplificando la validación del código.

            Las pruebas unitarias protegen funciones sensibles, como el control de equipos costosos, porque los módulos se pueden probar de forma aislada. Las pruebas unitarias deben diseñarse para una ejecución repetible y se integran idealmente en un sistema de integración continua (CI) para asegurar que se ejecuten automáticamente con los cambios de código.

            ​Revisiones de seguridad

            ​Las revisiones de seguridad frecuentes son una parte importante para establecer una cultura de desarrollo con mentalidad de seguridad. Las revisiones proporcionan una forma para que los equipos establezcan prácticas seguras, aprendan unos de otros y refuercen los procesos seguros. Las revisiones de seguridad comienzan antes del desarrollo, revisando la arquitectura y los métodos planificados. Las revisiones deben continuar entonces a lo largo de todo el proceso de desarrollo para asegurar que el código se desarrolle de forma segura. La frecuencia debe basarse en el tamaño del desarrollo; las revisiones deben ocurrir con suficiente frecuencia para que los problemas puedan corregirse antes de que haya ocurrido un desarrollo posterior significativo. Las revisiones deben ocurrir en cada solicitud de fusión, solicitud de extracción u otro evento significativo de integración de código. Pueden ser apropiadas revisiones programadas adicionales para proyectos grandes.

            ​Las revisiones de seguridad se mejoran enormemente cuando un equipo trabaja a través de la revisión a partir de una lista de verificación. Estas listas de verificación deben ser establecidas por la organización y personalizadas al comienzo de cada proyecto basándose en el análisis de amenazas y riesgos.

            ​Además de las revisiones de código manuales, realice revisiones de código automatizadas. Si utiliza un proceso de integración continua y entrega/implementación continuo (CI/CD), añada escaneo de seguridad a su proceso de admisión para que el código sea escaneado con cada registro de código. Configure herramientas de escaneo adicionales para ejecutar diariamente o semanalmente para detectar cualquier vulnerabilidad de seguridad introducida recientemente antes de que se convierta en una parte permanente del código. Utilice análisis estático, pruebas unitarias y otras herramientas de escaneo de seguridad para incluir una variedad de tipos de revisión.

            ​Herramientas de desarrollo

            ​Siempre que sea posible, utilice la última versión de los controladores del software de desarrollo. Se identifican nuevas amenazas de seguridad casi a diario, y los desarrolladores incorporan correcciones de seguridad en parches y nuevas versiones de software. Si no puede usar la última versión, use software que siga recibiendo actualizaciones de seguridad del proveedor y que las reciba durante toda la vida útil del sistema.  

            ​Configure sus herramientas para seguridad utilizando las guías de configuración proporcionadas por el proveedor.

            ​Ver la lista de versiones de software compatibles para productos NI

            ​Encontrar guías para productos NI  

            ​Pruebas

            ​Antes de lanzar el producto, aplique pruebas basadas en las amenazas y riesgos identificados al comienzo del proyecto. Esta lista puede incluir las siguientes pruebas:

            • ​Pruebas dinámicas: mientras la aplicación se está ejecutando, pruebe la integridad del software. Las pruebas dinámicas buscan fallos de autenticación, fallos de autorización, vulnerabilidades de inyección, configuraciones erróneas y otras formas de hacer que el programa falle.
            • ​Pruebas de fuzz: esta prueba introduce datos inesperados o mal formados en el software. Por ejemplo, en lugar de establecer un punto de control en 25 grados, la entrada puede alimentarse con valores como AAAAAAA…. O NULL. Esta prueba es particularmente útil en aplicaciones de LabVIEW que se comunican con instrumentos o protocolos de red, para ver si las entradas provocan que el instrumento se bloquee o se comporte mal.
            • ​Pruebas de penetración: esta prueba puede ser realizada por un equipo interno o por un consultor externo. En esta prueba, un experto intenta obtener acceso no autorizado, escalar privilegios, acceder a datos sensibles o eludir controles utilizando la aplicación. Esta prueba se realiza típicamente antes de un lanzamiento importante o anualmente, dependiendo del perfil de riesgo del sistema.

            ​Debido a que LabVIEW es un lenguaje de programación gráfico, algunas herramientas de seguridad tradicionales no pueden probar el código de LabVIEW. Herramientas como JKI Security Suite proporcionan capacidades de análisis estático centradas en la seguridad diseñadas para desarrolladores de LabVIEW, capaces de escanear código LabVIEW y ajustadas a las preocupaciones de seguridad específicas de un lenguaje de programación gráfico.  

            ​Aprenda más sobre JKI Security Suite

            ​Criterios de control de versiones

            ​Una versión no debe ser aprobada a menos que el equipo de desarrollo pueda demostrar que se revisó el modelo de amenazas, se resolvieron las vulnerabilidades críticas, se aplicaron y aprobaron las pruebas unitarias, se realizó un análisis estático, se generó un SBOM, se llevaron a cabo revisiones de código y se firmó el paquete de la versión. Imponer un proceso formal de puerta de lanzamiento da a la gerencia un punto de referencia para revisar que los procesos se siguieron y que el software es seguro.

            ​Implementación e instalación seguras

            ​Desarrollar software seguro es solo una parte del proceso. Una aplicación segura puede volverse vulnerable si se implementa incorrectamente o si se eliminan los controles de seguridad durante la instalación y configuración. Por lo tanto, el proceso de implementación debe tratarse como parte del ciclo de vida de desarrollo de software seguro, con procedimientos definidos, revisiones y actividades de validación antes de que el software se lance a los usuarios.

            ​Configuración predeterminada segura

            ​Las aplicaciones deben implementarse utilizando configuraciones seguras por defecto. Los usuarios asumen frecuentemente que la configuración predeterminada representa la configuración recomendada. Cualquier opción sensible a la seguridad que esté deshabilitada por defecto puede permanecer deshabilitada durante toda la vida del sistema.

            ​Los valores predeterminados seguros pueden incluir los siguientes ejemplos:

            • ​Requerir autenticación cuando sea apropiado.
            • ​Deshabilitar servicios y puertos de red no utilizados.
            • ​Habilitar comunicaciones cifradas por defecto.
            • ​Utilice el principio de mínimo privilegio.
            • ​Deshabilitar interfaces de desarrollo y depuración en lanzamientos de producción.
            • ​Restringir el acceso a las funciones de configuración y administrativas.

            ​Se debe exigir a los usuarios que debiliten conscientemente la configuración de seguridad en lugar de habilitar manualmente las protecciones de seguridad.

            ​Endurecimiento de producción

            ​Antes del lanzamiento, elimine los artefactos y características de desarrollo que son útiles durante el desarrollo pero que crean un riesgo innecesario en los entornos de producción. Revisar la aplicación según los siguientes criterios:

            • VIs de prueba
            • ​Utilidades de depuración
            • ​Puertas traseras de diagnóstico
            • ​Credenciales de muestra
            • ​Contraseñas codificadas en duro
            • ​Nombres de servidor internos
            • ​Rutas del sistema de archivos
            • ​Servicios no utilizados
            • ​Certificados de desarrollo

            ​Los sistemas de producción deben exponer solo la funcionalidad necesaria para operar el sistema.

            ​Gestión de cuentas y permisos

            ​Revisar los permisos requeridos por el sistema y asignarlos a los roles apropiados. Los sistemas no deben otorgar privilegios de administrador a menos que exista una necesidad operativa documentada. Las cuentas de servicio deben configurarse con solo los permisos necesarios para realizar su función prevista. Al considerar los permisos basados en roles, considere:

            • Cuentas de administrador con acceso privilegiado para roles específicos
            • ​Cuentas de servicio para mantenimiento y actualizaciones
            • ​Cuentas de base de datos para acceder a datos
            • ​Credenciales compartidas para estaciones de operador
            • ​Permisos de archivo y carpeta que restringen el acceso para ajustarse al perfil de amenaza del sistema

            ​Si el sistema almacena información sensible, verifique que los controles de acceso protejan esa información de manera adecuada.

            ​Configuración de seguridad de red

            ​Documente todas las comunicaciones de red requeridas antes de la implementación. Para cada conexión realizada por el sistema, considere:

            • ​Qué protocolos se deben usar para transmitir datos
            • ​Números de puerto que deben abrirse a través de firewalls
            • ​Dirección de cada flujo de comunicación
            • ​Requisitos de autenticación y almacenamiento de credenciales
            • ​Requisitos de cifrado para el almacenamiento y la transmisión de datos
            • ​Eliminación o desactivación de rutas de comunicación que no son necesarias

            ​Cuando los datos cruzan límites de red, los datos deben estar protegidos. Para cada transmisión de datos, tome las siguientes precauciones:

            • Use TLS u otros protocolos seguros.
            • ​Minimizar servicios expuestos.
            • ​Limitar conexiones entrantes.
            • ​Restringir las comunicaciones a sistemas autorizados cuando sea posible.

            ​Los sistemas de prueba a menudo se conectan simultáneamente a redes empresariales, redes de fabricación, servicios en la nube e instrumentos. Comprender y documentar estos límites de confianza es una actividad de implementación importante.

            ​Gestión de secretos y credenciales

            ​Las aplicaciones a menudo requieren contraseñas, claves API, certificados, tokens o claves de cifrado. Al manejar estos tokens secretos, tenga cuidado de no:

            • ​Codificar credenciales en el código fuente
            • ​Almacenar contraseñas en archivos de configuración en texto plano
            • ​Almacenar claves privadas en ubicaciones no seguras

            ​En su lugar, use una de las siguientes herramientas o tecnologías:

            • ​Administrador de credenciales en Windows
            • ​Microsoft Secret Store
            • ​CryptProtectData (DPAPI)
            • ​Módulos de plataforma de confianza (TPM)
            • ​Módulos de seguridad de hardware (HSM)

            ​Documente cómo se crean, almacenan, rotan, respaldan y revocan los secretos. Siga este proceso.

            ​Registro y auditoría

            ​Las aplicaciones deben registrar eventos operativos y de seguridad importantes. Los eventos a registrar incluyen los siguientes ejemplos:

            • Eventos de autenticación de usuario
            • ​Cambios de configuración
            • ​Actualizaciones de software
            • ​Operaciones privilegiadas
            • ​Fallas de seguridad
            • ​Fallas en la conexión de red
            • ​Eventos de inicio y apagado

            ​Verifique que el registro no incluya ningún secreto, como contraseñas e información personal o confidencial, ya que los registros pueden ser visibles para audiencias no destinadas a esa información.

            ​Los registros ayudan a solucionar fallos, investigar incidentes y demostrar el cumplimiento de los requisitos del cliente y normativos.

            ​Siempre que sea posible, integre los registros de la aplicación con los mecanismos de registro de la plataforma, como el Visor de Eventos de Windows o Syslog de Linux, para simplificar la monitorización, la investigación de incidentes y la presentación de informes de cumplimiento. Evalúe si enviar registros a un servidor seguro ayudará con la protección y la accesibilidad.

            ​Proteja los registros de auditoría contra accesos y modificaciones no autorizados y defina durante cuánto tiempo se conservarán los registros.

            ​Aprobación de lanzamiento

            ​Antes de lanzar el software, realice una revisión de seguridad final para verificar que la aplicación cumple con los requisitos de lanzamiento del equipo. Como parte de esta revisión final, incluir:

            • ​Modelo de amenazas revisado y aprobado
            • ​Requisitos de seguridad implementados
            • ​Las pruebas unitarias pasaron
            • ​Escaneos de seguridad completados
            • ​Vulnerabilidades críticas resueltas
            • ​SBOM generado
            • ​Documentación actualizada
            • ​Instrucciones de implementación revisadas
            • ​Paquete de lanzamiento firmado

            ​El proceso de lanzamiento debe producir evidencia que muestre que estas actividades se completaron. Estos registros de evidencia deben protegerse contra manipulaciones después de la liberación para mantener la integridad.

            ​Firma de código e integridad del paquete

            ​Los usuarios deben poder verificar que el software lanzado se originó en la organización esperada y no ha sido modificado desde el lanzamiento.

            ​La firma de código debe aplicarse a todos los siguientes tipos de software:

            • ​Ejecutables
            • ​Instaladores
            • ​Controladores
            • ​Plugins
            • ​Bibliotecas
            • ​Paquetes de implementación
            • ​Paquetes de actualización

            ​La firma de código no evita la modificación del software, pero proporciona una fuerte detección de modificaciones no autorizadas y la garantía de que el software proviene del editor esperado.

            ​Validación de implementación

            ​Después de la instalación, verifique que el sistema implementado opere de forma segura en su entorno previsto. Las actividades de validación deben confirmar la siguiente funcionalidad:

            • Los servicios requeridos se están ejecutando
            • ​El cifrado está funcionando correctamente
            • ​Los permisos de usuario son correctos
            • ​El registro está operativo
            • ​Las copias de seguridad están funcionando
            • ​Los controles de seguridad permanecen habilitados después de la implementación

            ​La validación de seguridad debe realizarse cada vez que se realicen cambios de configuración significativos.

            ​Evidencia de implementación

            ​Mantenga registros que demuestren que la implementación se realizó de acuerdo con el proceso definido. Estos registros incluyen los siguientes ejemplos:

            • Procedimientos de implementación aprobados
            • ​Registros de instalación
            • ​Listas de verificación de revisión de seguridad
            • ​Registros de firma de código
            • ​SBOM
            • ​Resultados del escaneo de seguridad
            • ​Informes de validación de implementación
            • ​Aprobaciones de lanzamiento

            ​Estos registros proporcionan una trazabilidad valiosa durante las auditorías de clientes, las evaluaciones de proveedores, las revisiones regulatorias y las investigaciones internas de seguridad.

            ​Responder a vulnerabilidades

            ​Una vulnerabilidad de software es una debilidad, fallo o defecto en el diseño, implementación, configuración o procesos operativos de un software que podría ser explotado para comprometer la confidencialidad, integridad o disponibilidad de un sistema o sus datos. Se puede identificar una vulnerabilidad en el código desarrollado por el equipo o en uno de los componentes utilizados en el software. Debido a que las vulnerabilidades proporcionan a los actores maliciosos una forma de dañar un sistema, es importante que estas vulnerabilidades se remedien y se implementen en los sistemas afectados.

            ​Para equipos de LabVIEW

            ​La industria de las pruebas enfrenta un desafío histórico al responder a las vulnerabilidades. Muchos proyectos de prueba se financian a través de un único modelo de financiación inicial, sin financiación para el mantenimiento continuo de los sistemas. Esto significa que los equipos de prueba no tienen los recursos para actualizar los sistemas, ni siquiera para proporcionar actualizaciones de seguridad. Esto presenta un conflicto directo con los requisitos de seguridad para mantener actualizados los sistemas.

            ​Un desafío significativo es la cantidad de validación requerida para hacer actualizaciones. Incluso si las herramientas de software y hardware no tienen costo, una actualización puede resultar muy costosa, ya que se debe validar que el sistema funciona como se pretende después de la actualización.

            ​Un cambio industrial

            ​A medida que la industria de la seguridad cambia, la industria de las pruebas también debe comenzar a cambiar para planificar y financiar mejor los sistemas de prueba a lo largo de su ciclo de vida. Hay algunos pasos que los equipos de prueba pueden tomar para pasar a un enfoque de gestión de ciclo de vida completo, que incluyen:

            • Negociar la propiedad a largo plazo del sistema. Asignar un propietario del sistema que sea responsable del ciclo de vida del sistema y asegurarse de que la propiedad se transfiera a medida que cambian los roles en la organización.
            • ​Diseñar su sistema para que sea modular. Es mucho más difícil actualizar código grande y monolítico. El código desarrollado para ser modular puede actualizarse y probarse más fácilmente sin afectar el código general. Defina la función de cada módulo de código y la interfaz de comunicación entre módulos.
            • ​Crear pruebas unitarias con su código. Las pruebas requieren más desarrollo de código, pero estas herramientas pueden reducir significativamente los costos de validar actualizaciones de software durante la vida útil del sistema.
            • ​Trabajar con sus clientes y gerentes para cambiar a una mentalidad de ciclo de vida completo. Esto podría significar financiar el proyecto a lo largo de todo su ciclo de vida; podría significar financiar más desarrollo y validación al principio del proyecto. Ayúdelos a reconocer que la seguridad es una parte crítica del proyecto y debe planificarse.
            • ​Establezca una fase de mantenimiento formal del ciclo de vida para el sistema, con actividades como gestión de defectos, planificación de obsolescencia, parches de seguridad, actualizaciones de documentación y soporte al cliente. Trate esta fase de mantenimiento como una actividad de ingeniería planificada, no como una ocurrencia tardía.
            • ​Planificar las actualizaciones tecnológicas en el ciclo de vida del sistema. Incorpore estos en el ciclo de vida y, si es necesario, cobre al cliente por adelantado por estas renovaciones planificadas.
            • ​Evaluar fallos de seguridad: los propios, los fallos en toda la organización y los fallos documentados públicamente. Aprender de esto puede ayudar a su equipo a prepararse para futuros ataques y puede utilizarse para justificar la inversión en esfuerzos de seguridad continuos.

            ​Identificación de vulnerabilidades

            ​Anunciamos vulnerabilidades en productos de NI, incluyendo LabVIEW, controladores y otro software, en ni.com/security. Los parches también se informan a través del sistema Common Vulnerabilities and Exposures (CVE). Estos parches pueden solucionar vulnerabilidades en el código del software desarrollado por ingenieros de NI o en los componentes que usamos. Puede registrarse para recibir notificaciones de nuevos parches en ni.com/security.

            ​Un SBOM también se puede utilizar para automatizar escaneos del software. Si genera un SBOM de su aplicación LabVIEW, puede configurar software de escaneo para verificar la base de datos CVE en busca de problemas reportados y notificarle. Hay una variedad de herramientas de análisis de composición de software (SCA) que escanean los SBOM y los comparan con la base de datos CVE.

            ​Si su usuario final identifica una vulnerabilidad, puede reportarla directamente a usted. Si el problema está dentro del software de NI, puede reportarlo en ni.com/security.

            ​Remediación de vulnerabilidades

            ​Es importante tomar en serio los informes de vulnerabilidad. Si un usuario reporta un problema, o si se reporta una vulnerabilidad en su pila de software, analice la vulnerabilidad para determinar el impacto y la probabilidad de que sea explotada. Estos problemas están impactados por la naturaleza de la vulnerabilidad y por la forma en que ha utilizado el componente de software afectado. Si determina que la amenaza de explotación es significativa, debe actualizar su software y emitir un parche a su usuario final.

            ​Algunas regulaciones, como la Ley de Resiliencia Cibernética Europea (CRA), exigen que proporcione parches de seguridad durante cinco años o más. Algunos contratos pueden especificar compromisos de soporte más largos o más cortos. Planifique este nivel de soporte en su propuesta de proyecto inicial para evitar sorpresas después de entregar el proyecto.

            ​Como parte de su proceso de remediación de vulnerabilidades, realice un Root Cause Analysis de la vulnerabilidad para mejorar su proceso de desarrollo y eliminar problemas similares en futuros proyectos.

            ​Conclusión: La importancia de integrar el desarrollo de software seguro en el ciclo de vida del desarrollo de software (SDLC)

            ​El desarrollo de software seguro no es una actividad separada realizada al final de un proyecto. Es un conjunto de prácticas integradas a lo largo del ciclo de vida de un sistema. Al adoptar los principios descritos en esta guía, los equipos de LabVIEW pueden reducir vulnerabilidades, mejorar la mantenibilidad, simplificar los esfuerzos de cumplimiento y proteger mejor los sistemas y datos que se les confían. La seguridad es un proceso y su equipo madurará con el tiempo. Comience ahora a establecer un proceso repetible y sostenible que mejore continuamente la seguridad a lo largo de la vida del producto.

            AmenazaRequisito de seguridad
            Modificación no autorizada de resultados de pruebaSolo se permitirá a los usuarios autenticados con el rol apropiado modificar los resultados de prueba almacenados.
            Intercepción de tráfico de redTodas las comunicaciones entre la aplicación y los sistemas externos utilizarán protocolos cifrados.
            Corrupción de datos de calibraciónLos datos de calibración deben protegerse de modificaciones no autorizadas, y todos los cambios deben registrarse.
            Control de equipo no autorizadoLas operaciones de equipos administrativos o peligrosos requerirán usuarios autenticados y autorizados.