Segue a primeira versão do script em anexo. Ainda não está perfeito;
por exemplo, regras que contêm mais de um parâmetro "content" não são
convertidas corretamente ainda. Também não fiz a conversão de regras
regex ainda (basicamente é só mudar o parâmetro "pcre" pelo regex
apropriado, mas não fiz ainda).
Parâmetros das regras Snort que não têm similares nas regras HLBR
também estão sendo ignoradas. A variável $EXTERNAL_NET também está
sendo ignorada, mas a maioria das demais variáveis está sendo
substituída pela IPList mais similar (ex: $HTTP_SERVERS é substituída
pela IPList www).
Para usar, copie as regras do Snort (arquivos *.rules) que quiser
converter para um diretório, entre nesse diretório e execute o script.
Será gerado um arquivo chamado hlbr_from_snort.rules. Não deixe de
revisar o arquivo gerado!
#!/bin/sh
# This script substitutess some definitions in Snort rules by the
default IPList definitions in HLBR
# If the changes doesn't suit your network, please edit this script.
# Este script substitui algumas definicoes das regras Snort pelas
definicoes de IPList padrao do HLBR
# Se as substituicoes nao se aplicam a sua rede, por favor edite este script.
# List of substitutions / Lista de substituicoes
# $HOME_NET => servers
# $EXTERNAL_NET => (ignored)
# $DNS_SERVERS => dns
# $SMTP_SERVERS => email
# $HTTP_SERVERS => www
# $SQL_SERVERS => others
# $TELNET_SERVERS => others
# $SNMP_SERVERS => others
# Ports used by your servers
HTTP_PORTS=80,81
ORACLE_PORTS=1521
OUTPUT=hlbr_from_snort.rules
TMPFILE=hlbr.tmp
# ignoring "alert ip" and "alert icmp" rules for now...
cat *.rules | egrep " content:" | egrep -v "^(#|alert ip|alert icmp)" > $TMPFILE
sed -i -r 's#^alert (.*)\)$#<rule>\n\1\n</rule>#' $TMPFILE
sed -i -r
's/\$HOME_NET/servers/g;s/\$DNS_SERVERS/dns/g;s/\$SMTP_SERVERS/email/g;s/\$HTTP_SERVERS/www/g'
$TMPFILE
sed -i -r
's/\$SQL_SERVERS/others/g;s/\$TELNET_SERVERS/others/g;s/\$SNMP_SERVERS/others/g'
$TMPFILE
awk '{if ($1 ~ /<\/?rule>/) print $1; else if ($1 ~ /^(tcp|udp)/)
print "origin",$2,$3,"\n","ip
dst("$5")\n",$1,"dst("$6")\nalltherest"$1,$0; else if ($1 ~
/^(ip|icmp)/) print "origin",$2,$3,"\nalltherest",$0 }' $TMPFILE |
egrep -v 'origin +\$EXTERNAL_NET +any' | egrep -v 'ip
dst\(\$EXTERNAL_NET' | awk '{if ($0 ~ /origin +\$EXTERNAL_NET/ && $0
!~ /origin +\$EXTERNAL_NET +any/) print "ip src("$3")"; else print
$0}' | awk '{if ($1 ~ /origin.*any/) print "ip src("$2")"; else if ($1
~ /origin/) print "ip src("$2")\ntcp src("$3")"; else print $0}' |
egrep -v '(tcp|udp) (src|dst)\(any\)' > $OUTPUT
sed -i -r 's/^ *ip (src|dst)\(\$EXTERNAL_NET\) *$//' $OUTPUT
sed -i -r "s/\\\$HTTP_PORTS/$HTTP_PORTS/;s/\\\$ORACLE_PORTS/$ORACLE_PORTS/"
$OUTPUT
sed -i -r 's/^alltherest(tcp|udp).*msg:"([^\"]+)".*nocase;
content:"([^\"]+)".*$/message=\2\n\1 nocase(\3)/' $OUTPUT
sed -i -r
's/^alltherest(tcp|udp).*msg:"([^\"]+)".*content:"([^\"]+)".*$/message=\2\n\1
content(\3)/' $OUTPUT
sed -i -r 's#</rule>#</rule>\n#' $OUTPUT
rm $TMPFILE