Analyse automatisée des logs apache

Bonjour à tous …
[la traduction du terme analyse dans le texte est GREP ^^ faut pas s’attendre à une analyse mathématique !!]

Bé voilà, comme j’adore raconter ma vie, voici un petit truc sympa :

Aujourd’hui on a eu droit à un cours … le premier depuis des mois!!! L’ennui se faisant sentir (un cours sur les tests … déjà vu en DUT), je me connecte à mon serveur et après un petit tour du proprio … comme d’hab koi ^^ Je lis les logs de mon serveur … (c’est grave docteur ??) et là horreur plein de ligne du ModSecurity m’indiquant pleins de tentatives diverses et variées (XSS, SQL Injection, …).

Un petit aperçu d’une ligne du log :

[Fri May 15 16:36:35 2009] [error] [client 74.55.32.34] ModSecurity: Access denied with code 501 (phase 2).
[msg "Remote File Access Attempt"]
[severity "CRITICAL"] [tag "WEB_ATTACK/FILE_INJECTION"]
[hostname "blog.gaetan-grigis.eu"]
[unique_id "Sg1981diuFsAADJ2ypYAAAAC"]

Le genre du truc qu’en terminal on aime pas trop lire (surtout sur l’écran du téléphone portable) … et pis y’en avais une bonne cinquantaine … et là mes venu la superbe idée (j’imagine que plein d’admins l’on déjà fait, mais bon ^^ au cas où si ça vous intéresse), j’ai crée un petit script qui analyse le log d’erreur d’apache (par grep quoi ^^) et envoi un mail avec les lignes incriminées, ce qui donne donc (il vous faudra bien sûr le mod_security d’installé … cf. mon blog ;))

#!/bin/sh
LOG_ERROR="/var/log/apache2/error.log"
LOG_MODSEC=`cat $LOG_ERROR |grep ModSecurity | wc -l`
if [ $LOG_MODSEC -gt 0 ]
then
        SEVERITY_ALERT=`cat $LOG_ERROR | grep "severity \"ALERT\"" | wc -l`
        SEVERITY_CRITI=`cat $LOG_ERROR | grep "severity \"CRITICAL\"" | wc -l`
        if [ $SEVERITY_ALERT -gt 0 ]
        then
                cat $LOG_ERROR | grep "severity \"ALERT\"" |mail -s "[LOG]HTTP ALERT" addr@gmail.com
                echo "NB ALERT : $SEVERITY_ALERT"
        fi

        if [ $SEVERITY_CRITI -gt 0 ]
        then
                cat $LOG_ERROR |grep "severity \"CRITICAL\"" | mail -s "[LOG]HTTP CRITICAL" addr@mail.com
                echo "NB CRITICAL : $SEVERITY_CRITI"
        fi
fi

et voila passionnante ma vie ^^, en ASM ça se résumerait ainsi : (MOV al,1 XOR ebx,ebx, int 0x80), reste plus qu’à exécuter le script avant le rotatelog histoire d’avoir le résumé des attaques de la journée/semaine …
Je vais peut être en profiter pour faire des graphiques suivant les types d’attaque, leurs nombres, leurs provenances, … ou pas

Petit ajout du 17 mai … pour rajouter un script du genre celui donné plus haut, il faut aller voir dans le fichier /etc/logrotate.d/apache2 et ajouter les lignes suivantes :

        prerotate
                sh /scripts/logAnalyzer.sh > /dev/null
        endscript

après la ligne sharedscripts et hop, on envoi les mails avant la rotation des logs, comme ça on passe pas pour le nolife-ki-li-ses-logs-apache-pendant-les-cours devant ses camarades de classe.

Voilà … bon we 😉

Une réflexion sur « Analyse automatisée des logs apache »

  1. Plop !
    Sympa comme script, je vais te piquer l’idée pour essayer de me faire un petit script perso’ pour un de mes serveurs, histoire de voir ce qu’il se passe un peu dessus ! 🙂

Les commentaires sont fermés.