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.
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.