Criando um IDS com resposta ativa com OSSEC / Snort Rodrigo Ribeiro Montoro (Sp0oKeR) 1 BRconnection Ltda. Introdução: Atualmente o crescimento de ataques e necessidades de possuirmos serviços expostos na internet faz com que a necessidade da segurança em perímetro seja cada vez maior. Objetivo: Esse paper não ensinará você a instalar ou configurar snort e/ou OSSEC HIDS, a meta aqui será ensinar a usar o modelo de output do snort CSV e construir uma regra no OSSEC para active response do mesmo. O Ossec precisa estar com active-response ativado. Resumo OSSEC / Snort: OSSEC é um Host Based Intrusion detection system que faz análise de logs, checagem de integridade, active response (resposta em real time), verificacão de rootkits entre outros. Mais info http://www.ossec.net Snort é um Network Intrusion Detection system, que acopla funcionalidade para detecção de ataques na rede. Mais info http://www.snort.org 1 Rodrigo Montoro(Sp0oKeR) utiliza o linux a mais de 8 anos, sendo certificado RHCE ( Redhat Certified Engineer), LPI Nível I e SnortCP (Snort Certified Professional). Participante do snort-br, slackware-br, ISSA-Brasil, OWASP-BR entre outros. Palestrante em eventos como FISL, Conisli, CNASI. Atualmente trabalha como Analista de Segurança na empresa BRconnection no qual é responsável pela parte de Pentests onde tem a missão de realizar pesquisas e estudos sobre metodologias de combate a vulnerabilidades. Para entrar em contato spooker@brc.com.br / spooker@gmail.com 1/5
Mãos a massa: O ossec por padrão possui a seguinte estrutura: /var/ossec raiz do ossec /var/ossec/etc/ossec.conf principal arquivo de configuração /var/ossec/rules onde as regras ficam O snort,padrão redhat : /etc/snort/ - raiz das configurações /etc/snort/snort.conf arquivo principal de configuração Inicialmente vamos editar o snort.conf e adicionar o output no modelo csv para o arquivo /var/log/snort-spooker.log. Um pouco sobre o modo de output do csv: Abaixo uma listagem dos parametros que podemos ter no nosso log: timestamp sig generator sig id sig rev msg proto src srcport dst dstport ethsrc ethdst ethlen tcpflags tcpseq tcpack tcplen tcpwindow ttl tos id dgmlen iplen icmptype icmpcode icmpid icmpseq Exemplo: output alert_csv: <nome_arquivo> <formato> 2/5
output alert_csv: /var/log/alerta.csv timestamp, msg No nosso caso, iremos editar o snort.conf e adicionar: output alert_csv: /var/log/snort-spooker.log msg,timestamp,src,dst,dstport Esse modelo de log, nós traria o horário, mensagem da regra, ip origem, ip destino e porta destino. Exemplo: [OSSEC] Virus Detected,11/20-10:01:26.148307,192.168.240.200,200.xxx.xxx.xx,80 Onde MSG: [OSSEC] Virus Detected Data: 11/20-10:01:26.14830 Origem: 192.168.240.200 Destino: 200.xxx.xxx.xx Porta Destino: 80 A flag [OSSEC] terá que ser adicionada no campo msg das regras/ataques do snort que deseja ter resposta ativa. Com nossos snort configurado (OBS: precisa reinicar o snort para gerar logs), vamos ao OSSEC: Primeiro adicionarei o arquivo para ser monitorado pelo OSSEC, no caso como é uma entrada por linha, usarei modo syslog. Edite o ossec.conf e adicone: <localfile> <log_format>syslog</log_format> <location>/var/log/snort-spooker.log</location> </localfile> Após editar, reinicie o ossec para o mesmo comecar a monitorar nosso log. /var/ossec/bin/ossec-control restart O segundo passo, será criar o decoder e a regra que irão gerar os alertas: 3/5
Edite o /var/ossec/etc/decoder.xml e adicione <!-- Sp0oKeR Playing - Exemplos de alert [OSSEC] Sp0oKeR Virus,11/20-11:58:17.203367,192.168.240.200,200.182.206.2,80 --> <decoder name="ossec-snort"> <prematch>^[ossec]</prematch> <regex offset="after_prematch">,\s+,(\d+.\d+.\d+.\d+),(\d+.\d+.\d+.\d+),(\d+)</regex> <order>srcip, dstip, dstport</order> </decoder> O prematch, tentará visualizar o comeco da linha com [OSSEC], que será a flag que dara um start no alerta. Lembre-se que voce pode modificar essa flag para qualquer outra, desde que reconfigure todo os passos que fazem referencia a ela. Depois do prematch, o decoder irá fazer o prematch, que será responsável em pegar o ip de origem, ip destino e porta destino (<order>srcip, dstip, dstport</order>), que será usado no active response depois. Agora gerarei a regra que fara com que o alerta seja gerado, incluiremos ela no /var/ossec/rules/local_rules.xml que é o local padrão para inputarmos nossas regras. <group name="snort,alert_csv,"> <rule id = "111" level = "7"> <decoded_as>ossec-snort</decoded_as> <description> SNORT Attack</description> </rule> <rule id="122" level="7"> <if_sid>111</if_sid> <match>[ossec]</match> <description>snort Attack Detected with OSSEC Flag</description> </rule> Com isso, e logicamente como comentei voce ja deve ter o ossec instalado com active response ativado, o alerta (o alerta sempre terá independente de active response ativado ou não) será o seguinte: ** Alert 1195574579.1031: mail - snort,alert_csv, 2007 Nov 20 14:02:59 frankstein->/var/log/snort-spooker.log Rule: 122 (level 7) -> 'SNORT Attack Detected with OSSEC Flag' Src IP: 192.168.240.200 User: (none) [OSSEC] Sp0oKeR Virus,11/20-14:02:59.650069,192.168.240.200,200.xxx.zzz.yyy,80 4/5
E como veremos abaixo, o mesmo como a regra tem level >=6, ele ativara o active response: # tail -2 active-responses.log Tue Nov 20 14:02:59 BRST 2007 /var/ossec/active-response/bin/host-deny.sh add - 192.168.240.200 1195574579.1321 122 Tue Nov 20 14:02:59 BRST 2007 /var/ossec/active-response/bin/firewall-drop.sh add - 192.168.240.200 1195574579.1321 122 Conclusões: Com o OSSEC + SNORT podemos ter uma ótima ferramenta de resposta ativa para ataques que desejar monitorar, visto que na parte de mensagem do assinatura do snort,voce precise adicionar a flag [OSSEC], como exemplo msg: [OSSEC] Mensagem do ataque da regra snort. Qualquer dúvida, sugestão, críticas fiquem a vontade para entrar em contato Referências: http://www.snort.org http://www.ossec.net http://www.brc.com.br/artigos/ Data [São Paulo, 21 de Novembro de 2007.] 5/5