Esta é uma ótima pergunta. A resposta é (é claro) bastante complexa, mas deixe-me tentar dividi-la para você. Vamos primeiro olhar para os processos técnicos:
A cadeia de confiança
Não usamos SSL para proteger o APT, usamos hashes criptográficos (SHA256, atualmente) e assinaturas OpenPGP. Isso permite que você confie em espelhos não confiáveis e evita confiar no CA PKI.
Quando você adiciona um repositório ao sources.list
do APT, também precisa adicionar sua chave PGP ao chaveiro confiável do APT, com o comando apt-key
. O chaveiro vem com as chaves para os repositórios do Ubuntu incluídos. E quando você usa o comando apt-add-repository
para adicionar um PPA, ele adiciona a chave (obtida do Launchpad sobre SSL) para você.
A cadeia de confiança é:
- Cada
sources.list
pontos de entrada APT para um arquivoRelease
no repositório, com uma assinaturaRelease.gpg
(ou eles podem ser combinados como um arquivoInRelease
). Este arquivo descreve o repositório e deve ser assinado por uma chave no chaveiro do seu APT. - O arquivo
Release
contém hashes criptográficos de todos os arquivosPackages
eSources
. Estes listam todos os pacotes e versões disponíveis no repositório. - Os arquivos
Packages
eSources
contêm os hashes criptográficos de cada pacote. - Os pacotes em si não são assinados. É desnecessário, há uma cadeia de confiança para eles, do arquivo Release, assinado pelo espelho. No entanto, os pacotes fonte, usados para construir os pacotes binários, são assinados em PGP pelo desenvolvedor que os enviou.
Você pode ler mais sobre o formato do repositório em o wiki do Debian .
Essa cadeia significa que não precisamos confiar em nenhum espelho intermediário, podemos confiar que o pacote que instalamos é idêntico ao presente quando o arquivo Release foi assinado.
Você pode inspecionar o chaveiro do APT executando sudo apt-key finger
.
Verificando as chaves de arquivo do Ubuntu
Como você sabe o que deveria estar lá? Se você não confia em seu computador, não pode confiar em nenhum programa para não mentir para você (como apt-key
), e este exercício é inútil. Então vamos supor que isso seja apenas de interesse acadêmico, e verificar o conteúdo do chaveiro do pacote definitivo, que é o PGP assinado pelo desenvolvedor que fez o upload.
Faça o download do pacote ubuntu-keyring
source e veja o que deve estar lá:
$ apt-get source ubuntu-keyring
Reading package lists... Done
Building dependency tree
Reading state information... Done
Need to get 20.0 kB of source archives.
Get:1 http://localhost/ubuntu/ quantal/main ubuntu-keyring 2012.05.19 (dsc) [1542 B]
Get:2 http://localhost/ubuntu/ quantal/main ubuntu-keyring 2012.05.19 (tar) [18.5 kB]
Fetched 20.0 kB in 0s (0 B/s)
dpkg-source: info: extracting ubuntu-keyring in ubuntu-keyring-2012.05.19
dpkg-source: info: unpacking ubuntu-keyring_2012.05.19.tar.gz
$ gpg --verify ubuntu-keyring_2012.05.19.dsc
gpg: Signature made Sat May 19 03:33:12 2012 SAST
gpg: using RSA key 0x393587D97D86500B
gpg: Good signature from "Colin Watson <[email protected]>"
gpg: aka "Colin Watson <[email protected]>"
gpg: aka "Colin Watson <[email protected]>"
gpg: aka "Colin Watson <[email protected]>"
$ gpg --no-default-keyring --keyring ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg --fingerprint
ubuntu-keyring-2012.05.19/keyrings/ubuntu-archive-keyring.gpg
-------------------------------------------------------------
pub 1024D/0x40976EAF437D05B5 2004-09-12
Key fingerprint = 6302 39CC 130E 1A7F D81A 27B1 4097 6EAF 437D 05B5
uid Ubuntu Archive Automatic Signing Key <[email protected]>
sub 2048g/0x251BEFF479164387 2004-09-12
pub 1024D/0x46181433FBB75451 2004-12-30
Key fingerprint = C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451
uid Ubuntu CD Image Automatic Signing Key <[email protected]>
pub 4096R/0x3B4FE6ACC0B21F32 2012-05-11
Key fingerprint = 790B C727 7767 219C 42C8 6F93 3B4F E6AC C0B2 1F32
uid Ubuntu Archive Automatic Signing Key (2012) <[email protected]>
pub 4096R/0xD94AA3F0EFE21092 2012-05-11
Key fingerprint = 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
uid Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>
Eu sei que na verdade é a assinatura de Colin Watson, como eu o conheci várias vezes e nós verificamos as identidades uns dos outros e assinamos as chaves uns dos outros. Se você tem uma chave no conjunto strong do PGP, você deve ser capaz de encontrar um caminho de confiança para ele. Também sei que posso confiar nele para fazer o upload do pacote ubuntu-keyring
correto.
Para o Debian, existe um pacote ( debian-keyring
) contendo as chaves PGP de todos os Desenvolvedores Debian, e você pode usar isto para verificar as assinaturas do pacote fonte. O Ubuntu não tem um equivalente, mas muitos desenvolvedores do Ubuntu também são desenvolvedores Debian, e todas as chaves PGP do nosso desenvolvedor estão disponíveis em seus perfis no Launchpad.
As outras perguntas
Como sei que as atualizações não são maliciosas?
Tudo se resume a confiar. Você tem que confiar totalmente em todos os repositórios que você usa. Você está dando aos mantenedores de cada repositório permissão para executar coisas como root em sua máquina.
Os pacotes do Ubuntu só podem ser enviados por desenvolvedores do Ubuntu que receberam direitos de upload da Diretoria de associação de desenvolvedores (que eu atualmente atendo em). Para se candidatar a direitos de upload, você deve ser defendido por vários desenvolvedores existentes do Ubuntu que trabalharam com você e confiam em suas habilidades para trabalhar por conta própria. Sem direitos de upload, os uploads precisam ser patrocinados pelos desenvolvedores que têm os direitos (que devem incluir a revisão do upload).
Para atualizações pós-lançamento, o Ubuntu tem diretivas rigorosas sobre o conteúdo das atualizações. Eles devem conter apenas patches mínimos para corrigir erros conhecidos. Os patches são revisados pelos membros das equipes de SRU / Segurança antes de serem aceitos.
Obviamente, os PPAs e os repositórios de terceiros não possuem todas essas restrições. Você tem que confiar nos proprietários do PPA para serem sensatos.
Todo o Ubuntu & amp; Os pacotes PPA têm a fonte disponível, para que possam ser inspecionados por qualquer pessoa.
Existem opções de configuração que tornam o processo mais ou menos prudente e quais são seus padrões?
Você pode desativar a verificação de assinatura no APT, mas é claro que ela está ativada por padrão. Quando você tenta e instala algo de um repositório não assinado / não confiável, o apt faz com que você confirme que realmente deseja fazer isso.
Há ataques conhecidos ou houve vulnerabilidades recentemente?
Eu me lembro de um, erro do Debian 499897 .O Debian contorna isso dando aos Release files uma data de expiração, após a qual eles não são confiáveis. O Ubuntu ainda não suporta isto .