Vulnerabilidades do boot seguro UEFI no GRUB2 - 2021

Desde o anúncio do grupo de bugs "BootHole" no GRUB2 em julho de 2020, pesquisadores(as) da área de segurança e desenvolvedores(as) no Debian e demais projetos continuam a busca por outros problemas que podem permitir o contorno do boot seguro UEFI. Vários mais tem sido detectados. Veja o alerta de segurança 4867-1 do Debian para mais detalhes completos. O objetivo deste documento é explicar as consequências desta vulnerabilidade de segurança e quais passos estão sendo tomados para remediá-la.

Contexto: o que é o boot seguro UEFI?

O boot seguro UEFI (UEFI Secure Boot - SB) é um mecanismo de verificação para garantir que o código executado por um firmware do UEFI do computador é confiável. Ele é projetado para proteger um sistema contra código malicioso sendo carregado e executado cedo no processo de boot, antes do sistema operacional ter sido carregado.

O SB funciona usando um checksum criptográfico e assinaturas. Cada programa que é carregado pelo firmware inclui uma assinatura e um checksum, e antes de permitir a execução, o firmware verificará se o programa é confiável pela validação do checksum e da assinatura. Quando o SB está habilitado em um sistema, qualquer tentativa de executar um programa não confiável não será permitida. Isto bloqueia códigos não esperados/não autorizados de rodarem no ambiente UEFI.

A maior parte do hardware X86 vem de fábrica com as chaves da Microsoft pré-carregadas. Isto significa que o firmware desses sistemas confiarão nos binários que foram assinados pela Microsoft. A maioria dos sistemas modernos será entregue com o SB habilitado - eles não executarão qualquer código não assinado por padrão, mas é possível alterar a configuração do firmware para, ou desabilitar o SB, ou adicionar chaves de assinatura extras.

O Debian, como muitos outros sistemas operacionais baseados em Linux, usa um programa chamado shim para estender essa confiança do firmware para outros programas que nós precisamos que estejam seguros durante o boot inicial: o gerenciador de inicialização GRUB2, o kernel do Linux e ferramentas de atualização de firmware (fwupd e fwupdate).

Múltiplos bugs do GRUB2 encontrados

Um bug foi encontrado no módulo acpi do GRUB2. Este módulo tem o objetivo de fornecer um driver de interface para ACPI ("Advanced Configuration and Power Interface" - Interface Avançada de Configuração e Energia), um componente muito comum nos hardwares computacionais atuais. Infelizmente o módulo ACPI permite atualmente a um(a) usuário(a) privilegiado(a) carregar tabelas próprias no boot seguro e realizar alterações arbitrárias no estado do sistema: permitindo assim que se possa quebrar facilmente a cadeia de boot seguro. Essa brecha na segurança foi resolvida agora.

Como no caso do BootHole, em vez de simplesmente resolver aquele bug em particular, o pessoal de desenvolvimento continuou com auditorias e análises aprofundadas do código-fonte do GRUB2. Seria irresponsável consertar uma grande falha sem procurar por outras! Foram encontrados alguns outros locais onde as alocações de memória interna poderiam ser sobrecarregadas gerando entradas inesperadas, e alguns outros locais onde a memória poderia ser utilizada após ser liberada. Correções para todas essas falhas foram compartilhadas e testadas pela comunidade.

Novamente, veja o alerta de segurança 4867-1 do Debian para uma lista completa de problemas encontrados.

Revogações de chave necessárias para corrigir a cadeia de boot seguro

O Debian e outros(as) fornecedores(as) de sistemas operacionais obviamente lançarão versões corrigidas do GRUB2 e do Linux. Entretanto, isto pode não ser uma correção completa para os problemas vistos aqui. Intervenientes maliciosos ainda serão capazes de usar versões mais antigas e vulneráveis para contornar o boot seguro.

Para impedir isso, o próximo passo será a Microsoft colocar na lista de bloqueio aqueles binários inseguros para que sejam barrados na execução sob o SB. Isto é alcançado usando a lista DBX, uma funcionalidade do projeto do boot seguro UEFI. Todas as distribuições Linux entregues com cópias do shim assinadas pela Microsoft foram solicitadas a fornecer detalhes dos binários ou chaves envolvidas para facilitar este processo. O arquivo da lista de revogação UEFI será atualizado para incluir esta informação. Em algum ponto no futuro, os sistemas começarão a usar aquela lista atualizada e recusarão a execução dos binários vulneráveis sob o boot seguro.

A linha do tempo exata para que esta mudança seja implementada não está clara ainda. Os(As) fornecedores(as) de BIOS/UEFI incluirão a nova lista de revogação nas novas construções de firmware para novos hardwares em algum momento. Também a Microsoft talvez possa enviar atualizações para sistemas existentes via atualizações do Windows. Algumas distribuições Linux podem enviar atualizações através de seus próprios processos de atualizações de segurança. O Debian ainda não fez isso, mas nós estamos examinando a situação para o futuro.

Quais são os efeitos da revogação de chave?

A maior parte dos(as) fornecedores(as) são cautelosos(as) sobre aplicações automáticas de atualizações que revoguem as chaves usadas no boot seguro. Instalações existentes de software com SB habilitado podem, repentinamente, recusar o boot completamente, a menos que o(a) usuário(a) seja cuidadoso(a) em também instalar todas as atualizações necessárias de software. Sistemas Windows/Linux em dual boot podem repentinamente parar o boot do Linux. Mídias de instalação e live antigas também falharão no boot, é claro, potencialmente fazendo com que seja mais difícil a recuperação de sistemas.

Existem duas maneiras óbvias de consertar um sistema como este que não inicializa:

Ambas podem parecer opções simples, mas cada uma pode consumir muito tempo para usuários(as) com múltiplos sistemas. Também esteja ciente de que, por projeto, habilitar e desabilitar o boot seguro são ações que necessitam de acesso direto à máquina. Normalmente, não é possível alterar essa configuração fora da configuração de firmware do computador. Máquinas servidores remotos podem precisar de cuidado extra aqui, por essa mesma razão.

Devido a esses motivos, é altamente recomendado que todos(as) usuários(as) Debian sejam cautelosos(as) e instalem todas as atualizações recomendadas para seus sistemas tão logo quanto possível, para reduzir as chances de problemas no futuro.

Pacotes e chaves atualizados

Nota: sistemas executando o Debian 9 (stretch) e mais antigos não necessariamente receberão atualizações aqui, uma vez que o Debian 10 (buster) foi a primeira versão do Debian a incluir suporte para boot seguro UEFI.

Há cinco pacotes-fonte no Debian que serão atualizados devido às alterações do boot seguro UEFI descritas aqui:

1. GRUB2

As versões atualizadas do pacote GRUB2 do Debian estão disponíveis agora através do repositório debian-security para a versão do Debian 10 estável (buster). Versões corrigidas logo estarão no repositório normal do Debian para as versões de desenvolvimento do Debian (instável (unstable) e teste (testing)).

2. Linux

As versões atualizadas dos pacotes linux do Debian estarão disponíveis em breve através do repositório buster-proposed-updates para a versão do Debian 10 estável (stable) (buster) e serão incluídas na versão pontual 10.10 que está por vir. Novos pacotes logo estarão no repositório do Debian para versões de desenvolvimento do Debian (instável (unstable) e teste (testing)). Nós esperamos que pacotes corrigidos sejam enviados em breve para buster-backports também.

3. Shim e SBAT

A série de bugs "BootHole" foi a primeira vez que uma revogação de chave em larga escala foi necessária no ecossistema de boot seguro UEFI. Este fato demonstrou uma infeliz falha no projeto de revogação no SB: com uma grande quantidade de diferentes distribuições Linux e binários UEFI, o tamanho da lista de revogação cresceu rapidamente. Muitos sistemas computacionais possuem apenas uma quantidade limitada de espaço para armazenamento de dados de revogação de chaves, podendo ser preenchidos rapidamente, deixando esses sistemas quebrados de várias maneiras.

Para combater esse problema, os(as) desenvolvedores(as) dos pacotes shim criaram um método muito mais eficiente em termos de espaço e tempo para bloquear binários inseguros no UEFI no futuro. O método é chamado SBAT (Secure Boot Advanced Targeting ou "Direcionamento avançado de boot seguro" em tradução livre). O método funciona através do rastreamento da geração de números de programas assinados. Em vez de revogar as assinaturas individualmente no momento em que os problemas são encontrados, contadores são utilizados para indicar quais versões antigas de programas não são consideradas seguras. Revogar uma série antiga de binários do GRUB2, por exemplo, agora se torna um caso de atualizar uma variável UEFI contendo o número de geração para GRUB2; quaisquer versões do GRUB2 mais antigas que esse número não serão mais consideradas seguras. Para muito mais informações sobre o SBAT, acesse a documentação do SBAT.

Infelizmente, o desenvolvimento desse novo shim SBAT ainda não está pronto. Os(As) desenvolvedores(as) esperavam lançar uma nova versão do pacote shim com essa nova e importante funcionalidade, mas encontraram problemas inesperados. O desenvolvimento prossegue. Por toda comunidade Linux é esperado que o pacote shim seja atualizado em breve. Até que esteja pronto, todos(as) nós vamos continuar utilizando nossos atuais binários assinados do shim.

Versões atualizadas do pacote shim do Debian estarão disponíveis assim que o trabalho for finalizado. Eles serão anunciados nos locais apropriados. Nesse momento publicaremos uma nova versão pontual 10.10 junto com o lançamento de novos pacotes shim para as versões de desenvolvimento do Debian (instável (unstable) e teste (testing)).

4. Fwupdate

As versões atualizadas dos pacotes fwupdate do Debian estarão disponíveis em breve através do repositório buster-proposed-updates para a versão do Debian 10 estável (stable) (buster) e serão incluídas na versão pontual 10.10 que está por vir. O fwupdate já havia sido removido das versões instável (unstable) e teste (testing) a um tempo atrás, substituído pelo fwupd.

5. Fwupd

As versões atualizadas dos pacotes fwupd do Debian estarão disponíveis em breve através do repositório buster-proposed-updates para a versão do Debian 10 estável (stable) (buster) e serão incluídas na versão pontual 10.10 que está por vir. Novos pacotes também estão no repositório do Debian para versões de desenvolvimento do Debian (instável (unstable) e teste (testing)).

6. Chaves

O Debian gerou novas chaves de assinaturas e certificados para seus pacotes de boot seguro. Costumávamos utilizar somente um certificado para todos os nossos pacotes:

A partir de agora serão utilizadas chaves e certificados separados para cada um dos cinco tipos diferentes de pacotes envolvidos, o que dará melhor flexibilidade no futuro:

Lançamento pontual Debian 10.10 (buster), mídias de instalação e live atualizadas

Todas as correções descritas aqui estão marcadas para inclusão na versão pontual Debian 10.10 (buster), que será lançada em breve. A versão 10.10 seria, portanto, uma boa escolha para os(as) usuários(as) que procuram mídia do Debian para instalação e live. Imagens anteriores talvez não funcionem com boot seguro no futuro, assim que as revogações forem lançadas.

Mais informações

Muitas outras informações sobre a configuração do boot seguro do Debian estão no wiki do Debian - veja https://wiki.debian.org/SecureBoot.

Outras fontes sobre este tópico incluem: