LINUX:Wazuh-Statistiques

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour à Wazuh: HIDS


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 localisation 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. Ce fichier comprend 4 colonnes: l'adresse IP, le code du pays, le nom du pays et, s'il est disponible, le nom de la machine.

Un second fichier "nss.lis" est le résultat trié par pays du premier fichier; ce second fichier peut être effacé.

Remarque: Faites attention, quelques fois les noms de certains pays changent d'orthographe. Il faut corriger directement ceux-ci dans le fichier "ns.lis" avec un éditeur de texte pour avoir un résultat correct.


CRON

Ce script est à exécuter régulièrement avant effacement du fichier "/var/ossec/logs/active-responses.log". On peut automatiser cette procédure par exemple une fois par jour ou toutes les heures via le service CRON.

On peut ajouter une ligne dans le fichier "/etc/crontab":


10   *   *   *   *  root /manager/wazuh/stat/nslookup.bat  >  /manager/wazuh/stat/nslookup.log

Dans cet exemple, il s'exécute tous les heures sous une session de l'utilisateur "root".


Script de statistiques

Sur base du fichier "ns.lis", on peut faire passer un script qui effectue le comptage par pays.

Voici un script simple nommé "compter.bat":


#!/bin/bash
# Statistiques par pays des adresses IP
cd /manager/wazuh/stat
# récupérer les noms du pays
/usr/bin/awk -F'\t' '{printf("%s\n",$3)}' ns.lis > ns3.1
# effacer les espaces en fin de ligne et remplacer les espaces intérieurs par un souligné puis tri unique
/usr/bin/sed -i 's/[ ]*$//' ns3.1
/usr/bin/sed -i 's/ /_/g' ns3.1
/usr/bin/sort -u ns3.1 > ns3.2
# comptage par pays
liste=`/usr/bin/cat ns3.2`
echo -e "Pays\tnbs" > nscompte.lis
echo  "=====================" >> nscompte.lis
for pays in $liste
do
 echo -n -e "$pays\t" >> nscompte.lis
 /usr/bin/grep $pays ns3.1 | /usr/bin/wc -l >> nscompte.lis
done
# effacer les soulignés
/usr/bin/sed -i 's/_/ /g' nscompte.lis
# nettoyage
/usr/bin/rm -f ns3.1
/usr/bin/rm -f ns3.2

Le résultat se retrouve dans le fichier "nscompte.lis".


Exemple de résultats

Les résultats ont été mis dans un tableur. Un histogramme présente les 20 plus grands. Il faut attendre quelques mois pour voir une stabilisation.


LINUX:Wazuh.pays.png




retour à Wazuh: HIDS