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
:::
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:
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
:
<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>
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õesrw-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:
cd /var/ossec/etc
mkdir decoders
chown -R root:wazuh decoders
/var/ossec/etc/decoders/local_decoders.xml
<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>
/var/ossec/etc/rules/local_rules.xml
<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>
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:
# 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
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:
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.
Top comments (0)