Oi Todos conhecemos e adoramos produtos para processos de avaliação de vulnerabilidades, como Nessus , Qualys , Max Patrol e todos os tipos de outros OpenVAS . Uma das principais tarefas que eles resolvem é fornecer controle sobre vulnerabilidades com versão.
Esse é um processo bastante simples de comparar as versões de software instaladas com o intervalo "não contém vulnerabilidades conhecidas". Bem, os responsáveis pela segurança da informação, juntamente com o desenvolvimento e os administradores, decidem quais riscos podem ser tomados e quais precisam ser corrigidos hoje.
Existem muitas ferramentas diferentes para resolver esse problema, mas, do nosso ponto de vista, todas elas têm um problema comum - elas exigem uma implantação problemática separada e geram outra ferramenta com uma conta raiz em sua infraestrutura. Afinal, para uma ação tão simples como coletar informações sobre pacotes raiz instalados, não é necessário! E geralmente na infraestrutura já existem sistemas implantados com a capacidade de consolidar dados, colaboração e execução remota de comandos nos servidores. Portanto, decidimos criar uma ferramenta que permitiria alguns cliques para implantar um sistema de monitoramento de vulnerabilidades do Linux em nosso ambiente com alterações mínimas na produção.
O que é implantado na maioria dos sistemas alimentares? Claro, monitorando. E muitas vezes é o Zabbix . Então vamos lá e apertar!
Em uma mão Zabbix
Tudo é simples: um sistema de agente distribuído, painéis para visualização, um sistema de acesso para vários usuários e ações de acordo com os critérios especificados já foram realizadas sem nós. Não precisamos reinventar a roda e fazer tudo do zero.
O Zabbix tem direitos suficientes para receber informações sobre pacotes, onde colocá-los também. Resta combiná-los e enviá-los para análise à API Vulners . E então processe o conhecimento adquirido sobre vulnerabilidades.
Mas vamos começar com uma breve introdução sobre o que o Zabbix pode fazer e o que precisamos fazer.
Os agentes Zabbix são instalados no servidor e permitem:
- Obtenha uma ampla variedade de métricas do sistema operacional
- executar scripts e programas e obter o resultado de sua execução;
- executar qualquer comando em um processo separado (fork), independente dos processos do agente Zabbix;
- trabalhe com vários servidores Zabbix de uma só vez;
- trabalhe atrás de um firewall, iniciando uma conexão com o servidor ou vice-versa, aguardando as conexões de entrada.
O servidor Zabbix recebe as métricas de monitoramento como uma entrada e as grava no banco de dados e conduz o processamento adicional.
Analisando os dados obtidos e com base em uma lógica bastante flexível, ele pode executar várias ações:
- Envie alertas em vários canais (correio, sms, mensagens instantâneas, etc.);
- Conecte-se aos servidores via SSH ou IPMI e execute vários comandos neles;
- Ou execute vários comandos corretivos nos servidores usando as conexões do agente Zabbix com eles;
A interface da web é escrita em PHP e permitirá exibir métricas coletadas pelo Zabbix, gráficos, alertas acionados sobre problemas e comandos e ações executadas pelo sistema de monitoramento.
A administração do Zabbix também é realizada através da interface da web.
A API do Zabbix é uma API baseada na Web e faz parte da interface da Web. Ele usa o protocolo JSON-RPC.
- Permite receber, criar, configurar e excluir qualquer objeto no sistema de monitoramento.
- Usando a API, você pode integrar facilmente o sistema de monitoramento a vários sistemas externos.
No entanto, o Zabbix não sabe nada sobre vulnerabilidades! Mas Vulners sabe sobre eles :)
Por outro lado, os Vulners
Tentamos integrá-los um ao outro e foi isso que aconteceu.
Controle de ameaças do Zabbix
Este é um plug-in Zabbix de código aberto escrito em Python que:
- Exibe informações sobre vulnerabilidades encontradas em sua infraestrutura na interface da web do Zabbix.
- Mostra o nível de ameaça de cada vulnerabilidade de acordo com o padrão CVSS.
- E oferece métodos facilmente aplicáveis para eliminar as vulnerabilidades encontradas.
O CVSS é um padrão aberto do setor para avaliar a criticidade da vulnerabilidade. De fato - escala de 10 pontos.
O uso dessa técnica permite trazer vulnerabilidades encontradas em diferentes sistemas e com propriedades diferentes para um único denominador, o que simplifica a priorização dos problemas detectados.
Nós conversamos sobre esse plugin no
Zabbix Moscow Meetup . Para quem não gosta de ler, mas gosta de assistir - há uma reportagem em
vídeo .
O resultado do plug-in no Zabbix é o seguinte:

Este é um painel no Zabbix. Na qual, da esquerda para a direita, as seguintes informações são exibidas:
- Distribuição da pontuação CVSS pelos servidores. O gráfico mostra o relacionamento - quantos servidores possuímos com vulnerabilidades críticas, quantas vulnerabilidades não críticas possuem ou não possuem vulnerabilidades conhecidas.
- A pontuação média do CVSS de toda a infraestrutura. É exibido na forma de um gráfico, o que permite observar a dinâmica de sua alteração.
- Lista de pacotes vulneráveis com um índice do impacto da vulnerabilidade na infraestrutura.
- Uma lista completa de servidores vulneráveis com um nível de ameaça para cada um deles.
- Lista de boletins de segurança que foram "encontrados" na infraestrutura.
Abaixo em mais detalhes sobre o mais interessante:
Informações sobre servidores vulneráveis:

O painel exibe uma lista de todos os servidores com um nível de vulnerabilidade acima do crítico. O nível mínimo aceitável de criticidade, após o qual o servidor começa a parecer vulnerável, é especificado nas configurações do plug-in.
As seguintes informações estão disponíveis para cada servidor:
- Na verdade, o nome do servidor vulnerável.
- Pontuação máxima do servidor CVSS. A pontuação mais alta de todas as vulnerabilidades encontradas para este servidor é exibida.
- Um comando para eliminar todas as vulnerabilidades detectadas neste servidor. Depois de concluir qual, obtemos um servidor no qual não existem vulnerabilidades versionadas conhecidas.
Os dados são apresentados com a classificação CVSS, do máximo ao mínimo. Isso permite que você mantenha os servidores que exigem mais atenção, sempre no topo da lista, diante de seus olhos.
O painel a seguir mostra os pacotes vulneráveis:

Aqui para cada pacote vulnerável em nossa infraestrutura, temos um breve resumo:
- O nome do pacote vulnerável.
- Versão vulnerável do pacote.
- O número de servidores nos quais a versão vulnerável do pacote está instalada.
- Pontuação do CVSS para esta versão do pacote.
- Índice do impacto dessa vulnerabilidade na infraestrutura.
- Uma lista de todos os servidores nos quais uma versão vulnerável do pacote é detectada.
- Link para o Boletim de Segurança. Permite que você leia e entenda o quão crítica é essa vulnerabilidade em nossa situação.
- A equipe que corrigiu a vulnerabilidade neste pacote.
Os dados são apresentados classificados pelo Índice de Impacto , do máximo ao mínimo.
Índice de impacto é o número de servidores afetados multiplicado pela pontuação de vulnerabilidade do CVSS. Muitas vezes acontece que uma vulnerabilidade com uma pontuação não tão alta é muito mais difundida na infraestrutura e, portanto, potencialmente mais perigosa.
Escolha estratégias de gerenciamento de vulnerabilidades
No entanto, você não pode simplesmente pegar e atualizar todos os pacotes em todos os servidores para a versão mais recente, o que elimina as vulnerabilidades existentes.
Em qualquer infraestrutura composta por mais de vários servidores, existem muitas restrições: a dependência de um software da versão de outro, os riscos de funcionalidade prejudicada e assim por diante.
Portanto, sempre há uma escolha - quais pacotes podemos atualizar sem problemas. Quais pacotes requerem um plano de trabalho separado para a implementação de medidas compensatórias. E pelo que podemos aceitar riscos.
A abordagem proposta no plug-in permite que você escolha a estratégia para eliminar vulnerabilidades mais adequadas para você:
- Uma vulnerabilidade em toda a infraestrutura: se uma vulnerabilidade específica é crítica para você, o plug-in fornece informações sobre onde essa vulnerabilidade existe em sua infraestrutura e como ela pode ser corrigida imediatamente em toda a infraestrutura.
- Todas as vulnerabilidades em um servidor específico: se você precisa de um servidor completamente seguro, por exemplo, localizado na DMZ ou atrás do perímetro da empresa, usando o plug-in, você obtém informações sobre como eliminar todas as vulnerabilidades encontradas nele.
Corrigir vulnerabilidades encontradas
Mas não basta saber quais vulnerabilidades temos e determinar como e quais podem ser corrigidas. Também é necessário fazer isso!
Sistemas como Puppet ou Ansible são amplamente usados para gerenciamento centralizado de configurações e atualizações de software. Você pode usar o comando fix que corrige a vulnerabilidade e executá-lo centralmente usando esses sistemas.
Se sua infraestrutura não usa esses sistemas, o Zabbix Threat Control permite eliminar vulnerabilidades diretamente da interface da web do Zabbix.

Para isso, o plugin usa a funcionalidade padrão do Zabbix: confirmação de eventos e execução de comandos remotos:
- Assim que o problema for confirmado através da interface da web por um usuário autorizado;
- É iniciado um comando remoto que executa no servidor de destino ou na lista de servidores, um comando de correção que corrige a vulnerabilidade.
Como isso funciona

- O servidor Zabbix recebe informações sobre pacotes e o sistema operacional de todos os servidores na infraestrutura por meio de agentes zabbix.
- O plug-in (usando a API do Zabbix) recebe um relatório do SO previamente compilado pelo servidor Zabbix. O plug-in não recebe nada diretamente dos servidores. E nesta fase não requer contato direto com eles.
- Depois de processar as informações recebidas do Zabbix, o plug-in as passa para o Vulners. Da qual ele recebe uma lista de vulnerabilidades encontradas, sua criticidade e uma maneira de eliminá-las.
- O plug-in processa os dados recebidos, os agrega para gerar estatísticas e gera pacotes de dados para transmissão ao Zabbix.
- O plug-in envia os dados do Zabbix no formato de sistema de monitoramento necessário. Ele faz isso usando o utilitário zabbix-sender. Depois disso, você já monitora tudo sobre as vulnerabilidades encontradas, que são exibidas no painel mostrado anteriormente.
- Depois de confirmar o problema, um comando remoto é executado, que passa para o plugin:
- O nome da pessoa que o iniciou
- Equipe de correção de vulnerabilidade
- Lista de servidores
- Tendo recebido todo esse Zabbix Threat Control:
- Verifica se o comando de correção é iniciado por quem precisa dele. Daquele que não é necessário - ele não aceita o comando :)
- Executa o comando transferido para ele no número necessário de servidores.
Por padrão, o plug-in envia um comando de correção para servidores vulneráveis usando o utilitário zabbix-get, acessando o agente Zabbix no servidor de destino com o parâmetro nowait
. Este método de conexão permite que o processo de atualização de pacotes seja executado em segundo plano sem estar vinculado aos processos do agente zabbix. Também é possível executar o comando no servidor de destino por meio de uma conexão SSH simples. A maneira de executar comandos de correção é selecionada como uma opção no arquivo de configuração do plug-in.
E como resultado do trabalho - a ausência de servidores vulneráveis, seu bom sono e bom humor :)
Instalação
Falamos sobre o que é o Zabbix Threat Control , por que é necessário e como funciona. Agora vamos dizer como instalar e configurá-lo!
Dependências
Para funcionar, o plug-in não requer nada sobrenatural. É necessário que no servidor Zabbix no qual definimos o plano, seja o seguinte:
- zabbix v3.4 por usar painéis personalizados (eles apareceram apenas nesta versão).
- O zabbix-sender é necessário para enviar dados de vulnerabilidade ao sistema de monitoramento.
- O zabbix-get envia comandos de correção que corrigem vulnerabilidades aos servidores.
- python v3 com módulos: pyzabbix, jpath, solicitações para executar os principais scripts de plug-in.
Em todos os servidores para os quais é necessária a verificação de vulnerabilidades, apenas:
- zabbix-agent para coletar dados e executar scripts.
- python v2 para executar o script que coleta o relatório do SO.
Instalando o plugin a partir de pacotes
Para começar, conecte o repositório aos pacotes:
Distribuições RPM
rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm
Distribuições DEB
wget https://repo.vulners.com/debian/vulners-repo.deb dpkg -i vulners-repo.deb
Depois disso, no servidor Zabbix, instalamos o pacote principal que fornece toda a lógica do plug-in e o pacote que reporta no sistema operacional:
Distribuições RPM
yum install zabbix-threat-control-main zabbix-threat-control-host
Distribuições DEB
apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host
E em todos os outros servidores que exigem verificação de vulnerabilidades, instalamos um pacote que gera relatórios do SO:
Distribuições RPM
yum install zabbix-threat-control-host
Distribuições DEB
apt-get update && apt-get install zabbix-threat-control-host
Instalação da fonte
Se você preferir a instalação a partir do código-fonte, isso também é muito simples:
No servidor Zabbix, instalamos os principais scripts que fornecem toda a lógica do plug-in e o script que reporta no sistema operacional:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Em todos os outros servidores que exigem verificação de vulnerabilidades, instalamos apenas um script que relata no sistema operacional:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Personalização
Após a instalação, você deve configurar o plug-in e preparar um sistema de monitoramento para sua operação. A seguir, é apresentada uma descrição passo a passo de todas as ações necessárias.
Configurando servidores que requerem varredura
Você deve habilitar o agente Zabbix para executar comandos remotos. Para fazer isso, em todos os servidores para os quais a verificação é necessária, altere os parâmetros no arquivo de configuração do zabbix-agent, conforme mostrado abaixo:
EnableRemoteCommands=1 LogRemoteCommands=1
O arquivo de configuração do agente zabbix geralmente está localizado aqui: /etc/zabbix/zabbix_agentd.conf
Se você deseja usar a funcionalidade para eliminar vulnerabilidades encontradas usando o Zabbix Threat Control , é necessário permitir que o usuário do zabbix atualize os pacotes (mas não os instale ou desinstale).
Para fazer isso, adicione a seguinte linha ao arquivo
/etc/sudoers
:
Para distribuições RPM , a linha é assim:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update *
Para distribuições DEB um pouco diferente:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade *
Conectar-se a Vulners
Para usar a API Vulners, você precisa de uma chave API. Para obtê-lo:
- Inscreva-se no vulners.com
- Na sua conta, vá para a guia API KEYS
- Selecione "Scan" na área Scope e pressione "GENERATE NEW KEY".
Você receberá uma chave API semelhante a esta: RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK

Agora você precisa adicionar a chave API do Vulners ao arquivo de configuração do plugin /opt/monitoring/zabbix-threat-control/ztc_config.py
Um exemplo:
vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK'
Conecte-se ao Zabbix
Para que o plug-in possa conectar-se ao Zabbix, você precisa especificar os seguintes dados no arquivo de configuração: /opt/monitoring/zabbix-threat-control/ztc_config.py
- Endereço da interface web do Zabbix para trabalhar com o Zabbix-API;
- nome de usuário e senha sob os quais nos conectaremos à API do Zabbix.
Nome de domínio e porta do servidor Zabbix para enviar dados usando o utilitário zabbix-sender.
Um exemplo:
zbx_pass = 'yourpassword' zbx_user = 'yourlogin' zbx_url = 'https://zabbixfront.yourdomain.com' zbx_server_fqdn = 'zabbixserver.yourdomain.com' zbx_server_port = '10051'
Preparando o Zabbix
Você deve criar objetos no Zabbix que forneçam o plug-in. Para fazer isso, execute o script /opt/monitoring/zabbix-threat-control/ztc_create.py
. O script verificará se o plug-in está configurado corretamente e, usando a API, ele será criado no Zabbix:
- Grupo de hosts ao qual os hosts que exibem vulnerabilidades são adicionados.
- O modelo pelo qual o relatório do sistema operacional é coletado de todos os servidores.
- Hosts para exibir vulnerabilidades por pacotes, servidores, boletins e estatísticas gerais.
- Uma ação para executar comandos de correção de vulnerabilidade remota.
- Painel para fácil exibição de todas essas informações.

Após criar todos os objetos no Zabbix, o script mostrará:
- Link para o painel criado no Zabbix, no qual as vulnerabilidades serão exibidas.
- A hora em que a verificação da infraestrutura em busca de vulnerabilidades será iniciada.
Após a criação de todos os objetos necessários no Zabbix, você precisa acessar a interface da Web do Zabbix e vincular o modelo "Relatório de SO do Vulner" recém criado pelo script a todos os servidores que exigem verificação de vulnerabilidades.

Depois disso, resta aguardar o início do plug-in no horário especificado durante a instalação.
Scan!
O principal script de processamento de dados ( ztc.py
) é ztc.py
automaticamente, uma vez por dia, através do "Item de Serviço ..." no host "Vulner - Statistics" no horário especificado pelo script.
Você pode alterar a hora de início do plug-in para qualquer conveniente, alterando o "Intervalo de agendamento" neste elemento de dados. Nesse caso, também é necessário ajustar o tempo de coleta das estatísticas nos três elementos de dados do modelo "Vulner OS-Report" - as métricas no modelo devem funcionar 10 a 15 minutos antes da principal métrica "Item de serviço ..." no host "Vulner - Statistics".
O tempo durante o qual todos os dados de vulnerabilidade serão processados depende do número de servidores na infraestrutura e do número de pacotes instalados neles. Aproximadamente 30 minutos são gastos no processamento de mil servidores.
Planos
Esta é apenas a primeira versão do plugin Zabbix Threat Control. E continuamos a desenvolvê-lo.
Os planos:
- Adicione informações nos painéis encontrados na infraestrutura do CVE.
- Recuse instalar quaisquer scripts nos agentes e coletar todas as informações necessárias sobre o SO e os pacotes usando as chaves do elemento de dados incorporadas ao agente Zabbix.
E como é de código aberto - junte-se a nós! Solicitações pull bem-vindas :)