security coding-style reliability

security - Codificación de alta confiabilidad/disponibilidad/seguridad: ¿qué estándares leo?



coding-style reliability (6)

Consulte el Goddard Space Flight Center y sus estándares de codificación . Uno de los estándares de C, que he adoptado en mi propio código, es que los encabezados deben ser independientes, y proporcionan una forma sencilla de hacer cumplir eso: el encabezado de un módulo debe ser el primer archivo incluido en el módulo, por lo que si el archivo no es autónomo, no se compilará.

Escuché que la industria automotriz tiene algo llamado MISRA C.

¿Cuáles son los estándares relevantes para otras industrias de alta confiabilidad / disponibilidad / seguridad, como

  • Espacio
  • Aeronave
  • Banca / financiera
  • Automotor
  • Médico
  • Defensa / Militar
  • ???

-Adán


NIST proporciona una gran cantidad de documentos relacionados, puedes bucear y leer detenidamente su trabajo, pero hay muchos, y todo es bastante detallado, así que no tengo uno específico al que apuntar.
Si quiere ser más específico con sus necesidades, tal vez pueda reducirlo un poco ...

Además, Carnegie Mellon es más o menos lo definitivo en lo que respecta a los procesos de desarrollo para la confiabilidad, lo suficientemente fácil para encontrar sus estándares pero también bastante detallado.

Además, las industrias específicas a menudo tienen sus propios estándares, dependiendo también del país. Por ejemplo, industria de tarjetas de crédito: PCI-DSS; La industria bancaria en la UE - Basilea II; Médico - HIPAA (aunque eso es bastante alto nivel); cualquier cosa relacionada con el gobierno de EE. UU., varios documentos de NIST; etc.


Puede resultarle instructivo observar algunos de los requisitos de Carrier Grade Linux . Mientras ellos (como su nombre lo sugiere) están especificando los requisitos de Linux, lo están haciendo para su uso en el segmento de alta disponibilidad de los equipos de telecomunicaciones.


Si está preguntando específicamente sobre la codificación, MISRA presenta algunas pautas para evitar errores comunes en C.

Sin embargo, hay mucho más para un buen software que para la codificación. La "biblia" de la industria de la aviación para el desarrollo de sw es DO-178B. Le dice qué preguntas deben abordarse en las distintas fases de diseño y cómo deben documentarse las respuestas. Es una cantidad ENORME de papeleo, pero si tratas de mantener los aviones en el aire, quieres que el punto más débil sea el humano (piloto), no el software.


Para programar sistemas de alta fiabilidad en Ada , existe: ISO / IEC TR 15942: "Tecnología de la información - Lenguajes de programación - Guía para el uso del lenguaje de programación Ada en sistemas de alta integridad" :

Introducción

Como sociedad, dependemos cada vez más de los sistemas de alta integridad: para los sistemas de seguridad (como los aviones fly-by-wire), para los sistemas de seguridad (para proteger la información digital) o para los sistemas financieros (por ejemplo, los cajeros automáticos). A medida que la complejidad de estos sistemas crece, también lo hacen las demandas de técnicas mejoradas para la producción de los componentes de software del sistema. Se debe demostrar que estos sistemas de alta integridad son completamente predecibles en su funcionamiento y tienen todas las propiedades requeridas para ellos. Esto solo se puede lograr analizando el software, además del uso de pruebas dinámicas convencionales. Actualmente, no existe un lenguaje de alto nivel en el que todos los programas en ese idioma garanticen ser predecibles y analizables. Por lo tanto, para cualquier opción de lenguaje de implementación, es esencial controlar las formas en que la aplicación utiliza el idioma. El lenguaje Ada [ARM] está diseñado con mecanismos específicos para controlar el uso de ciertos aspectos del lenguaje. Además,

  1. La semántica de los programas de Ada está bien definida, incluso en situaciones de error. Específicamente, el efecto de un programa puede predecirse a partir de la definición del lenguaje con pocas dependencias de implementación o interacciones entre las características del lenguaje.

  2. La tipificación fuerte dentro del lenguaje se puede usar para reducir el alcance (y el costo) del análisis para verificar las propiedades clave.

  3. El lenguaje Ada se ha utilizado con éxito en muchas aplicaciones de alta integridad. Esto demuestra que los compiladores de Ada validados tienen la calidad requerida para tales aplicaciones.

  4. Se puede proporcionar orientación para facilitar el uso del idioma y para fomentar el desarrollo de herramientas para una mayor verificación.

Por lo tanto, Ada es ideal para implementar software de alta integridad y este documento proporciona una guía en los controles que se requieren en el uso de Ada para garantizar que los programas sean predecibles y analizables.