É 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 obash -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
, compilargcc -o usemem usemem.c
e executarusemem &
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 linhaunsigned long mem;
). Recompile e executeusemem &
repetidamente estrings /dev/sdaX | grep SECRET
novamente. Desta vez, você verá o segredo 'XXXX' sendo vazado.