Regras do Snort

Downloads

39360.zip

> O Sistema de Detecção de Intrusão de Rede (NIDS) de código aberto escalável e eficiente Snort usa uma série de regras bem definidas para detectar pacotes anômalos na sua rede. A manutenção destes conjuntos de regras melhora drasticamente a eficácia do sistema. Algumas técnicas de gerenciamento de regras podem ajudá-lo a manter o seu Snort IDS. Primeiro, você pode prevenir uma sobrecarga de alerta apertando as definições das variáveis e preparando as regras do seu Snort. Você também pode manter suas regras personalizadas através de atualizações do conjunto de regras. Finalmente, você pode desconstruir uma regra para entender como personalizar regras para o seu ambiente.

Por padrão, o Snort contém mais de 1900 regras de estoque dentro de uma série de quase 50 arquivos de texto organizados por tipo, como mostra a Figura 1. Essas regras definem os gatilhos de resposta a muitas explorações de vulnerabilidade conhecidas relacionadas ao Windows, UNIX e aplicativos amplamente utilizados, como Microsoft IIS, Apache, Microsoft SQL Server e Oracle SQL. As regras também ajudam o Snort a fornecer dados de reconhecimento e possíveis avisos de configuração para alertá-lo sobre varreduras de rede ou sobre uma máquina que está transmitindo uma cadeia de caracteres padrão da comunidade SNMP, por exemplo. Como você pode imaginar, o Snort pode gerar um tremendo número de alertas. Para reduzir o ruído das regras de estoque, a configuração padrão do Snort permite apenas cerca de 1300 das regras por padrão e desabilita tipos inteiros de regras, tais como política, chat e vírus, por padrão. (Um tipo de regra é tipicamente contido dentro de seu próprio arquivo de texto, portanto as regras do tipo vírus estão contidas no arquivo virus.rules). Revise qualquer grupo de regras desabilitadas e habilite qualquer uma que possa se aplicar ao seu ambiente.

Prune Your Rules
Even com as muitas regras que o Snort desabilita por padrão, seu sistema Snort IDS provavelmente irá gerar muitos alertas. A passagem por todos esses alertas pode entorpecer seus sentidos para um tráfego realmente suspeito. Depois de instalar o Snort no seu ambiente, ajuste as regras para remover aquelas que não pertencem ao seu ambiente ou que não lhe dizem respeito. Por exemplo, se você não tiver a linguagem de script HTML embutida PHP: Preprocessador de Hipertexto (PHP) instalado no seu ambiente, você pode desabilitar o arquivo de regras web-php.rules. Ao decidir quais regras desativar, no entanto, considere os usuários que podem ter vários softwares em suas máquinas. Por exemplo, um dos seus sensores Snort pode captar pacotes suspeitos de uma máquina doméstica comprometida através de uma conexão VPN. Então, continuando o exemplo anterior, mesmo que você não tenha PHP instalado em nenhum dos seus computadores corporativos, um dos seus usuários finais pode tê-lo instalado em casa. Se esse computador doméstico fosse comprometido através de uma vulnerabilidade PHP, o atacante poderia ser capaz de acessar sua rede corporativa enquanto o computador comprometido está remotamente conectado à rede corporativa (tal como através de uma VPN).

Os sistemas de alerta e relatório mais comuns exibem o nome e SID de cada regra para fácil referência. Para cortar ainda mais sua lista de regras habilitadas, monitore seus sistemas, anote nomes de regras estranhas ou SIDs e depois desabilite essas regras. Para desativar manualmente uma regra do Snort, abra o arquivo de regras e insira um sinal de libra (#) na frente da regra. Para desabilitar uma classe inteira de regras, adicione um sinal de libra na frente do nome do arquivo de configuração do Snort. Você deve reiniciar o Snort para carregar as regras modificadas.

Revisitar suas regras regularmente e continuar a eliminar aquelas que não se aplicam à sua rede irá diminuir drasticamente o número de alertas que o Snort gera, tornando assim mais fácil detectar e identificar pacotes verdadeiramente suspeitos. E lembre-se de reativar as regras conforme necessário quando você introduzir uma nova tecnologia que atualmente as regras desabilitadas protegeriam.

Keep Rules Current
Snort.org hospeda duas versões das regras do Snort: snortrules-stable e snortrules-current, que funcionam com Snort 2.0x e Snort 1.9x, respectivamente. As novas regras contêm assinaturas adicionais e atualizações das regras existentes para fazer uso de variáveis expandidas. Por exemplo, as regras da versão 2.0.0 definem variáveis que descrevem especificamente certas funções da máquina (por exemplo, as variáveis HTTP_SERVERS e HTTP_PORTS caracterizam computadores que executam serviços Web e podem ser propensos a ataques de serviços Web). Essas novas variáveis funcionam nas novas regras para selecionar mais ataques de entrada. Uma regra antiga pode alertá-lo para um pedido HTTP suspeito destinado a qualquer computador na sua rede, mas a nova regra procura o mesmo ataque apenas quando está destinada a um servidor Web que a variável HTTP_SERVERS define. Este processo de classificação ajuda a reduzir falsos alarmes.

Snort.org actualiza frequentemente os conjuntos de regras para se manter actualizado com novas descobertas de exploração. Para se manter atualizado, verificar regularmente, baixar e aplicar novas regras que seriam úteis em seu ambiente. No entanto, note que sempre que você baixar um conjunto de novas regras, os arquivos de texto contendo as novas regras sobrescrevem aqueles contendo as regras antigas. Você verá rapidamente que comentar todas as suas regras não utilizadas cada vez que você atualizar seus arquivos de regras é oneroso.

Oinkmaster to the Rescue
Felizmente, várias ferramentas de código aberto podem ajudá-lo a superar este problema. Um programa de script Perl chamado Oinkmaster, que você pode baixar de http://www.algonet.se/~nitzer/oinkmaster, automatiza o download de novas regras e gerencia regras desabilitadas ou modificadas. Adaptado para sistemas UNIX, o script Perl usa as ferramentas wget, tar e gzip para buscar e expandir novas regras sempre que o script é executado. A maioria dessas ferramentas vem instalada em sistemas UNIX, mas você pode baixar as ferramentas para o Windows. Lembre-se que soluções open-source têm suporte dedicado limitado (se houver), então procure online por soluções para quaisquer problemas ou perguntas que você possa ter. A comunidade de software de código aberto (OSS) abunda com informações úteis. Um bom lugar para começar é assinando uma das listas de discussão do Snort, que você pode assinar em http://www.snort.org/lists.html.

Certifique-se de consultar o arquivo README para instruções detalhadas de instalação para a sua plataforma. O procedimento básico de instalação do Oinkmaster consiste em expandir os arquivos oinkmaster.pl e oinkmaster.conf para o seu diretório do Snort (ou um diretório que você especificar), então usando oinkmaster.conf para configurar o Oinkmaster.

Abrir oinkmaster.conf e seguir os comentários em linha para configurar a ferramenta. Primeiro, confirme a localização das regras atualizadas como um endereço Web (por exemplo, http://www.snort.org/dl/signatures/snortrules.tar.gz). Certifique-se de apontar o Oinkmaster para um site confiável e respeitável, especialmente se você optar por baixar e instalar as regras automaticamente. Caso contrário, você corre o risco de baixar regras corrompidas (ou pior, adulteradas) que poderiam comprometer o seu IDS.

Next, especifique os arquivos a serem pulados, modificados e desativados. Por padrão, o Oinkmaster não processa (ou seja, ele pula) local.rules e snort.conf.

O recurso modifysid do script permite que você modifique regras recém baixadas; pense no modifysid como um recurso Search and Replace para uma regra específica que você identifica pelo SID. Com este comando, você pode modificar o texto de uma regra específica. Por exemplo, você pode usar o modifysid para habilitar uma regra que está desabilitada por padrão. Para fazer isso, adicione um novo comando modifysid identificando a regra que você deseja habilitar e instrua-o a remover o caractere de comentário (#). Sempre que um novo conjunto de regras for baixado, esse caracter de comentário será removido quando o Oinkmaster analisar essa regra. Você também pode usar o modifysid para elevar o tipo de ação de uma regra. Por exemplo, o comando

modifysid 2003 "alert" | "sev1"

eleva o alerta com um SID de 2003 para um tipo de action personalizado de sev1. Oinkmaster faz isso procurando por “alert” e substituindo-o por “sev1”. E sim, ele fará múltiplas substituições, então use-o com cuidado.

O recurso final e mais popular do Oinkmaster, desabilita, permite que você desabilite as regras selecionadas. Especifique os SIDs de todas as regras que você quer manter desativadas. Por exemplo, para desabilitar o alerta em varreduras de rede, você pode começar com uma entrada similar a

disablesid 469, 615, 618, 620

Após baixar e analisar um novo conjunto de regras, o Oinkmaster procura pelos SIDs especificados e comenta as regras. Enquanto o Oinkmaster gerir as suas regras, as regras permanecerão desactivadas, mesmo através de actualizações de conjuntos de regras.

Executar o script sempre que quiser actualizar as suas regras. Se você se sentir ousado, agende o script para executar e atualizar as regras em uma base recorrente. Oinkmaster irá buscar as regras, expandi-las e copiá-las para o diretório de regras do seu sensor. Como na maioria dos OSS, use o Oinkmaster com discrição e primeiro aprenda o que ele faz e como ele afetará seu ambiente. Por exemplo, teste um novo conjunto de regras executando o Snort no modo self-test (usando o snort -T mais seus outros parâmetros) antes de implantar as regras em seu ambiente de produção.

Oinkmaster permite que você evite os riscos de baixar atualizações duvidosas, dando a você a opção de fazer backup de regras antigas e entregando um log de suas ações para o console. Reveja esta saída, que mostra regras removidas, regras ativas modificadas, revisões de não regras e novos arquivos, para confirmar que o Oinkmaster completou suas tarefas com sucesso e para confirmar as regras que o Oinkmaster modificou. Se você optar por agendar o Oinkmaster para executar automaticamente, considere a possibilidade de enviar os resultados por e-mail para facilitar a revisão, como mostra a Figura 2. O exemplo a seguir mostra como agendar o Oinkmaster para rodar diariamente às 6:15 a.m. usando o comando Linux crontab (crontab permite agendar trabalhos no Linux):

15 6 * * * /home/snort/oinkmaster.pl -o /home/snort/rules -b /home/snort/backup 2>&1 | mail -s "Oinkmaster" 

Os parâmetros do Oinkmaster especificam o diretório de regras (-o), o diretório de regras de backup (-b), e um comando para enviar os resultados por e-mail para o proprietário. O comando 2>&1 envia a saída StdErr para StdOut (o console) antes de enviá-la para o aplicativo de e-mail.

Looking at a Snort Rule
Além de desativar ou fazer modificações básicas nas regras de estoque, você pode criar suas próprias regras e personalizar ainda mais as regras do Snort diretamente para o seu ambiente. Por exemplo, considere a implementação de um sensor que monitore o tráfego dentro e fora do seu firewall. Apesar de saber quantos ataques de worm o seu firewall repele pode lhe interessar, saber se algum desses ataques teve origem dentro da sua rede provavelmente irá lhe interessar ainda mais. Recentemente, as regras do Snort incluíram regras “afinadas” como o exemplo acima, mas muitas outras permanecem que você pode querer personalizar de forma similar. A lista 1 mostra uma regra padrão que o alerta quando detecta o worm SQL Slammer (aka Sapphire). Vamos desconstruir rapidamente esta regra. (Para obter informações detalhadas sobre todos os parâmetros disponíveis que definem as regras, consulte a documentação completa das regras do Snort em http://www.snort.org/docs/writing_rules/chap2.html#tth_sec2.3.26.)

Todas as regras devem residir em uma linha e começar com uma ação de regra, que neste caso é

alert

A ação de regra define como o Snort responde à regra se acionada. Você pode modificar o tipo de regra (por exemplo, para uma string como ‘sev1’) para fornecer um tratamento personalizado – por exemplo, para escalar a ação em caso de uma correspondência. Este passo é diferente do exemplo anterior, no qual usamos Oinkmaster para alterar o tipo de alerta de uma regra existente; neste exemplo, estamos criando uma nova regra usando uma regra existente como template.

O conjunto de parâmetros

udp $EXTERNAL_NET any -> $HOME_NET 1434

fornece o protocolo, endereço IP, informação de porta e direção de tráfego para a regra. Esta regra diz ao Snort para encontrar qualquer pacote UDP de uma fonte de rede (que a variável $EXTERNAL_NET define) tentando ir para a variável $HOME_NET na porta 1434. A maioria das regras padrão usa principalmente as variáveis $EXTERNAL_NET e $HOME_NET. No entanto, algumas regras utilizam variáveis mais específicas. Por exemplo, as regras que pertencem aos servidores DNS (no arquivo dns.rules) usam a variável $DNS_SERVERS. Defina essas variáveis no arquivo de configuração Snort (tipicamente snort.conf). Opcionalmente, crie suas próprias variáveis para refletir sua topologia (por exemplo, $MAIL_SERVERS) e para uso em regras personalizadas. Defina uma variável usando seu nome (por exemplo, var MAIL_SERVERS= 192.168.0.20/30), então faça referência à variável prefixando-a com um sinal de dólar ($-e.g., $MAIL_SERVERS). A ação da regra e esses parâmetros compõem o cabeçalho da regra.

As opções da regra refinam ainda mais a regra para que um pacote suspeito (e apenas um pacote suspeito) acione uma resposta. Como você pode adivinhar, essas assinaturas podem se tornar bastante detalhadas e ir muito além da simples correspondência de portas. Por exemplo, imagine os falsos positivos que resultariam se esta regra Slammer simplesmente o alertasse para qualquer porta UDP 1434 tráfego.

A opção msg

msg:"MS-SQL Worm propagation attempt"

fornece uma descrição simples do alerta para uso em atividades de alerta e relatório. A opção de conteúdo

content:"|04|"; depth:1; content:"|81 F1 03 01 04 9B 81 F1 01|";content:"sock"; content:"send";

contém a string de correspondência de padrão de carga sensível a maiúsculas e minúsculas, em valores ASCII ou hexadecimais (inclua valores hexadecimais com o caractere do pipe-|). Você pode especificar múltiplas opções de conteúdo. A opção de profundidade segue cada opção de conteúdo e especifica quantos bytes na carga útil você deseja pesquisar pelo conteúdo especificado. Neste exemplo, um pacote disparará uma resposta se ele contiver o valor hexadecimal 04 no primeiro byte ou o conteúdo restante em qualquer lugar da carga útil.

Regras carregadas com frequência contêm referências a informações detalhadas sobre o exploit suspeito ou o motivo por trás da criação da regra. Alguns sistemas de relatórios suportam a opção de referência fornecendo links diretos para essa informação:

reference:bugtraq,5310; reference:bugtraq,5311;reference:url,vil.nai.com/vil/content/v_99992.htm;

Snort atribui regras a classes e atribui a essas classes uma prioridade de alto, médio ou baixo. Atualmente, existem mais de 30 classificações, incluindo tentativa de admin, atividade de trojan, tentativa de negação de serviço, e varredura de rede. Em nosso exemplo, a classificação é

classtype:misc-attack

Snortar registra a prioridade de resposta para intrusões detectadas. Você pode usar uma ferramenta ou script externo para analisar ainda mais essa prioridade e tomar medidas com sua aplicação de relatório.

No segmento final

sid:2003; rev:2;

sid representa uma regra única do Snort, e denota o número de revisão. Estas propriedades identificam de forma única a regra.

Tailoring the Rule
Let’s examine como modificar esta regra para fornecer um alerta escalonado quando detecta hospedeiros internos infectados. Como estamos lidando com o mesmo exploit que a regra original, a definição do conteúdo da regra permanece a mesma. Precisamos modificar apenas os endereços IP e o sentido do tráfego. Vamos mudar o endereço IP de origem para $HOME_NET, como segue:

udp $HOME_NET any -> $EXTERNAL_NET 1434

Snort.conf define $EXTERNAL_NET como “qualquer”, então esta regra ainda vai pegar pacotes corrompidos que têm como alvo hosts internos (como faria a regra original). Entretanto, agora que temos uma regra dedicada que rastreia apenas endereços IP de origem interna, podemos mudar o tipo de ação para um tipo de ação personalizada que aciona um alerta escalonado.

As regras atuais do Snort incluem essa regra de detecção de worm Slammer de saída no conjunto de regras padrão. No entanto, quando um novo worm, vírus ou outra exploração começar a se espalhar, considere a criação de novas regras que destacam intrusões específicas.

Making Your Rules
Além das regras existentes ou personalizadas que você pode modificar ou criar, você pode querer incluir regras que você obtém de outra fonte. Por exemplo, quando notícias de um novo worm se espalham pela Internet, sites de segurança e grupos de notícias são rápidos a publicar regras únicas do Snort que podem detectar o novo worm. Cole essas novas regras no arquivo local.rules, depois reinicie o Snort para que as novas regras tenham efeito.

Snort fornece a estrutura para um IDS barato e personalizável. Baseado em um conjunto de regras suportadas pela comunidade, o Snort continua sendo um sistema flexível e eficaz. Manter suas regras atualizadas aumentará sua vigilância e diminuirá o ruído que resulta de alertas ineficazes. Como em qualquer projeto open-source, tomar tempo para entender como ele funciona e se familiarizar com seus add-ons desenvolvidos pela comunidade irá melhorar drasticamente seu conforto com o sistema e aumentar sua eficácia em seu ambiente.

Deixe uma resposta

O seu endereço de email não será publicado.