{"id":32,"date":"2022-03-11T01:52:43","date_gmt":"2022-03-11T01:52:43","guid":{"rendered":"http:\/\/localhost\/?p=32"},"modified":"2022-03-14T21:16:10","modified_gmt":"2022-03-15T00:16:10","slug":"wazuh-criando-regra-no-pfsense-para-bloquear-ip-de-atacante","status":"publish","type":"post","link":"http:\/\/marcius.pro\/index.php\/2022\/03\/11\/wazuh-criando-regra-no-pfsense-para-bloquear-ip-de-atacante\/","title":{"rendered":"Wazuh criando regra no pfSense para bloquear IP de atacante"},"content":{"rendered":"\n
O cen\u00e1rio \u00e9 o seguinte:<\/p>\n\n\n\n
Pra facilitar o trabalho de fazer as configura\u00e7\u00f5es no pfSense, habilite o acesso via SSH nesse servidor, indo em System -> Advanced -> <\/em>marque a op\u00e7\u00e3o “Enable Secure Shell”<\/em>:<\/p>\n\n\n\n Acesse o pfSense via SSH com o usu\u00e1rio root e instale o agente do Wazuh para FreeBSD 12 (base do pfSense):<\/p>\n\n\n\n Configure o agente do Wazuh, editando o arquivo \/var\/ossec\/etc\/ossec.conf <\/em>e alterando a palavra “IP<\/em>” dentro da tag “<address>IP<\/address><\/em>” para o IP do servidor do Wazuh (debian), que nesse artigo \u00e9 o 10.0.2.201, ficando assim:<\/p>\n\n\n\n Salve e saia do arquivo.<\/p>\n\n\n\n Agora v\u00e1 na interface web do pfSense e instale a package “Shellcmd<\/em>” para fazer com que o wazuh-agent inicie no boot desse servidor. V\u00e1 em System -> Package Manager -> Available Packages<\/em>, procure por “Shellcmd<\/em>” e o instale.<\/p>\n\n\n\n Depois de instalado, acesse-o em Services -> Shellcmd<\/em>.<\/p>\n\n\n\n Clique no bot\u00e3o “+ Add<\/em>” e preencha o campo “Command<\/em>” com “\/usr\/local\/etc\/rc.d\/wazuh-agent start<\/em>” e depois clique me “Save”.<\/p>\n\n\n\n Agora crie uma regra para o agente se conectar com o wazuh-manager, indo em Firewall -> Rules -> LAN -> ADD<\/em> e preencha da seguinte forma:<\/p>\n\n\n\n Salve e aplique a regra. Tome cuidado para que ela n\u00e3o seja bloqueada por uma poss\u00edvel outra regra de bloqueio antes dessa.<\/p>\n\n\n\n Agora volte ao terminal conectado via SSH e habilite o agente:<\/p>\n\n\n\n Inicie o agente:<\/p>\n\n\n\n Verifique se o agente iniciou normalmente:<\/p>\n\n\n\n Agora no painel do Wazuh, verifique se o novo agente se conectou ao servidor, indo no menu do Wazuh -> Management -> Status<\/em>:<\/p>\n\n\n\n Agora volte para a conex\u00e3o SSH com o servidor do pfSense para criarmos um script que ser\u00e1 respons\u00e1vel pela cria\u00e7\u00e3o de regras de bloqueio com base em regras acionadas no wazuh-manager.<\/p>\n\n\n\n Crie o arquivo \/var\/ossec\/active-response\/bin\/easyrule-pf.sh<\/em> com o seguinte conte\u00fado:<\/p>\n\n\n\n D\u00ea as permiss\u00f5es 750 para esse arquivo:<\/p>\n\n\n\n Reinicie o agente:<\/p>\n\n\n\n Agora v\u00e1 at\u00e9 o servidor Debian onde est\u00e1 o wazuh-manager, e edite o arquivo \/var\/ossec\/etc\/ossec.conf<\/em> acrescentando, depois do \u00faltimo “<\/command><\/em>“, o seguinte conte\u00fado:<\/p>\n\n\n\n Nesse exemplo acima eu especifiquei o agente rec\u00e9m instalado no pfSense, cujo o c\u00f3digo \u00e9 001. Caso queira que mais de um agente execute a a\u00e7\u00e3o de criar regras de bloqueio, adicione os c\u00f3digos desses agentes os separando por uma v\u00edrgula (por exemplo: Aqui nesse exemplo eu tamb\u00e9m especifiquei uma regra que, quando acionada em algum ataque, ir\u00e1 executar o script “easyrule-pf.sh<\/em>” no(s) agente(s) configurado(s) em “<agent_id><\/em>“. \u00c9 poss\u00edvel colocar, ao inv\u00e9s de apenas uma regra, v\u00e1rias delas tamb\u00e9m as separando por v\u00edrgula, ou tamb\u00e9m um grupo de regras, mas nesse caso n\u00e3o se usa as tags “<rules_id><\/rules_id><\/em>“, e sim “<rules_group><\/rules_group><\/em>“, inserindo os nomes dos grupos que pretende usar (por exemplo: Reinicie o wazuh-manager:<\/p>\n\n\n\n No exemplo acima, especifiquei uma regra cuja sua configura\u00e7\u00e3o detecta v\u00e1rias tentativas de login via SSH em um servidor. Para testar se o script que adiciona IP \u00e0 regras de bloqueio no pfSense est\u00e1 funcionando, desabilitei a prote\u00e7\u00e3o SSH do pfSense indo em System -> Advanced<\/em>, na primeira aba chamada “Admin Access<\/em>“, e logo abaixo em “Login Protection<\/em>” adicionei o IP da minha m\u00e1quina no campo “Pass list<\/em>“, para que o pfSense permita que eu fa\u00e7a v\u00e1rias tentativas de login pelo SSH ao inv\u00e9s de me bloquear automaticamente por ele mesmo.<\/p>\n\n\n\n Agora tente se conectar v\u00e1rias vezes seguidas via SSH com uma senha errada, para testar se a regra 5758 ser\u00e1 acionada fazendo com que o active-response configurado acima crie uma regra de bloqueio nas abas de cada interface de rede do pfSense.<\/p>\n\n\n\n Veja que o script easyrule-pf.sh<\/em>, usado no active-response, funcionou perfeitamente. Foi criada uma regra de bloqueio e um aliase chamado “EasyRuleBlockHosts<\/em>” seguido do nome da interface, onde nele ir\u00e1 constar os IPs passados pelo wazuh-manager quando acionada a regra especificada nas configura\u00e7\u00f5es do active-response.<\/p>\n\n\n\n Um detalhe importante, que deve ser observado, \u00e9 quanto a regra criada na aba LAN:<\/p>\n\n\n\n Veja que o sistema “Anti-Lockout<\/em>“, que por padr\u00e3o vem ativado no pfSense para evitar que o administrador desse sistema n\u00e3o seja impedido de acess\u00e1-lo, ficar\u00e1 sempre em primeiro na lista de regras dessa aba. Como o teste que fiz acima era justamente para bloquear um acesso via SSH partindo de um IP na rede LAN do pfSense, a m\u00e1quina usada no ataque n\u00e3o ficar\u00e1 bloqueada de fato, por conta desse “Anti-Lockout<\/em>“.<\/p>\n\n\n\n Uma solu\u00e7\u00e3o nesse caso \u00e9 criar uma regra de libera\u00e7\u00e3o da porta 80 ao pfSense, colocando em primeiro na lista da aba LAN, acima da regra de bloqueio que usa o aliase “EasyRuleBlockHostsLAN<\/em>“, assim:<\/p>\n\n\n\n Depois desative o sistema “Anti-Lockout<\/em>” (em System -> Advanced -><\/em> marcar a op\u00e7\u00e3o “Disable webConfigurator anti-lockout rule<\/em>“). Nesse momento voc\u00ea notar\u00e1 que n\u00e3o haver\u00e1 mais aquela regra padr\u00e3o no topo da aba LAN, ficando parecida com a imagem acima.<\/p>\n\n\n\n Com essa t\u00e9cnica ser\u00e1 poss\u00edvel ter uma blacklist pr\u00f3pria com base em ataques direcionados a sua rede, e replicar para todos os seus gateways o IP do atacante, bloqueando-o antes que o mesmo tente um novo ataque por outros caminhos.<\/p>\n\n\n\n \u00c9 importante lembrar tamb\u00e9m que os IPs de atacantes, na maioria das vezes, n\u00e3o s\u00e3o sempre os mesmos. Ou seja, depois de alguns dias as operadoras fornecem um novo IP para seus usu\u00e1rios, e isso pode implicar em bloqueios errados, pois um cliente da sua empresa pode acabar recebendo um IP que foi usado recentemente em um ataque, impossibilitando-o de acessar um servidor da sua rede, por exemplo. <\/p>\n\n\n\n Por isso, \u00e9 importante colocar um tempo de bloqueio para cada IP, e ap\u00f3s esses dias tir\u00e1-lo dos aliases das regras criadas pelo “easyrule-pf.sh<\/em>“. Isso \u00e9 configur\u00e1vel atrav\u00e9s da op\u00e7\u00e3o “<timeout><\/em>” dentro do “<active-response><\/active-response><\/em>” no “\/var\/ossec\/etc\/ossec.conf<\/em>” dentro do servidor do wazuh-manager, e colocar um valor em segundos (por exemplo, para 8 dias de bloqueio: <\/p>\n\n\n\n Fontes: Quando o Wazuh identificar um ataque, ele pode criar uma regra em um ou mais pfSense para bloquear o IP desse atacante.<\/p>\n","protected":false},"author":1,"featured_media":33,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"yoast_head":"\n<\/figure>\n\n\n\n
pkg add https:\/\/pkg.freebsd.org\/FreeBSD:12:amd64\/quarterly\/All\/wazuh-agent-4.1.5.pkg<\/code><\/pre>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
\/usr\/local\/etc\/rc.d\/wazuh-agent enable<\/code><\/pre>\n\n\n\n
\/usr\/local\/etc\/rc.d\/wazuh-agent start<\/code><\/pre>\n\n\n\n
\/usr\/local\/etc\/rc.d\/wazuh-agent onestatus<\/code><\/pre>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
..::| Script de bloqueio<\/h2>\n\n\n\n
#!\/bin\/sh\n# Script para adicionar IPs bloqueados pelo Wazuh no pfSense dentro do aliase \"EasyRuleBlockHosts\"\n# Expect: srcip\n# Author: Marcius da C. Silveira\n# Last modified: Mar 3, 2022\n\nACAO=$1\nUSUARIO=$2\nIP=$3\n\n\n# logando as atividades desse script\necho \"`date` $0 $1 $2 $3 $4 $5\" >> \/var\/ossec\/logs\/active-responses.log\n\n\n# Erro se o IP nao for mencionado nos argumentos\nif [ \"x${IP}\" = \"x\" ]; then\n echo \"$0: Falta o IP no terceiro argumento <acao> <usuario> (IP)\"\n exit 1;\nfi\n\n\n# Coletando os nomes das interfaces do pfSense\nINTF=`\/usr\/local\/bin\/xmllint --xpath 'pfsense\/interfaces\/child::*' \/conf\/config.xml | grep '^<' | tr -d '<' | tr -d '>'`\nQTDINTF=`echo ${INTF} | wc -w`\n# a ACAO sera feita para cada interface coletada acima\n# caso deseje executar a ACAO para interfaces especificas, especifique elas na varialvel INTF colocando espacos entre cada uma, por exemplo:\n# INTF=\"wan lan\"\nwhile [ ${QTDINTF} != 0 ]; do\n\tIF=`echo ${INTF} | cut -d ' ' -f ${QTDINTF}`\n\t# Se o argumento ACAO for \"add\"\n\tif [ \"x${ACAO}\" = \"xadd\" ]; then\n\t\t\/usr\/local\/bin\/easyrule\tblock $IF \"${IP}\"\n\t# Se o argumento ACAO for \"delete\"\n\telif [ \"x${ACAO}\" = \"xdelete\" ]; then\n\t\t\/usr\/local\/bin\/easyrule unblock $IF \"${IP}\"\n\n\t# Se o argumento ACAO for invalido\n\telse\n\t echo \"$0: acao invalida: ${ACAO}\"\n\tfi\n \tQTDINTF=$((QTDINTF-1))\ndone\n\nexit 1;<\/code><\/pre>\n\n\n\n
chmod 750 \/var\/ossec\/active-response\/bin\/easyrule-pf.sh<\/code><\/pre>\n\n\n\n
\/usr\/local\/etc\/rc.d\/wazuh-agent restart<\/code><\/pre>\n\n\n\n
<command>\n <name>easyrule-pfsense<\/name>\n <executable>easyrule-pf.sh<\/executable>\n <timeout_allowed>yes<\/timeout_allowed>\n <\/command>\n\n <active-response>\n <command>easyrule-pfsense<\/command>\n <location>defined-agent<\/location>\n <agent_id>001<\/agent_id>\n <rules_id>5758<\/rules_id>\n <disabled>no<\/disabled>\n <\/active-response><\/code><\/pre>\n\n\n\n
<\/figure>\n\n\n\n
<agent_id>001,009,021<\/agent_id><\/code>). Nesse caso, lembre-se de colocar o script “easyrule-pf.sh<\/em>” nesses outros servidores tamb\u00e9m, como descrito acima, assim como configurar suas permiss\u00f5es.<\/p>\n\n\n\n
<rules_group>authentication_failed|authentication_failures<\/rules_group><\/code>). Mais informa\u00e7\u00f5es sobre as possibilidades de configura\u00e7\u00e3o dos tipos de gatilhos voc\u00ea encontra aqui<\/a>.<\/p>\n\n\n\n
systemctl restart wazuh-manager<\/code><\/pre>\n\n\n\n
..::| Testando<\/h2>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
..::| Anti-lockout<\/h2>\n\n\n\n
<\/figure>\n\n\n\n
..::| Conclus\u00e3o e considera\u00e7\u00f5es finais<\/h2>\n\n\n\n
<timeout>691200<\/timeout><\/code>).<\/p>\n\n\n\n
https:\/\/techviewleo.com\/how-to-install-wazuh-server-on-debian\/<\/a>
https:\/\/documentation.wazuh.com\/<\/a>
https:\/\/groups.google.com\/g\/wazuh\/c\/pc4IAOIjW-E?pli=1<\/a>
https:\/\/freebsd.pkgs.org\/12\/freebsd-amd64\/wazuh-agent-4.1.5.pkg.html<\/a>
https:\/\/docs.netgate.com\/pfsense\/en\/latest\/development\/boot-commands.html<\/a>
https:\/\/documentation.wazuh.com\/current\/user-manual\/capabilities\/active-response\/how-it-works.html#active-response-configuration<\/a>
https:\/\/documentation.wazuh.com\/current\/user-manual\/reference\/ossec-conf\/active-response.html#reference-ossec-active-response<\/a><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"