6.2. Mejoras de seguridad en GCC en RHEL 8
This section decribes in detail the changes in GCC related to security and added since the release of Red Hat Enterprise Linux 7.0.
Nuevas advertencias
Se han añadido estas opciones de advertencia:
Opción | Muestra avisos para |
---|---|
|
Llamadas a funciones de manipulación de cadenas acotadas como |
|
Objetos de tipos de clase no triviales manipulados de forma potencialmente insegura por funciones de memoria bruta como La advertencia ayuda a detectar las llamadas que evitan los constructores definidos por el usuario o los operadores de asignación de copias, los punteros de tablas virtuales corruptas, los miembros de datos de tipos o referencias calificados como const, o los punteros de miembros. La advertencia también detecta las llamadas que podrían eludir los controles de acceso a los miembros de datos. |
| Lugares donde la sangría del código da una idea errónea de la estructura de bloques del código a un lector humano. |
|
Llamadas a funciones de asignación de memoria en las que la cantidad de memoria a asignar supera size. También funciona con funciones en las que la asignación se especifica multiplicando dos parámetros y con cualquier función decorada con el atributo |
|
Llamadas a funciones de asignación de memoria que intentan asignar una cantidad cero de memoria. También funciona con funciones en las que la asignación se especifica multiplicando dos parámetros y con cualquier función decorada con el atributo |
|
Todas las llamadas a la función |
|
Llamadas a la función |
| Definiciones de matrices de longitud variable (VLA) que pueden superar el tamaño especificado o cuyo límite no se sabe si está suficientemente restringido. |
|
Desbordamiento de búfer seguro y probable en las llamadas a la familia de funciones de salida formateada |
|
Truncamiento de la salida, tanto seguro como probable, en las llamadas a la familia de funciones de salida formateada |
|
Desbordamiento del búfer en las llamadas a funciones de manejo de cadenas como |
Advertencia de mejoras
Estas advertencias de GCC han sido mejoradas:
-
La opción
-Warray-bounds
se ha mejorado para detectar más casos de índices de matrices y desplazamientos de punteros fuera de los límites. Por ejemplo, se detectan los índices negativos o excesivos en miembros de matrices flexibles y literales de cadena. -
La opción
-Wrestrict
introducida en GCC 7 ha sido mejorada para detectar muchos más casos de accesos solapados a objetos a través de argumentos restringidos a funciones estándar de manipulación de memoria y cadenas comomemcpy
ystrcpy
. -
La opción
-Wnonnull
se ha mejorado para detectar un conjunto más amplio de casos de paso de punteros nulos a funciones que esperan un argumento no nulo (decorado con el atributononnull
).
Nuevo UndefinedBehaviorSanitizer
Se ha añadido un nuevo sanitizador en tiempo de ejecución para detectar comportamientos indefinidos llamado UndefinedBehaviorSanitizer. Cabe destacar las siguientes opciones:
Opción | Consulte |
---|---|
| Detecta la división por cero en coma flotante. |
| Comprueba que el resultado de las conversiones de tipo punto flotante a entero no se desborda. |
| Habilitar la instrumentación de los límites de la matriz y detectar los accesos fuera de los límites. |
| Habilita la comprobación de la alineación y detecta varios objetos desalineados. |
| Habilitar la comprobación del tamaño de los objetos y detectar varios accesos fuera de los límites. |
| Permitir la comprobación de las llamadas a funciones miembro de C, los accesos a miembros y algunas conversiones entre punteros a clases base y derivadas. Además, detecta cuando los objetos referenciados no tienen el tipo dinámico correcto. |
|
Habilitar la comprobación estricta de los límites de los arrays. Esto permite |
| Diagnosticar desbordamientos aritméticos incluso en operaciones aritméticas con vectores genéricos. |
|
Diagnostica en tiempo de ejecución los argumentos no válidos de los buildins prefijados en |
|
Realiza pruebas baratas en tiempo de ejecución para la envoltura de punteros. Incluye comprobaciones de |
Nuevas opciones para AddressSanitizer
Estas opciones se han añadido a AddressSanitizer:
Opción | Consulte |
---|---|
| Advierte sobre la comparación de punteros que apuntan a un objeto de memoria diferente. |
| Advierte sobre la sustracción de punteros que apuntan a un objeto de memoria diferente. |
| Sanear las variables cuya dirección se toma y se utiliza después de un ámbito donde se define la variable. |
Otros desinfectantes e instrumentos
-
Se ha añadido la opción
-fstack-clash-protection
para insertar sondas cuando el espacio de la pila se asigna de forma estática o dinámica para detectar de forma fiable los desbordamientos de la pila y así mitigar el vector de ataque que se basa en el salto de una página de guarda de la pila proporcionada por el sistema operativo. -
Se ha añadido una nueva opción
-fcf-protection=[full|branch|return|none]
para realizar la instrumentación del código y aumentar la seguridad del programa comprobando que las direcciones de destino de las instrucciones de transferencia de flujo de control (como la llamada indirecta a una función, el retorno de una función o el salto indirecto) son válidas.
Recursos adicionales
Para más detalles y explicación de los valores suministrados a algunas de las opciones anteriores, consulte la página del manual gcc(1):
$ man gcc