Seminario web destacado: MISRA C++ 2023: todo lo que necesita saber | Vea ahora

Satisfacer los requisitos de seguridad de IEC 62443 con automatización de pruebas

Foto de cabeza de Ricardo Camacho, Director de Cumplimiento de Seguridad y Seguridad
Enero 2, 2024
10 min leer

Examine el estándar IEC 62443 para implementar y mantener sistemas seguros de control y automatización industrial (IACS). Continúe leyendo para conocer las prácticas clave y el papel crucial que desempeña la automatización de pruebas de software.

Introducción a IEC 62443

IEC 62443 es un estándar internacional que define requisitos y procesos para implementar y mantener seguridad automatización industrial y sistemas de control (IACS). Estos estándares establecen las mejores prácticas de seguridad y proporcionan una forma de evaluar el nivel de seguridad.

El estándar describe un ciclo de vida de desarrollo seguro (SDL) que cubre aspectos como codificación, pruebas, implementación, mantenimiento y eliminación seguros. La clave para esto es la definición de una especificación de requisitos de seguridad, que identifica y prioriza los riesgos de seguridad junto con las estrategias de mitigación que se utilizarán en el producto o aplicación a lo largo de su ciclo de vida.

Un concepto clave del estándar es el uso de modelado de amenazas para identificar y analizar amenazas potenciales a un producto o sistema en función de su arquitectura, componentes, interfaces, flujos de datos y funciones. El modelado de amenazas ayuda a evaluar el impacto y la probabilidad de cada amenaza y priorizarlas según su gravedad. Esta es una actividad continua ya que el panorama de amenazas cambia con el tiempo, especialmente para los productos IACS que tienen una vida útil de décadas.

No todos los productos IACS requieren el mismo nivel de seguridad, que define cómo responde el sistema a diferentes clases de ataques. Estos van desde la falta de requisitos y el uso indebido involuntario hasta atacantes sofisticados con recursos ilimitados. Se espera que los productos se divida en zonas de seguridad si los niveles de seguridad difieren entre componentes o subsistemas.

IEC 62443 también proporciona orientación sobre cómo crear dispositivos y aplicaciones más seguros, como el uso de seguridad por diseño, la reducción de la superficie de ataque, la defensa en profundidad, etc.

Prácticas clave de IEC 62443

A continuación se presenta un resumen de las prácticas clave identificadas por Serie de normas ISA/IEC 62443.

Sistema de Gestión de Ciberseguridad

Un programa de seguridad sólido requiere establecer y mantener un programa de seguridad que defina las funciones, responsabilidades, políticas, procedimientos y recursos para garantizar la ciberseguridad de los productos y soluciones de IACS. Esta práctica abarca efectivamente todas las siguientes prácticas como práctica clave general.

Evaluaciones de riesgos de seguridad

La evaluación de riesgos es una parte crucial del desarrollo de sistemas IACS tanto para la seguridad como para la protección. Este es un proceso continuo que implica:

  • Definir el alcance y los límites del sistema considerado.
  • Identificar y analizar amenazas y vulnerabilidades.
  • Priorizar los riesgos en función de las posibles consecuencias.

El riesgo es un factor que determina la probabilidad de que ocurra un evento y las consecuencias e impacto de su ocurrencia. Los entregables de esta práctica incluyen:

  • Lista completa de activos críticos
  • Identificación de dependencias
  • Determinación de riesgos críticos para la operación y seguridad de estos procesos.
  • Respuestas adecuadas a estos riesgos

Especificación de requisitos de seguridad

Para incorporar la seguridad desde el principio, es necesario definir los requisitos de seguridad para todo el ciclo de vida del producto, desde el diseño, el desarrollo, el soporte, la operación, el mantenimiento y la eliminación. También incluye definir los niveles de seguridad que especifican el grado de protección requerido para cada función o componente de un producto.

Seguro por diseño

Un producto seguro debe diseñarse para que sea seguro desde el principio. Esto significa aplicar principios de diseño de seguridad, como una defensa en profundidad, durante todo el ciclo de vida del desarrollo del producto para reducir la superficie de ataque y evitar el acceso no autorizado o la modificación del producto o aplicación. También incluye la realización de revisiones, pruebas y validaciones de estándares de codificación segura para garantizar que el código cumpla con los requisitos de seguridad.

Implementación segura

Seguro por diseño implica implementar estándares de codificación segura en todas las fases del ciclo de vida del desarrollo del producto para garantizar que el código cumpla con los requisitos de seguridad. Esto también incluye la realización de pruebas de verificación y validación para verificar que el código funcione según lo previsto en diversos escenarios y condiciones.

Verificación de seguridad y pruebas de validación

Es necesario poner a prueba la seguridad. Es fundamental realizar pruebas formales o informales para verificar que se cumplan los requisitos de seguridad. Esto también incluye la realización de actividades de gestión de defectos para identificar, informar, rastrear, resolver y prevenir defectos en un producto o solución IACS.

Gestión de cuestiones relacionadas con la seguridad

Los problemas de seguridad son inevitables. Una adecuada gestión es fundamental ante cualquier incidente relacionado con la ciberseguridad que surja durante o después del ciclo de vida de un producto. Esto también incluye realizar actividades de gestión de parches para aplicar actualizaciones o correcciones al producto según sea necesario. Además, la gestión de las actividades al final de la vida útil de los productos debe garantizar que los productos se desmantelen de forma segura cuando ya no sean necesarios.

Gestión de actualizaciones de seguridad

La seguridad de un producto o aplicación siempre está en constante cambio. Es necesario gestionar cualquier actualización o corrección de los productos implementados. Aunque tradicionalmente las actualizaciones de los productos IACS son pocas y espaciadas, esto debe cambiar. Los productos modernos y seguros necesitan gestión de parches para garantizar el cumplimiento continuo. Además, la cadena de suministro de software debe monitorearse para detectar nuevas vulnerabilidades, por lo que las dependencias que utiliza su producto también deben actualizarse y parchearse, por ejemplo, las vulnerabilidades OpenSSL o Log4J.

Las partes donde la automatización de pruebas juega el papel más importante son la implementación segura y las prácticas de verificación y validación de seguridad. Por lo tanto, esta publicación se concentrará en estas prácticas clave.

IEC 62443 Práctica 4: Implementación segura

En el estándar, las secciones 8.3.1 y 8.4.1 señalan específicamente la necesidad de análisis de código estático, revisiones de código y la implementación de estándares de codificación segura. Otro aspecto crítico de los requisitos es la trazabilidad de los requisitos de seguridad hasta la implementación y las pruebas.

Revisiones de implementación de seguridad

Sección 8.3.1 describe los requisitos para las revisiones de seguridad en la implementación del producto. Estos mencionan específicamente la necesidad de estándares de codificación, análisis de código estático y trazabilidad.

Sección 8.3.1:

Se deberá emplear un proceso para garantizar que se realicen revisiones de implementación para
identificar, caracterizar y rastrear hasta el cierre los problemas relacionados con la seguridad asociados con la implementación del diseño seguro, incluido...

b) identificación de estándares de codificación segura (ver 8.4) que no se siguieron (por ejemplo, uso de funciones prohibidas o no aplicación del principio de privilegio mínimo);

c) Análisis de código estático (SCA) del código fuente para determinar errores de codificación de seguridad, como
desbordamientos de búfer, desreferenciación de puntero nulo, etc. utilizando el estándar de codificación segura para el lenguaje de programación admitido. La SCA se realizará utilizando una herramienta si hay alguna disponible para el idioma utilizado. Además, se realizará un análisis de código estático en todo el código fuente.
cambios que incluyen nuevo código fuente.

d) revisión de la implementación y su trazabilidad hasta las capacidades de seguridad definidas para soportar el diseño de seguridad…

Sección 8.4.1 detalles sobre los estándares de codificación de seguridad y la recomendación para la automatización mediante herramientas de análisis estático:

Sección 8.4.1:

Los procesos de implementación incorporarán estándares de codificación de seguridad que se revisen y actualicen periódicamente e incluyan como mínimo:

a) evitar construcciones de implementación potencialmente explotables: patrones de diseño de implementación que se sabe que tienen debilidades de seguridad;

b) evitar funciones prohibidas y construcciones de codificación/patrones de diseño: funciones de software y patrones de diseño que no deben usarse porque tienen debilidades de seguridad conocidas;

c) uso y configuración de herramientas automatizadas (por ejemplo, para herramientas de análisis estático);

d) prácticas de codificación seguras;

e) validación de todas las entradas que cruzan los límites de confianza.

f) manejo de errores.

El papel de las herramientas de análisis estático en las revisiones de implementación de seguridad

Análisis estático Las herramientas son excelentes para detectar errores, fallos, vulnerabilidades u otros problemas que podrían afectar la seguridad o funcionalidad del software. El análisis estático también se puede utilizar para verificar el cumplimiento del sistema con ciertos estándares o requisitos de codificación.

Específicamente, las herramientas de análisis estático son particularmente útiles para ayudar a los desarrolladores a cumplir con IEC 62433 al identificar posibles fallas de seguridad o debilidades en el código antes de que los atacantes las exploten. Además, las herramientas de análisis estático ayudan a lograr el cumplimiento de estándares o regulaciones relevantes que requieren prácticas de codificación segura, incluidos los estándares de codificación segura.

Errores de codificación, debilidades y vulnerabilidades del software

Estas son algunas de las capacidades y ventajas de utilizar herramientas avanzadas de análisis estático como la prueba Parasoft C/C++ para proteger el software IACS.

  • Calidad de código mejorada. Las herramientas de análisis estático mejoran la calidad general del código al identificar las mejores prácticas de codificación y garantizar el cumplimiento de los estándares. Estas herramientas identifican áreas de código ineficiente, difícil de mantener o propenso a errores, que a menudo conducen a debilidades que pueden explotarse si se exponen a los atacantes.
  • Identificación temprana de vulnerabilidades. Herramientas como la prueba Parasoft C/C++ identifican fallas de seguridad antes de que se propaguen en el ciclo de vida del desarrollo de software. Proporcionar información detallada e información de seguimiento de ejecución de código facilita el proceso de corrección de vulnerabilidades.
  • Acelere el cumplimiento. Una herramienta de análisis estático junto con sólidas capacidades de análisis e informes reducen la carga del cumplimiento de los estándares y regulaciones de seguridad en industrias reguladas. Los registros de cumplimiento de estándares de codificación segura y eliminación temprana de vulnerabilidades proporcionan evidencia de diligencia debida. Además, facilita el proceso de satisfacción de auditores y autoridades reguladoras, reduciendo los riesgos legales y financieros.
  • Se escala fácilmente. Las herramientas avanzadas de análisis estático están diseñadas para ser escalables y adaptables a diversos proyectos de software y tamaños de empresas. También trabajan donde trabaja el desarrollador en su entorno de desarrollo, integrándose perfectamente en IDE y procesos tanto para aplicaciones pequeñas como para sistemas empresariales a gran escala. Las herramientas de análisis estático también deben funcionar con varios lenguajes de programación para que sean aplicables en toda la organización.
  • Sin casos de prueba ni ejecución. Las herramientas de análisis estático, por su propia naturaleza, funcionan con código fuente y binario. No se requiere ejecución o incluso un sistema completo. Esto hace que las herramientas sean especialmente adecuadas para evaluaciones de seguridad en etapas iniciales, acelerando la identificación y resolución de vulnerabilidades.

Estándares de codificación segura

Las herramientas de análisis estático, también llamadas herramientas de prueba de seguridad de aplicaciones estáticas (SAST), utilizan detalles y estructura del código para hacer cumplir los estándares y pautas de codificación segura. Los verificadores integrados están diseñados para detectar código que no cumple con estándares bien conocidos, como el CERTIFICADO SEI Estándares C y C++. Estas pautas evitan que los programadores de C y C++ utilicen construcciones de lenguaje que se sabe que crean debilidades de software que conducen a vulnerabilidades. También inculcan buenas prácticas de programación que evitan que estas debilidades se filtren en la base del código si se realizan comprobaciones periódicas de cumplimiento.

El estándar IEC 62443 es explícito sobre el uso de herramientas de análisis estático y los estándares de codificación segura. Como tal, es imperativo que estas herramientas funcionen con procesos establecidos, desarrollo y entornos de construcción/prueba.

IEC 62443 Práctica 5: Verificación de seguridad y pruebas de validación

El estándar también es bastante explícito sobre los tipos y la minuciosidad de las pruebas necesarias para verificar y validar la seguridad. La mejor forma práctica de implementar estos requisitos es mediante la automatización de pruebas de software.

A continuación se muestran las secciones relevantes de IEC-62443.

Sección 9.2.1: Pruebas de requisitos de seguridad

Se deberá emplear un proceso para verificar que las funciones de seguridad del producto cumplan con los requisitos de seguridad y que el producto maneje correctamente los escenarios de error y las entradas no válidas. Los tipos de pruebas incluirán:

a) pruebas funcionales de los requisitos de seguridad;

b) pruebas de rendimiento y escalabilidad; y

c) condición de límite/borde, tensión y pruebas de entrada incorrectas o inesperadas no
dirigido específicamente a la seguridad.

Sección 9.4.1: Pruebas de vulnerabilidad

Se deberá emplear un proceso para realizar pruebas que se centren en identificar y caracterizar posibles vulnerabilidades de seguridad en el producto. Las pruebas de vulnerabilidad conocida se basarán, como mínimo, en contenidos recientes de una fuente pública establecida y reconocida por la industria para vulnerabilidades conocidas. Las pruebas incluirán:

a) caso de abuso o pruebas de entrada incorrectas o inesperadas centradas en descubrir problemas de seguridad. Esto incluirá pruebas de casos de abuso manuales o automatizadas y tipos especializados de pruebas de casos de abuso en todas las interfaces y protocolos externos para los cuales existen herramientas.

...

d) pruebas de gestión dinámica de recursos en tiempo de ejecución que detecta fallas no visibles bajo el análisis de código estático, incluidas, entre otras, condiciones de denegación de servicio debido a no liberar controladores de tiempo de ejecución, pérdidas de memoria y accesos realizados a la memoria compartida sin autenticación. Esta prueba se aplicará si tales herramientas están disponibles.

El papel de las herramientas de automatización de pruebas de software en la verificación y validación de la seguridad

Para cumplir con los plazos del producto y lograr un nivel aceptable de seguridad, es necesario automatizar el proceso de prueba tanto como sea posible. Las herramientas modernas de automatización de pruebas de software aceleran estos procesos eliminando la mayor cantidad posible de aspectos manuales, aprovechando la IA y el aprendizaje automático cuando sea posible, y los informes y análisis para ayudar a centrar las pruebas donde más se necesitan. A continuación se abordan los requisitos para verificación y validación del estándar y cómo ayuda la automatización de pruebas en cada caso.

Pruebas funcionales de seguridad

Un beneficio de las pruebas funcionales automatizadas es la capacidad de ejecutar pruebas en cualquier momento, de día o de noche, sin la necesidad de tener una persona involucrada continuamente. Las pruebas automatizadas también se ejecutan más rápido que las pruebas manuales. Siguen exactamente el plan de pruebas, evitando posibles errores humanos, como utilizar datos de prueba incorrectos u omitir partes de la prueba. Un beneficio adicional es que las pruebas automatizadas le dan al equipo de control de calidad más tiempo para centrarse en casos extremos urgentes y escribir escenarios de prueba para nuevos módulos y sistemas de software.

Las pruebas funcionales tampoco hacen suposiciones sobre la estructura del sistema. Prueba sólo lo que compone el sistema y lo que lo hace funcionar. En términos de seguridad, las pruebas funcionales garantizan que los desarrolladores hayan cumplido todos los requisitos de seguridad del producto.

Pruebas de rendimiento y escalabilidad

Las pruebas de rendimiento evalúan cómo se comporta una aplicación en condiciones específicas y analizan los resultados para que pueda identificar y abordar cualquier cuello de botella o bloqueo que impida un funcionamiento fluido. Esto es importante para la seguridad, ya que los ataques pueden intentar bloquear el funcionamiento adecuado mediante ataques de denegación de servicio, por ejemplo.

Con una estrategia de pruebas de carga y rendimiento, sus aplicaciones pueden estar mejor preparadas para demandas inesperadas. Las herramientas de prueba de carga y rendimiento garantizan que su sistema maneje ráfagas repentinas de tráfico y brinde una experiencia de usuario superior. Estas pruebas crean cargas extremas para encontrar fallas y garantizar que su aplicación pueda soportar el calor. La automatización de pruebas hace que sea más fácil y rápido ejecutar una combinación de pasos de pruebas de rendimiento en paralelo.

Condiciones de límite/borde, entradas con formato incorrecto o casos de abuso

Las condiciones de prueba de límite o borde son aquellas que están mucho más allá de las condiciones ambientales o de entrada habituales que esperaría un producto IACS. Sin embargo, estos casos de prueba todavía se encuentran dentro de los límites teóricos de las entradas del sistema. En términos de entrada del usuario, los casos extremos son aquellos en los que las entradas son muy largas o pueden contener caracteres especiales. Así se realizan, por ejemplo, las inyecciones SQL en sitios web. En términos de sistemas IACS, esto también podría incluir entradas extremas de sensores, entradas de red e interfaz y acceso de usuario/HMI.

Herramientas de automatización de pruebas de software como Parasoft C / C ++test se puede configurar para utilizar casos de prueba límite y extremos, también conocidos como casos de abuso, e incluso generar automáticamente casos de prueba basados ​​en el conocimiento interno de las unidades de software, por ejemplo. Estas pruebas también se pueden agregar a un conjunto de pruebas de regresión que se puede ejecutar de forma regular y automática.

Pruebas de seguridad de aplicaciones dinámicas

La prueba de seguridad de aplicaciones dinámicas (DAST) es otra forma de prueba de seguridad como el análisis estático (SAST), pero funciona mientras se ejecuta una aplicación del sistema. Estas herramientas detectan vulnerabilidades en tiempo de ejecución al ejecutar código. Tienen un alto grado de precisión ya que las vulnerabilidades detectadas son reales, pero solo pueden detectar vulnerabilidades en el código que se ejecuta y dentro de las condiciones que están presentes durante las pruebas. IEC 62443 deja claro que se deben realizar todo tipo de pruebas de seguridad de aplicaciones.

Trazabilidad

Es necesario verificar y validar los requisitos de seguridad de los sistemas IACS. Esto requiere que exista trazabilidad entre el requisito, la implementación (generalmente código fuente) y las pruebas que lo validan. Es probable que mantener estos enlaces manualmente sea imposible, por lo que la automatización desempeña un papel clave para mantener la trazabilidad precisa y actualizada. Los registros y la documentación de cumplimiento también se pueden automatizar según sea necesario.

Automatización de la trazabilidad bidireccional

Las herramientas de gestión del ciclo de vida de las aplicaciones incluyen capacidades de gestión de requisitos que están maduras y tienden a ser el centro de la trazabilidad, que incluye requisitos de seguridad y modelado de amenazas. Las soluciones integradas de prueba de software, como las que proporciona Parasoft, completan la verificación y validación de los requisitos de seguridad a través de la automatización. Proporcionar trazabilidad bidireccional automatizada al caso de prueba ejecutable incluye el resultado de aprobación o falla y rastrea hasta el código fuente que implementa el requisito.

Parasoft proporciona trazabilidad bidireccional desde elementos de trabajo hasta casos de prueba y resultados de pruebas, y ambos muestran informes de trazabilidad con DTP de Parasoft así como informar los resultados al sistema de gestión de requisitos.

Parasoft se integra con sistemas de planificación ágil y gestión de requisitos líderes en el mercado, como Intland Codebeamer, Polarion de Siemens, Atlassian Jira, CollabNet VersionOne y TeamForge. Las soluciones de automatización de pruebas de Parasoft, C/C++test, Jtest, dotTEST, SOAtest y Selenic, admiten la asociación de pruebas con elementos de trabajo definidos en estos sistemas, como requisitos, historias, defectos y definiciones de casos de prueba. DTP, el panel central de análisis e informes de Parasoft, gestiona la trazabilidad.

Resumen

IEC 62443 establece pautas y procesos para garantizar la seguridad de los productos IACS, cubriendo aspectos como codificación segura, pruebas, implementación, mantenimiento y eliminación. Las prácticas clave de IEC 62443 incluyen el establecimiento de un sistema de gestión de ciberseguridad, la realización de evaluaciones de riesgos de seguridad, la especificación de requisitos de seguridad, la adopción de un enfoque de seguridad por diseño, la implementación de estándares de codificación segura y la realización de controles de seguridad. verificación y validación pruebas.

La automatización de pruebas de software juega un papel crucial en estas prácticas clave, particularmente en la implementación segura y la verificación y validación de la seguridad. El análisis de código estático es crucial para respaldar las revisiones de código y el cumplimiento de estándares de codificación segura. Además, el análisis estático detecta errores de codificación, vulnerabilidades y debilidades en las primeras etapas del ciclo de vida del desarrollo.

En términos de verificación de seguridad y pruebas de validación, las herramientas de automatización de pruebas de software son clave para hacer que las pruebas sean factibles en los plazos necesarios para entregar productos IACS seguros al mercado. Incluyendo acelerar los procesos de prueba, garantizar el cumplimiento de los estándares de seguridad y proporcionar evidencia de debida diligencia. La trazabilidad automatizada en la verificación y validación de los requisitos de seguridad es fundamental para garantizar que se cumplan los requisitos de seguridad. La automatización también mantiene actualizada la documentación de validación de requisitos, lo que en última instancia contribuye a acelerar el cumplimiento de los productos IACS.

Análisis de código estático para desarrollo integrado