Assinando / Checksumming o kernel para evitar / detectar manipulação

8

Todas as minhas partições são criptografadas ( / e /home ), mas a partição /boot deve permanecer descriptografada e aberta para manipulação. Eu estava pensando em fazer hash do kernel na inicialização e verificar o resultado em relação a um valor armazenado (gerado na compilação, salvo na minha unidade criptografada) para ver se alguém, de alguma forma, manipulou o kernel desde a última inicialização (talvez até fisicamente). Existe um problema em escrever um script desses? Existem programas que já fazem isso?

    
por SkaveRat 21.11.2011 / 20:52

2 respostas

6

O que você está procurando - verificando se o sistema operacional em execução no computador é aquele em que você confia - é chamado de inicialização confiável . (É uma das várias coisas que às vezes são chamadas de inicialização confiável). Seu método proposto não alcança esse objetivo.

A criptografia não fornece integridade de dados ou autenticidade . Em outras palavras, isso não impede que um invasor modifique o conteúdo do seu disco e substitua-o por um sistema operacional malicioso. Este sistema operacional malicioso pode ser facilmente programado para mostrar a soma de verificação que você espera para o kernel carregado.

O caminho mais fácil de ataque é um homem do meio onde o atacante executa seu sistema operacional normal sob algum tipo de máquina virtual. A camada de máquina virtual transmite sua entrada para o sistema operacional desejado e transmite a saída de volta. Mas também grava suas teclas (mmmm, senhas) no lado, espiona chaves privadas da memória do sistema operacional e assim por diante.

Para evitar essa forma de ataque, você precisa ter uma raiz de confiança : um componente do sistema em que você confia por um motivo diferente do que outro componente do sistema diz . Em outras palavras, você tem que começar em algum lugar. Começar com o hardware em sua posse é um bom começo; você poderia manter seu sistema operacional em uma chave USB que não deixa sua visão, e conectá-lo somente em hardware que você tenha confiança suficiente ( hardware pode ter malware !). Se você estiver disposto a confiar no computador, talvez também confie em seu disco rígido.

Existe uma solução técnica para preencher a lacuna entre confiar em um pequeno chip e confiar em todo um desktop ou laptop. Alguns PCs têm um TPM (módulo de plataforma confiável) que pode, entre outros, verificar se apenas um sistema operacional conhecido pode ser inicializado . O Trusted Grub suporta TPMs, portanto, com um TPM mais o Trusted Grub, você pode ter a garantia de que o kernel que está sendo executado é aquele que você aprovou.

Observe que a adoção do TPM pode funcionar a favor ou contra você. Tudo depende de quem tem as chaves. Se você tiver a chave privada para o seu TPM, poderá controlar exatamente o que é executado no seu computador. Se apenas o fabricante tiver a chave privada, é uma maneira de transformar uma plataforma de uso geral em um dispositivo bloqueado.

    
por 22.11.2011 / 02:08
-1

O kernel inicializado reside na memória. Você pode criar um script que o localize em /dev/mem e, conhecendo o tamanho, calcule e verifique sua soma de verificação.

Você também pode ter todo o HD criptografado, sem necessidade de /boot de partição e (quase) nenhuma maneira de modificar o kernel. Como? duas maneiras que eu posso pensar:

  • Coloque o seu kernel em um CD, no qual o computador será inicializado. Isso não é tão difícil; algumas pessoas relataram usar essa configuração há vários anos - veja o segundo post neste tópico do fórum .

  • Se sua placa-mãe é suportada pelo coreboot e tem espaço suficiente para caber em um kernel mínimo, você pode ter criptografia- ativado kernel no seu chip da BIOS. (eu não tive a chance de testar, mas não vejo razão para que isso não funcione.)

Editar: Observe que todos esses são apenas passos únicos para a inicialização "confiável" ou "verificada" (que Gilles apontou corretamente) . O mecanismo completo também deve levar em conta o que está acontecendo no estágio de bootloader e como o hardware subjacente é identificado. Dê uma olhada no como o Google Chromium OS faz isso .

    
por 22.11.2011 / 00:21