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
# 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
$ 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
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
typecontém o tipo de registro. Neste exemplo, o valorSYSCALLespecifica 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=valuepares 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
archconté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-iou--interpretpara converter automaticamente valores hexadecimais em seus equivalentes legíveis por humanos. O valorc000003eé interpretado comox86_64. syscall=2-
O campo
syscallregistra 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árioausyscallpermite converter os números de chamada do sistema para seus equivalentes legíveis por humanos. Use o comandoausyscall --dumppara 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
successregistra 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=-13O campo
exitconté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
# ausearch --interpret --exit -13Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
a0aa3registram 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
itemscontém o número de registros auxiliares PATH que seguem o registro da syscall. ppid=2686-
O campo
ppidregistra o ID do Processo dos Pais (PPID). Neste caso,2686era o PPID do processo de pais, comobash. pid=3538-
O campo
pidregistra o ID do processo (PID). Neste caso,3538foi o PID do processocat. auid=1000-
O campo
auidregistra 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
uidregistra 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
gidregistra o ID do grupo do usuário que iniciou o processo analisado. euid=1000-
O campo
euidregistra o ID de usuário efetivo do usuário que iniciou o processo analisado. suid=1000-
O campo
suidregistra o ID de usuário definido do usuário que iniciou o processo analisado. fsuid=1000-
O campo
fsuidregistra o ID do usuário do sistema de arquivos do usuário que iniciou o processo analisado. egid=1000-
O campo
egidregistra a identificação do grupo efetivo do usuário que iniciou o processo analisado. sgid=1000-
O campo
sgidregistra o ID do grupo definido do usuário que iniciou o processo analisado. fsgid=1000-
O campo
fsgidregistra o ID do grupo do sistema de arquivos do usuário que iniciou o processo analisado. tty=pts0-
O campo
ttyregistra o terminal a partir do qual o processo analisado foi invocado. ses=1-
O campo
sesregistra o ID da sessão a partir da qual o processo analisado foi invocado. comm="cat"-
O campo
commregistra o nome da linha de comando do comando que foi usado para invocar o processo analisado. Neste caso, o comandocatfoi usado para acionar este evento de Auditoria. exe="/bin/cat"-
O campo
exeregistra 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
subjregistra o contexto SELinux com o qual o processo analisado foi rotulado no momento da execução. key="sshd_config"-
O campo
keyregistra a seqüência definida pelo administrador associada à regra que gerou este evento no log de Auditoria.
Segundo registro
type=CWDNo segundo registro, o valor do campo
typeéCWDO 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
msgpossui 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
cwdconté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 tipoPATHpara 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
msgpossui o mesmo carimbo de tempo e valor de identificação do primeiro e segundo registros. item=0-
O campo
itemindica qual item, do número total de itens referenciados no registro do tipoSYSCALL, é o registro atual. Este número é baseado em zero; um valor de0significa que ele é o primeiro item. name="/etc/ssh/sshd_config"-
O campo
nameregistra 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=409248O campo
inodeconté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
# find / -inum 409248 -print /etc/ssh/sshd_configCopy to Clipboard Copied! Toggle word wrap Toggle overflow dev=fd:00-
O campo
devespecifica 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
moderegistra as permissões do arquivo ou diretório, codificadas em notação numérica, conforme retornado pelo comandostatno campost_mode. Consulte a página de manualstat(2)para maiores informações. Neste caso,0100600pode 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
ouidregistra o ID de usuário do proprietário do objeto. ogid=0-
O campo
ogidregistra a identificação do grupo do proprietário do objeto. rdev=00:00-
O campo
rdevconté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
objregistra o contexto SELinux com o qual o arquivo ou diretório gravado foi rotulado no momento da execução. nametype=NORMAL-
O campo
nametyperegistra 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_fpregistra 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_firegistra 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_feregistra 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_fverregistra a versão do sistema de arquivo baseado na capacidade do arquivo ou objeto de diretório.
Quarto Registro
type=PROCTITLE-
O campo
typecontém o tipo de registro. Neste exemplo, o valorPROCTITLEespecifica 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
proctitleregistra 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-iou--interpretpara converter automaticamente valores hexadecimais em seus equivalentes legíveis por humanos. O valor636174002F6574632F7373682F737368645F636F6E666967é interpretado comocat /etc/ssh/sshd_config.