Assinando / somando o kernel para impedir / detectar manipulação

8

Todas as minhas partições são criptografadas ( /e /home), mas a /bootpartição precisa permanecer não criptografada e está aberta para manipulação. Eu estava pensando em fazer o 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 ao escrever um script desse tipo? Existem programas que já fazem isso?

SkaveRat
fonte

Respostas:

6

O que você procura - verificar se o sistema operacional em execução no computador é confiável - é 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 ou autenticidade dos dados . Em outras palavras, ele não impede que um invasor modifique o conteúdo do seu disco e o substitua por um sistema operacional malicioso. Esse sistema operacional malicioso pode ser facilmente programado para mostrar a soma de verificação que você espera do kernel carregado.

O caminho mais fácil do ataque é um intermediário, onde o invasor executa o sistema operacional normal em algum tipo de máquina virtual. A camada da máquina virtual transmite sua entrada para o sistema operacional desejado e transmite a saída de volta. Mas também grava as teclas digitadas (mmmm, senhas) ao lado, espia 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 que não seja porque algum outro componente do sistema diz isso. Em outras palavras, você precisa começar de algum lugar. Começar com o hardware que você possui é um bom começo; você pode manter o sistema operacional em uma chave USB que não deixa a sua vista e conectá-la somente ao hardware em que você tem confiança suficiente (o hardware pode ter malware !). Lembre-se, se você estiver disposto a confiar no computador, também poderá confiar no 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 possuem 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 você está executando é 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ê possui a chave privada do seu TPM, pode 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.

Gilles 'SO- parar de ser mau'
fonte
1 para a referência a uma grande armadilha potencial de TPM (aka Treacherous Computing)
Eli Heady
Você não fornece soluções reais , apenas mencione frases populares relacionadas à segurança. O que você diz sobre um ataque MITM é uma ameaça que ignora a idéia principal da pergunta do OP: Usar um script de verificação de soma de verificação que permita que o sistema inicialize apenas se determinadas condições forem atendidas. Nesse ponto, não haveria nenhum problema em verificar se o hardware subjacente real é o que deveria ser, não uma VM.
rozcietrzewiacz
-1

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

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

  • Coloque seu kernel em um CD, do qual seu computador inicializará. Isto 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 um kernel habilitado para criptografia no chip do BIOS. (Não tive chance de testar, mas não vejo razão para que isso possa não funcionar.)

Edit: 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 consideração o que está acontecendo no estágio do carregador de inicialização e como o hardware subjacente é identificado. Veja como o Google Chromium OS faz isso .

rozcietrzewiacz
fonte
será que vai dar certo? Não tenho certeza; Não sei de antemão se o kernel modifica seu código na memória após o início. Eu sei que você não pode verificar um módulo dessa maneira, porque o módulo está vinculado ao kernel (alterando alguns endereços aqui e ali) quando está carregado. Fornecerá as propriedades de segurança desejadas? Não, veja minha resposta. A integridade é complicada!
Gilles 'SO- stop be evil' (
Parece que você não leu toda a minha resposta. O primeiro parágrafo, ao qual você se refere, é apenas uma resposta direta ao que realmente foi perguntado. O restante da minha resposta apresenta opções semelhantes ao método que você mencionou, mas melhor , porque elas são seguras contra a modificação do kernel (diferente de um pendrive USB).
rozcietrzewiacz
@Gilles Esqueceu-se de '@' você no comentário anterior. Além disso, acabei de verificar do que você não tinha certeza: fiz um despejo de imagem do kernel na memória, depois adicionei vários módulos, fiz um segundo despejo da região, comparando - o mesmo. Você pode usar isso.
rozcietrzewiacz