como evitar que um buffer de swap

4

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.

    
por Skaperen 05.05.2015 / 12:38

2 respostas

3

No Linux, use o link mlock

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.

    
por 05.05.2015 / 13:53
0

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.

    
por 05.05.2015 / 14:10