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:

O que é o TPM e qual a sua função
O que é o TPM e qual a sua função

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 tabela 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, entre em contato aqui ou comente abaixo!