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)
Topologia – Exemplo da integração Wazuh x OPNsense

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:

O Alias pode ficar vazio. Ele será populado com os IPs inseridos pelos agentes Wazuh.

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

PRODUTOS

Para empresas que preferem o controle e segurança de um ambiente próprio

SOLUÇÕES

Para empresas que precisam da flexibilidade e disponibilidade da nuvem

PRODUTOS

Para empresas que preferem o controle e segurança de um ambiente próprio

SOLUÇÕES

Para empresas que precisam da flexibilidade e disponibilidade da nuvem