mlock () e mlockall () bloqueiam respectivamente parte ou todo o espaço de endereço virtual do processo de chamada na RAM, impedindo que a memória seja paginada para a área de troca.
A página man tem mais detalhes.
esta questão é específica para Unix e Linux. mas é programação e segurança também.
meu programa obterá uma senha ou chave de descriptografia clara de uma das poucas maneiras (descriptografando um arquivo de senha, perguntando a um agente, etc) e eu quero ter certeza de que não pode ser escrito para trocar espaço antes que ele possa ser removido de memória depois de usá-lo. Eu acho que isso significa obter espaço de endereço não substituível. mas isso normalmente precisa de permissão de root e meu programa precisa ser executado como não raiz. isso pode ser feito de forma portável no Unix? é esperançoso no Linux?
configurar o sistema para não ter espaço de troca não é uma opção porque o usuário do programa provavelmente não tem essa autoridade e, embora isso possa tornar o sistema mais seguro, nem todos os sistemas podem fazer isso.
eu posso fazer isso parte em C embora uma maneira de fazer isso em Python3 também seja legal.
o meu processo não-raiz consegue algumas páginas não trocadas para segurança?
posso evitar que este processo seja suspenso? melhor para sair do que uma senha clara escrita para trocar.
Primeiro devo mencionar que não sou absolutamente especialista em segurança.
Para a parte em python, parece que envolver o mlock em python não é difícil usando ctypes. A partir da seção de limites e permissões do homem para o mlock, parece que um usuário comum pode bloquear uma quantidade limitada de memória. Executar uname -a
no meu sistema me dá max locked memory (kbytes, -l) 64
, o que deve ser suficiente para armazenar uma senha (mas provavelmente você deve cuidar do estouro).
Para a hibernação, você não pode manipular o sinal SIGSTOP
, mas se o seu sistema é elegante, você pode receber SIGTSTP
(veja [um processo pode ser congelado temporariamente no linux] ). Caso você receba apenas SIGSTOP
, [são-senhas armazenadas safe-memory] parece dizer que você está condenado a menos que a criptografia de disco seja usada, o que pode não ser uma solução válida para você. Você pode, no entanto, detectar uma violação manipulando SIGCONT
, mas isso pode ser tarde demais.