Atualmente, estou usando o thunderbird com o gnupg para ler e-mails criptografados. Se eu entender o comportamento da troca corretamente, as páginas de memória que contêm os e-mails descriptografados podem ser trocadas e deixar vestígios no disco rígido que, em teoria, podem ser recuperados posteriormente forenses.
Embora certamente seja possível usar apenas um arquivo de troca criptografado ou desativar a troca global durante o uso de arquivos confidenciais, isso afeta o desempenho, pode ser esquecido e requer privilégios de root.
É possível marcar determinados arquivos ou programas como não sendo trocados? Mesmo sem acesso root? Alguém poderia escrever um aplicativo que possa ser distribuído a usuários tecnicamente ingênuos e cujo conteúdo de memória nunca seja trocado em disco?
fonte
cgexec
nele. Você ainda precisa de acesso root, mas essa é a resolução no nível do administrador. Se você estiver desenvolvendo seu próprio aplicativo, usaria o mlock .mlock
, você deve verificar.Respostas:
Nos comentários, sugeri que você crie um cgroup, defina
memory.swappiness
como zero (para minimizar a troca) e execute seu aplicativo dentro dele. Se você fizesse isso, seu aplicativo provavelmente não seria trocado, a menos que você estivesse com uma memória física tão baixa que trocar páginas por programas nesse cgroup era a única maneira de disponibilizar memória física suficiente.Para fazer isso no RHEL 6.5:
Verifique se o
libcgroup
pacote está instalado. Isso lhe dá acesso a ferramentas de espaço do usuário comocgcreate
ecgexec
.Inicie e ative o
cgconfig
serviço para que as alterações na configuração do cgroup sejam persistentes entre as reinicializações. No RHEL, este serviço também deve montar os sistemas de arquivos necessários embaixo da/cgroup
árvore.Crie o cgroup com
cgcreate -g memory:thunderbird
Defina a troca como zero neste grupo com
cgset -r memory.swappiness=0 thunderbird
Use
cgsnapshot -s > /etc/cgconfig.conf
para salvar uma configuração persistente atualizada para ocgconfig
serviço (todas as alterações até agora foram de tempo de execução. Provavelmente, você desejará salvar o arquivo de configuração padrão em algum lugar e dar uma olhada novamente antes de fazer a configuração persistente.Agora você pode usar
cgexec
para iniciar os aplicativos desejados nothunderbird
cgroup:[root @ xxx601 ~] # cgexec -g memória: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c teste de pilha ssl-build
[root @ xxx601 ~] #
thunderbird
Na verdade, eu não tenho instalado, caso contrário, eu teria feito isso. Não sei por que a formatação do texto acima está desarrumada.Uma alternativa
cgexec
seria iniciar o thunderbird e adicionar o PID aotasks
arquivo do aplicativo. Por exemplo:[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tasks
[root @ xxx601 ~] # pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601 ~] # eco 25926> / cgroup / memory / thunderbird / tasks
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tasks
25926
Mais uma vez, é importante mencionar que isso não impede tecnicamente a troca, mas, sem modificar o aplicativo em si, provavelmente é sua melhor aposta. Acabei de descobrir o
memory.memsw.limit_in_bytes
que parece ser um controle mais direto em forçar a não troca, mas não brinquei com isso o suficiente para me sentir à vontade ao dizer que resolve o problema completamente. Dito isto, pode ser algo para investigar isso.A resposta real seria ter as
mlock
informações confidenciais do aplicativo para contornar esse tipo de preocupação. Estou disposto a apostar que um aplicativo como o Thunderbird faz isso, mas não sei o suficiente sobre os internos para comentar sobre isso.fonte
chroot
emunshare
d--mount
. Faça isso e estou disposto a apostar que o efeito no desempenho final seria melhor do que uma troca criptografada.memory.swappiness=0
que você ache? Eu não saberia - mas estou curioso.MADV_DONTDUMP
. Na maioria das vezes, porém, as pessoas preocupadas em trocar informações confidenciais estão preocupadas com o roubo de laptops e a área de troca sendo vasculhada. No momento em que estão iniciando os despejos básicos, o sistema já foi completamente comprometido.Os aplicativos podem bloquear sua memória para que não possa ser trocada.
Mas não sei como influenciar isso de fora. O aplicativo teria que ser escrito para usar isso sozinho. Com os e-mails, é provavelmente particularmente difícil, pois geralmente envolve também programas externos para a visualização de anexos.
Além disso, mesmo com o memlock, é possível que ele acabe na sua partição de swap - quando você usa a suspensão no disco, que grava toda a memória no disco, independentemente de quaisquer preferências que não sejam de troca.
É mais fácil usar criptografia de disco completo em primeiro lugar.
fonte
Sim, um aplicativo pode impedir que parte de sua memória seja trocada com a
mlock
chamada do sistema. No entanto, isso não é realmente útil no seu caso.Dados confidenciais não estão apenas na memória do aplicativo. Ele acaba em arquivos temporários em vários lugares (
/tmp
,/var/spool
, etc.). O próprio Thunderbird está exibindo o email descriptografado, então você também deve bloqueá-lo na RAM.Se você deseja garantir que seu disco não contenha vestígios de arquivos confidenciais, é necessário criptografar sua troca, bem como todos os locais possíveis de arquivos temporários (em particular,
/tmp
se não for tmpfs, e a maioria/var
, além disso, para o seu diretório pessoal, é claro).O impacto da troca criptografada no desempenho é pequeno ou nulo. A criptografia é muito mais rápida que a E / S do disco.
fonte
chroot
contêiner de espaço para nome eswapoff
seria uma alternativa melhor à troca criptografada. Resposta muito boa - nenhuma outra resposta mencionou outros efeitos no sistema de arquivos. Eu mesmo não tenho umswap
- não possuo nenhum computador com menos de 4 GB de RAM e não vejo nenhum benefício em usá-lo. Seu uso é prático apenas para qualquer uma das máquinas em que a suspensão está relacionada - e isso é fácil de criar scripts.Eu só estou pensando se seria melhor começar com a mudança da prioridade do processo de candidatura on por exemplo com um script de inicialização iniciá-lo com uma alta prioridade utilizando
nice
erenice
e com a mudança de prioridade I / O que, comionice
e depois ver o que acontece.Você pode 'agregar' o aplicativo ao nível de prioridade mais alta, por exemplo,
-20
dessa forma, você ainda deixa o sistema operacional para fazer o que é melhor, tomando a decisão sobre quando trocar os processos do aplicativo.Mas sugeriu por outros que, se você deseja mais controle e granularidade, precisa começar a observar
cgroups
e definirmemory.swappiness
fonte