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 ( InRelease
agora 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-get
uso 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 ...
apt-get
verifica os pacotes usando essas chaves pré-incorporadas locais, porque confia nelas?debian-archive-keyring
pacote.apt-get
verificaRelease
arquivos usando essas chaves e pacotes usando os hashes contidos nos arquivosRelease
ePackages
.