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=100
para 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 -c
processo
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.c
e 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 -c
a troca (valor da coluna SWAP> 0)
agora corra strings /dev/sdaX | grep SECRET
onde 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 SECRET
novamente. Desta vez, você verá o segredo 'XXXX' vazando.