Skip to content

Como criptografar seu computador com LUKS e TPM + senha

Published:

Mo­ti­va­ção

O disco prin­ci­pal do meu com­pu­ta­dor é crip­to­gra­fado usando LUKS. Se o seu disco prin­ci­pal não é crip­to­gra­fado, re­co­mendo for­te­mente que use al­guma forma de crip­to­gra­fia para pro­te­ger seus dados. Sem crip­to­gra­fia, qual­quer pes­soa pode re­mo­ver o disco do com­pu­ta­dor e ler todos os ar­qui­vos. Cada sis­tema ope­ra­ci­o­nal ofe­rece uma ou mais so­lu­ções para crip­to­gra­far um disco in­teiro, como o Bi­tloc­ker no Win­dows e o LUKS no Linux.

Porém, a se­gu­rança de um disco crip­to­gra­fado é tão boa quanto a força da sua senha. Me­mo­ri­zar e di­gi­tar uma senha enorme toda vez que ligar seu PC não é muito con­ve­ni­ente. Por­tanto, pro­cu­rei uma so­lu­ção para tra­zer mais se­gu­rança sem pre­ci­sar au­men­tar a com­ple­xi­dade da sua senha. É aí que entra o TPM, um pa­drão de hard­ware de­di­cado a fun­ções de se­gu­rança. No ce­ná­rio mais comum o chip TPM é usado como única chave crip­to­grá­fica do dis­po­si­tivo, o que sig­ni­fica que seria muito di­fí­cil ler os dados ao re­ti­rar o disco do com­pu­ta­dor. Mas como não há ne­nhuma senha, o sis­tema ope­ra­ci­o­nal vai ini­ciar au­to­ma­ti­ca­mente ao ligar o PC, o que tam­bém não é muito se­guro.

Assim, o ob­je­tivo aqui é con­fi­gu­rar uma par­ti­ção LUKS para usar uma chave crip­to­grá­fica ar­ma­ze­nada no chip TPM com­bi­nada com uma senha. Um ata­que de força bruta di­re­ta­mente no disco fora do PC se torna mais di­fí­cil, já que a chave crip­to­grá­fica do TPM é (pro­va­vel­mente) mais com­plexa que ape­nas sua senha. E ten­tar des­blo­quear a par­ti­ção sem re­ti­rar o disco tam­bém se torna mais di­fí­cil já que o TPM impõe uma ve­lo­ci­dade má­xima para cada ten­ta­tiva de au­ten­ti­ca­ção.

Como fazer

As eta­pas foram tes­ta­das no Fe­dora 39, mas devem fun­ci­o­nar em todas as dis­tros que usam dracut (Fe­dora, RHEL, Gen­too, De­bian etc) e systemd.

E, é claro, re­co­mendo ter bac­kup de todas as in­for­ma­ções im­por­tan­tes antes de ten­tar se­guir estas eta­pas.

É es­sen­cial ter pelo menos uma outra senha re­gis­trada na par­ti­ção LUKS para não cor­rer o risco de per­der com­ple­ta­mente seu acesso. O re­co­men­dado é ter uma senha bem longa (como uma sequên­cia de 8 a 12 pa­la­vras, por exem­plo), a qual será usada ape­nas até con­fi­gu­rar a outra senha atre­lada à chave do TPM ou caso o TPM falhe por algum mo­tivo. Se você já tem uma par­ti­ção LUKS com uma senha menor, basta adi­ci­o­nar a senha grande antes de pros­se­guir. Você pode pular essas eta­pas se qui­ser man­ter sua senha atual como senha de re­cu­pe­ra­ção caso o TPM falhe.

Lis­tar slots da par­ti­ção LUKS

Pri­meiro, en­con­tre o ca­mi­nho da par­ti­ção LUKS com o co­mando lsblk -o NAME,FSTYPE,UUID,MOUNTPOINTS. A par­ti­ção será lis­tada com o tipo crypto_LUKS. Anote o nome da par­ti­ção.

Ve­ri­fi­que quais slots estão pre­en­chi­dos:

systemd-cryptenroll /dev/disk

Subs­ti­tuindo disk pelo nome da par­ti­ção.

Adi­ci­o­nar senha de re­cu­pe­ra­ção

Adi­ci­one a senha de re­cu­pe­ra­ção a um novo slot com o se­guinte co­mando:

systemd-cryptenroll /dev/disk --password

Re­mo­ver senha an­tiga (op­ci­o­nal)

A par­tir do re­sul­tado da pri­meira etapa, sa­be­mos qual slot con­tém a senha an­tiga a ser apa­gada. É in­te­res­sante apa­gar a senha an­tiga, pois ela pro­va­vel­mente não é tão forte quanto a senha de re­cu­pe­ra­ção nova, mas é uma etapa op­ci­o­nal. Tenha muito cui­dado ao lim­par slots da par­ti­ção LUKS, você pode aca­bar sem acesso à par­ti­ção se não fizer cor­re­ta­mente. Re­co­mendo ter um bac­kup de todas as in­for­ma­ções.

Antes de apa­gar a senha an­tiga, rei­ni­cie e ve­ri­fi­que se é pos­sí­vel usar a senha nova com su­cesso. So­mente de­pois disso, exe­cute:

systemd-cryptenroll /dev/disk --wipe-slot=SLOT

Tro­cando SLOT pelo nú­mero do slot a ser apa­gado.

Adi­ci­o­nar mó­dulo ao dra­cut

Pri­meiro, é ne­ces­sá­rio ins­ta­lar tpm-tss2, que pro­va­vel­mente es­tará dis­po­ní­vel nos re­po­si­tó­rios da sua dis­tri­bui­ção (tal­vez com o nome tpm2-tools). Em se­guida, adi­ci­one esse mó­dulo ao dracut in­cluindo a se­guinte linha ao ar­quivo /etc/dracut.conf.d/myflags.conf:

add_dracutmodules+=" tpm2-tss "

Ge­ra­mos o ini­tramfs com o mó­dulo tpm2-tss:

dracut --hostonly --no-hostonly-cmdline /boot/initramfs-linux.img

E rei­ni­cie o com­pu­ta­dor.

Adi­ci­o­nar TPM ao LUKS com cryptenroll

Agora, re­gis­tre o token do TPM na par­ti­ção LUKS de in­te­resse. Você pode en­con­trar o ca­mi­nho para a par­ti­ção com o co­mando lsblk -o NAME,FSTYPE,UUID,MOUNTPOINTS. A par­ti­ção será lis­tada com o tipo crypto_LUKS. Anote o nome da par­ti­ção e subs­ti­tua o abc1 em /dev/abc1 abaixo pelo nome.

A opção tpm2-with-pin=yes é a res­pon­sá­vel por ga­ran­tir o com­por­ta­mento de­se­jado de usar a chave ar­ma­ze­nada no TPM e uma senha.

systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/abc1

Será ne­ces­sá­rio di­gi­tar a senha es­co­lhida.

Con­fira que de fato há um token re­gis­trado com o nome systemd-tpm2, bem como um novo slot pre­en­chido.

cryptsetup luksDump /dev/nvme0n1p3

Con­fi­gu­rar cryptsetup

Copie o UUID da par­ti­ção LUKS usando o co­mando lsblk -o NAME,FSTYPE,UUID,MOUNTPOINTS no­va­mente.

Adi­ci­o­nar ao ar­quivo etc/crypttab.initramfs:

root  UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  none  tpm2-device=auto

Tro­cando o UUID pelo có­digo co­pi­ado.

Vamos gerar o ini­tramfs no­va­mente:

dracut --hostonly --no-hostonly-cmdline /boot/initramfs-linux.img

Agora basta rei­ni­ciar e di­gi­tar a senha atre­lada à chave do TPM! Caso a au­ten­ti­ca­ção com a senha atre­lada ao TMP dê er­rado basta usar a senha de re­cu­pe­ra­ção con­fi­gu­rada acima e ten­tar se­guir as eta­pas no­va­mente.

Li­mi­ta­ções

O TPM não é per­feito, na ver­dade há re­la­tos em que foi pos­sí­vel ex­trair a chave do TPM com acesso fí­sico à má­quina. No en­tanto, esse ata­que fun­ci­o­nava jus­ta­mente por­que não havia senha atre­lada à chave do TPM, então a chave era au­to­ma­ti­ca­mente en­vi­ada ao pro­ces­sa­dor para per­mi­tir a lei­tura da par­ti­ção crip­to­grada ao ligar o com­pu­ta­dor. Com o mé­todo des­crito aqui esse ata­que não seria pos­sí­vel. Isso não quer dizer que os chips TPM não pos­sam ter vul­ne­ra­bi­li­da­des. Porém, mesmo no ce­ná­rio em que a chave é ex­traída do TPM ainda seria ne­ces­sá­rio des­co­brir sua senha. Ou seja, no pior ce­ná­rio vol­ta­ría­mos ao nível de se­gu­rança do LUKS com senha sem TPM.


Previous Post
Different lists
Next Post
Como configurar e usar um cluster de Apache Spark em sua rede local