Como é garantida a autenticidade dos pacotes Debian?

8

Quais sistemas e processos de segurança existem para impedir que terceiros mal-intencionados invadam / comprometam a segurança do código nos espelhos do Debian ou para verificar se os pacotes que recebemos são de fato os que os mantenedores pensam que são?

fem
fonte

Respostas:

14

Verificando pacotes

O conteúdo dos espelhos é assinado usando chaves PGP, direta ou indiretamente. Começando na "raiz" de uma distribuição Debian:

  • Release, assinado com uma assinatura desanexada Release.gpg, contém os hashes (MD5, SHA1, SHA256) de todos os índices de pacote e hashes do instalador ( InReleaseagora combina os dois);
  • os índices de pacotes ( por exemplo , binary-amd64) contêm os hashes (MD5 e SHA256) dos pacotes.

Os hashes e assinaturas são verificados por ferramentas como o apt-getuso de chaves PGP armazenadas no sistema (gerenciadas por apt-key). Enquanto o sistema receptor estiver correto, por padrão, nenhum pacote poderá ser instalado a partir dos arquivos da Debian se não tiver sido assinado (indiretamente) pela chave PGP do arquivo. Qualquer intruso nos espelhos não seria capaz de substituir os binários se eles também não tivessem o controle da chave PGP relevante.

Controlando os espelhos

Isso significa que comprometer o arquivo não é suficiente para realmente comprometer os sistemas do usuário final; você também precisará comprometer uma chave PGP na qual esses sistemas já confiam. (Um corolário disso é que adicionar uma chave a um sistema Debian não é algo que deve ser encarado de ânimo leve.) Isso aborda sua primeira pergunta até certo ponto, uma vez que a segurança do arquivo não importa tanto. No entanto, os sistemas críticos (onde a assinatura acontece) são rigorosamente monitorados e supervisionados, e poucas pessoas têm acesso a eles.

Expectativas do mantenedor

Garantir que os pacotes sejam "de fato os mantenedores pensam que são" é um pouco mais envolvido. Este é o caminho percorrido por um pacote:

  • o pacote é preparado por um mantenedor e assinado com uma chave no chaveiro Debian ( isto é, uma chave pertencente a um desenvolvedor Debian que está carregando ou um mantenedor Debian, carregada no servidor de chaveiros Debian e mesclada pela equipe de manutenção do chaveiro);
  • o pacote assinado é carregado no arquivo, onde é verificado (entre outras coisas, as chaves usadas devem estar no chaveiro atual e não devem ter expirado, as assinaturas devem ser válidas e, se o pacote foi assinado por um DM, que O DM deve ter as permissões relevantes para o pacote);
  • todos os binários enviados são enviados para o arquivo final como estão (estou simplificando um pouco aqui, mas esse é o efeito);
  • quaisquer binários ausentes são construídos por um buildd e assinados pela chave PGP do buildd e enviados para o arquivo final (que sabe quais chaves do buildd são válidas e verifica os arquivos com relação a elas);
  • todas essas atualizações acabam sendo enviadas para a rede espelhada, com as atualizações de índice apropriadas (que são assinadas conforme descrito acima).

Se o mantenedor carrega binários junto com a fonte do pacote, esses são os arquivos que acabam sendo veiculados (por enquanto). Como o carregamento de binários agora é opcional, é cada vez mais comum ignorá-los e, eventualmente, os binários enviados serão descartados. (Esse sempre foi o caso no Ubuntu.) Se os outros binários correspondem às expectativas do mantenedor depende da rede buildd; então os acúmulos também são sistemas críticos, sob supervisão rigorosa e com pouco acesso humano. Como todos os artefatos são assinados, sempre é possível verificar a integridade dos arquivos: primeiro contra a chave do mantenedor, depois contra as chaves dos buildds e, finalmente, contra a chave do arquivo morto.

Conforme apontado pelo plugwash , as assinaturas originais não estão disponíveis nos espelhos e qualquer DD pode fazer upload de um binário ausente. As assinaturas originais podem ser recuperadas dos arquivos debian-devel-changes .

Em resumo , embora o sistema atual não seja perfeito, ele fornece rastreabilidade para todos os arquivos que você pode baixar dos espelhos. Existem vários esforços para melhorar a situação: construções reproduzíveis (que permitirão a verificação independente da correspondência dos binários com a fonte publicada), eliminando os binários fornecidos pelo mantenedor ...

Stephen Kitt
fonte
Admiravelmente abrangente, mas você também poderia ter dito razoavelmente ao pôster para ir embora e ler a documentação. :-)
Faheem Mitha
@FaheemMitha Hesitei, mas que documentação? Existe o wiki.debian.org/SecureApt, mas ele não cobre tudo ... Juntar tudo é bastante complexo, a menos que haja outra documentação que eu não conheço!
Stephen Kitt
Então, os sistemas operacionais Debian que os usuários executam têm chaves PGP públicas pré-incorporadas - que são emparelhadas com as chaves privadas nos sistemas críticos (onde a assinatura acontece) - e apt-getverifica os pacotes usando essas chaves pré-incorporadas locais, porque confia nelas?
the_velour_fog 26/05
1
@the_velour_fog sim, isso é (quase) certo; as chaves públicas são enviadas no debian-archive-keyringpacote. apt-getverifica Releasearquivos usando essas chaves e pacotes usando os hashes contidos nos arquivos Releasee Packages.
Stephen Kitt