• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Auditoria de arquivos no Linux para conhecer quem fez alterações em arquivos

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Como fazer auditoria de eventos tais quais leitura/escrita etc? Como eu posso usar o audit para ver quem alterou um arquivo no Linux? Eis a solução.

Por: Eric Miranda

Introdução
A resposta é: utilizar sistema de auditoria do kernel 2.6. O kernel 2.6.x vem com do daemon auditd, o qual é responsável por gravar os registros de auditoria em disco. Durante a inicialização as regras configuradas em /etc/audit/audit.rules são lidas por este processo.

Você pode abrir o arquivo de configuração para efetuar alterações tais quais configurar o caminho para o arquivo de log e outras opções. O arquivo padrão é suficiente para iniciar o uso e estudo do auditd.

Para utilizar as facilidades do auditd você precisa utilizar os seguintes utilitários:


auditctl
Utilitário de controle do sistema de auditoria do kernel. Você pode consultar o status, deletar ou adicionar regras para o sistema de auditoria do kernel. Configurar o sistema para monitorar um arquivo é efetuado usando o comando:

# auditctl -w /caminho/para/o/arquivo


ausearch
Comando para consultar o daemon do audit baseado em eventos com vários critérios de pesquisa.


aureport
Ferramenta que produz relatórios resumidos dos logs do sistema audit.

Note que todos os comandos foram testados por mim em RHEL 5.2 e pelo autor do artigo original, também CentOS 4.x, Fedora Core e RHEL 4.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Tarefa: instalar o pacote audit
O pacote audit contém os utilitários de espaço de usuário para armazenamento e pesquisa dos registros gerados pelo sistema audit do kernel 2.6. CentOS/Red Hat e Fedora core incluem o pacote rpm no audit em suas distribuições oficiais. Utilize o yum ou up2date para instalar o pacote.

# yum install audit
ou
# up2date install audit

Para configurar o serviço para iniciar durante a inicialização do sistema:

# ntsysv
ou
# chkconfig auditd on

Inicie então o serviço do audit:

# /etc/init.d/auditd start

 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Como configurar a monitoração de um arquivo para auditoria?
Digamos que você gostaria de auditar o arquivo /etc/passwd. Você precisa digitar o comando a seguir:

# auditctl -w /etc/passwd -p war -k password-file

Onde:
-w /etc/passwd: Insere o monitoramento para o objeto de sistema no caminho dado. Neste caso monitorar o arquivo chamado /etc/passwd.
-p war: Configurar os filtros de permissão para o monitoramento de um sistema de arquivos.

Os valores são r para leitura, w para escrita, x para execução e a para anexar (append).
-k password-file: Configura uma chave para filtragem o monitoramento do arquivo /etc/passwd. As palavras "password-file" são uma palavra-chave (esta palavra chave deve ter no máximo 31 bytes). Esta chave identifica unicamente os registros do audit produzidos pela monitoração.

Resumindo: você está monitorando (vigiando) o arquivo /etc/passwd com vistas a qualquer um (incluindo syscall) que pode efetuar escrita, leitura ou anexar (append) no arquivo.

Espere por algum tempo ou rode o seguinte comando como um usuário comum:

$ grep 'qqcoisa' /etc/passwd
$ vi /etc/passwd


Regra de auditoria para arquivos
Adicione o monitoramento no arquivo /etc/shadow com a palavra-chave "shadow-file", a qual gera registros para "leituras, escritas, execuções e appends" neste arquivo.

# auditctl -w /etc/shadow -k shadow-file -p rwxa


Regra de auditoria para chamadas de sistema (syscall)
A regra a seguir suprime auditoria para saídas de chamadas de sistema "mount":

# auditctl -a exit,never -S mount


Regra para auditoria de sistemas de arquivos
Adicionar o monitoramento no sistema de arquivos /tmp o qual gera registros em todas as "execuções" (legal para um webserver por exemplo):

# auditctl -w /tmp -p e -k webserver-watch-tmp


Regra de auditoria para chamadas de sistema (syscall) usando PID
Para ver todas as chamadas de sistema feitas por um programa chamado sshd (pid - 1005):

# auditctl -a entry,always -S all -F pid=1005
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Como eu descubro quem alterou ou acessou o arquivo /etc/passwd?
Use o comando ausearch:

# ausearch -f /etc/passwd
ou
# ausearch -f /etc/passwd | less
ou
# ausearch -f /etc/passwd -i | less

Onde:
-f /etc/passwd : apenas procura por este arquivo
-i : Interpreta entidades numéricas no texto. Por exemplo, UIDs são convertidos para nomes de usuário.

Saída:

type=PATH msg=audit(03/16/2007 14:52:59.985:55) : name=/etc/passwd flags=follow,open
inode=23087346 dev=08:02 mode=file,644 ouid=root ogid=root rdev=00:00
type=CWD msg=audit(03/16/2007 14:52:59.985:55) : cwd=/webroot/home/lighttpd
type=FS_INODE msg=audit(03/16/2007 14:52:59.985:55) : inode=23087346 inode_uid=root
inode_gid=root inode_dev=08:02 inode_rdev=00:00
type=FS_WATCH msg=audit(03/16/2007 14:52:59.985:55) : watch_inode=23087346 watch=passwd
filterkey=password-file perm=read,write,append perm_mask=read
type=SYSCALL msg=audit(03/16/2007 14:52:59.985:55) : arch=x86_64 syscall=open success=yes
exit=3 a0=7fbffffcb4 a1=0 a2=2 a3=6171d0 items=1 pid=12551 auid=unknown(4294967295)
uid=lighttpd gid=lighttpd euid=lighttpd suid=lighttpd fsuid=lighttpd egid=lighttpd
sgid=lighttpd fsgid=lighttpd comm=grep exe=/bin/grep

Vamos analisar a saída:
audit(03/16/2007 14:52:59.985:55): data do registro da auditoria;
uid=lighttpd gid=lighttpd: UIDs e GIDs convertidos para formato de texto. Passando a opção -i quase todos os dados numéricos são convertidos para dados humanamente legíveis. No exemplo, o usuário lighttod usou o comando grep para abrir o arquivo;
exe="/bin/grep": Comando utilizado para acessar o arquivo /etc/passwd;
perm_mask=read: O arquivo foi aberto para leitura;

Logo, verifica-se que a partir dos arquivos de log do audit você pode rastrear desde quem consultou um arquivo com grep ou gravou alterações utilizando o editor vi/vim. Os logs provêem toneladas de informações. Você precisa ler as páginas de manual (man pages) e demais documentações para entender o formato de log "cru".
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Outros exemplos úteis:

Pesquisar eventos com data e hora específica. Se a data for omitida, a data de hoje é assumida. Se a hora for omitida, "agora" é assumido por padrão. Use a notação de 24 horas ao invés da notação AM/PM para especificar a hora. Exemplo: data 24/20/05, hora 18:00:00.

# ausearch -ts today -k password-file
# ausearch -ts 3/12/07 -k password-file

Pesquisar por um evento casando com o utilitário especificado utilizando a opção -x. Por exemplo, verificar quem acessou o arquivo /etc/passwd utilizando rm.

# ausearch -ts today -k password-file -x rm
# ausearch -ts 3/12/07 -k password-file -x rm

Pesquisar por um evento do determinado usuário pelo UID. Verificar se o usuário vivek (UID 506) tentou acessar o arquivo /etc/passwd:

# ausearch -ts today -k password-file -x rm -ui 506
# ausearch -k password-file -ui 506


Conclusão
O audit é uma ferramenta poderosa e de simples configuração/utilização.

Porém, pode gerar dados em excesso, portanto, um bom planejamento é recomendável para uma implementação sem surpresas, afim de extrair todas as vantagens da ferramenta.
 
Topo