Pesquisa de site

Aprenda auditoria de sistema Linux com ferramenta Auditd no CentOS/RHEL


A auditoria do sistema refere-se simplesmente à análise aprofundada de um sistema específico: uma auditoria consiste num exame das várias partes que compõem esse sistema, com avaliação crítica (e testes, se necessário) em diferentes áreas de interesse.

Leia também: Lynis – Ferramenta de auditoria e verificação de segurança para sistemas Linux

Um dos subsistemas críticos do RHEL/CentOS, o sistema de auditoria Linux comumente conhecido como auditd. Implementa um meio de rastrear informações relevantes para a segurança num sistema: utiliza regras pré-configuradas para recolher grandes quantidades de informações sobre eventos que estão a acontecer no sistema e regista-os num ficheiro de registo, criando assim um teste de auditoria.

Pode registrar informações como data e hora, tipo e resultado de um evento; usuários que causaram o evento, quaisquer modificações feitas em arquivos/bancos de dados; usos de mecanismos de autenticação de sistema, como PAM, LDAP, SSH e outros.

Auditd também registra quaisquer alterações feitas nos arquivos de configuração de auditoria ou qualquer tentativa de acessar arquivos de log de auditoria e quaisquer esforços para importar ou exportar informações para ou do sistema, além de muitas outras informações relacionadas à segurança.

Por que o sistema de auditoria Linux é importante?

  1. Não requer nenhum programa ou processo externo para ser executado em um sistema, tornando-o autossuficiente.
  2. É altamente configurável, portanto, permite visualizar qualquer operação do sistema desejada.
  3. Ajuda a detectar ou analisar possíveis comprometimentos de um sistema.
  4. É capaz de funcionar como um sistema de detecção independente.
  5. Ele pode funcionar com sistemas de detecção de intrusão para permitir a detecção de intrusão.
  6. É uma ferramenta vital para auditar investigações forenses.

Os componentes do sistema de auditoria Linux

O sistema de auditoria tem dois componentes principais, a saber:

  • aplicativos e utilitários/ferramentas no espaço do usuário, e
  • processamento de chamadas do sistema no lado do kernel – aceita chamadas do sistema de aplicativos do espaço do usuário e as passa por três tipos de filtros, a saber: usuário, tarefa, saída< ou excluir.

A parte mais importante é o daemon de auditoria user-space (auditd) que coleta informações do kernel com base em regras pré-configuradas e gera entradas em um arquivo de log: o o log padrão é /var/log/audit/audit.log.

Além disso, o audispd (daemon do despachante de auditoria) é um multiplexador de eventos que interage com o auditd e envia eventos para outros programas que desejam executar processamento de eventos.

Existem diversas ferramentas de espaço do usuário para gerenciar e recuperar informações do sistema de auditoria:

  • auditctl – um utilitário para controlar o sistema de auditoria do kernel.
  • ausearch – um utilitário para pesquisar arquivos de log de auditoria para eventos específicos.
  • aureport – um utilitário para criar relatórios de eventos registrados.

Como instalar e configurar a ferramenta de auditoria no RHEL/CentOS/Fedora

Primeiro, certifique-se de verificar se a ferramenta de auditoria está instalada em seu sistema usando o comando rpm e o utilitário grep da seguinte forma:

rpm -qa | grep audit

Se você não tiver os pacotes acima instalados, execute este comando como usuário root para instalá-los.

yum install audit

A seguir, verifique se auditd está habilitado e em execução, emita os comandos systemctl abaixo no terminal.

--------------- On CentOS/RHEL 7 --------------- 
systemctl is-enabled auditd
systemctl status auditd
systemctl start auditd   [Start]
systemctl enable auditd  [Enable]

--------------- On CentOS/RHEL 6 --------------- 
service auditd status
service auditd start     [Start]
chkconfig auditd on      [Enable]

Agora veremos como configurar o auditd usando o arquivo de configuração principal /etc/audit/auditd.conf. Os parâmetros aqui permitem controlar como o serviço é executado, como definir a localização do arquivo de log, número máximo de arquivos de log, formato de log, como lidar com discos cheios, rotação de log e muito mais opções.

vi /etc/audit/auditd.conf

No exemplo de saída abaixo, os parâmetros são autoexplicativos.

Compreendendo as regras de auditoria

Como mencionamos anteriormente, o auditd usa regras para coletar informações específicas do kernel. Essas regras são basicamente opções auditctl (veja a página de manual) que você pode pré-configurar regras no arquivo /etc/audit/rules.d/audit.rules (no CentOS 6, use o arquivo /etc/audit/audit.rules), para que sejam carregados na inicialização.

Existem três tipos de regras de auditoria que você pode definir:

  • Regras de controle – permitem a modificação do comportamento do sistema de auditoria e de algumas de suas configurações.
  • Regras do sistema de arquivos (também conhecidas como monitorações de arquivos) – permitem a auditoria do acesso a um determinado arquivo ou diretório.
  • Regras de chamada de sistema – permite o registro de chamadas de sistema feitas por qualquer programa.

Agora abra o arquivo de configuração principal para edição:

vi /etc/audit/rules.d/audit.rules

Observe que a primeira seção deste arquivo deve conter regras de controle. Em seguida, adicione suas regras de auditoria (observações de arquivos e regras de chamada do sistema) na seção intermediária e, finalmente, a última seção contém configurações de imutabilidade que também são regras de controle.

Exemplos de regras de controle de auditoria

-D		#removes all previous rules
-b  3074	#define buffer size
-f 4		#panic on failure 
-r 120		#create at most 120 audit messages per second

Exemplos de regras do sistema de arquivos Auditd

Você pode definir inspeções de arquivos usando esta sintaxe:

-w /path/to/file/or/directory -p permissions -k key_name

Onde a opção:

  • w – é usado para especificar um arquivo ou diretório a ser monitorado.
  • p – permissões a serem registradas, r – para acesso de leitura, w – para acesso de gravação, x – para acesso de execução e a – para alteração de arquivo ou atributo de diretor.
  • -k – permite definir uma string opcional para identificar qual regra (ou conjunto de regras) criou uma entrada de log específica.

Essas regras permitem que a auditoria observe eventos que fazem alterações nesses arquivos críticos do sistema.

-w /etc/passwd -p wa -k passwd_changes
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes

Exemplos de regras de chamada do sistema Auditd

Você pode definir uma regra de chamada do sistema usando o formulário abaixo:

-a action,filter -S system_call -F field=value -k key_name

onde :

  • ação – tem dois valores possíveis: sempre ou nunca.
  • filtro – especifica que o filtro de correspondência de regras do kernel (tarefa, saída, usuário e exclusão) é aplicado ao evento.
  • chamada de sistema – nome da chamada de sistema.
  • campo – especifica opções adicionais como arquitetura, PID, GID etc. para modificar a regra.

Aqui estão algumas regras que você pode definir.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S sethostname -S setdomainname -k system_locale

Por último, adicione as configurações de imutabilidade no final do arquivo, por exemplo:

-e 1	#enable auditing
-e 2	#make the configuration immutable -- reboot is required to change audit rules
Exemplo de arquivo de configuração de regras de auditoria

Como definir regras de auditoria usando o utilitário auditctl

Alternativamente, envie as opções para auditd enquanto ele estiver em execução, usando auditctl como nos exemplos a seguir. Esses comandos podem substituir regras no arquivo de configuração.

Para listar todas as regras de auditoria atualmente carregadas, passe a flag -l:

auditctl -l

A seguir, tente adicionar algumas regras:

auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/group -p wa -k group_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes
auditctl -l

Noções básicas sobre arquivos de log de auditoria

Todas as mensagens de auditoria são registradas no arquivo /var/log/audit/audit.log por padrão. Para entender o formato da entrada de log, carregaremos uma regra e verificaremos a entrada de log gerada após um evento que corresponda à regra.

Supondo que tenhamos um diretório secreto de backups, esta regra de auditoria registrará qualquer tentativa de acessar ou modificar este diretório:

auditctl -w /backups/secret_files/ -p rwa -k secret_backup

Agora, usando outra conta do sistema, tente ir para o diretório acima e execute o comando ls:

cd /backups/secret_files/
ls

A entrada do log ficará assim.

O evento acima é composto por três tipos de registros de auditoria. O primeiro é type=SYSCALL:

type=SYSCALL msg=audit(1505784331.849:444): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=8ad5c0 a2=90800 a3=0 items=1 ppid=2191 pid=2680 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=3 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="secret_backup"

O segundo é type=CWD.

type=CWD msg=audit(1505784331.849:444):  cwd="/backups/secret_files"

E o último é type=PATH:

type=PATH msg=audit(1505784331.849:444): item=0 name="." inode=261635 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:default_t:s0 objtype=NORMAL

Você pode encontrar uma lista completa de todos os campos de eventos (como msg, arch, ses etc.) e seus significados na Referência do Sistema de Auditoria.

É tudo por agora. No próximo artigo, veremos como usar o ausearch para consultar arquivos de log de auditoria: explicaremos como pesquisar informações específicas nos logs de auditoria. Se você tiver alguma dúvida, entre em contato conosco através da seção de comentários abaixo.