Como posso executar um script de shell em um alerta de snort?

4

Eu snort escutando a porta SPAN de um switch cisco. Eu gostaria de poder adicionar uma regra DROP do iptables no meu servidor web para alertas de snort específicos, mas ter dificuldade em descobrir exatamente como fazer isso. Eu gostaria que o bloqueio acontecesse em tempo real ao invés de lançar um script através do cron para periodicamente vasculhar os logs do snort.

Eu encontrei um exemplo em Seclists, que usa o syslog-ng para executar um script de shell, mas deve ser para uma versão mais antiga do syslog-ng quando recebo um erro sobre a obsoleta sintaxe quando reinicio o syslog-ng.

Eu não sei muito sobre filtros syslog-ng, então vou pesquisar mais sobre isso, já que parece promissor, mas pensei em colocar a questão aqui, caso haja uma maneira melhor de fazer isso. O que é uma boa maneira de executar um script de shell quando um alerta de snort vem pela porta SPAN da minha caixa de snort?

    
por Server Fault 11.12.2014 / 15:53

1 resposta

2

Eu reuni documentação suficiente para fazer algo funcionar. A solução envolve informar ao snort para efetuar log no syslog e, em seguida, configurar o syslog-ng para acionar o tráfego snort syslog para executar o shellscript fornecido. Tendo snort spooling para o disco, ou a execução de scripts, não é ideal para cargas de alto tráfego, por isso esteja avisado. Se você configurar o snort para apenas alertar sobre determinado tráfego para manter a carga baixa, você deve estar bem. Configurar e depurar o syslog-ng pode ser uma pita, então incluí os bits necessários para que isso funcione. Basta adicioná-los ao final do arquivo syslog-ng.conf. Espero que isso ajude mais alguém. Como nota, o syslog está registrando 3 cópias de cada mensagem por algum motivo. Não faço ideia do porquê.

Eu usei algumas das informações aqui: link

/etc/snort/snort.conf - configure snort to log to syslog
------------------------------------------------------------
# syslog
output alert_syslog: LOG_LOCAL6 LOG_ALERT


/etc/syslog/syslog-ng.conf  - setup filters/destinations for alerts
------------------------------------------------------------
# snort filter - this only pays attention to syslog messages sent by the 'snort' program
filter f_snort
{
  facility(local6) and match("snort" value ("PROGRAM"));                                                
};

# optionally, this would send the snort message to a remote host running a syslog listener.
# I was running tcpdump to debug the whole setup so I use UDP protocol here so the
# message is just blasted out over the ether without needing to actually have a syslog
# listener setup anywhere
destination d_net
{
  udp("10.10.10.1" port(514) log_fifo_size(1000) template(t_snort));   
};

# this one sends the syslog message consisting of priority,time_in_seconds,host and syslog meesage.
# 
destination d_prog
{
  program("/root/bin/snort_script" template("<$PRI>$UNIXTIME $HOST $MSGONLY\n") );
};

# ..or use a pipe if you don't want syslog running scripts
destination d_prog_pipe
{
  pipe("/root/bin/syslog-pipe" template("<$PRI>$DATE $HOST $MSGONLY\n") );
};

# finally, log the message out the snort parsing mechanism
log
{
   source(s_src);
   filter(f_snort);
   destination(d_prog);
   #destination(d_net); 
};



/root/bin/snort_script
------------------------------------------------------------
#!/bin/bash
while read line; do
   echo "$line" >> /tmp/snort.log
done
    
por 12.12.2014 / 15:56