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, FacebookG+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.

Ricardo Galossi
Siga me

Ricardo Galossi

É um apaixonado por segurança da informação, atua profissionalmente há mais de 7 anos na área de tecnologia da informação, onde é focado em análise de vulnerabilidades e testes de invasão.Criou o blog Guia do TI para compartilhar conhecimento, ajudar os mais novos, incentivar debates e manter a comunidade atualizada com as principais notícias da área de TI.
Ricardo Galossi
Siga me

Últimos posts por Ricardo Galossi (exibir todos)

Ricardo Galossi

É um apaixonado por segurança da informação, atua profissionalmente há mais de 7 anos na área de tecnologia da informação, onde é focado em análise de vulnerabilidades e testes de invasão. Criou o blog Guia do TI para compartilhar conhecimento, ajudar os mais novos, incentivar debates e manter a comunidade atualizada com as principais notícias da área de TI.

Deixe seu comentário