La enmienda 2012 anticipada de MISRA C: 2 ya está disponible
Por Ricardo Camacho
Marzo 12, 2020
4 min leer
MISRA ha anunciado una enmienda a sus últimas pautas de codificación MISRA C:2012 para mitigar el creciente riesgo de vulnerabilidades de seguridad cibernética. Consulte esta publicación para obtener información sobre los cambios realizados.
Saltar a la sección
La enmienda a MISRA C: 2012 ha sido publicada por el Grupo de Trabajo de MISRA C en apoyo de la Norma C conocida como “C11” y ratificada formalmente como ISO / IEC 9899: 2011. C11 ha ganado un uso generalizado y para proyectos y organizaciones que han estado postergando la migración a C11, este es un anuncio bien recibido. C11 también reemplaza a C99 (estándar ISO / IEC 9899: 1999) y ha sido reemplazado por C18 (estándar ISO / IEC 9899: 2018). Además de las pautas actualizadas en lenguaje C, el Grupo de Trabajo de MISRA C publicó las pautas de Cumplimiento de MISRA 2020, que ahora son obligatorias para reclamar el cumplimiento de la norma.
MISRA C: 2012 La enmienda 2 ahora hace referencia a ISO / IEC 9899: 2011 y contiene actualizaciones en lenguaje C, proporcionando pautas para las características que pueden usarse pero sujetas a restricciones y características que están prohibidas a menos que venga con una desviación que haya sido aprobada por sus equipos. proceso de revisión de software. Durante el desarrollo de la enmienda 2, también se aprovechó la oportunidad para corregir cualquier problema conocido con las adiciones anteriores. Desencadenando la misión del grupo de trabajo MISRA de proporcionar orientación para evitar comportamientos impredecibles, reducir o eliminar defectos de codificación y facilitar la seguridad, la protección, la portabilidad y la confiabilidad del código en el contexto de los sistemas de software integrados.
Nuevas reglas de MISRA C: 2012
Un ejemplo de una nueva regla de MISRA agregada que se aplica a las nuevas funciones en C11 es la Regla 1.4, "No se utilizarán funciones de idiomas emergentes". Un ejemplo de esto sería si las instalaciones y se utiliza el especificador de clase de almacenamiento _Thread_local; esta regla etiquetará la estructura del lenguaje C11 con un tipo de categoría de infracción "Obligatorio". C11 estandariza la semántica de los programas de múltiples subprocesos, que potencialmente se ejecutan en plataformas de múltiples núcleos y la comunicación entre subprocesos liviana utilizando variables atómicas. Se utiliza la memoria global local a un hilo, en la que se han identificado casos de comportamiento indefinido y no especificado, incluido el comportamiento definido que no cumple con las expectativas. Avanzar y cumplir con MISRA C: Enmienda 2012 de 2, si utilizo _Hilo_local no solo se requiere una desviación, sino que se deben implementar medidas de garantía para abordar los comportamientos que comprometen la seguridad y / o la protección.
La _Genérico La palabra clave es otra característica nueva del lenguaje C11 que no se debe utilizar y que puede exhibir un comportamiento no deseado y algunos han descubierto que el estándar C11 es vago en ciertos escenarios. los _Genérico El operador es un tipo de sobrecarga de macros. Se utiliza para ayudar al programador a utilizar cualquier macro como genérica, con el fin de hacerla más eficiente. La siguiente línea de código muestra cómo _Genérico La palabra clave se utiliza para declarar cualquier macro para los diferentes tipos de tipos de datos y como genérica para diferentes métodos. Tome el siguiente ejemplo de macro VOL a continuación; VOL (x) se traduce en VOLc (x), VOLl (x), VOL (x) o VOLf (x) según el tipo de x.
#define VOL (x) _Generic ((x), char: VOLc, long double: VOLl, predeterminado: VOL, float: VOLf) (x)
Codificación segura
Una causa común de vulnerabilidades de seguridad es el uso de la función de biblioteca estándar. te definido en . MISRA C: La Enmienda 2012 de 2 ha agregado una nueva Regla 21.21 que especifica que la función de biblioteca estándar te no se utilizará. los te call es una función de bloqueo, utilizada para ejecutar subprocesos y comandos, esperando hasta que el proceso hijo termine y devuelva su valor de salida. Reconozca que el prototipo "int system (const char * command);" no es necesario que sea un solo comando, pero puede ser una canalización o una serie de canalizaciones. (por ejemplo, system (“pngtopnm \” My Picture.png \ ”| pnmtoxwd> fout.xwd && xwud fout.xwd”);) Dado que la variable comando se construye a partir de datos proporcionados por el usuario, un atacante puede salirse de la cita y ejecutar cualquier comando arbitrario en el contexto del padre. Alguna medida sugerida podría ser utilizar cadenas de comandos predeterminadas o omitir la llamada al sistema por completo y usar spawn en su lugar.
Informes de cumplimiento
Para un reclamo de cumplimiento de MISRA, existen pautas escritas que se han refinado y revisado durante varios años. El último de este documento es MISRA Compliance 2020, que se publicó recientemente en febrero. Desde un punto de vista de alto nivel, contar con un informe del uso de un proceso de desarrollo de software bien ordenado, una lista de exactamente qué pautas se están aplicando y la efectividad de los métodos de aplicación, incluido el grado o nivel de las desviaciones, más Haber tenido en cuenta el estado de todos los componentes de software desarrollados fuera del proyecto es necesario para reclamar el cumplimiento de MISRA. Parasoft DTP proporciona una extensión de informes dedicada que cumple totalmente con los requisitos del estándar de cumplimiento MISRA. DTP lo guiará a través del proceso de construcción del Plan de cumplimiento de las pautas (GEP) y el Plan de recategorización de las pautas (GRP) y generará automáticamente un Resumen de cumplimiento de las pautas (GCS) junto con una lista completa de las desviaciones aprobadas. Los informes automatizados eliminan una gran cantidad de trabajo manual tedioso y habilita a las organizaciones con el proceso de cumplimiento que ahora es obligatorio para las pautas de codificación MISRA.
Conclusión
Hay otras reglas nuevas de MISRA C: Enmienda 2012 de 2 que se destacan como la _Sin retorno especificador de función, el _Atómico especificador de tipo, el _Alinea especificador de alineación y el _Alinear operador. El uso de estos especificadores de tipo desencadenará una infracción de categoría Requerida y no se deben usar, abordando las preocupaciones con la cobertura de C11 y las vulnerabilidades de seguridad.
También están las numerosas actualizaciones de la Enmienda 2 y los reemplazos de texto realizados, que aclaran y mejoran el estándar. Además, es muy importante tener en cuenta nuevamente que, junto con el estándar, los usuarios tienen la publicación de cumplimiento ahora obligatoria y complementaria de las pautas de cumplimiento de MISRA 2020 a seguir. Felicitaciones al grupo de trabajo de MISRA por continuar haciendo un trabajo sobresaliente y brindar una inmensa contribución a la comunidad de software.
Una guía práctica para acelerar el cumplimiento de MISRA C:2012
“MISRA”, “MISRA C” y el logotipo del triángulo son marcas comerciales registradas de The MISRA Consortium Limited. © The MISRA Consortium Limited, 2021. Todos los derechos reservados.