Como eu corrijo / corrijo os CVEs no pacote zlib do Ubuntu quando uma nova versão não está disponível via apt-get?

6

Tenho várias pilhas de nuvens que estão executando o Ubuntu 14.04.2 e preciso corrigir os CVEs aos quais estou exposto na biblioteca zlib (especificamente zlib1g e zlib1g-dev . Eventualmente, preciso migrar esses sistemas para uma versão mais recente do Ubuntu, no entanto, até que eu tenha resolvido os bloqueadores para atualizar, eu preciso mitigar os CVEs existentes.

  • Quais são as melhores práticas para atualizar os pacotes do sistema?
  • O que eu deveria estar preocupado em quebrar / como testar a regressão funcional?

O que estou testando atualmente é adicionar fontes de versões mais recentes do Ubuntu (por exemplo, artful ):

sudo cp /etc/apt/sources.list /etc/apt/sources.list.d/artful.list
sudo vim /etc/apt/sources.list.d/artful.list  # replace "trusty" with "zesty"
sudo apt-get update

Afixa todos os pacotes a trusty :

$ cat /etc/apt/preferences

Package: *
Pin: release n=trusty
Pin-Priority: 900

Package: *
Pin: release o=Ubuntu
Pin-Priority: -10

Em seguida, atualize pacotes específicos com:

apt-get install --only-upgrade <package> -t zesty

O pacote que preciso atualizar: zlib1g / zlib1g-dev

Atualizar pacotes do sistema não me traz uma versão do zlib1g com o CVE resolvido. Preciso da versão > = 1:1.2.8.dfsg-4 mais próximo é provavelmente 1:1.2.11.dfsg-0ubuntu1 de zesty . Veja:

$ dpkg -s zlib1g | grep Version:
Version: 1:1.2.8.dfsg-1ubuntu1

$ sudo apt-get update && apt-get upgrade

$ dpkg -s zlib1g | grep Version:
Version: 1:1.2.8.dfsg-1ubuntu1

Conteúdo de /etc/apt/sources.list :

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## Uncomment the following two lines to add software from the 'universe'
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty universe
deb http://archive.ubuntu.com/ubuntu/ trusty-updates universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted

deb http://archive.ubuntu.com/ubuntu/ trusty-security main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security main restricted
deb http://archive.ubuntu.com/ubuntu/ trusty-security universe
deb-src http://archive.ubuntu.com/ubuntu/ trusty-security universe
# deb http://archive.ubuntu.com/ubuntu/ trusty-security multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ trusty-security multiverse
    
por Ryan Fisher 31.10.2017 / 20:01

3 respostas

3

Sem mais detalhes do que você está querendo corrigir, e em qual bolso dos repositórios do Ubuntu que o software está em uma determinada versão, é impossível dar uma resposta completa que seja estreita o suficiente.

Mas vou tentar dar uma visão geral de como "corrigir" os problemas de segurança nos pacotes do Ubuntu.

Pacotes de software no Principal e patches de contribuição da comunidade no Universo, via $RELEASE-security repositórios

Para patches de segurança enviados em pacotes pelos usuários para consideração da equipe de segurança nos pacotes Universe, e patches de segurança pela própria equipe de segurança nos pacotes principais do Ubuntu, uma vez lançados eles estão disponíveis nos repositórios $RELEASE-security (por exemplo, xenial-security ) e os repositórios $RELEASE-updates . Dessa forma, você pode simplesmente fazer um sudo apt-get update && sudo apt-get dist-upgrade e obter todos os patches.

O rastreamento dos CVEs individuais no Rastreador CVE permitirá que você saiba se um CVE teve uma correção liberada no Ubuntu ainda, bem como a determinação da equipe do SEcurity do nível de prioridade do CVE e a rapidez com que ele precisa ser endereçado (o padrão é "Médio", independentemente da gravidade do CVE).

Pacotes não atualizados nos repositórios

Nós temos dois problemas aqui. Em primeiro lugar, os pacotes Universe recebem apenas patches quando a comunidade os fornece para a equipe de segurança examinar e revisar. Em segundo lugar, um grande número de pacotes não é atualizado.

Você tem duas soluções para esses problemas: reconstruir os pacotes você mesmo com as correções ou esperar que uma atualização seja reposta nos Repositórios (ou que alguém envie as correções para a equipe de Segurança).

Para a primeira solução, você terá que seguir o Guia de embalagem da etapa 1 até a etapa 3.9 e, em seguida, etapas detalhado na seção 6 se você quiser enviá-los para os repositórios, e construir os pacotes corrigidos localmente no seu sistema e instalá-los.

O processo atual para isso é muito, muito complexo, dependendo do pacote, então é impossível responder aqui.

Software compilado personalizado

Sua única esperança aqui é aplicar patches ao software e recompilar e instalar. Isto é para qualquer coisa onde o software não esteja incluído nos repositórios, ou nos casos em que você tenha coisas instaladas que você tenha compilado em primeiro lugar. O processo para isso é infinitamente variado, então é impossível responder aqui.

    
por Thomas Ward 02.11.2017 / 18:42
1

Se você tem um CVE que precisa ser consertado, e ele não está consertado nos repositórios oficiais do release que você está usando, o que você deve não fazer é baixar e instalar pacotes de um lançamento futuro arbitrário. Tais pacotes podem instalar bem, mas não há garantia de que outros softwares existentes possam interoperar com eles. As ABIs ou APIs podem ter mudado, talvez significativamente, talvez não. Mudanças sutis talvez sejam suficientes para lançar erros difíceis de depurar. (se uma biblioteca não for carregada como esperado, um aplicativo de linha de comando poderá lançar um erro de arquivo não encontrado, mesmo que o arquivo do comando claramente exista!)

O que eu sugiro é:

  1. Verifique se um patch está disponível para a versão que você está usando, seja nos relatórios CVE em outro lugar ou no upstream.
  2. Se for, faça o download e modifique o pacote fonte do pacote em questão: Como obtenho e modifico o código-fonte dos pacotes instalado através do apt-get?
    • Use quilt para aplicar o patch (consulte wiki do Debian ou este Debian hwoto ).
    • Eu sugiro que você bata apenas a parte menos significativa do número da versão (as partes após o último - ) - certamente não bata a peça antes do primeiro : , o número da época.
  3. Instale o pacote assim construído.

Isso tem muito mais probabilidade de manter a compatibilidade com outros componentes do sistema operacional (na medida em que a correção em si não quebra alguma coisa), enquanto ainda permite que você atualize se uma atualização atingir os repositórios do seu release. Dessa forma, você também pode garantir que o CVE específico que você deseja corrigir seja corrigido até onde for possível, o que pode não ser o caso com o pacote de uma versão futura arbitrária.

    
por muru 02.11.2017 / 18:46
1

Veja como eu fiz isso na minha primeira inicialização.

  1. Eu empacotei meu aplicativo em micro-serviços com uma imagem de base de encaixe personalizada. Os micro-serviços foram todos baseados no Node.js, então essa foi a base
  2. Eu implantei esses serviços usando o Kubernetes / Docker Compose em ambientes stage / prod
  3. Guardei essas imagens do Docker no cloud.docker.com, que tem um bom scanner de imagens do Docker que encontra CVEs relevantes observando as imagens.

Foi assim que cheguei aos CVEs relevantes. Então

  1. Eu li os CVE's para ver qual deles é aplicado. Esses 4 CVEs se parecem com:
    • inftrees.c no zlib 1.2.8 pode permitir que invasores dependentes do contexto tem um impacto não especificado, aproveitando a aritmética incorreta do ponteiro.
    • O
    • inffast.c no zlib 1.2.8 pode permitir que invasores dependentes do contexto tem um impacto não especificado, aproveitando a aritmética incorreta do ponteiro.
    • A função inflateMark em infate.c in zlib 1.2.8 pode permitir invasores dependentes do contexto têm impacto não especificado por meio de vetores envolvendo deslocamentos à esquerda de inteiros negativos.
    • A função crc32_big em crc32.c no zlib 1.2.8 pode permitir que invasores dependentes do contexto tenham impacto não especificado por meio de vetores envolvendo cálculos de CRC big-endian.

Para mim, "não especificado" e "dependente do contexto", significa que este é um ataque bastante teórico. Isso significaria que caras mal-intencionados com muito dinheiro queriam arrombar você - ao contrário de bandidos comuns que queriam quebrar alguém. Só você sabe qual é o melhor lugar para colocar seus recursos.

No meu caso, havia CVE do Chrome (o Chrome é a base para o Node.js) que não se aplicava aos meus casos de uso, por isso ignorei-os à espera de correções upstream. Às vezes, havia coisas que precisavam de uma correção imediatamente, então:

  1. Atualizei as imagens do Docker. Como todos os micro-serviços começaram com uma imagem do Docker de base personalizada, eu consegui atualizar as atualizações do Node e do SO com relativa rapidez.
  2. Implante no palco, teste de fumaça no palco e implante na produção.

Eu inventei algumas outras respostas aqui - espero que você consiga o que está procurando.

    
por Michael Cole 02.11.2017 / 18:56

Tags