Mateus Müller

O carinha do Linux

01 mar. 2018

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 PCRPlatform 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!

Comentários Disqus