Skip to main content

Criando as Primeiras Regras



Para aprender como criar e monitorar regras de auditoria de maneira temporária (em memória), alias, é uma prática recomendada criar e testar as regras de auditoria temporariamente na memória antes de torná-las persistentes no arquivo de configuração. Isso permite verificar se a regra está funcionando como esperado e se não causa problemas de desempenho ou registros desnecessários.


Vamos configurar o auditd para registrar acessos de leitura ao diretório /root. Utilize o comando:


# Use o comando abaixo para criar a regra:
$ sudo auditctl -w /root/ -p r -k root_dir_access

Para confirmar a criação da regra, liste as regras ativas com:
# Para verificar as regras criadas, use o comando:
$ sudo auditctl -l
-w /root -p r -k root_dir_access

Esta configuração monitora todos os acessos de leitura em /root e seus subdiretórios, associando os eventos à chave root_dir_access.



Visualizando eventos​


Após configurar a regra, podemos visualizar os eventos de auditoria capturados usando ausearch e gerar relatórios detalhados com aureport. O exemplo abaixo busca eventos que correspondam à chave root_dir_access:

$ sudo ausearch -k root_dir_access | aureport -f -i

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 10/27/2024 15:08:28 /root/.bashrc openat yes /usr/bin/bash vagrant 186
2. 10/27/2024 15:08:28 /root/.bash_history openat yes /usr/bin/bash vagrant 187
3. 10/27/2024 15:08:28 /root/.bash_history openat yes /usr/bin/bash vagrant 188
4. 10/27/2024 15:08:28 /root/.bash_history openat yes /usr/bin/bash vagrant 189
5. 10/27/2024 15:08:44 /root openat yes /usr/lib/systemd/systemd unset 197

Esse relatório lista cada evento registrado com a chave root_dir_access, incluindo a data, hora, arquivo acessado, tipo de chamada de sistema, sucesso da operação, o executável que realizou o acesso, o ID do usuário de auditoria (auid) e o número do evento.


A partir do log gerado pela auditoria, podemos obter várias informações detalhadas sobre os eventos monitorados. Vamos analisar cada coluna e o que podemos aprender com os dados registrados:

  • Data e Hora: Registro do momento exato do evento.
  • Arquivo Acessado: Nome do arquivo ou diretório acessado.
  • Chamada de Sistema: Indica a syscall usada (ex. openat).
  • Sucesso da Operação: Informa se a operação foi bem-sucedida (yes ou no).
  • Executável Responsável: Mostra o caminho do programa que fez o acesso.
  • ID do Usuário de Auditoria: Identifica o usuário de auditoria (auid).
  • Número do Evento: Número único para facilitar a busca futura.


Visualização Detalhada dos Eventos​


Para uma visualização mais detalhada dos eventos capturados, execute apenas o ausearch:


$ sudo ausearch -k root_dir_access
----
time->Sun Oct 27 15:07:39 2024
type=PROCTITLE msg=audit(1730041659.990:169): proctitle=617564697463746C002D77002F726F6F7400002D700072002D6B00726F6F745F6469725F616363657373
type=SYSCALL msg=audit(1730041659.990:169): arch=c000003e syscall=44 success=yes exit=1076 a0=4 a1=7ffc99a03c20 a2=434 a3=0 items=0 ppid=1139 pid=1140 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=5 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined key=(null)
type=CONFIG_CHANGE msg=audit(1730041659.990:169): auid=1000 ses=5 subj=unconfined op=add_rule key="root_dir_access" list=4 res=1
----
time->Sun Oct 27 15:08:28 2024
type=PROCTITLE msg=audit(1730041708.164:186): proctitle="bash"
type=PATH msg=audit(1730041708.164:186): item=0 name="/root/.bashrc" inode=3407885 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1730041708.164:186): cwd="/home/vagrant"
type=SYSCALL msg=audit(1730041708.164:186): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=559ac55b61d0 a2=0 a3=0 items=1 ppid=1151 pid=1152 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=5 comm="bash" exe="/usr/bin/bash" subj=unconfined key="root_dir_access"
----
time->Sun Oct 27 15:08:28 2024
type=PROCTITLE msg=audit(1730041708.164:187): proctitle="bash"
type=PATH msg=audit(1730041708.164:187): item=0 name="/root/.bash_history" inode=3407890 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1730041708.164:187): cwd="/home/vagrant"
type=SYSCALL msg=audit(1730041708.164:187): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=559ac55b6910 a2=0 a3=0 items=1 ppid=1151 pid=1152 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=5 comm="bash" exe="/usr/bin/bash" subj=unconfined key="root_dir_access"
----
time->Sun Oct 27 15:08:28 2024
type=PROCTITLE msg=audit(1730041708.188:188): proctitle="bash"
type=PATH msg=audit(1730041708.188:188): item=0 name="/root/.bash_history" inode=3407890 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1730041708.188:188): cwd="/home/vagrant"
type=SYSCALL msg=audit(1730041708.188:188): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=559ac5689310 a2=0 a3=0 items=1 ppid=1151 pid=1152 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=5 comm="bash" exe="/usr/bin/bash" subj=unconfined key="root_dir_access"
----

Este comando exibe eventos com todos os detalhes brutos, incluindo o comando (comm), o executável (exe), a sessão (ses), o ID do processo (pid) e muito mais. Esse formato detalhado é ideal para análise minuciosa.



Comparação de ausearch -f e ausearch -k​


Outro método para ver os registro é fazendo uma busca por arquivo, esse arquivo deve estar sendo auditado em algum evento:

$ sudo ausearch -f /root/ | aureport -f -i

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 10/27/2024 15:08:28 /root/.bashrc openat yes /usr/bin/bash vagrant 186
2. 10/27/2024 15:08:28 /root/.bash_history openat yes /usr/bin/bash vagrant 187
3. 10/27/2024 15:08:28 /root/.bash_history openat yes /usr/bin/bash vagrant 188
4. 10/27/2024 15:08:28 /root/.bash_history openat yes /usr/bin/bash vagrant 189
5. 10/27/2024 15:12:49 /root/.bashrc openat yes /usr/bin/bash vagrant 220
6. 10/27/2024 15:12:49 /root/.bash_history openat yes /usr/bin/bash vagrant 221
7. 10/27/2024 15:12:49 /root/.bash_history openat yes /usr/bin/bash vagrant 222
8. 10/27/2024 15:12:49 /root/.bash_history openat yes /usr/bin/bash vagrant 223
9. 10/27/2024 15:13:31 /root/.bash_history openat yes /usr/bin/bash vagrant 224
10. 10/27/2024 15:13:36 /root/.bashrc openat yes /usr/bin/bash vagrant 237

O comando ausearch -f /root/ busca todos os eventos que envolvem o diretório /root/, independentemente da regra ou chave associada. Captura qualquer acesso relacionado ao caminho /root/, abrangendo subdiretórios e arquivos dentro deste caminho.


Já o comando ausearch -k <chave> usa a chave root_dir_access para filtrar eventos registrados especificamente por regras que utilizam essa chave. Isso é útil para focar em um conjunto específico de eventos auditados, excluindo eventos que foram gerados por outras regras.



Filtro de Buscas com ausearch​


O ausearch é uma ferramenta poderosa para pesquisar eventos específicos nos arquivos de log de auditoria, facilitando a análise de segurança e o rastreamento de atividades. Por padrão, o ausearch realiza buscas no arquivo /var/log/audit/audit.log, mas é possível especificar outro arquivo com a opção -if <nome_do_arquivo>.


Ao combinar diferentes opções em um único comando ausearch, ele aplica o operador AND entre tipos diferentes de campos e o operador OR entre múltiplas instâncias do mesmo campo, proporcionando maior flexibilidade na criação de filtros.



Exemplos de uso do ausearch para Consultas em Logs de Auditoria​


Para localizar tentativas de login que falharam:

$ ausearch --message USER_LOGIN --success no --interpret

Para buscar tentativas de login que deram certo:

$ ausearch --message USER_LOGIN --success yes --interpret
type=USER_LOGIN msg=audit(10/25/2024 00:29:58.896:121) : pid=836 uid=root auid=vagrant ses=2 subj=unconfined msg='op=login id=vagrant exe=/usr/sbin/sshd hostname=192.168.121.1 addr=192.168.121.1 terminal=/dev/pts/0 res=success'

Para listar eventos de criação, exclusão e modificação em contas de usuários e grupos:

$ ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i

Para localizar todas as ações realizadas por um usuário específico, utilizando seu ID de autenticação (AUID):

$ ausearch -ua 1000 -i

Para encontrar chamadas de sistema que falharam entre ontem e agora:

$ ausearch --start yesterday --end now -m SYSCALL -sv no -i


Explicação das Principais Opções​


Abaixo vejos algumas explicações dos parâmetros usamos nos exemplos acima.

  • --message ou -m: Filtra os eventos pelo tipo de mensagem (ex.: USER_LOGIN, ADD_USER).
  • --success ou -sv: Filtra eventos pelo sucesso (yes) ou falha (no) da operação.
  • --interpret ou -i: Exibe os dados em formato legível, substituindo IDs por nomes.
  • --start e --end: Especifica o intervalo de tempo da busca, como yesterday (ontem) e now (agora).
  • -ua: Filtra ações pelo ID de autenticação (auid) do usuário.

Esses comandos permitem consultas flexíveis e detalhadas nos logs de auditoria, sendo úteis para auditorias e investigações específicas.