Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Documentação do SUSE Linux Enterprise Desktop / Guia de Administração / Tarefas comuns / Aplicação de patches dinâmicos no espaço do usuário
Aplica-se a SUSE Linux Enterprise Desktop 15 SP6

12 Aplicação de patches dinâmicos no espaço do usuário

Este capítulo descreve os princípios básicos e o uso de patches dinâmicos no espaço do usuário.

12.1 Sobre a aplicação de patches dinâmicos no espaço do usuário

A aplicação de patches dinâmicos no espaço do usuário (ULP, User Space Live Patching) refere-se ao processo de aplicar patches às bibliotecas usadas por um processo em execução sem o interromper. Sempre que uma correção de segurança estiver disponível como um patch dinâmico, os serviços do cliente serão protegidos após a aplicação do patch dinâmico sem reiniciar os processos.

As operações de aplicação de patches dinâmicos são executadas usando a ferramenta ulp, que faz parte do libpulp. libpulp é uma estrutura que consiste na biblioteca libpulp.so e no binário ulp, que torna as bibliotecas atualizáveis por patch dinâmico e aplica patches dinâmicos.

Dica
Dica

Você pode executar o comando ulp como um usuário normal ou como um usuário privilegiado por meio do mecanismo sudo. A diferença é que a execução do ulp pelo sudo permite ver informações dos processos ou os processos de patch executados pelo root.

12.1.1 Pré-requisitos

Para que a ULP funcione, é necessário cumprir dois requisitos.

  • Instale a ULP no sistema executando:

    > sudo zypper in libpulp0 libpulp-tools
  • Os aplicativos com suporte ao patch dinâmico desejado devem ser iniciados pré-carregando a biblioteca libpulp.so.0. Consulte a Seção 12.1.3, “Usando libpulp para obter mais detalhes.

12.1.2 Bibliotecas suportadas

Atualmente, apenas glibc e openssl (openssl1_1) são suportadas. Pacotes adicionais estarão disponíveis após serem preparados para aplicação de patches dinâmicos. Para receber os patches dinâmicos glibc e openssl, instale ambos os pacotes glibc-livepatches e openssl-livepatches:

> zypper install glibc-livepatches openssl-livepatches

12.1.3 Usando libpulp

Para habilitar o patch dinâmico em um aplicativo, você precisa pré-carregar a biblioteca libpulp.so.0 ao iniciar o aplicativo:

> LD_PRELOAD=/usr/lib64/libpulp.so.0 APPLICATION_CMD

12.1.3.1 Verificando se uma biblioteca é atualizável por patch dinâmico

Para verificar se uma biblioteca é atualizável por patch dinâmico, use o seguinte comando:

> ulp livepatchable PATH_TO_LIBRARY

12.1.3.2 Verificando se um arquivo .so é um container de patches dinâmicos

Um objeto compartilhado (.so) é um container de patches dinâmicos se incorporar a descrição do patch ULP. Você pode verificá-lo com o seguinte comando:

> readelf -S SHARED_OBJECT | grep .ulp

Se a saída mostrar que há seções .ulp e .ulp.rev no objeto compartilhado, ele será um contêiner de patches dinâmicos.

12.1.3.3 Aplicando patches dinâmicos

Os patches dinâmicos são aplicados usando o comando ulp trigger, por exemplo:

> ulp trigger -p PID LIVEPATCH.so

Substitua PID pelo ID do processo em execução que usa a biblioteca que será corrigida, e LIVEPATCH.so pelo arquivo de patch dinâmico real. O comando retorna uma das seguintes mensagens de status:

Êxito

A operação de patch dinâmico foi bem-sucedida.

IGNORADO

O patch foi ignorado porque não foi projetado para nenhuma biblioteca carregada no processo.

ERRO

Ocorreu um erro, e você pode recuperar mais informações inspecionando o buffer interno de mensagens libpulp. Consulte a Seção 12.1.3.6, “Ver fila de mensagens internas” para obter mais informações.

Também é possível aplicar vários patches dinâmicos usando curingas, por exemplo:

> ulp trigger '*.so'

O comando tenta aplicar todos os patches da pasta atual a todos os processos que têm a biblioteca libpulp carregada. Se o patch não for adequado ao processo, ele será automaticamente ignorado. No final, a ferramenta mostra quantos patches ela aplicou com êxito a quantos processos.

12.1.3.4 Revertendo patches dinâmicos

Você pode usar o comando ulp trigger para reverter patches dinâmicos. Há duas maneiras de reverter patches dinâmicos. Você pode reverter um patch dinâmico usando o switch --revert e especificando o contêiner de patches dinâmicos:

> ulp trigger -p PID --revert LIVEPATCH.so

Se preferir, remova todos os patches associados a uma biblioteca específica, por exemplo:

> ulp trigger -p PID --revert-all=LIBRARY

No exemplo, LIBRARY refere-se à biblioteca real, como libcrypto.so.1.1.

A última abordagem pode ser útil quando o código-fonte do patch dinâmico original não está disponível. Ou você deseja remover um patch antigo específico e aplicar um novo enquanto o aplicativo de destino ainda está executando um código seguro, por exemplo:

> ulp trigger -p PID  --revert-all=libcrypto.so.1.1 new_livepatch2.so

12.1.3.5 Ver os patches aplicados

É possível verificar quais aplicativos têm patches dinâmicos executando:

> ulp patches

A saída mostra quais bibliotecas são atualizáveis por patch dinâmico e os patches carregados nos programas, além dos bugs que o patch soluciona:

PID: 10636, name: test
  Livepatchable libraries:
    in /lib64/libc.so.6:
      livepatch: libc_livepatch1.so
        bug labels: jsc#SLE-0000
    in /usr/lib64/libpulp.so.0:

Também é possível ver quais funções são corrigidas pelo patch dinâmico:

> ulp dump LIVEPATCH.so

12.1.3.6 Ver fila de mensagens internas

As mensagens de registro de libpulp.so são armazenadas em um buffer dentro da biblioteca e não são exibidas, a menos que solicitadas pelo usuário. Para mostrar essas mensagens, execute:

> ulp messages -p PID

12.2 Mais informações

Há mais informações sobre o libpulp disponíveis no Git repository do projeto.