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


8

Quando pesquiso essa pergunta no Google, recebo apenas todo tipo de informação sobre como proteger dados confidenciais, como criptografar a troca e como "perigoso" pode ser manter uma troca "normal" em um sistema Linux.

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

Portanto, minha pergunta é: sendo um cidadão "normal" que vive na Europa Ocidental, é realmente necessário limpar ou criptografar a troca no meu computador? E antes que alguém responda "sim", 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?


1
Um método pode ser encontrado nesta questão
Nattgew 08/04

Respostas:


10

sendo um cidadão "normal" que vive na Europa Ocidental, é realmente necessário limpar ou criptografar a troca no meu computador?

É um julgamento pessoal, que depende de quanto você valoriza a privacidade de seus dados e quanto deseja proteger seus dados contra a exposição, caso caiam 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 privados, e você se importa? Muitas pessoas não se importam, mas algumas sim. É certo que a maioria dos ladrões simplesmente venderia o laptop para obter ganhos financeiros imediatos, mas há casos em que um invasor pode estar motivado a ir além na tentativa de acessar os dados em si.

E antes que alguém responda "sim", 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?

A memória de qualquer processo pode ser trocada para o espaço de troca. O vazamento de memória pode ser perigoso - o exemplo óbvio sendo o Heartbleed - veja Como usei o Heartbleed para roubar a chave criptográfica 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 todos os processos. Imagine um processo que contém uma chave privada ou uma lista de senhas (por exemplo, navegador da web) sendo trocadas - esses itens aparecerão, em texto sem formatação, no espaço de troca. Extraí-los é uma questão de vasculhar a memória em busca de padrões específicos de dados - pode ser dados ASCII em texto simples visíveis atravésstrings, ou poderia estar mais envolvido, como no Heartbleed (onde o teste é que alguns bytes consecutivos são um divisor da chave pública de criptografia). Se você possui uma partição criptografada / inicial, o mais óbvio a procurar é um bloco de dados que forma a chave de criptografia que desbloqueia os dados do usuário.

Um exemplo de trabalho:

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

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

  • executar top -c, pressione f, ative a coluna SWAP, pressione q para voltar ao topo da visualização do processo, role para baixo até ver o bash -cprocesso

  • em outro terminal, salve o programa de Chimnay Kanchi no Linux: Como colocar uma carga na memória do sistema? para usemem.c, compilá-lo gcc -o usemem usemem.ce executar usemem &repetidamente em um terminal. Isso usará blocos de 512 MB 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)

  • assista ao topo, aguarde bash -ca troca (valor da coluna SWAP> 0)

  • agora corra strings /dev/sdaX | grep SECRETonde X é a sua troca de parititon

  • Parabéns - você acabou de extrair dados "secretos" da partição swap. você verá várias cópias do texto SECRET, seguidas pela "senha", as cópias que incluem a linha de comando completa vazada do processo principal do bash, do processo principal e do 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";a usemem.c (logo abaixo da unsigned long mem;linha). Recompile e execute usemem &repetidamente e strings /dev/sdaX | grep SECRETnovamente. Desta vez, você verá o segredo 'XXXX' vazando.


+1 para uma boa explicação e um ótimo exemplo.
jobin

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.