Linux sobrescrevendo RAM com zeros no free ()

2

Eu estava apenas imaginando se é possível dizer ao Linux / Ubuntu para sobrescrever a memória livre com zeros antes de permitir que o próximo aplicativo a aloque?

Se não, por que isso não é possível? Eu sei que os programas críticos de segurança (provavelmente) sobrescrevem a memória antes de liberá-la, mas meu palpite é que, se você tiver RAM suficiente disponível, isso não diminuiria a velocidade do sistema. Pelo menos enquanto a chamada gratuita () não estiver bloqueada.

Alguma ideia?

    
por Chris K. 14.01.2016 / 17:30

1 resposta

3

Quando um processo chama free (), ele não retorna a memória imediatamente ao sistema, em vez disso, retorna-a de volta ao heap pertencente a esse processo. O heap usa o mapeamento de memória anônima para grandes blocos ou o sbrk () para reduzir ou aumentar o heap. A memória do heap é retornada ao sistema quando é desmapeada ou o heap encolhe com sbrk (). Neste ponto, as páginas podem ser reutilizadas por outros processos e, quando são reutilizadas, são sempre zeradas antes que o processo possa acessá-las. [1]

alocações de memória, como malloc, não zeram memória quando estão livres para o heap devido a problemas de desempenho. Normalmente, a melhor prática para dados sensíveis deve ser zerada antes de ser liberada. No entanto, eu acho que você quer impor essa polícia para que toda a memória seja liberada durante o tempo de vida de um processo. O glibc 2.4 e superior possui uma opção de ambiente MALLOC_PERTURB_ que, quando configurada para um valor diferente de zero, inicializará a memória para o complemento do valor quando a memória for alocada e quando for liberada com free (). A desvantagem disso é que ele pode acionar bugs no código que erroneamente confiam que a memória seja normalmente inicializada em zero na alocação.

Para usar MALLOC_PERTURB_, por ex. para configurá-lo para um valor aleatório ..

export MALLOC_PERTURB_=$(($RANDOM % 255 + 1))

e execute seu código.

[1] Bem quase. mmap () usando MAP_UNINITIALIZED e um kernel configurado com CONFIG_MMAP_ALLOW_UNINITIALIZED permite a não zeragem de memória, mas isso nunca é permitido no Ubuntu.

    
por Colin Ian King 15.01.2016 / 00:14