O snort está recebendo tráfego, mas não parece estar aplicando regras

11

Eu tenho o snort instalado e executando no modo inline via NFQUEUE no meu gateway local (como eu posso andar na próxima sala e tocá-lo). Eu tenho a seguinte regra no meu /etc/snort/rules/snort.rules:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET CURRENT_EVENTS D-LINK Router Backdoor via Specific UA"; flow:to_server,established; content:"xmlset_roodkcableoj28840ybtide"; http_header; pcre:"/^User-Agent\x3a[^\r\n]*?xmlset_roodkcableoj28840ybtide/Hm"; reference:url,www.devttys0.com/2013/10/reverse-engineering-a-d-link-backdoor/; classtype:attempted-admin; sid:2017590; rev:2; metadata:created_at 2013_10_13, updated_at 2013_10_13;)

Esta regra está relacionada a um backdoor encontrado em alguns roteadores DLink. Eu selecionei essa regra porque parecia que seria simples testar. A regra em si foi adicionada por pullpork de ameaças emergentes, portanto presumo que a sintaxe da regra esteja correta.

Para teste, configurei meu gateway com o lighttpd na porta 80 voltada para a Internet e confirmei que ele é acessível. Em uma máquina remota, executei o comando curl -A 'xmlset_roodkcableoj28840ybtide' 'http://<EXTERNAL_IP>'. Isso prontamente imprime a resposta do lighttpd para o console e sai. Nenhum alerta de snort é gerado no gateway.

Além disso, o netfilter parece estar fazendo uso de dois dos quatro processos do snort que estou executando. Eu posso ver isso htopcomo os processos de snort nas CPUs 1 e 2 desenvolvem uma carga pesada ao testar com o bittorrent ... mas os processos de snort nas CPUs 0 e 3 permanecem completamente inativos.

Minha metodologia de teste está errada? Ou o snort não está alertando quando deveria (ou seja, devido a um erro de configuração)? Onde eu procuraria ver por que o netfilter não equilibra o tráfego entre as quatro filas?

Configuração

My Snort / Netfilter Config

A parte específica relevante das minhas cadeias de filtros de rede é:

Chain wan-fw (1 references)
 pkts bytes target     prot opt in     out     source               destination         
25766 2960K smurfs     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID,NEW,UNTRACKED
    4  1380 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:67:68
 4267  246K tcpflags   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           
 3820  550K ~comb0     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED     <<=== this one for established connections ====!
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED
  937 79669 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:!0x17/0x02
   13   506 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 /* Ping */
    4   240 ~log0      tcp  --  *      *       <remote_server>      0.0.0.0/0            tcp dpt:80 /* Tiphares Allowed In */     <<=== this one for new connections ====!
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type BROADCAST
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type ANYCAST
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type MULTICAST
21506 2454K NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: up to 1/sec burst 10 mode srcip nflog-prefix  "IPv4 wan-fw REJECT " nflog-threshold 1
24808 2878K reject     all  --  *      *       0.0.0.0/0            0.0.0.0/0           [goto] 
Chain ~log0 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    4   240 NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: up to 1/sec burst 10 mode srcip /* Tiphares Allowed In */ nflog-prefix  "IPv4 HTTPTest NFQUEUE " nflog-group 1 nflog-threshold 1
    4   240 NFQUEUE    all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* Tiphares Allowed In */ NFQUEUE balance 0:3 bypass cpu-fanout     <<=== passes packets to one of 4 snort processes ====!
Chain ~comb0 (4 references)
 pkts bytes target     prot opt in     out     source               destination         
 474K  196M NFQUEUE    all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED NFQUEUE balance 0:3 bypass cpu-fanout     <<=== all established connections from 'wan' are monitored by snort ====!
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0      

Uma ruga adicional:

Não tenho certeza se está relacionado. Descobri o que parece ser algo no meu gateway enviando pacotes de redefinição de TCP para IPs na Internet. E esses pacotes não estão associados a uma conexão existente.

Dado que isso acontece ao usar o bittorrent em uma máquina atrás desse gateway, e a maioria dos pacotes de redefinição lista a porta de torrent como a porta de origem, a única coisa que faz sentido para mim é que esse é o snort enviando redefinições quando bloqueia alguma coisa (sim? )

Mas eu uso o nfqueue daq ... então, se é snort, por que o snort está enviando esses pacotes de uma maneira que o netfilter vê como uma nova conexão, em vez de inserir os pacotes diretamente nas cadeias do netfilter e associá-los aos existentes conexões que está bloqueando? E também, o snort não está configurado para descartar pacotes ou enviar redefinições (apenas alerta) ... então por que isso seria feito para começar? Por isso, não tenho certeza se isso é algo que o snort está fazendo.

Outra informação

De acordo com a sugestão de @ Lenniey eu também testei com curl -A 'asafaweb.com' http://server-ip. Isso também não produziu um alerta. Verifiquei novamente se existe uma regra para isso no meu arquivo de regras. Existem dois:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET POLICY ASafaWeb Scan User-Agent (asafaweb.com)"; flow:established,to_server; content:"User-Agent|3a| asafaweb.com|0d 0a|"; http_header; reference:url,asafaweb.com; classtype:network-scan; sid:2014233; rev:2; metadata:created_at 2012_02_16, updated_at 2012_02_16;)

e

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"MALWARE-CNC User-Agent ASafaWeb Scan"; flow:to_server,established; content:"User-Agent|3A| asafaweb.com"; fast_pattern:only; http_header; metadata:policy balanced-ips alert, policy security-ips drop, ruleset community, service http; reference:url,asafaweb.com; classtype:network-scan; sid:21327; rev:7;)

Também atualizei minha configuração. Aparentemente, o que eu carreguei era antigo (mostrava ACEITAR em vez de NFQUEUE para a regra http netfilter).

Cliff Armstrong
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Michael Hampton
iptablesA saída nunca é uma boa escolha, a menos que você esteja especificamente interessado em contadores. iptables-saveÉ preferível, em vez se você espera humano para lê-lo
poige
@poige Concordou. Na época, eu estava simplesmente seguindo as recomendações que vinham com a tag "iptables". No futuro, no entanto, provavelmente usarei o iptables-save.
Cliff Armstrong

Respostas:

5

"Resolvido" no chat.

Após a depuração de quase tudo (iptables + NFQUEUE, systemd.service e unidades drop-in, alertas snort etc.), o problema teve origem na maneira como o teste foi realizado.

Normalmente, o snort como o próprio IDS / IPS embutido não está definido para ser verificado quanto a tráfego suspeito, mas apenas as HOME_NETs (também conhecidas como sub-redes locais da LAN), mas não em seu próprio IP público. As regras originais foram testadas com relação ao referido IP público e, portanto, não geraram nenhum alerta, pois o padrão para alertas é algo parecido com EXTERNAL_NET any -> HOME_NET any.

Lenniey
fonte
Além disso, como a pergunta era primariamente apenas para verificar se meu método de teste era válido, e você foi o primeiro a confirmar que era ... resposta aceita.
Cliff Armstrong
Você pode incluir um pouco mais dos bits relevantes neste post? O ideal é que as pessoas não sintam que deveriam ler todo o registro de bate-papo para garantir que entenderam a resposta.
Michael Hampton
@ MichaelHampton muito verdade, eu adicionei algumas informações. Melhor?
Lenniey 3/09/19
1
OK, agora eu entendi. O que significa que outros leitores provavelmente também o farão.
Michael Hampton