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
ouno
). - 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, comoyesterday
(ontem) enow
(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.