LINUX:Wazuh-Statistiques
But
Au fur et à mesure, les attaques se diversifient et s'accumulent. A partir des adresses IP, on peut connaitre le pays d'origine et de là établir des statistiques.
Script de regroupement et de détection du pays d'origine
La première étape consiste à repérer dans le fichier "/var/ossec/logs/active-responses.log", les adresses IP bloquées. On les regroupe au fur et à mesure du temps en ne gardant qu'une occurrence.
La seconde étape consiste à localiser le pays où se situe chaque adresse IP. Il faut avoir installé et configuré cette fonctionnalité décrite dans l'article Géolocalisation IP.
Dans le répertoire "/manager/wazuh/stat" nous créons le script "nslookup.bat":
#!/bin/bash # Regroupement des adresses IP bloquées et localisation du pays d'origine de celle-ci cd /manager/wazuh/stat # lister ceux bloqués par wazuh # décomposer la ligne JSON en une ligne par paramètre /usr/bin/cat /var/ossec/logs/active-responses.log* | /usr/bin/grep "firewall-drop" | /usr/bin/grep '"command":"add"' > listeip.json.txt /usr/bin/sed -i 's/{/\n{\n/g' listeip.json.txt /usr/bin/sed -i 's/}/\n}\n/g' listeip.json.txt /usr/bin/sed -i 's/","/",\n"/g' listeip.json.txt /usr/bin/sed -i 's/,"/,\n"/g' listeip.json.txt # rechercher les adresses IP sources /usr/bin/grep '"srcip":' listeip.json.txt | /usr/bin/awk -F ":" '{printf("%s\n",$2)}' | /usr/bin/sort -u > listeip.srcip.txt /usr/bin/sed -i 's/\"//g' listeip.srcip.txt /usr/bin/sed -i 's/\,//g' listeip.srcip.txt # fusion - tri - unicité /usr/bin/sort -u listeip.srcip.txt > listeip.txt # nettoyage /usr/bin/rm -f listeip.srcip.txt /usr/bin/rm -f listeip.json.txt # récupérer la liste des adresses IP listeip=`/usr/bin/cat listeip.txt` # récupérer la liste des adresses IP déjà traitées listens=`/usr/bin/cat ns.lis | /usr/bin/awk '{printf("%s ",$1)}'` # bouclage sur chaque adresse IP for ip in $listeip do liste1=`echo ${listens} | grep "${ip}"` if [ "$liste1" = "" ] then echo -n "IP $ip " # IP IP=`/usr/bin/printf "%-15s" $ip` # NsLookup /usr/bin/nslookup $ip 195.238.2.21 > ns.tmp echo -n DNS /usr/bin/sed -i '/^$/d' ns.tmp /usr/bin/grep -v "server can't find" ns.tmp | /usr/bin/grep -v "no servers could be reached" | /usr/bin/grep -v Authoritative > ns1.tmp NSL=`/usr/bin/cat ns1.tmp | /usr/bin/awk '{printf("%s",$4)}'` # GeoIP2 # code pays /usr/bin/mmdblookup --ip $ip --file /usr/share/GeoIP/GeoLite2-Country.mmdb country iso_code > ns21.tmp echo -n GEO1 /usr/bin/sed -i '/^$/d' ns21.tmp /usr/bin/sed -i 's/<utf8_string>/ /g' ns21.tmp /usr/bin/sed -i 's/"/ /g' ns21.tmp NSG1=`/usr/bin/cat ns21.tmp | /usr/bin/awk '{printf("%s",$1)}'` # nom du pays /usr/bin/mmdblookup --ip $ip --file /usr/share/GeoIP/GeoLite2-Country.mmdb country names fr > ns22.tmp echo GEO2 /usr/bin/sed -i '/^$/d' ns22.tmp /usr/bin/sed -i 's/<utf8_string>/ /g' ns22.tmp /usr/bin/sed -i 's/"/ /g' ns22.tmp /usr/bin/sed -i 's/ /_/g' ns22.tmp /usr/bin/sed -i 's/__/=/g' ns22.tmp /usr/bin/sed -i 's/=_/ /g' ns22.tmp NSG2=`/usr/bin/cat ns22.tmp` /usr/bin/printf "%-25s" $NSG2 > ns23.tmp /usr/bin/sed -i 's/_/ /g' ns23.tmp NSG2=`/usr/bin/cat ns23.tmp` # impression /usr/bin/echo -e "${IP}\t${NSG1}\t${NSG2}\t${NSL}" >> ns.lis fi done # tri par code pays /usr/bin/sort -k 2 ns.lis -o nss.lis # nettoyage /usr/bin/rm -f ns.tmp /usr/bin/rm -f ns1.tmp /usr/bin/rm -f ns21.tmp /usr/bin/rm -f ns22.tmp /usr/bin/rm -f ns23.tmp /usr/bin/rm -f listeip.txt
Un fichier est créé "ns.lis" qu'il ne faut pas détruire. Au fur et à mesure du temps, les adresses IP et leur localisation vont s'y accumuler. Un second fichier "nss.lis" est le résultat trié par pays du premier fichier; ce second fichier peut être effacé.