A integração é de código aberto e está no GitHub: Q-Feeds/Q-Feeds-Wazuh-Integration. Descarregue-a sempre de lá para ter a certeza de que tem a versão atual. Precisa de acesso root no manager Wazuh, HTTPS de saída para api.qfeeds.com ou taxii.qfeeds.com e um token API da Q-Feeds ou credenciais TAXII. Consulte Obter os seus threat feeds.
Requisitos
- Manager Wazuh: 4.x ou posterior, instalado em
/var/ossec - Permissões: root no manager
- Pacotes:
curl. O Python vem com o Wazuh, em/var/ossec/framework/python/bin/python3, por isso não precisa de o instalar - Credenciais: um token API da Q-Feeds para o modo padrão, ou utilizador e palavra-passe TAXII para o modo TAXII
- Rede: acesso de saída a
api.qfeeds.comoutaxii.qfeeds.comna porta 443
Obter os scripts
git clone https://github.com/Q-Feeds/Q-Feeds-Wazuh-Integration.git /tmp/qfeeds-wazuh
cd /tmp/qfeeds-wazuh
Não tem git no manager? Descarregue o arquivo:
curl -sL https://github.com/Q-Feeds/Q-Feeds-Wazuh-Integration/archive/refs/heads/main.tar.gz | tar xz -C /tmp
cd /tmp/Q-Feeds-Wazuh-Integration-main
Instalar
sudo bash install.sh
O instalador faz algumas perguntas, escreve a configuração, instala o atualizador, os decoders, as regras e uma tarefa cron, e depois descarrega os feeds pela primeira vez. O que pergunta, por ordem:
- Modo de integração: API padrão ou TAXII 2.1.
- Credenciais: o seu token API, ou o utilizador e palavra-passe TAXII.
- Feeds ou coleções: o que fica ativo. No modo TAXII o instalador descobre a raiz da API e lista as coleções disponíveis.
- Ignorar indicadores expirados (só TAXII): passar à frente os indicadores cuja data
valid_untiljá passou. - IPv6 (modo padrão): incluir endereços IPv6 no feed de IP.
- Active Response: bloquear na firewall local os IPs detetados, com um tempo à sua escolha.
- Lista branca de IP: endereços que nunca devem gerar alerta. Coloque aqui os seus próprios endereços de gestão.
- Agendamento cron: a cada 20 minutos no modo padrão, uma vez por dia a uma hora aleatória no modo TAXII. As coleções TAXII podem ser grandes, por isso as execuções diárias são distribuídas pelos clientes.
- Primeira transferência (só TAXII): pode saltá-la e deixar a primeira execução do cron fazer o trabalho em segundo plano.
O que é instalado
| Componente | Localização |
|---|---|
| Configuração | /etc/qfeeds/qfeeds_wazuh.conf |
| Atualizador | /usr/local/bin/qfeeds-wazuh-updater.py |
| Decoders | /var/ossec/etc/decoders/qfeeds_decoders.xml |
| Regras | /var/ossec/etc/rules/qfeeds_rules.xml |
| Listas CDB | /var/ossec/etc/lists/qfeeds-* |
| Registo | /var/log/qfeeds_wazuh.log |
| Agendamento | crontab do root |
O instalador acrescenta também as referências às listas CDB, e se quiser a configuração do Active Response, ao ficheiro /var/ossec/etc/ossec.conf. Esses blocos ficam entre comentários de marcação para que o desinstalador os possa retirar sem sobras, e é guardada uma cópia do ficheiro original.
Como funciona
- Ciclo de atualização: o atualizador pergunta primeiro à API se a sua licença tem dados novos. Se não tiver, termina sem descarregar nada, e por isso um agendamento a cada vinte minutos não pesa.
- Listas CDB: os indicadores são escritos no formato
key:valuedo Wazuh. No modo padrão o valor fica vazio, no modo TAXII leva o contexto da descrição STIX, por exemplothreat=Trojan;category=Bot C&C. - Regras: as correspondências de IP dão 100200 e 100201, as de domínio de 100210 a 100213, os URLs maliciosos 100220 e os hashes de 100230 a 100232, todas de nível 10 no grupo de regras
qfeeds. - Decoders: o pacote traz um decoder de Unbound DNS, nos formatos RFC5424 e RFC3164, e decoders de Sysmon que separam o campo combinado
Hashesem valores MD5, SHA-1 e SHA-256 individuais. - CIDR: o Wazuh compara intervalos de IP em notação por pontos, por isso só suporta /8, /16, /24 e /32. Os restantes prefixos são ignorados.
- URLs maliciosos: cada entrada é guardada duas vezes, com e sem o esquema, porque os registos de proxy costumam incluir
https://e outras fontes não. - Reinício: o manager só é reiniciado quando as listas mudaram mesmo. O Wazuh 4.x compila as listas CDB nesse reinício.
Verificar
sudo QFEEDS_FORCE_UPDATE=1 /var/ossec/framework/python/bin/python3 /usr/local/bin/qfeeds-wazuh-updater.py
tail -f /var/log/qfeeds_wazuh.log
wc -l /var/ossec/etc/lists/qfeeds-malware-ip
grep -i qfeeds /var/ossec/logs/ossec.log
O primeiro comando força uma atualização e ignora o agendamento da licença, sendo a forma mais rápida de confirmar toda a cadeia. Para testar uma regra, execute /var/ossec/bin/wazuh-logtest e cole uma linha de registo com um endereço da lista.
No dashboard, vá a Threat Hunting e filtre por rule.groups: qfeeds, ou por uma regra concreta como rule.id: 100200.
Configuração
Todas as definições estão em /etc/qfeeds/qfeeds_wazuh.conf. Opções como o token API, o IPv6 e as listas brancas são editadas aí e valem na execução seguinte. Para ligar ou desligar feeds, ou acrescentar o Active Response mais tarde, é mais simples correr o instalador de novo, porque o ficheiro de regras e o ossec.conf têm de mudar com isso.
Deteção de domínios com Unbound
Usa OPNsense com o agente Wazuh e quer que as consultas DNS também sejam verificadas? Ative Log Queries em Services, Unbound DNS, Advanced, deixe o nível de detalhe do registo no valor predefinido e acrescente o registo do resolver à configuração do agente em /var/ossec/etc/ossec.conf no OPNsense:
<localfile>
<log_format>syslog</log_format>
<location>/var/log/resolver/latest.log</location>
</localfile>
Reinicie o agente com service wazuh-agent restart. Tenha em conta que registar consultas custa desempenho ao resolver, que uma atualização do plugin pode sobrescrever este bloco, e que os domínios já bloqueados pela DNSBL do OPNsense nunca chegam ao registo do resolver.
Desinstalar
sudo bash uninstall.sh
Isto remove a tarefa cron, as listas CDB e os respetivos ficheiros compilados, os decoders, as regras, a configuração incluindo credenciais TAXII, o atualizador e os blocos acrescentados ao ossec.conf. As cópias de segurança do ossec.conf são mantidas. A entrada <localfile> do Unbound num agente OPNsense fica intacta, remova-a se já não precisar dela.
Resolução de problemas
- Sem alertas: confirme com
wc -l /var/ossec/etc/lists/qfeeds-malware-ipque as listas têm dados, comgrep qfeeds /var/ossec/etc/ossec.confque as referências estão lá, e reinicie o manager. - O atualizador não transfere nada: leia
tail -50 /var/log/qfeeds_wazuh.loge teste o seu token comcurl -s "https://api.qfeeds.com/licenses?api_token=YOUR_TOKEN". - Listas não compiladas: o Wazuh 4.x trata disso no reinício. Em versões mais antigas execute
sudo /var/ossec/bin/ossec-makelists. - O Active Response não bloqueia: verifique a configuração com
grep -A5 "Q-FEEDS-AR" /var/ossec/etc/ossec.confe o registo/var/ossec/logs/active-responses.log. - Sem alertas de hashes: a comparação de hashes exige o modo TAXII e o Sysmon nos seus postos Windows, com o registo de hashes ativado na configuração do Sysmon.
- Apoio: support@qfeeds.com ou a página de apoio. Encontrou um erro nos scripts? Abra uma issue no repositório do GitHub.