OpenBSD Mecanismos de proteção de memória que não são habilitados por padrão?

2

Além da opção "S" para malloc.conf e aumentando o kern .stackgap_random e removendo a opção de montagem wxallowed , que outro mecanismo de endurecimento relacionado à memória está no OpenBSD que pode ser ativado e não está habilitado por padrão?

Mesmo opções seriam úteis se tivéssemos que recompilar o kernel, se a modificação mínima do código fonte for necessária.

Geralmente eles não o habilitam porque muitos aplicativos, exemplos de portas podem falhar por causa de código incorreto.

Tentei obter listas / idéias do grsecurity (se houver algum, que já não é usado no OpenBSD), mas é difícil quando você não é um programador: link

    
por Hessnov 09.02.2018 / 09:59

1 resposta

1

"... what else memory-related hardening mechanism are in OpenBSD that can be turned on and it is not enabled by default?

Even options would be useful if we have to re-compile the kernel [or programs I use], if minimal source code modification is needed.".

O que eu desenterrei até agora:

Sempre atualize para a última versão estável do Kernel. Consulte também o link . Leia referências como página de recursos de segurança do OpenBSD da Wikipédia .

Recursos de segurança relacionados à memória do OpenBSD:

  • Randomização do layout do espaço de endereço (ASLR): definindo o sysctl vm.randomize_mmap para 1 (deve estar ativado por padrão, mas está desativado no DragonflyBSD e aparentemente não implementado no FreeBSD).

  • Use timingsafe_bcmp (3) e timingsafe_memcmp (3) em vez de bcmp (3) ou memcmp (3 ).

  • Use a variante explicit_bzero (3) em vez de bzero (3) para limpar a memória sensível (como variáveis de senha) .

  • Position Independent Executables (PIE): Link com -pie ou - pic-executable

    Crie um executável independente de posição. Atualmente, isso é apenas suportado em plataformas ELF . Os executáveis independentes de posição são semelhantes às bibliotecas compartilhadas, pois são realocados pelo vinculador dinâmico para o endereço virtual que o SO escolhe para eles (o que pode variar entre as chamadas). Como os executáveis normais dinamicamente vinculados, eles podem ser executados e os símbolos definidos no executável não podem ser substituídos por bibliotecas compartilhadas.

  • Randomized mmap (2) : não use MAP_FIXED. Verifique com o mquery.

  • Substitua aleatório (): rand (3) , aleatório (3) e rand48 (3) , etc Substituído por arc4random (3) do BSD .

  • Considere usar reallocarray (3) e recallocarray (3) e freezero (3) para dados confidenciais em vez de malloc (3), calloc (3) ou realloc (3).

  • Proteção contra quebra de pilha (SSP): GCC + Propolice (SSP) ativado por padrão para criar todas as bibliotecas e aplicativos.

  • KERN_STACKGAPRANDOM ( kern.stackgap_random ) Define o intervalo do valor aleatório adicionado ao ponteiro da pilha em cada execução do programa. O valor aleatório é adicionado para tornar a exploração do estouro de buffer um pouco mais difícil. Quanto maior o número, mais difícil é forçar a força adicional, mas também significa maior desperdício de memória. Padrão: 262144 .

  • Use o novo strlcpy (3) e strlcat (3) em vez de strcpy (3), strcat (3 ), strncpy (3) ou strncat (3) - permite cópias seguras de cadeias de caracteres.

  • Use a função strtonum (3) em vez da família atoi (3) e strtol (3) de interfaces.

  • Política W ^ X : uma página pode ser gravável ou executável, mas não ambas. Daí W ^ X. A idéia é criar um segmento .rodata apenas com o atributo PROT_READ, portanto, ele perde o atributo PROT_EXEC.

por 15.02.2018 / 05:35