Configurar Logs do RDS no Wazuh
Tags: wazuh, rds, clouudwatchlogs, siem
Published: 2024-01-04 13:06:38

## Ideia Geral

Monitoramento de tentativas de logins inválidos nas máquinas com RDS.

## Nota

Algo que pode causar bastante confusão na configuração destes arquivos é que estes estão num formato “baseado em xml” , ou pelo menos  um xml degenerado. Estes arquivos não contam com um único nó raiz com nós internos e folhas (característico do xml), mas sim sendo cada configuração seu próprio nó raiz, ou  de forma geral, um conjunto de nós irmãos.

Dessa forma, se for editar o xml em um editor/IDE, este vai reclamar que o xml está malformado. Porém essa informação não é necessariamente correta. Tem que se verificar os pares de tags manualmente.

## Pré-requisitos



[Documentação oficial](https://documentation.wazuh.com/current/amazon/services/prerequisites/dependencies.html)

:::

Para funcionamento correto do envio/processamento dos logs, é necessário instalar:

* Python3
* boto3  >=1.13.1


Por se tratar de um requisito de uso global, pode se instalar a biblioteca boto3 diretamente pelo gerenciador de pacotes quando disponível, não havendo necessidade de se instalar via pip. Em máquinas Debian/Ubuntu:

```bash
apt install python3-boto3
```




A documentação oficial aponta que a versão máxima suportada é 1.17.76, mas foi testada a versão 1.9.253 com sucesso.

:::


## Configurando o Wazuh para o RDS

Para configurar o Wazuh para monitorar o CloudWatch é necessário adicionar a seguinte configuração  ao arquivo   `/var/ossec/etc/ossec.conf`:


```bash
<ossec_config>
  <wodle name="aws-s3">
    <disabled>no</disabled>
    <interval>10m</interval>
    <run_on_start>yes</run_on_start>
    <skip_on_error>yes</skip_on_error>

    <service type="cloudwatchlogs">
      <access_key>ABCD_Minha_Access_Key</access_key>
      <secret_key>EfgH_Minha_Secret_Key</secret_key>
      <aws_log_groups>/aws/rds/instance/caminho/do/log</aws_log_groups>
      <regions>us-east-1,sa-east-1</regions>
      <only_logs_after>DATA-INICIAL-LOGS</only_logs_after>
      <aws_account_id>account_id</aws_account_id>
    </service>
  </wodle>
</ossec_config>
```


```bash
chown root:wazuh /var/ossec/etc/ossec.conf
chmod 0660 /var/ossec/etc/ossec.conf
```




* Adicionar o bloco inteiro ao final do arquivo;
* Data no formato YYYY-MMM-DD, separado com hífens e meses em três letras em maiúsculo;
* Na configuração testada o arquivo pertence a `root:wazuh` com permissões `rw-rw----`. Pode ser que funcione com outro grupo/usuário/permissões, mas este estado foi o testado e aprovado.

:::


## Configurando os Decoders

As regras e decoders podem ser copiados/colados sem edições, mas vale lembrar que as permissões e usuário/grupo são os mesmos do arquivo acima .


Caso a pasta `decoders` não exista, pode-se cria-la:


```bash
cd /var/ossec/etc
mkdir decoders
chown -R root:wazuh decoders
```


```bash
/var/ossec/etc/decoders/local_decoders.xml
```

```bash
<decoder name="RDS"> 
    <prematch>^.* Connect|Query|Quit</prematch> 
</decoder> 
 
<decoder name="RDS-1"> 
    <parent>RDS</parent> 
    <regex>(.*)</regex> 
    <order>Action</order> 
</decoder> 
<decoder name="RDS-1"> 
    <parent>RDS</parent> 
    <regex>(\w+) (.*)\s</regex> 
    <order>id,user-action</order> 
</decoder> 
<decoder name="RDS-1"> 
    <parent>RDS</parent> 
    <regex offset="after_regex">(.*)</regex> 
    <order>query</order> 
</decoder> 
 
<decoder name="RDS-1"> 
    <parent>RDS</parent> 
    <regex offset="after_regex">\s(\w+)@(.*)\son\s(.*)\susing\s(.*)</regex> 
    <order>username,srcip,service,protocol</order> 
</decoder> 
 
<decoder name="RDS-ERROR"> 
    <prematch>^.* Aborted</prematch> 
</decoder> 
 
<decoder name="RDS-2"> 
    <parent>RDS-ERROR</parent> 
    <regex>(.*) (.*\s.*) (.*) db:\s(.*) user:\s(.*) host:\s(.*) </regex> 
    <order>severity,connection-action,id,db,user,host</order> 
</decoder>
```


```bash
/var/ossec/etc/rules/local_rules.xml
```

```bash
<group name="RDS"> 
  <rule id="100141" level="3"> 
    <decoded_as>RDS</decoded_as> 
    <field name="user-action">Connect</field> 
    <description>Connect using \$(username)</description> 
  </rule> 
</group> 
 
<group name="RDS ERROR"> 
  <rule id="100208" level="3"> 
    <decoded_as>RDS-ERROR</decoded_as> 
    <field name="connection-action">Aborted Connection</field> 
    <description>Aborted Connection from \$(dstuser)</description> 
  </rule> 
</group> 
```


```bash
chown root:wazuh \
  /var/ossec/etc/decoders/local_decoders.xml \
  /var/ossec/etc/rules/local_rules.xml
chmod 0660 \
  /var/ossec/etc/decoders/local_decoders.xml \
  /var/ossec/etc/rules/local_rules.xml
```




Provavelmente estes arquivos ainda não existam, mas caso contrário, colar o bloco inteiro no final do arquivo.

:::

## Finalizando

Para reiniciar o serviço, execute:

```bash
# Para reiniciar o container do Wazuh é necessário estar no diretório onde se encontra o 
# arquivo do Docker Compose, suponha o seguinte caminho:
cd /home/ubuntu/wazuh-docker/single-node/

#Em seguida, reiniciar o container:
docker-compose restart
```

## Máquina Testada


```bash
cat /etc/os-release

NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
```

## Troubleshooting

### Os logs do RDS não estão aparecendo

* Verificar se o agent está rodando corretamente:

```bash
systemctl status wazuh-agent
```


Caso não esteja rodando, na linha onde se descreve a razão do fechamento (exited code = 1 …)  pode haver uma pista para solucionar o problema.


* Verificar se os pré-requisitos foram cumpridos:

A máquina precisa do Python3  instalado e da lib boto3. Ver mais detalhes na seção Pré-requisitos.