O que é o TPM e qual a sua função
Você alguma vez já ouviu falar de TPM? Não, não é essa TPM aí que você está pensando! Estou falando do Trusted Platform Module. Talvez você já tenha visto na BIOS do seu equipamento ou até mesmo lido alguma coisa a respeito, visto que é uma tecnologia que vem ganhando espaço no mercado de T.I.
Decidi escrever sobre ele depois de ler este artigo no Linux Magazine. Será basicamente uma tradução com algumas observações sobre o meu entendimento do funcionamento do mesmo.
O que é o TPM?
O TPM nada mais é do que um chip que vai soldado em determinadas placas-mãe para oferecer uma camada a mais de segurança de diversas formas. Estarei explicando isso durante o artigo.
Veja abaixo a foto de um chip TPM:
Sua função é fazer com que o boot do sistema operacional seja mais seguro, além de auxiliar na hora de guardar senhas, tanto de dispositivos de hardware, quanto senhas relacionados a serviços como o SSH.
A parte mais interessante é que, determinadas informações, nem mesmo o usuário do sistema pode obter, somente o chip TPM. Isso faz com que ninguém consiga roubar suas informações, apenas se houver o TPM consigo.
Como o TPM armazena as informações?
Durante o processo de boot, o sistema operacional gera diversos hashes para cada fase do mesmo, e faz o envio destas informações ao TPM que, por sua vez, os armazena. Se houver qualquer modificação em uma das fases do processo de boot, esses mesmos hashes serão alterados, e consequentemente, enviados para o TPM de forma diferente.
E o que eu quero dizer com isto? Se o TPM tem gravado o valor “123” e no próximo boot for enviado o valor “135”, sabemos que tem algo de errado, não?
Este processo de comparação de valores é chamado de measurement ou Measured Boot_.
Esses hashes que são gerados durante o processo de boot são armazenados em algumas áreas de memória dinâmica chamadas de PCR – Platform Configuration Registers. Entretanto, a forma como os PCRs gravam as informações é bem diferente do que você está pensando…
Ao invés de gravar somente o valor que está sendo enviado no boot, o valor que é armazenado é uma combinação do valor que já está armazenado com o novo valor que foi enviado. E tudo isso utilizando a criptografia SHA1.
Para simplificar, imaginemos que o valor enviado no novo boot foi Hello World, e o valor armazenado no PCR é c72bf7f5a487b1e75819b5b1d1644ded23c10967, logo, o novo valor será:
SHA1(c72bf7f5a487b1e75819b5b1d1644ded23c10967 || SHA1(“Hello world”))
Isto é, a junção do valor atual com o novo valor em SHA1. Depois, o resultado criptografado novamente em SHA1.
Distribuição de PCRs no processo de boot
Como já falei, diferentes componentes serão verificados durante este processo, e o primeiro deles é a BIOS! Isso mesmo, até no firmware é verificado se houve alguma alteração. Caso ele tenha alguma alteração, o PCR0 será diferente.
Veja aqui uma lista que mostra os valores de cada PCR:
- PCR - Measurement
- PCR0 - System firmware
- PCR1 - System firmware configuration
- PCR2 - Plugin card firmware
- PCR3 - Plugin card firmware configuration
- PCR4 - Partition table and bootloader
- PCR5 - Bootloader configuration
- PCR6 - Suspend and resume events
- PCR7 - Secure Boot configuration
Mas, como você usuário pode visualizar esses valores armazenados? Se o seu sistema operacional foi comprometido de algumas forma, você não pode confiar nos valores mostrados por ele. Isso nos trás até outra vantagem do TPM, a possibilidade de trabalhar com chaves criptografadas!
Chaves criptografadas com o TPM
Lembra que comentei anteriormente que existem informações que nem mesmo o sistema pode coletar, somente o TPM as possui? Então, toda vez que o TPM é inicializado, ele gera uma Storage Root Key (SRK), uma chave mestra que somente ele tem acesso.
Quando uma aplicação solicita ao TPM para gerar um par de chaves, ele o faz e devolve uma chave pública e uma chave privada, até aí tudo OK. O que acontece é que quando devolve a chave privada, ela é criptografada novamente utilizando a _Storage Root Key.
É isso mesmo que você está pensando, tudo relacionado a esta aplicação só poderá ser descriptografado se estiver utilizando o chip TPM que contém a SRK. Por exemplo, se você criptografou o seu disco rígido e alguém o roubou, não conseguirão descriptografá-lo, pois não há a chave mestra.
CUIDADO!
Um cuidado que você deve ter ao utilizar o TPM para segurança do processo de boot é relacionado aos updates do sistema operacional, bem como do seu bootloader. Por exemplo, alterei o Grub2 e rodei um update-grub, logo, ele será modificado e novos hashes serão gerados podendo causar um erro durante o boot no PCR4 (Partition table and bootloader).
Uma forma de combater isso é utilizar o recurso Secure Boot na BIOS (que por sinal vem na maioria dos fabricantes). Este recurso englobará o sistema operacional e o bootloader em um PCR somente – PCR7 (Secure Boot configuration).
TPM 1.2 vs TPM 2.0
Os equipamentos atuais estão sendo vendidos já com o TPM 2.0, que trás novos métodos de criptografias, seguros e modernos. Infelizmente, o suporte para TPM 2.0 no Linux ainda está imaturo.
Alguns sistemas são distribuídos com o TPM 1.2, mas há a possibilidade de usar o TPM 2.0 fazendo uma “gambiarra” emulando por meio do Management Engine da sua CPU. A tecnologia que faz isso é a _Intel Platform Trust Technology.
Algumas montadoras como a Dell, já enviam o equipamento com o hardware compatível entre as duas versões, TPM 1.2 e TPM 2.0, com a configuração podendo ser alterada pela BIOS.
Por hoje é isso galera, espero que tenham gostado!
Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!