Como alguém poderia realmente obter informações confidenciais de uma partição swap?

8

Quando eu pesquiso no Google, eu só recebo todo tipo de informação sobre como proteger dados confidenciais, como criptografar o swap, e como "perigoso" poderia ser manter um swap "normal" em um sistema linux.

Mas não consegui encontrar nenhum software, método ou "como fazer" para realmente obter (ler) qualquer parte de dados de uma partição swap.

Então, minha pergunta é: sendo um cidadão "normal" vivendo na Europa Ocidental, é realmente necessário apagar ou criptografar a troca no meu computador? E antes que alguém responda "sim", eu posso ter um exemplo de como eu poderia testar e vazar minha própria troca, para que eu possa realmente ver que tipo de dados está desprotegido apesar da minha casa criptografada?

    
por Bob 08.04.2014 / 11:50

2 respostas

10

% bl0ck_qu0te%

É um julgamento pessoal, que depende de quanto você valoriza a privacidade de seus dados e de quanto deseja proteger seus dados de serem expostos se caírem nas mãos de um invasor. Suponha que você tenha um laptop, e um dia ele seja roubado - qual a probabilidade de um ladrão tentar extrair senhas ou chaves de criptografia ou dados particulares, e você se importa? Muitas pessoas não se importam, mas outras o fazem. É certo que a maioria dos ladrões simplesmente venderia o laptop para ganho financeiro imediato, mas há casos em que um invasor pode ser motivado a ir mais longe na tentativa de acessar os dados em si.

% bl0ck_qu0te%

A memória de qualquer processo poderia ser trocada para o espaço de troca. Vazamento de memória pode ser perigoso - o exemplo óbvio é Heartbleed - veja Como eu usei o Heartbleed para roubar a chave de criptografia privada de um site . A memória exposta pelo Heartbleed pertence apenas a um único processo, enquanto a memória potencialmente exposta pelo seu espaço de troca pertence a cada processo. Imagine um processo contendo uma chave privada ou uma lista de senhas (por exemplo, navegador da web) sendo trocada - esses itens aparecerão, em texto simples, no espaço de troca. Extraí-los é uma questão de peneirar a memória para determinados padrões de dados - poderia ser dados ASCII de texto simples visíveis através de strings , ou poderia estar mais envolvido, como em Heartbleed (onde o teste é que alguns bytes consecutivos são um divisor da chave pública de criptografia). Se você tiver uma partição criptografada / inicial, o óbvio é um bloco de dados que forma a chave de criptografia que desbloqueará os dados do usuário.

Um exemplo de trabalho:

  • faça bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000' para criar um processo bash com alguns dados secretos em sua pilha

  • faça sysctl vm.swappiness=100 para aumentar o swappiness (não é necessário, mas pode facilitar o exemplo)

  • execute top -c , pressione f, ative a coluna SWAP, pressione q para voltar para a visualização de processo superior, role para baixo até ver o bash -c process

  • em outro terminal, salve o programa de Chimnay Kanchi de Linux: Como colocar uma carga na memória do sistema? para usemem.c , compilar gcc -o usemem usemem.c e executar usemem & repetidamente em um terminal. Isso vai usar até 512MB de memória por vez. (Não importa o que faz com que a memória seja trocada, pode ser o uso normal do sistema, um processo de fuga ou um ataque deliberado, o resultado final é o mesmo)

  • vigia, espera que bash -c seja trocado (valor da coluna SWAP > 0)

  • agora execute strings /dev/sdaX | grep SECRET onde X é sua paritição de troca

  • Parabéns - você acabou de extrair dados "secretos" da partição swap. você verá várias cópias do texto SECRET seguidas da "senha", as cópias que incluem a linha de comando completa que vazou do processo bash pai, processo superior e o processo 'bash -c'. As linhas que não incluem a linha de comando completa vazaram do processo 'bash -c'.

  • Para provar que os segredos vazam da memória do processo, e não apenas da linha de comando, adicione a linha unsigned char secret[] = "SECRET=XXXX"; ao usemem.c (logo abaixo da linha unsigned long mem; ). Recompile e execute usemem & repetidamente e strings /dev/sdaX | grep SECRET novamente. Desta vez, você verá o segredo 'XXXX' sendo vazado.

por bain 08.05.2014 / 13:38
-1

Esta questão nos leva a uma discussão de problemas entre o desenvolvimento de software, como o software, que mantém os dados confidenciais na memória e na criptografia de dados.

Então, para começar, você deve ler alguns artigos de desenvolvimento prático de software e criptografia de dados.

Comece a ler este artigo: link

Espero que ajude.

    
por Octávio Filipe Gonçalves 08.05.2014 / 12:19