Como sei que as atualizações do meu sistema são confiáveis?

7

Eu atualizo rotineiramente meu sistema sempre que ele me notifica sobre atualizações de software. Esta é uma daquelas coisas que eu confio para trabalhar sem conhecer os detalhes, mas fiquei curioso recentemente: Como eu sei que

  • o processo de verificação de atualizações mostrará apenas atualizações legítimas?
  • as atualizações que recebo e instalo não são maliciosas?

Eu sei que tenho um conjunto de fontes de software que eu mesmo especifico por URL e que, se eu confio nessas fontes, é minha decisão. Mas o que acontece depois que eu especifiquei esses URLs?

Do que é comum nos dias de hoje, eu suspeito que a autenticidade dessas fontes é verfied com algo ao longo das linhas de HTTPS / SSL, i. e. Eu tenho alguns certificados que são verificados contra alguma autoridade, ou seja, eu preciso de certificados de raiz confiáveis instalados em algum lugar (provavelmente eles vêm com o sistema).

Além disso, eu acho que os pacotes são criptograficamente assinados, como com o GPG ou similar.

Essas suposições estão corretas? Onde posso inspecionar chaves / certificados usados? Como posso verificar se são os corretos? Como posso verificar se eles são, de fato, usados? Existem opções de configuração que tornam o processo mais ou menos prudente e quais são seus padrões? Há ataques conhecidos ou houve vulnerabilidades recentemente? Eu pareço lembrar do Windows ter um problema assim há pouco tempo.

Estou no 12.04, mas suponho que isso possa ser respondido de maneira mais geral.

    
por Hanno Fietz 04.01.2013 / 12:03

3 respostas

3

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 é:

  1. Cada sources.list pontos de entrada APT para um arquivo Release no repositório, com uma assinatura Release.gpg (ou eles podem ser combinados como um arquivo InRelease ). Este arquivo descreve o repositório e deve ser assinado por uma chave no chaveiro do seu APT.
  2. O arquivo Release contém hashes criptográficos de todos os arquivos Packages e Sources . Estes listam todos os pacotes e versões disponíveis no repositório.
  3. Os arquivos Packages e Sources contêm os hashes criptográficos de cada pacote.
  4. 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 .

    
por tumbleweed 12.01.2013 / 08:46
4

Não há SSL / https que conheço e não há autoridade de certificação fora do seu computador.

Para verificar se há atualizações, seu computador contata os servidores que você designou como suas origens. Ele baixará um arquivo de índice desses servidores usando o http normal. Esses arquivos de índice são assinados, portanto, ninguém pode fornecer um índice falso, mas o arquivo correto pode ser exibido em qualquer computador, permitindo o fácil uso de espelhos.

Usando este índice, o seu computador calculará quais novos pacotes precisa ser baixado. Novamente, os pacotes serão recuperados usando http normal. Uma soma md5 de cada pacote será verificada com o arquivo de lançamento. Além disso, os pacotes de repositórios oficiais do Ubuntu também são assinados. Algumas fontes de terceiros podem ter pacotes não assinados (mas a verificação do md5 ainda é usada), quando isso acontece, o programa de instalação (apt, Ubuntu Software Center, ...) irá avisá-lo.

Para resumir, a segurança não está nos servidores ou nas conexões, mas nos próprios pacotes. Um invasor invadindo um servidor de atualização não pode danificar seu computador, mas alguém que pode obter uma assinatura válida pode.

Você pode encontrar mais detalhes em uma explicação de segurança para aqui . Para resumir: todos os pacotes têm uma assinatura GPG e o apt confia naqueles que foram emitidos pelas pessoas cuja chave pública está no keychain do apt ( /etc/apt/trusted.gpg )

    
por Javier Rivera 04.01.2013 / 12:19
0

Resposta relacionada: além de verificar a autenticidade das assinaturas de pacotes, você pode levar as coisas um passo adiante e verificar se os sistemas estão totalmente atualizados com os patches de segurança aplicáveis mais recentes com o recurso de relatório de conformidade do Landscape.

É um gráfico de pizza atualizado no local, mostrando quantos e quais sistemas ainda estão vulneráveis. Isso é provavelmente um exagero para uma única pessoa, mas é uma FAQ para grandes empresas e pequenas empresas.

    
por 0xF2 08.01.2013 / 20:13