Analyse automatisée des logs apache

15 mai 2009 par Gaëtan Laisser une réponse »

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).
  1. [msg "Remote File Access Attempt"]
  2. [severity "CRITICAL"] [tag "WEB_ATTACK/FILE_INJECTION"]
  3. [hostname "blog.gaetan-grigis.eu"]
  4. [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
  1. LOG_ERROR="/var/log/apache2/error.log"
  2. LOG_MODSEC=`cat $LOG_ERROR |grep ModSecurity | wc -l`
  3. if [ $LOG_MODSEC -gt 0 ]
  4. then
  5.         SEVERITY_ALERT=`cat $LOG_ERROR | grep "severity \"ALERT\"" | wc -l`
  6.         SEVERITY_CRITI=`cat $LOG_ERROR | grep "severity \"CRITICAL\"" | wc -l`
  7.         if [ $SEVERITY_ALERT -gt 0 ]
  8.         then
  9.                 cat $LOG_ERROR | grep "severity \"ALERT\"" |mail -s "[LOG]HTTP ALERT" addr@gmail.com
  10.                 echo "NB ALERT : $SEVERITY_ALERT"
  11.         fi
  12.  
  13.         if [ $SEVERITY_CRITI -gt 0 ]
  14.         then
  15.                 cat $LOG_ERROR |grep "severity \"CRITICAL\"" | mail -s "[LOG]HTTP CRITICAL" addr@mail.com
  16.                 echo "NB CRITICAL : $SEVERITY_CRITI"
  17.         fi
  18. fi

et voila passionnante ma vie ^^, en ASM ça se résumerait ainsi : (MOV al,1 XOR ebx,ebx, int 0×80), 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
  1.                 sh /scripts/logAnalyzer.sh > /dev/null
  2.         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 ;)

Publicité

Laisser un commentaire