Um rápido how-to de como instalar o Greenbone Openvas no Ubuntu 20.04, além de uma breve introdução a gestão de vulnerabilidades.
Controle de Atualizações
Data | Atualização |
---|---|
07/07/2021 | Primeira Versão. |
22/12/2021 | Correções de texto, revisão de configuração na nova versão pré-compilada e alterações de scripts e comandos. |
27/12/2021 | Revisão de procedimento de configuração do Postgres, troubleshooting e no script cron. |
Sumário
- Controle de Atualizações
- Sumário
- Introdução
- Por quê gerir vulnerabilidades e como fazer isso
- Um pouco de história
- Instalação e Configuração
- 🎬Vídeos demonstrativos
- 🎁Bônus - Máquina Virtual - Dez 2021
- Agradecimentos
Introdução
Neste post vou passar alguns passos e possíveis armadilhas a serem evitadas para instalação do Openvas, que é um scanner de vulnerabilidades opensource que pode auxiliar seu time na detecção de riscos em seus ativos tecnológicos.
Outra motivação é poder ajudar todas as comunidades que possuem o Português como língua mãe. 🇵🇹 🇧🇷 🇦🇴 🇹🇱 🇲🇿 🇨🇻 🇬🇶 🇬🇼 🇸🇹
Os componentes a serem instalados serão:
-
OpenVas (Open Vulnerability Assessment Scanner) 21.4.3 - Scanner de Vulnerabilidades;
$ openvas --version OpenVAS 21.4.3
-
GVM (Greenbone Vulnerability Manager) 21.4.4 - Responsável por gerenciar as tasks de scan;
$ gvmd --version Greenbone Vulnerability Manager 21.4.4
-
GSA (Greenbone Security Assistant) 21.4.3 - Responsável por prover a interface web para gestão do usuário;
$ gsad --version Greenbone Security Assistant 21.4.3
-
OSP (Open Scanner Protocol) 21.4.3;
$ sudo ospd-openvas --version OSP Server for openvas: 21.4.3
-
Outros componentes auxiliares e bibliotecas.
Por quê gerir vulnerabilidades e como fazer isso
A gestão de vulnerabilidades, apesar de ser apenas uma parte dos seus processos de Gestão de Segurança da Informação, ela é de extrema importância para ter visibilidades dos riscos em seu ambiente.
Algumas boas referências da importância desses processos podem ser encontrados em:
- https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r5.pdf
- https://www.cisecurity.org/controls/continuous-vulnerability-management/
- https://www.pcisecuritystandards.org/documents/PCI_DSS_v3-2-1.pdf
Suriro os seguintes passos para uma boa gestão de vulnerabilidades seja conduzida:
- Ter uma lista de todos os ativos de sua organização, assim como domínios e subdomínios, redes externas e internas;
- Saber quais são os seus ativos críticos para o funcionamento da organização;
- Manter a lista de ativos suas criticidades atualizadas;
- Organizar as agendas de scan destes ativos;
- Realizar análise e triagem dos relatórios destes scans, além de avaliar possíveis falsos positivos;
- Reportar vulnerabilidades, dando ênfase em vulnerabilidades altas e críticas, e riscos em ativos críticos;
- Realizar follow-ups periódicos com os times responsáveis pelas correções;
- Voltar ao item 3.
Um pouco de história
Em 2005, os desenvolvedores do scanner de vulnerabilidade Nessus decidiram descontinuar o trabalho em modelo opensource
e mudar para um modelo de negócios proprietário.
Neste ponto, os desenvolvedores da Intevation e DN-Systems - as duas empresas que mais tarde fundariam a Greenbone Networks - já estavam contribuindo com desenvolvimentos para o Nessus, com foco em ferramentas de cliente. Os trabalhos foram apoiados principalmente pelo Escritório Federal Alemão de Segurança da Informação (BSI).
Instalação e Configuração
Tudo o que será feito abaixo será com base em um repositório pronto para o Ubuntu. Mas se você quiser pode baixar os fontes, compilar e configurar da forma que quiser, basta acessar o repositório da Greenbone no Github: https://github.com/greenbone/
Vamos utilzar o repositório criado por Mohammad Razavi.
https://launchpad.net/~mrazavi/+archive/ubuntu/gvm
Iniciaremos configurando a hora local do sistema operacional. No meu caso, vou definir a hora aqui de São Paulo.
sudo timedatectl set-timezone America/Sao_Paulo
Adicione o repositório necessário.
sudo add-apt-repository ppa:mrazavi/gvm
Atualize a lista de repositórios do Ubuntu e atualize o sistema operacional.
sudo apt update && sudo apt dist-upgrade
Instalação do Postgresql
Instale o Postgresql.
sudo apt install postgresql
Habilite o serviço.
sudo systemctl enable postgresql
Reinicie o serviço do Postgresql
sudo systemctl restart postgresql
Instalação do OpenVAS
sudo apt install gvm
Configuração do Redis
O Redis será utilizado para armazenar toda a documentação do OpenVas, sem ele nenhum scan iniciará. Basta seguir com a configuração padrão.
Configuração do Postgresql
Pode seguir com a configuração pelo módulo gvmd-pg
.
Em nosso exemplo, utilizaremos um Postgresql local, portando vamos seguir com localhost
.
Como vamos utilizar a autenticação ident
do Posgresql, vamos deixar a senha em branco.
Precisamos realizar apenas um pequeno ajuste nas roles do usuário gvmduser
.
sudo -i -u postgres
psql -U postgres
CREATE ROLE gvm;
alter role gvm with login Superuser Createrole CreateDB Replication BypassRLS;
grant gvm to gvmduser;
revoke dba from gvmduser;
Saia do terminal do Postgres:
exit
Ajustando socket ao scanner
Nesta ultima versão pré-compilada, também é necessário realizar um pequeno ajuste para atribuir o arquivo de socket correto ao scanner do OpenVAS. Sem este ajuste não será possível construir os feed e configurações do OpenVAS.
Primeiro vamos obter as informações de socket e scanner a atribuir às suas respectivas variáveis. Copie o bloco inteiro de comando abaixo, cole e execute em ser terminal:
socket=$(cat /etc/gvm/ospd-openvas.conf | grep unix_socket | cut -d " " -f 3) ; \
scanner=$(sudo -u gvm -g gvm gvmd --get-scanners | grep OpenVAS | cut -d " " -f 1)
Agora vamos configurar o gvmd
com as informações corretas.
sudo -u gvm -g gvm gvmd --modify-scanner=$scanner --scanner-host=$socket
Instalando pacotes adicionais
sudo apt install texlive-fonts-recommended xsltproc xmlstarlet zip -y
sudo apt install texlive-latex-extra --no-install-recommends -y
☕Atualização dos feeds
Siga a sequência abaixo para atualização dos feeds de novas configurações e vulnerabilidades emergentes.
A partir daqui, a cada passo pode buscar um café ou chimarrão, porque vai levar tempo. 🧉
Aproveite para ler o cada feed irá trazer ao ser server em https://docs.greenbone.net/GSM-Manual/gos-21.04/en/managing-secinfo.html.
sudo -u gvm -g gvm greenbone-nvt-sync
sudo -u gvm -g gvm greenbone-feed-sync --type GVMD_DATA
sudo -u gvm -g gvm greenbone-feed-sync --type SCAP
Em background o processo continuará populando o banco de dandos. Antes de ir para o próximo passo, aguarde até o fim deste processo observando o arquivo de log conforme é demonstrado na imagem abaixo ao executar o comando sudo tail -f /var/log/gvm/gvmd.log
.
sudo -u gvm -g gvm greenbone-feed-sync --type CERT
Em background o processo continuará populando o banco de dandos. Antes de ir para o próximo passo, aguarde até o fim deste processo observando o arquivo de log conforme é demonstrado na imagem abaixo ao executar o comando sudo tail -f /var/log/gvm/gvmd.log
.
Tudo isso que fizemos acima, iremos automatizar nos capítulos seguintes. 😜
Atualizando certificados
Esta tarefa pode ser necessária para corrigir problemas de comunicação entre o GVM e o Openvas Scanner, assim precisando reconfigu os certificados.
sudo -u gvm -g gvm gvm-manage-certs -f -a
Configurando o GSA (Web Interface) para acesso externo
A princípio, o módulo GSA (Greenbone Security Assistant), que é responsável pelo gerenciamento da interface web, não permitie acesso de fora do servidor do Openvas. Para permitir acessos externos a interface web é necessário alterar o parâmetro GSAD_ADDRESS
de 127.0.0.1
para 0.0.0.0
.
Você pode utilizar o sed
…
Adicionalmente, iremos habilitar o HTTPS para acessar a manager com criptografia.
cd /etc/default ;\
sudo sed -i 's/127.0.0.1/0.0.0.0/g' gsad ; \
sudo sed -i 's/GSAD_OPTIONS=" --http-only"//g' gsad
Ou simplesmente alterando o arquivo do serviço.
vim /etc/default/gsad
Recarregue as novas configurações dos serviços.
sudo systemctl daemon-reload
Reinicie todos os serviços instalados.
sudo systemctl restart ospd-openvas gsad gvmd
🥳Acessando o OpenVAS!
Agora basta acessar a interface na porta 9392
.
Credenciais: admin/admin
https://IP_DO_SERVIDOR:9392
🤖Configurando cron para atualização dos feeds diariamente
Precisaremos que todos os dias sejam atualizadas a lista de vulnerabilidades a partir dos feeds.
Vamos criar um script de atualização do feed.
sudo vim /usr/local/bin/gvm-feedupdate.sh
#!/bin/bash
/usr/bin/greenbone-nvt-sync &
wait $!
echo "\nFinalizado NVT Update.\n"
/usr/sbin/greenbone-feed-sync --type GVMD_DATA &
wait $!
echo "\nFinalizado GVM_DATA Update.\n"
/usr/sbin/greenbone-feed-sync --type SCAP &
wait $!
echo "\nFinalizado SCAP Update.\n"
/usr/sbin/greenbone-feed-sync --type CERT &
wait $!
echo "\nFinalizado CERT Update.\n"
Precisarmos dar permissão de execução e passar a propriedade do script para o usuário gvm
.
sudo chmod +x /usr/local/bin/gvm-feedupdate.sh ; sudo chown gvm.gvm /usr/local/bin/gvm-feedupdate.sh
Agora, vamos adicionar o agendamento no crontab do usuario gvm
:
sudo -u gvm -g gvm crontab -e
Adicione linha a seguir em nosso arquivo. Ele o sistema operacional agendará para que todos os dias, ao meio dia, seja executada a série de comandos para atualização dos feeds, e que grave em update_feed.log
os logs do update.
0 12 1 * * bash /usr/local/bin/gvm-feedupdate.sh
Ficará mais ou menos assim:
Deu pau?
Leia os logs!
Todos os logs estão em /var/log/gvm
. Se em algum momento tiver algum problema com a aplicação, verique o que ocorre lendo os logs.
$ ls -lh /var/log/gvm/
total 68K
-rw-r--r-- 1 gvm gvm 2.2K Dec 26 19:58 gsad.log
-rw------- 1 gvm gvm 43K Dec 26 19:15 gvmd.log
-rw-r--r-- 1 gvm gvm 8.3K Dec 26 19:35 openvas.log
-rw-r--r-- 1 gvm gvm 1.9K Dec 26 17:04 ospd-openvas.log
No momento da instalação, se suspeitar que há algo errado bom o Postrgresql, basta olhar seu log tabém para investigação em /var/log/postgresql/postgresql*.log
.
Reconstruindo NVTs e Configurações
Pode acontecer de no momento da atualização dos feeds por alguma instabilidade de rede ocorrer algum interrupção e por sua vez crashear o banco dos NVTs (Network Vulnerability Tests) e demais configurações do scanner, como lista de portas, templates de scan, etc. Para resolver esse problema basta executar os comandos abaixo, e realizar os feeds.
export $(sudo cat /etc/default/gvmd-pg)
sudo -E -u gvm -g gvm gvmd --rebuild
sudo -E -u gvm -g gvm gvmd --rebuild-gvmd-data=all
sudo -E -u gvm -g gvm gvmd --rebuild-scap=all
Reinicie todos os serviços instalados.
sudo systemctl restart ospd-openvas gsad gvmd
Criando novos usuários
Você pode utilizar a facilidade da linha de comando para já iniciar a criação de usuários.
Primeiro de tudo, você deve entender qual a função do usuário a ser criado, você pode obter as roles disponíveis da seguinte forma:
$ sudo -u gvm -g gvm gvmd --get-roles
Admin
Guest
Info
Monitor
User
Super Admin
Observer
Usando como exemplo que o usuário será o “todo poderoso” , ele deve ter a role de Super Admin
. Caso ele tenha toda a liberdade de configurar scans, targets e configurações, porém você não quer que ele veja os scans de outros usuários também administradores, ele deve conter a role Admin
.
Para criar o usuário com a role desejada, basta usar o comando de exemplo abaixo:
sudo -u gvm -g gvm gvmd --create-user="tiago.tavares" --password="SENHA" --role="Super Admin"
🎬Vídeos demonstrativos
Segue alguns vídeos para facilitar o início da utilização.
Criando grupos de alvos
Criando tarefa de scan
Exportando relatório em PDF
Exportando relatório em PDF com filtro de severidade
🎁Bônus - Máquina Virtual - Dez 2021
Caso tenha problemas na instalação ou queira realizar um assessment rápido basta baixar a máquina virtual (VMware) clicando aqui.
Lembre-se logar no Ubuntu e atualizar os feed, conforme mostro acima.
Agradecimentos
Abro este espaço também para agradecer a toda comunidade que me retornou ótimos feedbacks e me ajudou a melhorar o procedimento. Obrigado Maicon Triches pelo apoio nas melhorias!
👾