diff --git a/surveillance/conficker.sh b/surveillance/conficker.sh index 552dfb76..76845359 100644 --- a/surveillance/conficker.sh +++ b/surveillance/conficker.sh @@ -24,6 +24,10 @@ # sa sortie (il enregistre chaque étape dans un fichier indiqué par # [> fichier]). ##### +# Options : +# -h / --help : Affiche les options +# --mailto [adresse mail] : Envoie un mail avec le diff +##### # Fonctionnement : # -Il analyse les logs de Squid à la recherche des requêtes du type : # GET http://[une ip quelconque]/search? @@ -42,10 +46,22 @@ ##### -# A changer bien sûr selon les cas ... -if [ "`hostname`" != "sable" ] +# On affiche l'aide si demandée +if [ "$1" == "-h" ] || [ "$1" == "--help" ] then - echo "Vous devez exécuter ce script sur sable !" + echo "Script de détection des machines infectées par Conficker" + echo "Options :" + echo " -h / --help : Affiche les options" + echo " --mailto [adresse mail] : Envoie un mail avec le diff, ou les stats" + echo " s'il n'y a pas d'anciennes stats" + exit 0 +fi + + +# A changer bien sûr selon les cas ... +if [ "`hostname`" != "sable" ] && [ "`hostname`" != "titanic" ] +then + echo "Vous devez exécuter ce script sur sable ou sur titanic !" exit 1 fi @@ -53,7 +69,14 @@ fi # (Par défaut, ces fichiers sont laissés pour ne pas avoir à reexécuter le # script ...) echo " * Initialisation des fichiers ..." -FILES="base ip_reqip ip_reqip_stats reverse_dns compromised stats" + +# On garde les dernières stats si elles existent ... +if [ -f stats ] +then + mv stats stats.old +fi + +FILES="base diff ip_reqip ip_reqip_stats reverse_dns compromised stats" rm -f $FILES touch $FILES chmod go-rwx $FILES @@ -84,7 +107,7 @@ cat reverse_dns # On garde les IPs destination n'ayant pas de reverse DNS # (peut-être est-ce trop restrictif ?) echo -n " * Recherche des hôtes compromis ... [> compromised] Lignes : " -for SEARCHIP in `grep "not found" reverse_dns | awk '{print $1}'` +for SEARCHIP in `grep " not " reverse_dns | awk '{print $1}'` do echo " * $SEARCHIP" >> stats for NEWIP in `grep $SEARCHIP ip_reqip | awk '{print $1}' | sort | uniq` @@ -103,3 +126,24 @@ cat compromised # On affiche les statistiques echo " * Statistiques ... [> stats]" cat stats + +# Si on a d'anciennes stats, on fait le diff +if [ -f stats.old ] +then + echo " * Diff ... [> diff]" + diff -uN stats.old stats | tee diff +fi + +# Si on a l'option --mail, on envoie un mail avec le diff +if [ "$1" == "--mailto" ] && [ -n "$2" ] +then + if [ -f stats.old ] && [ -s diff ] && [ -s stats ] + then + # On envoie le diff (à condition qu'il y a des machines infectées) + cat diff | mail -s "Détection du virus Conficker sur `hostname`" "$2" + elif [ -s stats ] + then + # S'il n'y avait pas de précédentes stats, on n'envoie les nouvelles directement + cat stats | mail -s "Détection du virus Conficker sur `hostname`" "$2" + fi +fi