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 valorSYSCALL
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.
-
um carimbo de tempo e uma identificação única do registro no formulá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 comandoausearch
, use a opção-i
ou--interpret
para converter automaticamente valores hexadecimais em seus equivalentes legíveis por humanos. O valorc000003e
é interpretado comox86_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 sistemaopen
. Note que o utilitárioausyscall
permite converter os números de chamada do sistema para seus equivalentes legíveis por humanos. Use o comandoausyscall --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 manualausyscall
(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
aa3
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árioausearch
. 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, comobash
. pid=3538
-
O campo
pid
registra o ID do processo (PID). Neste caso,3538
foi o PID do processocat
. 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 comandosu - 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 comandoausearch -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 comandocat
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 tipoPATH
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 tipoSYSCALL
, é o registro atual. Este número é baseado em zero; um valor de0
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 inode409248
:# 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 comandostat
no campost_mode
. Consulte a página de manualstat(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 valorPROCTITLE
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 comandoausearch
, use a opção-i
ou--interpret
para converter automaticamente valores hexadecimais em seus equivalentes legíveis por humanos. O valor636174002F6574632F7373682F737368645F636F6E666967
é interpretado comocat /etc/ssh/sshd_config
.