how to (english version): https://github.com/cloudfence/opnsense-wazuh
O OPNsense é um poderoso firewall baseado no HardenedBSD com diversos recursos para controle do perímetro de rede. Ele traz funcionalidades vistas apenas em appliances de firewall comerciais, mas com a flexibilidade de uma solução de código aberto e livre.
O Wazuh é uma solução de segurança de endpoint, capaz de monitorar ameaças, integridade do sistema, resposta à incidentes e para normatização (compliance). Ele também é de código livre e permite um alto nível de personalização em suas regras.
Pré-requisitos
- Conhecimentos básicos em firewall OPNsense;
- Conhecimentos intermediários em Wazuh;
Desafio
No dia a dia da área de segurança e gestão de redes, um grande desafio, além de tratar todos os alertas recebidos dos dispositivos da rede, é tomar as ações certas no menor tempo possível. Para mensurar isso, existem duas métricas muito utilizadas pelos Security Operations Centers (SOCs), que são: Mean Time to Detect MTTD e o Mean Time to Respond MTTR. A primeira mensura o tempo médio de detecção e a segunda o tempo médio de resposta, mas como este é assunto extenso e merece um artigo dedicado, por hora tenha em mente estas duas métricas deste ponto em diante no artigo.
O problema começa quando as ferramentas responsáveis pela defesa de cada camada da segurança não se integram, necessitando de ações manuais, que além de tomarem um tempo precioso, aumentam demais o tempo de resposta, sendo algumas vezes tarde demais.
O Wazuh possui um recurso chamado active response, que pode ajudar nestas ações bloqueando temporariamente o IP de origem (no firewall do host) assim que uma ameaça é detectada pelas regras configuradas no servidor Wazuh. Porém, este recurso pode não ser tão eficaz para ameaças persistentes, que ficam tentando explorar brechas em todos os hosts expostos da rede.
No OPNsense há inúmeros recursos, como por ex. o IPS, que podem auxiliar nestas ações de bloqueio automáticas, porém muitas vezes o que está sendo detectado no endpoint (host), pode não estar sendo identificado pelo firewall de perímetro.
E se o agente Wazuh fosse capaz de, ao detectar uma possível ameaça em um host, já bloquear o IP de origem automaticamente no firewall de perímetro, protegendo os outros hosts da rede local? É isso que vamos fazer!
Solução
Para executar os passos deste artigo será necessário que você tenha instalados:
- 1 firewall OPNsense;
- 1 Servidor Wazuh;
- 1 Agente Wazuh; (Linux)
Detalhes da instalação de ambas as ferramentas podem ser encontrados em:
OPNSense: https://wiki.opnsense.org
Wazuh: https://documentation.wazuh.com/current/index.html
Configuração
OPNsense
O primeiro passo é configurar o firewall OPNsense para que ele tenha uma regra de bloqueio pronta para receber os IPs dos agentes Wazuh via chamada API.
Para a configuração da API:
1- Em System: Access: Users crie uma chave API :
2-Será baixado um arquivo TXT com o conteúdo parecido com este:
key=w86XNZob/8Oq8aC5r0kbNarNtdpoQU781fyoeaOBQsBwkXUt secret=XeD26XVrJ5ilAc/EmglCRC+0j2e57tRsjHwFepOseySWLM53pJASeTA3
Salve estes dados em um local seguro e lembre-se de apenas permitir acesso à console de gerenciamento do seu firewall a partir de redes confiáveis ou restritas via VPN. Usaremos estes dados no passo de configuração do Agente Wazuh.
3-Em Firewall: Aliases, crie um Alias de Firewall para receber os IPs à serem banidos:
4-Crie uma regra de bloqueio na interface WAN:
Com este passo finalizamos a configuração necessária no firewall.
Servidor Wazuh
No servidor Wazuh precisaremos criar uma regra de active response. Esta regra dirá aos agentes que, no caso de um IP ser bloqueado 3 vezes em 3 horas, ele será banido no firewall OPNsense. Os ajustes de tempo podem ser configurados por regra e de acordo com suas necessidades, permitindo uma granularidade interessante para ambientes que possuem diferentes serviços sendo monitorados. (ex. SSH, HTTP, IMAP, etc)
1-Crie uma regra personalizada dentro do arquivo:
/var/ossec/etc/rules/local_rules.xml
<rule id="100335" level="10" frequency="3" timeframe="10800">
<if_matched_sid>3357</if_matched_sid>
<description>Same source IP blocked 3 times in 3 hours - will be banned</description>
<same_source_ip />
</rule>
No exemplo acima, foi criada uma regra usando o ID 3357
das regras do serviço SMTP Postfix.
2-Crie um novo bloco command
e outro active-reponse
dentro de:
/var/ossec/etc/ossec.conf
<command>
<name>opnsense-ban</name>
<executable>opnsense-ban.sh</executable>
<expect>srcip</expect>
</command>
<active-response>
<command>opnsense-ban</command>
<location>local</location>
<rules_id>100335</rules_id>
<level>10</level>
</active-response>
Teste a sintaxe dos arquivos alterados para garantir que está tudo OK:
/var/ossec/bin/ossec-analysisd -t
Se tudo estiver OK, faça um reload para que as novas configurações sejam aplicadas:
/var/ossec/bin/ossec-control reload
Agente Wazuh
No agente Wazuh iremos baixar o script que irá fazer a chamada da API para bloqueio do IP no OPNsense.
1-Baixe o script do nosso repositório no Github:
wget https://raw.githubusercontent.com/cloudfence/opnsense-wazuh/master/opnsense-ban.sh -O /var/ossec/active-response/bin/opnsense-ban.sh
2-Dê permissão de execução ao script:
chmod +x /var/ossec/active-response/bin/opnsense-ban.sh
3-Edite o script e altere as configurações de acordo com os dados do seu OPNsense:
# Configuration
KEY="OPNSENSE API KEY"
SECRET="OPNSENSE API SECRET"
URL="https://OPNSENSE_IP/api/firewall/alias_util/add/wazuh_activeresponse"
Substitua a KEY
e a SECRET
com os dados do TXT baixado do seu OPNsense. Altere também o IP do seu firewall na variável URL
Testando
Para efetuar os testes, você pode simular uma conexão maliciosa que irá disparar o recurso de active response no host, além do número de vezes configurados na regra do servidor ou esperar até que situações reais ocorram.
Para monitorar as tentativas em seu agente Wazuh, utilize o comando:
tail -f /var/ossec/logs/active-responses.log
Ao exceder o número de bloqueios, você deverá ver uma linha chamando o script:
Tue May 21 18:55:27 UTC 2019 /var/ossec/active-response/bin/opnsense-ban.sh add - 200.200.200.200 1558464927.10252529 3353
No firewall OPNsense você deverá ver dentro do Alias o IP banido:
Lembre-se de cadastrar seus IPs confiáveis no whitelist do seu servidor Wazuh e de um Alias no seu OPNsense, para evitar que bloqueios indevidos sejam feitos.
Conclusão
Com esta integração temos um sistema de defesa com um menor tempo de reposta, banindo IPs que, pelo comportamento persistente, em sua maioria são máquinas zumbis e com regras bem configuradas no Wazuh irá apenas deixar os “bad guys” de fora!
Caso precise de ajuda tanto com o OPNsense quanto com o Wazuh conte com nosso time de professional services.
Referências:
OPNsense: https://opnsense.org
Wazuh: https://wazuh.com
Repositório Cloudfence: https://github.com/cloudfence/opnsense-wazuh