Verificação de integridade de arquivos - Ferramenta OSSEC

Neste tutorial abordaremos uma das funcionalidades da ferramenta de detecção de intruso OSSEC (Open Source Host-based Intrusion Detection System), o Syscheck. O Syscheck é responsável pela verificação da integridade e autenticidade de arquivos. O artigo está divido em três partes, introdução, instalação e configuração.

[ Hits: 36.606 ]

Por: Rafael Rocha em 29/06/2010


Configuração do Syscheck



Syscheck é o nome do processo que verifica a integridade de arquivos do OSSEC. Vamos explicar alguns detalhes no arquivo de configuração e logo depois faremos um teste para verificar a integridade de alguns arquivos.

O arquivo de configuração

Após a instalação vamos dar uma olhada no arquivo de configuração ossec.conf.

# nano /var/ossec/etc/ossec.conf

Como pode ser observado, ossec.conf é um arquivo no formato XML (eXtensible Markup Language) e é neste arquivo onde todas as funcionalidade da ferramenta são configuradas. Como estamos estudando somente o Syscheck, iremos restringir nossa explicação somente às linhas do arquivo que estão entre as tags relacionadas a este processo (</syscheck> e </syscheck>).

O trecho abaixo foi retirado do arquivo ossec.conf com configuração inicial. Somente os comentários foram modificados, ou melhor, traduzidos.

<syscheck>
   <!-- Frequência que o Syscheck é executado (dado em segundos)-->
   <frequency>79200</frequency>

   <!-- Diretórios analisados -->
   <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
   <directories check_all="yes">/bin,/sbin</directories>

   <!-- Arquivos e diretorios ignorados -->
   <ignore>/etc/mtab</ignore>
   <ignore>/etc/mnttab</ignore>
   <ignore>/etc/hosts.deny</ignore>
   <ignore>/etc/mail/statistics</ignore>
   <ignore>/etc/random-seed</ignore>
   <ignore>/etc/adjtime</ignore>
   <ignore>/etc/httpd/logs</ignore>
   <ignore>/etc/utmpx</ignore>
   <ignore>/etc/wtmpx</ignore>
   <ignore>/etc/cups/certs</ignore>
   <ignore>/etc/dumpdates</ignore>
   <ignore>/etc/svc/volatile</ignore>

   <!-- Arquivos windows ignorados -->
   <ignore>C:\WINDOWS/System32/LogFiles</ignore>
   <ignore>C:\WINDOWS/Debug</ignore>
   <ignore>C:\WINDOWS/WindowsUpdate.log</ignore>
   <ignore>C:\WINDOWS/iis6.log</ignore>
   <ignore>C:\WINDOWS/system32/wbem/Logs</ignore>
   <ignore>C:\WINDOWS/system32/wbem/Repository</ignore>
   <ignore>C:\WINDOWS/Prefetch</ignore>
   <ignore>C:\WINDOWS/PCHEALTH/HELPCTR/DataColl</ignore>
   <ignore>C:\WINDOWS/SoftwareDistribution</ignore>
   <ignore>C:\WINDOWS/Temp</ignore>
   <ignore>C:\WINDOWS/system32/config</ignore>
   <ignore>C:\WINDOWS/system32/spool</ignore>
   <ignore>C:\WINDOWS/system32/CatRoot</ignore>
</syscheck>

Como podemos observar no trecho acima, a configuração do Syscheck é muito simples. A tabela abaixo traduzida e adaptada de www.ossec.net/main/manual/manual-syscheck/, nos mostra todas as opções de configurações.
Linux: Verificação de integridade de arquivos - Ferramenta OSSEC

Preparando o terreno (configurando)

Para fins didáticos, vamos configurar um novo diretório a ser monitorado e verificar o que ocorre quando um de seus arquivos é modificado.

Primeiro vamos criar um diretório para usarmos como teste. No nosso caso, criamos uma pasta dentro de /tmp com o nome testeOssec e inserirmos dois arquivos de texto para modificarmos posteriormente, porém poderiam ser arquivos de qualquer extensão.

# mkdir /tmp/testeOssec
# nano /tmp/testeOssec/arq1.txt
# nano /tmp/testeOssec/arq2.txt


Agora vamos editar o arquivo ossec.conf:

# nano /var/ossec/etc/ossec.conf

Para facilitar a análise dos alertas que o Syscheck vai gerar, vamos monitorar somente uma pasta (/tmp/testeOssec). Para isso, vamos substituir as linhas:

<directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories check_all="yes">/bin,/sbin</directories>

Por:

<directories check_all="yes">/tmp/testeOssec</directories>

Também vamos adicionar algumas outras tags dentro da tag <syscheck>:

<!-- Alerta caso sejam criados novos arquivos -->
<alert_new_files>yes</alert_new_files>

<!-- Arquivos e diretorios ignorados -->
<ignore>/tmp/testeOssec/arq2.txt</ignore>

Note que com a tag alert_new_files o Syscheck irá nos informar não só quando um arquivo é modificado, mas também quando um arquivo é criado dentro dos diretórios selecionados.

Note também a tag <ignore> em que o Syscheck ignorará qualquer modificação feita no arquivo arq2.txt. A tag <ignore> também aceita expressões regulares, por exemplo, <ignore type="sregex" >.log$|.tmp$</ignore>, em que serão ignorados todos os arquivos terminado em .log ou .tmp.

Como estamos só testando a ferramenta, vamos modificar a tag <frequency> para executar o Syscheck a cada 200 segundos. Troque:

<frequency>79200</frequency>

Por:

<frequency>200</frequency>

No final, o arquivo de configuração ossec.conf ficará dessa maneira:

<syscheck>
   <!-- Frequência que o Syscheck é executado (dado em segundos)-->
   <frequency>200</frequency>

   <!-- Diretórios analisados -->
   <directories check_all="yes">/tmp/testeOssec</directories>

   <!-- Arquivos e diretorios ignorados -->
   <ignore>/tmp/testeOssec/arq2.txt</ignore>
   <ignore>/etc/mtab</ignore>
   <ignore>/etc/mnttab</ignore>
   <ignore>/etc/hosts.deny</ignore>
   <ignore>/etc/mail/statistics</ignore>
   <ignore>/etc/random-seed</ignore>
   <ignore>/etc/adjtime</ignore>
   <ignore>/etc/httpd/logs</ignore>
   <ignore>/etc/utmpx</ignore>
   <ignore>/etc/wtmpx</ignore>
   <ignore>/etc/cups/certs</ignore>
   <ignore>/etc/dumpdates</ignore>
   <ignore>/etc/svc/volatile</ignore>

   <!-- Arquivos windows ignorados -->
   <ignore>C:\WINDOWS/System32/LogFiles</ignore>
   <ignore>C:\WINDOWS/Debug</ignore>
   <ignore>C:\WINDOWS/WindowsUpdate.log</ignore>
   <ignore>C:\WINDOWS/iis6.log</ignore>
   <ignore>C:\WINDOWS/system32/wbem/Logs</ignore>
   <ignore>C:\WINDOWS/system32/wbem/Repository</ignore>
   <ignore>C:\WINDOWS/Prefetch</ignore>
   <ignore>C:\WINDOWS/PCHEALTH/HELPCTR/DataColl</ignore>
   <ignore>C:\WINDOWS/SoftwareDistribution</ignore>
   <ignore>C:\WINDOWS/Temp</ignore>
   <ignore>C:\WINDOWS/system32/config</ignore>
   <ignore>C:\WINDOWS/system32/spool</ignore>
   <ignore>C:\WINDOWS/system32/CatRoot</ignore>
</syscheck>

Mãos a obra (verificando integridade)

Pronto, agora que está tudo devidamente configurado, salve o arquivo ossec.conf e inicie a ferramenta.

# /var/ossec/bin/ossec-control start

Para verificar quais módulos do OSSEC estão rodando basta executar:

# /var/ossec/bin/ossec-control status

Logo ao iniciarmos o OSSEC, já recebemos um e-mail informando que ele foi iniciado. Caso não receba o e-mail, verifique as configurações de e-mail na tag <global> dentro do arquivo ossec.conf. Verifique também sua caixa de SPAM, é bem possível que ele tenha parado lá. O e-mail será parecido com esse:

OSSEC HIDS Notification.
2010 Jun 16 21:51:42

Received From: usuario-desktop->ossec-monitord
Rule: 502 fired (level 3) -> "Ossec server started."
Portion of the log(s):

ossec: Ossec started.


--END OF NOTIFICATION


O OSSEC possui vários arquivos de log interessantes em seu diretório (/var/ossec), vamos dar uma olhada neles.

# nano /var/ossec/logs/ossec.log

Nesse arquivo ficam os log's gerais do OSSEC. Por ele é possível ver quais regras ele carregou, os diretórios que serão ignorados e os que são monitorados, e as informações a respeito do Syscheck, que é o que nos interessa.

Por exemplo, sabemos a data e hora que ele foi inicializado e as pastas que está monitorando por essas linhas:

2010/06/16 21:51:42 ossec-syscheckd: INFO: Started (pid: 2177).
2010/06/16 21:51:42 ossec-syscheckd: INFO: Monitoring directory: '/tmp/testeOssec'.


Reparem nessa linha:

2010/06/16 21:53:42 ossec-syscheckd: INFO: Starting syscheck database (pre-scan).
2010/06/16 21:53:42 ossec-syscheckd: INFO: Finished creating syscheck database (pre-scan completed).


Nesse momento ele já varreu todos os arquivos nas pastas que você selecionou e já tem o MD5 e SHA1 de cada arquivo contido nessas pastas. A varredura foi muita rápida, já que selecionamos somente uma pasta e ainda por cima contendo somente dois arquivos. A partir de agora ele vai executar a varredura a cada 200 segundos aproximadamente.

Outro arquivo de log interessante de se analisar é o alerts.log que se encontra dentro da pasta /log/alerts:

# nano /var/ossec/logs/alerts/alerts.log

Dentro dele encontraremos informações como essa:

** Alert 1276791401.0: mail - ossec,
2010 Jun 16 21:51:42 usuario-desktop->ossec-monitord
Rule: 502 (level 3) -> 'Ossec server started.'
Src IP: (none)
User: (none)
ossec: Ossec started.
E é exatamente essas informações que recebemos por e-mail. Como não desabilitamos o Logcollector, que é outro módulo do OSSEC responsável por analisar mudanças nos arquivos de log, se efetuássemos uma autenticação no sistema, entrando como root no terminal por exemplo, uma mensagem parecida essa seria adicionada no alerts.log:

** Alert 1276792106.192: - syslog,sudo
2010 Jun 16 22:01:42 usuario-desktop->/var/log/auth.log
Rule: 5402 (level 3) -> 'Successful sudo to ROOT executed'
Src IP: (none)
User: (none)
Jun 16 22:01:42 usuario-desktop sudo: usuario : TTY=pts/2 ; PWD=/home/usuario ; USER=root ; COMMAND=/$


Voltando ao objetivo principal, agora vamos modificar os arquivos contidos na pasta /tmp/testeOssec para ver o que acontece. Abram os arquivos com um editor de texto, escrevam qualquer coisa nele e salvem.

# nano /tmp/testeOssec/arq1.txt
# nano /tmp/testeOssec/arq2.txt


Esperem a execução da varredura novamente (vocês podem verificar abrindo o arquivo ossec.log), e voilà, logo logo será enviado um e-mail para sua conta contendo um texto parecido com esse:

OSSEC HIDS Notification.
2010 Jun 16 22:06:30

Received From: usuario-desktop->syscheck
Rule: 550 fired (level 7) -> "Integrity checksum changed."
Portion of the log(s):

Integrity checksum changed for: '/tmp/testeOssec/arq1.txt'
Size changed from '5' to '23'
Old md5sum was: '4054bab8c1d16f9cb3e5c2683e9cdd36'
New md5sum is : 'd7c3ab2f66d8c82f1906f50f9fb6d41c'
Old sha1sum was: '866acde113b4e099d77c3375ecd321bccc29f1a4'
New sha1sum is : '81b38f4f7e3624703530e87054f4ea1635c95457'


--END OF NOTIFICATION
Notem que a modificação do arq2.txt não foi notificada, já que o colocamos na lista dos ignorados usando a tag <ignore>.

Conclusão

Esse tutorial nos demonstrou o quanto é simples e fácil configurar o Syscheck localmente.

Observamos também a praticidade que se tem com o envio de relatórios automáticos para o e-mail do administrador.

Para quem quer se aprofundar e utilizar dos outros recursos fornecidos por essa poderosa ferramenta, visite os links abaixo.
Página anterior    

Páginas do artigo
   1. Introdução
   2. Instalando o Ossec
   3. Configuração do Syscheck
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

5 comandos que ninguém nunca deve executar no Linux

Rainbow Crack e Rainbow Tables

13 dicas de segurança para o Apache

Nessus Portscanner

ProFTPD + ClamAV - FTP livre de vírus

  
Comentários
[1] Comentário enviado por jeferson_roseira em 29/06/2010 - 13:26h

Prabéns pelo artigo.

Muito bom o conteúdo, gostei também dos exemplos.

att.

Jeferson Roseira

[2] Comentário enviado por Dombom em 01/07/2010 - 04:14h

Parabéns, muito bom artigo

[3] Comentário enviado por Roberto Ramos em 31/05/2012 - 16:16h

Rafael,

instalei o ossec para ver como ele funcionava mais gostaria de removelo, vc saberia me informar como procedo, ja pesquisei bastante no google e até o momento nada, vou continuar procurando, de antemão deixo aqui meu agradecimento.

[4] Comentário enviado por jtdest em 05/03/2015 - 19:41h


Ola blz,tenho uma duvida , pretendo implanta ossec na minha rede , mais a distribuição dos IPS das maquinas clientes e feita através do DHCP server , como adciona as maquinas cliente no servidor ossec, sendo que os IPS Sao dinamicamente distribuídos , pra melhor como funciona ossec sobre DHCP, por favor se pode me ajudar agradeço.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts