[surveillance/conficker.sh] Diff, option pour envoyer un mail

darcs-hash:20090403140627-ddb99-5f8594039723dc7544aab79fbeb79830179449e5.gz
This commit is contained in:
Michel Blockelet 2009-04-03 16:06:27 +02:00
parent 6be61e1844
commit a285026bbd

View file

@ -24,6 +24,10 @@
# sa sortie (il enregistre chaque étape dans un fichier indiqué par # sa sortie (il enregistre chaque étape dans un fichier indiqué par
# [> fichier]). # [> fichier]).
##### #####
# Options :
# -h / --help : Affiche les options
# --mailto [adresse mail] : Envoie un mail avec le diff
#####
# Fonctionnement : # Fonctionnement :
# -Il analyse les logs de Squid à la recherche des requêtes du type : # -Il analyse les logs de Squid à la recherche des requêtes du type :
# GET http://[une ip quelconque]/search? # GET http://[une ip quelconque]/search?
@ -42,10 +46,22 @@
##### #####
# A changer bien sûr selon les cas ... # On affiche l'aide si demandée
if [ "`hostname`" != "sable" ] if [ "$1" == "-h" ] || [ "$1" == "--help" ]
then 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 exit 1
fi fi
@ -53,7 +69,14 @@ fi
# (Par défaut, ces fichiers sont laissés pour ne pas avoir à reexécuter le # (Par défaut, ces fichiers sont laissés pour ne pas avoir à reexécuter le
# script ...) # script ...)
echo " * Initialisation des fichiers ..." 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 rm -f $FILES
touch $FILES touch $FILES
chmod go-rwx $FILES chmod go-rwx $FILES
@ -84,7 +107,7 @@ cat reverse_dns
# On garde les IPs destination n'ayant pas de reverse DNS # On garde les IPs destination n'ayant pas de reverse DNS
# (peut-être est-ce trop restrictif ?) # (peut-être est-ce trop restrictif ?)
echo -n " * Recherche des hôtes compromis ... [> compromised] Lignes : " 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 do
echo " * $SEARCHIP" >> stats echo " * $SEARCHIP" >> stats
for NEWIP in `grep $SEARCHIP ip_reqip | awk '{print $1}' | sort | uniq` for NEWIP in `grep $SEARCHIP ip_reqip | awk '{print $1}' | sort | uniq`
@ -103,3 +126,24 @@ cat compromised
# On affiche les statistiques # On affiche les statistiques
echo " * Statistiques ... [> stats]" echo " * Statistiques ... [> stats]"
cat 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