6.2. Melhorias de segurança no GCC em 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.
Novos avisos
Estas opções de advertência foram acrescentadas:
Opção | Exibe avisos para |
---|---|
|
Chamadas para funções de manipulação de cordas delimitadas tais como |
|
Objetos de classes não triviais manipulados de maneiras potencialmente inseguras por funções de memória bruta, como O aviso ajuda a detectar chamadas que contornam construtores ou operadores de atribuição de cópia definidos pelo usuário, indicadores de tabela virtual corruptos, membros de dados de tipos ou referências constantes-qualificados, ou indicadores de membros. O aviso também detecta chamadas que contornariam os controles de acesso aos membros dos dados. |
| Lugares onde a recuo do código dá uma idéia enganosa da estrutura do bloco do código para um leitor humano. |
|
Chamadas para funções de alocação de memória onde a quantidade de memória a ser alocada ultrapassa size. Funciona também com funções onde a alocação é especificada multiplicando dois parâmetros e com qualquer função decorada com atributo |
|
Chamadas para funções de alocação de memória que tentam alocar uma quantidade zero de memória. Funciona também com funções onde a alocação é especificada multiplicando dois parâmetros e com qualquer função decorada com atributo |
|
Todas as chamadas para a função |
|
Chamadas para a função |
| Definições de matrizes de comprimento variável (VLA) que podem ou exceder o tamanho especificado ou cujo limite não é conhecido para ser suficientemente limitado. |
|
Tanto certo e provável excesso de buffer em chamadas para a família |
|
Truncagem de saída certa e provável nas chamadas para a família |
|
O excesso de buffer em chamadas para funções de manuseio de strings, como |
Melhorias de advertência
Estas advertências do GCC foram melhoradas:
-
A opção
-Warray-bounds
foi melhorada para detectar mais instâncias de índices de matriz fora dos limites e offsets de ponteiro. Por exemplo, índices negativos ou excessivos em membros de matriz flexível e literais de cordas são detectados. -
A opção
-Wrestrict
introduzida no GCC 7 foi aprimorada para detectar muito mais casos de sobreposição de acessos a objetos através de argumentos restritos e qualificados para funções de memória padrão e manipulação de cordas, tais comomemcpy
estrcpy
. -
A opção
-Wnonnull
foi aperfeiçoada para detectar um conjunto mais amplo de casos de passagem de indicações nulas para funções que esperam um argumento não-nulo (decorado com atributononnull
).
Novo Anti-Comportamento Não Definido
Foi adicionado um novo higienizador de tempo de execução para detectar comportamento indefinido chamado UndefinedBehaviorSanitizer. As seguintes opções são dignas de nota:
Opção | Verifique |
---|---|
| Detectar divisão de ponto flutuante por zero. |
| Verifique se o resultado das conversões de ponto flutuante para inteiro não transborda. |
| Permitir a instrumentação de limites de matriz e detectar acessos fora dos limites. |
| Permitir a verificação do alinhamento e detectar vários objetos desalinhados. |
| Permitir a verificação do tamanho do objeto e detectar vários acessos fora dos limites. |
| Permitir a verificação das chamadas de funções de membros C, acessos de membros e algumas conversões entre apontadores para classes base e derivadas. Além disso, detectar quando os objetos referenciados não têm o tipo dinâmico correto. |
|
Permitir uma verificação rigorosa dos limites da matriz. Isto permite |
| Diagnosticar transbordos aritméticos mesmo em operações aritméticas com vetores genéricos. |
|
Diagnosticar em tempo de execução argumentos inválidos para |
|
Realizar testes de tempo de execução baratos para embrulho de ponteiro. Inclui cheques do site |
Novas opções para o AddressSanitizer
Estas opções foram adicionadas ao AddressSanitizer:
Opção | Verifique |
---|---|
| Advertir sobre a comparação de ponteiros que apontam para um objeto de memória diferente. |
| Advertir sobre a subtração de ponteiros que apontam para um objeto de memória diferente. |
| Sanitizar variáveis cujo endereço é tomado e utilizado após um escopo onde a variável é definida. |
Outros higienizadores e instrumentação
-
A opção
-fstack-clash-protection
foi adicionada para inserir sondas quando o espaço da pilha é alocado de forma estática ou dinâmica para detectar de forma confiável os transbordamentos da pilha e assim mitigar o vetor de ataque que depende de saltar sobre uma página de proteção da pilha fornecida pelo sistema operacional. -
Uma nova opção
-fcf-protection=[full|branch|return|none]
foi adicionada para executar a instrumentação de código e aumentar a segurança do programa, verificando se os endereços-alvo das instruções de transferência de fluxo de controle (tais como chamada de função indireta, retorno de função, salto indireto) são válidos.
Recursos adicionais
Para mais detalhes e explicação dos valores fornecidos a algumas das opções acima, consulte a página do manual gcc(1):
$ homem gcc