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?
- Não requer nenhum programa ou processo externo para ser executado em um sistema, tornando-o autossuficiente.
- É altamente configurável, portanto, permite visualizar qualquer operação do sistema desejada.
- Ajuda a detectar ou analisar possíveis comprometimentos de um sistema.
- É capaz de funcionar como um sistema de detecção independente.
- Ele pode funcionar com sistemas de detecção de intrusão para permitir a detecção de intrusão.
- É 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.