Red Hat Training

A Red Hat training course is available for RHEL 8

10.5. Entendendo os arquivos de log de auditoria

Por padrão, o sistema de Auditoria armazena entradas de log no arquivo /var/log/audit/audit.log; se a rotação de log estiver ativada, os arquivos audit.log rodados são armazenados no mesmo diretório.

Adicione a seguinte regra de Auditoria para registrar cada tentativa de ler ou modificar o arquivo /etc/ssh/sshd_config:

# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config

Se o daemon auditd estiver em execução, por exemplo, usando o seguinte comando, cria-se um novo evento no arquivo de log de Auditoria:

$ cat /etc/ssh/sshd_config

Este evento no arquivo audit.log tem a seguinte aparência:

type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287):  cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0  nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967

O evento acima consiste em quatro registros, que compartilham o mesmo carimbo de tempo e número de série. Os registros sempre começam com a palavra-chave type=. Cada registro consiste de vários name=value pares separados por um espaço branco ou por uma vírgula. Segue-se uma análise detalhada do evento acima:

Primeiro Registro

type=SYSCALL
O campo type contém o tipo de registro. Neste exemplo, o valor SYSCALL especifica que este registro foi acionado por uma chamada do sistema ao kernel.
msg=audit(1364481363.243:24287):

Os registros de campo msg:

  • um carimbo de tempo e uma identificação única do registro no formulário audit(time_stamp:ID). Vários registros podem compartilhar o mesmo carimbo de tempo e identificação se foram gerados como parte de um mesmo evento de Auditoria. O carimbo de horário está usando o formato de horário Unix - segundos desde 00:00:00 UTC em 1 de janeiro de 1970.
  • vários eventos específicos name=value pares fornecidos pelo kernel ou por aplicações de espaço do usuário.
arch=c000003e
O campo arch contém informações sobre a arquitetura da CPU do sistema. O valor, c000003e, é codificado em notação hexadecimal. Ao procurar registros de auditoria com o comando ausearch, use a opção -i ou --interpret para converter automaticamente valores hexadecimais em seus equivalentes legíveis por humanos. O valor c000003e é interpretado como x86_64.
syscall=2
O campo syscall registra o tipo de chamada do sistema que foi enviada ao kernel. O valor, 2, pode ser correspondido com seu equivalente legível em humanos no arquivo /usr/include/asm/unistd_64.h. Neste caso, 2 é a chamada de sistema open. Note que o utilitário ausyscall permite converter os números de chamada do sistema para seus equivalentes legíveis por humanos. Use o comando ausyscall --dump para exibir uma lista de todas as chamadas de sistema junto com seus números. Para mais informações, consulte a página de manual ausyscall(8).
success=no
O campo success registra se a chamada ao sistema registrada nesse evento em particular foi bem sucedida ou falhou. Neste caso, a chamada não foi bem sucedida.
exit=-13

O campo exit contém um valor que especifica o código de saída retornado pela chamada ao sistema. Este valor varia para uma chamada de sistema diferente. Você pode interpretar o valor para seu equivalente legível por humanos com o seguinte comando:

# ausearch --interpret --exit -13

Note que o exemplo anterior assume que seu log de Auditoria contém um evento que falhou com o código de saída -13.

a0=7fffd19c5592, a1=0, a2=7fffd19c5592, a3=a
Os campos a0 a a3 registram os quatro primeiros argumentos, codificados em notação hexadecimal, da chamada ao sistema neste evento. Estes argumentos dependem da chamada de sistema que é utilizada; eles podem ser interpretados pelo utilitário ausearch.
items=1
O campo items contém o número de registros auxiliares PATH que seguem o registro da syscall.
ppid=2686
O campo ppid registra o ID do Processo dos Pais (PPID). Neste caso, 2686 era o PPID do processo de pais, como bash.
pid=3538
O campo pid registra o ID do processo (PID). Neste caso, 3538 foi o PID do processo cat.
auid=1000
O campo auid registra o ID do usuário de Auditoria, ou seja, o loginuid. Este ID é atribuído a um usuário no momento do login e é herdado por cada processo mesmo quando a identidade do usuário muda, por exemplo, trocando as contas de usuário com o comando su - john.
uid=1000
O campo uid registra o ID do usuário que iniciou o processo analisado. O ID do usuário pode ser interpretado em nomes de usuário com o seguinte comando ausearch -i --uid UID.
gid=1000
O campo gid registra o ID do grupo do usuário que iniciou o processo analisado.
euid=1000
O campo euid registra o ID de usuário efetivo do usuário que iniciou o processo analisado.
suid=1000
O campo suid registra o ID de usuário definido do usuário que iniciou o processo analisado.
fsuid=1000
O campo fsuid registra o ID do usuário do sistema de arquivos do usuário que iniciou o processo analisado.
egid=1000
O campo egid registra a identificação do grupo efetivo do usuário que iniciou o processo analisado.
sgid=1000
O campo sgid registra o ID do grupo definido do usuário que iniciou o processo analisado.
fsgid=1000
O campo fsgid registra o ID do grupo do sistema de arquivos do usuário que iniciou o processo analisado.
tty=pts0
O campo tty registra o terminal a partir do qual o processo analisado foi invocado.
ses=1
O campo ses registra o ID da sessão a partir da qual o processo analisado foi invocado.
comm="cat"
O campo comm registra o nome da linha de comando do comando que foi usado para invocar o processo analisado. Neste caso, o comando cat foi usado para acionar este evento de Auditoria.
exe="/bin/cat"
O campo exe registra o caminho para o executável que foi usado para invocar o processo analisado.
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
O campo subj registra o contexto SELinux com o qual o processo analisado foi rotulado no momento da execução.
key="sshd_config"
O campo key registra a seqüência definida pelo administrador associada à regra que gerou este evento no log de Auditoria.

Segundo registro

type=CWD

No segundo registro, o valor do campo type é CWD

O objetivo deste registro é registrar a localização do processo atual no caso de um caminho relativo acabar sendo capturado no registro PATH associado. Desta forma, o caminho absoluto pode ser reconstruído.

msg=audit(1364481363.243:24287)
O campo msg possui o mesmo carimbo de tempo e valor de identificação que o valor do primeiro registro. O carimbo de hora está usando o formato Unix time - segundos desde 00:00:00 UTC em 1 de janeiro de 1970.
cwd="/home/user_name"
O campo cwd contém o caminho para o diretório no qual a chamada ao sistema foi invocada.

Terceiro registro

type=PATH
No terceiro registro, o valor do campo type é PATH. Um evento de Auditoria contém um registro do tipo PATH para cada caminho que é passado para a chamada ao sistema como argumento. Neste evento de Auditoria, apenas um caminho (/etc/ssh/sshd_config) foi usado como argumento.
msg=audit(1364481363.243:24287):
O campo msg possui o mesmo carimbo de tempo e valor de identificação do primeiro e segundo registros.
item=0
O campo item indica qual item, do número total de itens referenciados no registro do tipo SYSCALL, é o registro atual. Este número é baseado em zero; um valor de 0 significa que ele é o primeiro item.
name="/etc/ssh/sshd_config"
O campo name registra o caminho do arquivo ou diretório que foi passado para a chamada ao sistema como um argumento. Neste caso, foi o arquivo /etc/ssh/sshd_config.
inode=409248

O campo inode contém o número do inode associado ao arquivo ou diretório gravado neste evento. O seguinte comando exibe o arquivo ou diretório que está associado ao número do inode 409248:

find / -inum 409248 -print
/etc/ssh/sshd_config
dev=fd:00
O campo dev especifica a identificação menor e maior do dispositivo que contém o arquivo ou diretório gravado neste evento. Neste caso, o valor representa o dispositivo /dev/fd/0.
mode=0100600
O campo mode registra as permissões do arquivo ou diretório, codificadas em notação numérica, conforme retornado pelo comando stat no campo st_mode. Consulte a página de manual stat(2) para maiores informações. Neste caso, 0100600 pode ser interpretado como -rw-------, significando que somente o usuário root tem permissões de leitura e escrita para o arquivo /etc/ssh/sshd_config.
ouid=0
O campo ouid registra o ID de usuário do proprietário do objeto.
ogid=0
O campo ogid registra a identificação do grupo do proprietário do objeto.
rdev=00:00
O campo rdev contém um identificador de dispositivo registrado somente para arquivos especiais. Neste caso, ele não é utilizado, pois o arquivo gravado é um arquivo normal.
obj=system_u:object_r:etc_t:s0
O campo obj registra o contexto SELinux com o qual o arquivo ou diretório gravado foi rotulado no momento da execução.
nametype=NORMAL
O campo nametype registra a intenção da operação de cada registro de caminho no contexto de uma determinada chamada de sistema.
cap_fp=none
O campo cap_fp registra dados relacionados à configuração de um sistema de arquivo permitido baseado na capacidade do arquivo ou objeto de diretório.
cap_fi=none
O campo cap_fi registra dados relacionados à configuração de um sistema de arquivo herdado baseado na capacidade do arquivo ou objeto de diretório.
cap_fe=0
O campo cap_fe registra a configuração do bit efetivo da capacidade baseada no sistema de arquivos do arquivo ou objeto de diretório.
cap_fver=0
O campo cap_fver registra a versão do sistema de arquivo baseado na capacidade do arquivo ou objeto de diretório.

Quarto Registro

type=PROCTITLE
O campo type contém o tipo de registro. Neste exemplo, o valor PROCTITLE especifica que este registro dá a linha de comando completa que acionou este evento de Auditoria, acionado por uma chamada do sistema ao kernel.
proctitle=636174002F6574632F7373682F737368645F636F6E666967
O campo proctitle registra a linha de comando completa do comando que foi usado para invocar o processo analisado. O campo é codificado em notação hexadecimal para não permitir que o usuário influencie o analisador de logs de auditoria. O texto decodifica para o comando que acionou este evento de Auditoria. Ao pesquisar registros de Auditoria com o comando ausearch, use a opção -i ou --interpret para converter automaticamente valores hexadecimais em seus equivalentes legíveis por humanos. O valor 636174002F6574632F7373682F737368645F636F6E666967 é interpretado como cat /etc/ssh/sshd_config.