Ossec – Entendendo o Syscheck – HIDS parte 5
Fala pessoal! Dando continuidade a nossa série de posts sobre o ossec; vamos ver mais uma funcionalidade que ele nos oferece, o Syscheck. O Syscheck é o nome do processo de verificação de integridade dentro do OSSEC. Ele é executado periodicamente para verificar se algum arquivo (ou entrada de registro no Windows) mudou.
Existem vários tipos e vetores de ataque; mas há uma coisa única em todos eles, eles deixam vestígios e sempre alteram o sistema de alguma forma. De vírus que modificam alguns arquivos, até os rootkits do tipo kernel-land que alteram o kernel, sempre há alguma alteração na integridade do sistema.
A verificação de integridade é uma parte essencial da detecção de intrusão que detecta mudanças na integridade do sistema. O OSSEC faz isso procurando alterações nos checksums MD5/SHA1 de arquivos chave no sistema e/ou no registro do Windows.
Ele funciona da seguinte maneira, o agente verifica o sistema dentro de um intervalo de tempo pré-definido e envia todos os checksums para o servidor. O servidor armazena os checksums e verifica se houveram modificações nos arquivos, caso positivo um alerta é enviado.
Por padrão ele roda a cada 6 horas e sua base de dados fica armazenada em “/var/ossec/queue/syscheck”. Além de todas essas funcionalidades, ele ainda ajuda no processo de certificação PCI DSS, especificamente com as sessões 10.5 e 11.5. A checagem dos arquivos é feita lentamente para evitar sobrecarga de CPU e memória. Todas as configurações necessárias (inclusão e exclusão de diretórios) podem ser realizadas pelo ossec.conf ou agent.conf.
Configurações
Essas opções de configuração podem ser especificadas no arquivo ossec.conf de cada agente ou no agent.conf do servidor, com exceção do arquivo auto_ignore e alert_new que se aplica às instalações locais e manager. A opção de ignorar irá se aplicar a todos os agentes caso seja especificado no manager.
directories
Use essa opção para adicionar e remover diretórios a serem monitorados (eles devem ser separados por vírgula). Todos os arquivos e sub-diretórios também serão monitorados. Unidades de disco sem diretórios não serão validadas, deve haver no mínimo um ponto ‘.’ (D:\.)
Atributos:
realtime: Value=yes
Isso permitirá o monitoramento em tempo real no Linux (usando as chamadas do sistema inotify) e sistemas Windows.
report_changes: Value=yes
Relata diffs de alterações de arquivos. É limitado aos arquivos de texto.
check_all: Value=yes
Todas as seguintes opções de check_ * são usadas em conjunto, a menos que uma opção específica seja explicitamente substituída por “no”.
check_sum: Value=yes
Verifique se os mapeamentos md5 e sha1 dos arquivos serão verificados. Isso é o mesmo que usar ambos check_sha1sum = “yes” e check_md5sum = “yes”
check_sha1sum: Value=yes
Quando usado apenas o hash sha1 dos arquivos será verificado.
check_md5sum: Value=yes
Quando usado apenas o hash MD5 dos arquivos será verificado.
check_size: Value=yes
O tamanho dos arquivos será verificado.
check_owner: Value=yes
Verifique o proprietário dos arquivos selecionados.
check_group: Value=yes
Verifique o grupo proprietário dos arquivos/diretórios selecionados.
check_perm: Value=yes
Verifique a permissão UNIX dos arquivos/diretórios selecionados. No Windows, só irá verificar as permissões POSIX.
ignore
Lista de arquivos ou diretórios a serem ignorados (uma entrada por elemento). Os arquivos e diretórios ainda são verificados, mas os resultados são ignorados.
frenquency
Frequência que o SysCheck vai ser executado (em segundos). O padrão é 6 horas ou 21600 segundos
scan_time
Tempo para executar as varreduras (pode estar nos formatos de 21pm, 8:30, 12am, etc).
scan_day
Dia da semana para executar as varreduras (pode ser no formato de domingo, sábado, segunda-feira, etc.)
alert_new_files
Especifica se o syscheck deve alertar sobre novos arquivos criados.
windows_registry
Use esta opção para adicionar entradas de registro do Windows a serem monitoradas.
registry_ignore
Lista de entradas de registro a serem ignoradas.
Exemplos de configuração
<syscheck> <directories realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <directories check_all="yes">/bin,/sbin</directories>
</syscheck>
<syscheck>
<ignore>/etc/random-seed</ignore>
<ignore>/root/dir</ignore>
<ignore type="sregex">.log$|.tmp</ignore>
</syscheck>
O binário que nos permite trabalhar com o syscheck é o syscheck_control, ele está localizado na pasta bin do ossec, com ele podemos atualizar a base de dados dos agentes, lista arquivos e registros modificados e visualizar as modificações realizadas:
# /var/ossec/bin/syscheck_control
No nosso laboratório eu deixei o agent.conf da seguinte maneira:
<agent_config name="Agent_Linux">
<syscheck>
<directories realtime="yes" check_all="yes">/var/laboratorio</directories>
<ignore>/var/laboratorio/trabalhos</ignore>
</syscheck>
</agent_config>
Perceba que no agente “Agent_Linux” eu configurei o diretório “/var/laboratorio” em real time e criei uma exclusão com o diretório “/var/laboratorio/trabalhos”, o que significa que tudo que for alterado no diretório “laboratorio” será alertado, com exceção do diretório “trabalhos”.
No arquivo de logs de alertas do servidor podemos ver o alerta de modificação no agente “Agent_Linux”:
** Alert 1498658780.154225: mail - ossec,syscheck,
2017 Jun 28 11:06:20 (Agent_Linux) any->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: '/var/laboratorio/aula1'
Size changed from '0' to '6'
Old md5sum was: 'd41d8cd98f00b204e9800998ecf8427e'
New md5sum is : '1ca308df6cdb0a8bf40d59be2a17eac1'
Old sha1sum was: 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
New sha1sum is : '9dc628289966d144c1a5fa20dd60b1ca1b9de6ed'
Vamos ver um exemplo de configuração no Windows agora, quando se fala de Windows eu particularmente prefiro realizar as configurações do syscheck diretamente no ossec.conf dos agentes, como não é uma coisa que iremos ficar alterando toda hora, não tem muito problema. Eu prefiro fazer assim por que as vezes rola erro de sincronização do agent.conf com o Windows e pra evitar dores de cabeça assim fica mais fácil 🙂
No diretório “C:\Program Files (x86)\ossec-agent” edite o arquivo ossec.conf, entre as chaves <syscheck> insira as linhas abaixo:
<directories realtime="yes" check_all="yes">C:\laboratorio</directories>
<ignore>C:\laboratorio/lixo</ignore>
<windows_registry>HKEY_LOCAL_MACHINE\Software\guiadoti</windows_registry>
Essas regras vão monitorar as alterações em tempo real do diretório “C:\laboratorio” com exceção do “C:\laboratorio/lixo”, além disso ele irá monitorar o registro “guiadoti” que eu criei para o nosso teste, depois disso é só reiniciar o agent e pronto. Qualquer alteração será notificada como podemos ver no exemplo abaixo:
** Alert 1499412881.4544: mail - ossec,syscheck,
2017 Jul 07 04:34:41 (win_2012) any->syscheck
Rule: 550 (level 7) -> 'Integrity checksum changed.'
Integrity checksum changed for: 'C:\laboratorio/aula1.txt'
Size changed from '20' to '26'
Old md5sum was: '03aed8f36d207dc7461a3e2b0f41ad2c'
New md5sum is : 'f5a1230237ebea3094debda4a91fd6da'
Old sha1sum was: '2a95cb1654aaf60d7728d3e7a5f9b0fa42e51421'
New sha1sum is : 'bf371fb18b067ae8c66adef3ccb96e3d0ed4e8c0'
Bem pessoal é isso ai, espero que tenham curtido. Em breve irei postar outros artigos sobre o Ossec mostrando configurações mais avançadas. Não esqueçam de curtir nossas páginas nas redes sociais, Facebook, G+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.
- Metasploit Framework de cabo a rabo – Parte 6 - 4 de junho de 2018
- Metasploit Framework de cabo a rabo – Parte 5 - 28 de maio de 2018
- CEH – Scanning Networks – Parte 2 - 24 de maio de 2018