Ossec – Active Response – HIDS parte 8
Fala galera! Dando continuidade a nossa série de posts sobre o ossec, hoje vamos ver um pouco mais sobre o active response do ossec. Essa é mais um funcionalidade muito interessante do ossec, pois é com ela que a ferramenta é capaz de tomar uma determina ação quando um alerta é gerado, seja bloqueando um IP, bloqueando um usuário, mandando um IP pra nullroute, reiniciando o ossec ou até mesmo publicando os alertas no twitter ou no slack.
Configuração do active response no Unix
Basicamente a configuração do active response do ossec é dividido em duas partes, na primeira parte você configura os comandos que deseja executar, na segunda você designa quais eventos ou regras irão trigar os comandos configurados. Você pode configurar quantos comandos quiser, basta criar seus scripts de resposta para serem utilizados quando determinado evento ou regra ocorrer. Vamos ver como é a configuração de um comando:
<command>
<name>disable-account</name>
<executable>disable-account.sh</executable>
<expect>user</expect>
<timeout_allowed>yes</timeout_allowed>
</command>
A configuração dos comandos fica no ossec.conf do manager, mas vamos entender o que são esses parâmetros ai em cima. Bem é bem mais simples do que parece, na primeira opção temos a chave <name>, ela especifica o nome da resposta ativa. Na segunda opção temos a chave <executable>, que é o script que ele irá executar, necessariamente esse script precisa estar dentro do diretório /var/ossec/active-response/bin com permissão de execução, basta você informar o nome do script, não precisa informar o caminho completo. Na terceira opção temos a chave <expect>, essa chave define o que o comando irá esperar do evento, no exemplo acima é o nome de usuário. Por último temos a chave <timeout_allowed> que define se o comando irá suportar timeout.
Agora que definimos o comando precisamos configurar a resposta, aqui basicamente você define que eventos irão trigar o comando criado anteriormente. Essa configuração também fica no ossec.conf. Vamos ver um exemplo de configuração de um active response abaixo:
<active-response>
firewall-block
<location>all</location>
<rules_group>authentication_failed,authentication_failures</rules_group>
<timeout>600</timeout>
<repeated_offenders>30,60,120</repeated_offenders>
</active-response>
Na primeira primeira opção temos a chave <command>, ela especifica para qual comando é essa configuração de resposta, o nome deve ser o mesmo que o especificado no comando. Na segunda opção temos a chave <location>, ela diz onde o script será executado, nesse exemplo em todos os agentes. Na terceira opção temos a chave <rules_group>, ela especifica os grupos de regras que irão trigar esse comando. Na chave <timeout> é especificado o tempo em segundos que o IP irá ficar bloqueado. Por último temos a chave <repeated_offenders>, ela especifica que em caso de residencias de alerta para o mesmo IP, o tempo de bloqueio será aumentado gradativamente, na segunda ocorrência serão 30 min, na terceira 60 min e por ai vai.
Configuração do active response no Windows
Para começar a trabalhar com a resposta ativa no Windows você precisa habilitar ela, pois vem desativada por padrão. Para fazer isso deixe a chave <active-response> do ossec.conf de seu agente da seguinte maneira:
<active-response>
<disabled>no</disabled>
</active-response>
Depois disso precisamos especificar novas entradas de comando e resposta ativa para os agentes Windows, para fazer isso adicione as entradas abaixo no ossec server e reinicie ele.
<command>
<name>win_nullroute</name>
<executable>route-null.cmd</executable>
<expect>srcip</expect>
<timeout_allowed>yes</timeout_allowed>
</command>
<active-response>
<command>win_nullroute</command>
<location>local</location>
<level>6</level>
<timeout>600</timeout>
</active-response>
# /var/ossec/bin/ossec-control restart
Depois de feito esses passos você deve ver a seguinte saída ao rodar o comando agent_control -L:
# /var/ossec/bin/agent_control -L
OSSEC HIDS agent_control. Available active responses:
Response name: host-deny600, command: host-deny.sh
Response name: firewall-drop600, command: firewall-drop.sh
Response name: win_nullroute600, command: route-null.cmd
Vamos fazer um pequeno teste, iremos adicionar um IP na null route manualmente para ver se está tudo ok, rode o comando abaixo, não esqueça de trocar o ID do agente pelo seu:
# /var/ossec/bin/agent_control -b 2.3.4.5 -f win_nullroute600 -u 185
OSSEC HIDS agent_control: Running active response "win_nullroute600′ "n: 185
Se tudo ocorreu bem você verá a saída abaixo ao executar o route print no seu agente Windows:
C:\>route print
..
Active Routes:
Network Destination Netmask Gateway Interface Metric
2.3.4.5 255.255.255.255 x.y.z x.y.z 1
Criando uma resposta ativa customizada
Como laboratório iremos criar um active response personalizado, como disse antes você pode fazer praticamente qualquer coisa com o active response, basta escrever um script capaz. No nosso caso criei um script bem simplista pra passar a ideia, aqui iremos bloquear uma porta no firewall caso um regra em específico seja acionada. A primeira coisa que iremos fazer é criar uma nova chave de comando no ossec.conf:
<command>
<name>drop_port</name>
<executable>drop_port.sh</executable>
<timeout_allowed>no</timeout_allowed>
<expect />
</command>
Depois precisamos criar uma nova chave <active-response> também no ossec.conf:
<active-response>
<command>drop_port</command>
<location>server</location>
<rules_id>1002</rules_id>
</active-response>
Agora precisamos criar o nosso script, crie um arquivo chamado drop_port.sh no diretório /var/ossec/active-response/bin e adicione o conteúdo abaixo:
#!/bin/sh
ACTION=$1
USER=$2
IP=$3
ALERTID=$4
RULEID=$5
LOCAL=`dirname $0`;
cd $LOCAL
cd ../
PWD=`pwd`
# Logging the call
echo "`date` $0 $1 $2 $3 $4 $5 $6 $7 $8" >> ${PWD}/../logs/active-responses.log
iptables -A INPUT -p tcp -s 1.2.3.4 --dport 4566 -j DROP
Salve o arquivo e dê permissão de execução (chmod +x drop_port.sh), depois disso basta reiniciar o ossec e forçar um log no sistema para ele gerar o alerta de ID 1002:
# /var/ossec/bin/ossec-control restart
# logger "Segmentation Fault"
Pronto nesse momento você deve encontrar o alerta abaixo no seu alerts.log e o bloqueio no iptables:
** Alert 1501788637.10103: mail - syslog,errors,
2017 Aug 03 16:30:37 OssecServer->/var/log/syslog
Rule: 1002 (level 2) -> 'Unknown problem somewhere in the system.'
Aug 3 16:30:37 OssecServer ricardo: Segmentation Fault
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 1.2.3.4 0.0.0.0/0 tcp dpt:4566
Obs: Caso você queira essa resposta nos agentes você vai precisar copiar o script para o mesmo diretório nos agentes e mudar a chave <location> no ossec.conf do servidor para ‘local’.
Opções de configuração do Active-response
disabled
-
Desabilita a resposta ativa se tiver definido como yes. Se essa opção não estiver definida a resposta ativa é habilitada em sistemas Unix e desabilitada em sistemas Windows.
command
-
Usado para “linkar” a resposta a um comando.
location
-
Onde o comando deverá ser executado.
Permitido:
- local: No agente que gerou o evento.
- server: No servidor ossec.
- defined-agent: Em um agente específico informado pelo ID.
- all: Em todos os agentes e no manager.
agent_id
-
O ID de um agente específico que será rodado a resposta.
level
-
A resposta irá ser executada em qualquer evento com esse level definido ou maior.
rules_group
-
A resposta será executada em qualquer evento em um grupo definido, múltiplos grupos podem ser definidos usando pipes (|).
rules_id
-
A resposta será executada em uma regra definida pelo ID, múltiplas regras podem ser especificadas por vírgulas.
timeout
-
Quanto tempo em segundos até o comando reverso ser executado.
repeated_offenders
-
Uma lista separada por vírgulas de timeouts crescentes em minutos para origens repetidas, podem ser definidos até 5 entradas.
Bem pessoal é isso ai, espero que tenham curtido. Em breve irei postar outros artigos da série Ossec mostrando configurações mais avançadas. Não esqueçam de curtir nossas páginas nas redes sociais, Facebook, G+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.
- Metasploit Framework de cabo a rabo – Parte 6 - 4 de junho de 2018
- Metasploit Framework de cabo a rabo – Parte 5 - 28 de maio de 2018
- CEH – Scanning Networks – Parte 2 - 24 de maio de 2018