« LINUX:Wazuh: HIDS » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(42 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
----
''→ [[LINUX:Contrer les attaques|retour au menu pour contrer les attaques]]''
----
=But=
=But=
Wazuh est un HIDS. Un HIDS (Host Intrusion Detection Systems) est une application qui analyse ce qui se passe sur une machine et sur ses interfaces réseaux. Quand elle repère une activité anormale, elle active une action. Autrement dit elle tache de repérer ceux qui effectuent une activité malveillante à son encontre.
Wazuh est un HIDS. Un HIDS (Host Intrusion Detection Systems) est une application qui analyse ce qui se passe sur une machine et sur ses interfaces réseaux. Quand elle repère une activité anormale, elle active une action. Autrement dit elle tache de repérer ceux qui effectuent une activité malveillante à son encontre.
Ligne 20 : Ligne 23 :




[[FILE:LINUX:Wazuh1.png|800px|center]]
[[FILE:LINUX:Wazuh.1.pdf|800px|center]]




Ligne 28 : Ligne 31 :




[[FILE:LINUX:Wazuh2.png|800px|center]]
[[FILE:LINUX:Wazuh.2.pdf|800px|center]]




Ligne 46 : Ligne 49 :
  [wazuh]
  [wazuh]
  gpgcheck=1
  gpgcheck=1
  gpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH
  gpgkey=<nowiki>https://packages.wazuh.com/key/GPG-KEY-WAZUH</nowiki>
  enabled=1
  enabled=1
  name=EL-$releasever - Wazuh
  name=EL-$releasever - Wazuh
  baseurl=https://packages.wazuh.com/4.x/yum/
  baseurl=<nowiki>https://packages.wazuh.com/4.x/yum/</nowiki>
  protect=1
  protect=1
----
----
Ligne 68 : Ligne 71 :


=Configurer le mur de feu ou FireWall=
=Configurer le mur de feu ou FireWall=
Comme des échanges se font via le réseau entre le serveur et les agents, il faut ajouter deux règles au FireWall.  
Comme des échanges se font via le réseau entre le serveur et les agents, il faut ajouter deux règles au FireWall dans le fichier "/etc/sysconfig/iptables".  


* Voici ces règles pour IPTABLES à mettre sur le serveur:
* Voici ces règles pour IPTABLES à mettre sur le serveur:
----
----
  -A INPUT -p tcp -m tcp --dport 1514  -s 192.168.1.0/24 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 1514  -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 1515  -s 192.168.1.0/24 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 1515  -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
----
----
Ici on ouvre l'accès à tous le LAN local. On peux être plus restrictif:
Ici on ouvre l'accès à tous le LAN local. On peux être plus restrictif:
Ligne 87 : Ligne 90 :




=Configuration de base=
=Configuration=
 


==Configuration du serveur (manager et agent local)==
Cette partie concerne la machine dénommée "A".


==Configuration du serveur==
Le logiciel est installé dans le répertoire "/var/ossec". Le fichier de configuration se trouve dans le sous-répertoire "/var/ossec/etc" et se nomme "ossec.conf". Cette configuration regroupe les options pour la partie Manager et celle concernant l'agent local.
Le logiciel est installé dans le répertoire "/var/ossec". Le fichier de configuration se trouve dans le sous-répertoire "/var/ossec/etc" et se nomme "ossec.conf".


Nous allons modifier quelques sections.
Nous allons modifier quelques sections.
===Manager===
Le manager nécessite quelques aménagements.
En premier lieu, on modifie le fichier "'''/var/ossec/etc/ossec.conf'''".


La première étape est d'être averti par mail si une alerte de déclenche. On définit les paramètres de messagerie. On utilise le serveur de messagerie Postfix local ("smtp_server") et on envoie le message à l'utilisateur "root" local ("email_to"). On nomme l'adresse mail de l'émetteur selon les contraintes du serveur de messagerie ("email_from").
La première étape est d'être averti par mail si une alerte de déclenche. On définit les paramètres de messagerie. On utilise le serveur de messagerie Postfix local ("smtp_server") et on envoie le message à l'utilisateur "root" local ("email_to"). On nomme l'adresse mail de l'émetteur selon les contraintes du serveur de messagerie ("email_from").
Ligne 104 : Ligne 115 :
  </global>
  </global>
----
----
Ensuite on définit le niveau à partir duquel l'alerte est envoyée dans les journaux ("log_alert_level") et par mail ("email_alert_level"). Chaque alerte possède un niveau qui va de 1 à 16. Ces niveaux sont à adapter progressivement en fonction des besoins. Au début, il faut observer ce qui se passe. On adapte les niveaux en fonction.
Ensuite on définit le niveau à partir duquel l'alerte est envoyée dans les journaux ("log_alert_level") et par mail ("email_alert_level"). Chaque alerte possède un niveau qui va de 0 à 16. Le n° 0 signifie l’absence d'alerte. Ces niveaux sont à adapter progressivement en fonction des besoins. Au début, il faut observer ce qui se passe. On adapte les niveaux en fonction.
----
----
  <alerts>
  <alerts>
Ligne 111 : Ligne 122 :
  </alerts>
  </alerts>
----
----
Ensuite il faut vérifier les fichiers journaux que vous voulez surveiller. Par exemple, les fichiers journaux liés au serveur WEB Apache sont normalement inclus; il n'y a rien à faire de ce côté sauf si vous avez changé leurs noms.  
 
Dans mon cas, le FireWall a son journal particulier ("/var/log/iptables"); nous l'ajoutons. s'il y en a d'autres, on les ajoute.
 
On élimine le bloc concernant l'option "cluster".
----
  <cluster>
  </cluster>
----
 
 
Un autre fichier de configuration est central: "/var/ossec/etc/internal_options.conf". Ce fichier comporte des paramètres importants liés au fonctionnement de Wazuh. Ces options sont à manipuler avec précautions. On ne le change pas. Tout paramètre que l'on veut modifier, est à faire dans le fichier local "'''/var/ossec/etc/local_internal_options.conf'''". S'il n'existe pas, on le crée.
 
Nous avons modifié un de ces paramètres afin que le sujet de l'email soit plus explicite. Ceci me facilite la vie en me permettant de classer automatiquement certains mail d'alerte.
----
maild.full_subject=1
----
 
 
===Agent local===
Les agents ont leur lot de modifications. On effectue des modifications dans le fichier "'''/var/ossec/etc/ossec.conf'''".
Ces modifications se retrouveront aussi dans les machines hébergeant l'agent distant (machines "B" et suivantes).
 
On définit les fichiers journaux que vous voulez surveiller.
----
  <localfile>
    <log_format>apache</log_format>
    <location>/var/log/httpd/error_log</location>
    <age>1d</age>
  </localfile>
  <localfile>
    <log_format>apache</log_format>
    <location>/var/log/httpd/access_log</location>
    <age>1d</age>
  </localfile>
  <localfile>
    <log_format>audit</log_format>
    <location>/var/log/audit/audit.log</location>
    <age>1d</age>
  </localfile>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/messages</location>
    <age>1d</age>
  </localfile>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/secure</location>
    <age>1d</age>
  </localfile>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/maillog</location>
    <age>1d</age>
  </localfile>
  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/dnf.rpm.log</location>
    <age>1d</age>
  </localfile>
----
Dans mon cas, le fireWall a son journal particulier ("/var/log/iptables"); nous l'ajoutons.  
----
----
  <localfile>
  <localfile>
Ligne 118 : Ligne 187 :
     <location>/var/log/iptables</location>
     <location>/var/log/iptables</location>
  </localfile>
  </localfile>
<localfile>
    <log_format>syslog</log_format>
    <location>/var/log/dnf.rpm.log</location>
</localfile>
----
----
Remarquons que cette configuration concerne le serveur (les deux premiers blocs de modifications le concerne) mais également l'agent local (dernier bloc).
S'il y en a d'autres, on les ajoute.
 
Le bloc suivant est nécessaire si vous activez la réaction à une tentative d'intrusion; nous verrons cet aspect par la suite.
----
  <localfile>
    <log_format>json</log_format>
    <location>/var/ossec/logs/active-responses.log</location>
  </localfile>
----
Dans mon cas, j'ai modifié une autre option.
Pour une question de clarté, je ne reprend que l'option concernée située dans ses blocs parents.


On ne touche pas au reste. Sur le site Web de Wazuh, la documentation vous aidera pour aller plus loin. De nombreuses sections peuvent être éliminées, activées ou désactivées en fonction de votre configuration.


Un autre fichier de configuration est central: "/var/ossec/etc/internal_options.conf". Ce fichier comporte des paramètres importants liés aux fonctionnement de Wazuh. Ces options sont à manipuler avec précautions. On ne le change pas. Tout paramètre que l'on veut modifier, est à faire dans le fichier local "/var/ossec/etc/local_internal_options.conf".
On garde la définition de cette commande.
Nous avons modifié un de ces paramètres afin que le sujet de l'email soit plus explicite. Ceci me facilite la vie en me permettant de classer automatiquement certains mail d'alerte.
----
----
maild.full_subject=1
  <command>
    <name>restart-wazuh</name>
    <executable>restart-wazuh</executable>
  </command>
----
----
Nous avons une bonne base pour démarrer le serveur.  
La définition de cette commande est nécessaire. Plus bas, nous verrons comment mettre à jour dynamiquement, automatiquement la configuration des agents distants grâce à la configuration '''"Shared"'''. Ce changement distant de la configuration nécessite que le service de l'agent distant redémarre. Ce bloc défini quel quel exécutable utiliser; ces derniers se trouvent dans le répertoire  "/var/ossec/active-response/bin".




==Activer et lancer le service du serveur==
Nous gardons également celle que nous utiliserons par la suite dans le cadre de la réaction à une tentative d'intrusion.
Le service à lancer est Wazuh-manager. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.
----
systemctl enable wazuh-manager
  <command>
systemctl start wazuh-manager
    <name>firewall-drop</name>
systemctl restart wazuh-manager
    <executable>firewall-drop</executable>
    <timeout_allowed>yes</timeout_allowed>
  </command>
----
Les autres "command" peuvent être éliminées.




Ligne 145 : Ligne 225 :
Comme sur le serveur, le logiciel est installé dans le répertoire "/var/ossec". Le fichier de configuration se trouve dans le sous-répertoire "/var/ossec/etc" et se nomme "ossec.conf".
Comme sur le serveur, le logiciel est installé dans le répertoire "/var/ossec". Le fichier de configuration se trouve dans le sous-répertoire "/var/ossec/etc" et se nomme "ossec.conf".


La section "client" est fondamentale. Cette section doit être présente. Nous y adaptons l'adresse IP du serveur.
Wazuh possède la capacité de centralisation de la majeure partie de la configuration des agents. Cette partie sera placée sur le serveur "Manager" et le "Manager" enverra une copie de cette configuration à chaque Agent. Après réception, l'agent redémarre pour intégrer cette configuration partagée grâce à la commande gardée plus haut ("restart-wazuh").
 
 
===Agent distant===
Cette partie concerne les  machines dénommées "B" et suivantes potentielles.
 
Sa configuration se trouve dans le fichier "'''/var/ossec/etc/ossec.conf'''". Nous ne gardons que la section "client").
Elle est fondamentale car on y définit l'adresse IP du serveur partie "Manager". Le reste est à mettre de côté pour un usage ultérieur.
----
----
  <client>
  <ossec_config>
  <client>
     <server>
     <server>
       <address>'''192.168.1.110'''</address>
       <address>'''192.168.1.110'''</address>
      <port>1514</port>
      <protocol>tcp</protocol>
     </server>
     </server>
  </client>
    <config-profile>'''fedora, fedora40'''</config-profile>
    <notify_time>10</notify_time>
    <time-reconnect>60</time-reconnect>
    <auto_restart>yes</auto_restart>
    <crypto_method>aes</crypto_method>
  </client>
  </ossec_config>
----
Au passage, remarquons que l'installation a reconnu le nom de notre distribution.
 
 
Le fichier de configuration "/var/ossec/etc/internal_options.conf" déjà évoqué sur le serveur, existe aussi sur l'agent distant (machines "B" et suivantes). Il y a deux options qu'il est utile d'activer.
Ces paramètres sont à ajouter dans le fichier local "'''/var/ossec/etc/local_internal_options.conf'''". S'il n'existe pas, on le crée.
----
wazuh_command.remote_commands=1
logcollector.remote_commands=1
----
 
 
===Shared===
Maintenant passons à la partie partagée. L'installation ne comprend pas cette configuration; il faut donc la créer.
Cette configuration sera à faire sur la machine "A".
 
On se base sur la partie du fichier de configuration d'origine de l'agent distant que nous avons mis de côté plus haut.
Elle est à placer dans un fichier nommé "'''agent.conf'''". Elle doit être incluse entre les balises suivantes:
----
<agent_config>
</agent_config>
----
en remplacement des balises:
----
<ossec_config>
</ossec_config>
----
----
Pour le moment, on ne touche pas au reste. Sur le site Web de Wazuh, la documentation vous aidera pour aller plus loin. De nombreuses sections peuvent être éliminées, activées ou désactivées en fonction de votre configuration.  
On y applique les modifications effectuées pour l'agent local vues plus haut.


Dès que l'agent sera lancé, il essaye de se connecter au serveur et si c'est la première fois, il y a échange de clés entre eux via le port TCP 1515 afin que l'agent soit reconnu par la suite.
 
Ce fichier est à placer sur le serveur. Il est possible de définir des groupes d'agents ayant chacun une configuration appropriée. Un groupe est défini par défaut et se nomme "'''default'''". Tout nouvel agent y est intégré d'office; il est possible de créer d'autres groupes et ensuite de migrer un agent d'un groupe à l'autre. Nous n'utiliserons ici que ce groupe "default". Les fichiers de configuration des agents de ce groupe se retrouvent dans le répertoire "'''/var/ossec/etc/shared/default'''". On remarque que le nom de ce répertoire est le même que celui du groupe. On y ajoute le fichier "'''agent.conf'''" créé ci-dessus.
 
Dès que l'agent se connecte au serveur, le contenu de ce répertoire sera recopié sur la machine agent dans le répertoire "'''/var/ossec/etc/shared'''". L'agent intègre automatiquement cette configuration. Toute modification ultérieure sur le serveur de ce fichier "agent.conf" est automatiquement répercutée et activée sur les agents de ce groupe.
 
Si on crée un autre groupe, on recopie ces fichiers dans un répertoire parallèle portant le nom de ce groupe. On personnalise en conséquence le fichier "agent.conf".
 
 
==Remarque==
On ne touche pas au reste. Sur le site Web de Wazuh, la documentation vous aidera pour aller plus loin. De nombreuses sections peuvent être éliminées, activées ou désactivées en fonction de vos préférences.
 
 
=Activer et lancer les services=
 
 
==Le service du serveur==
Le service à lancer est Wazuh-manager. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.
systemctl enable wazuh-manager
systemctl start wazuh-manager
systemctl restart wazuh-manager




==Activer et lancer le service de l'agent==
==Le service de l'agent==
Le service à lancer est Wazuh-agent. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.
Le service à lancer est Wazuh-agent. La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service. La troisième relance le service.
  systemctl enable wazuh-agent
  systemctl enable wazuh-agent
  systemctl start wazuh-agent
  systemctl start wazuh-agent
  systemctl restart wazuh-agent
  systemctl restart wazuh-agent
Dès que l'agent sera lancé, il essaye de se connecter au serveur et si c'est la première fois, il y a échange de clés entre eux via le port TCP 1515 afin que l'agent soit reconnu par la suite.




==Quelques utilitaires==
=[[LINUX:Wazuh-Activation des réactions à une tentative d'intrusion|Activation des réactions à une tentative d'intrusion]]=
Ces utilitaires se trouvent dans le répertoire "/var/ossec/bin". Ceux-ci sont à exécuter sur le serveur. Elles permettront aussi de valider la reconnaissance de l'agent distant.
Le but d'un HIDS est de détecter des actions malveillante. En fonction du type d'attaque, il est primordial de réagir pour la contrer. Le type d'action présentée consiste à ajouter une règle dans le firewall qui exclu l'accès à cet personne via son adresse IP et ceci pendant un certain temps. Nous utilisons IPTABLES comme firewall.
* ossec-logtest -t : Vérifier la configuration du serveur
* agent_control -lc : Lister des agents
* agent_control -i 000 : Lister le détail de l'agent local "000"
* agent_control -i 001 : Lister le détail de l'agent distant "001"
* agent_groups -l : Lister des groupes
* agent_groups -l -g default : Lister des agents distants du groupe "default"
* agent_groups -s -i 001 : Lister le nom du groupe de l'agent distant "001"




==Journaux==
=Journaux=
Sur le serveur et sur les agents distants, il faut consulter les journaux de ces services. Ce journal se nomme "/var/ossec/logs/ossec.log". Repérez tout message d'erreur et tachez d'y remédier.  
Sur le serveur et sur les agents distants, il faut consulter les journaux de ces services. Ce journal se nomme "/var/ossec/logs/ossec.log". Repérez tout message d'erreur et tachez d'y remédier.  


Ligne 183 : Ligne 318 :




=Quelques utilitaires=
Ces utilitaires se trouvent dans le répertoire "/var/ossec/bin". Ceux-ci sont à exécuter sur le serveur. Elles permettront aussi de valider la reconnaissance de l'agent distant.
* wazuh-logtest : Vérifier la réaction aux règles
* agent_control -lc : Lister des agents
* agent_control -i 000 : Lister le détail de l'agent local "000"
* agent_control -i 001 : Lister le détail de l'agent distant "001"
* agent_groups -l : Lister des groupes
* agent_groups -l -g default : Lister des agents distants du groupe "default"
* agent_groups -s -i 001 : Lister le nom du groupe de l'agent distant "001"




=[[LINUX:Wazuh-Décodeurs et Règles|Analyse: décodeurs et règles]]=
Le serveur manager de Wazuh récolte les journaux auprès des agents. Ces journaux sont ensuite analysés. Une première phase consiste à décoder le journal pour y repérer des informations utiles. Sur cette base, un ensemble de règles analysent cette information prédigérée pour au final émettre un alarme graduée de 0 à 16, le niveau 0 étant l’absence d'alarme.




=[[LINUX:Wazuh-Statistiques|Statistiques]]=
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.




=[[LINUX:Wazuh-Actions préventives|Actions préventives]]=
Jusqu'ici nous avons traité de l'aspect des actions immédiates à toute attaque. Wazuh dispose de divers autres modules ayant une action préventives. Ils tentent à repérer des problèmes potentiels de sécurité afin que nous puissions combler ces trous de sécurité.




test configuration
=[[LINUX:Wazuh-API|API]]=
 
Wazuh dispose d'un interface de type HTTP qui permet d'interagir avec Wazuh Manager.
test regle
 
 
 
 
 




=[[LINUX:Wazuh-WUI|Interface Utilisateur Web (WUI)]]=
Wazuh dispose d'un outil additionnel sous forme d'interface utilisateur Web. Il permet de consulter les résultats des diverses analyses effectuées accompagnées de nombreux graphiques, d'avoir accès à la configuration,...
Les alertes sont regroupées par jour et les graphiques qui en découlent sont présentés sous forme chronologiques.




----
----
''->[[LINUX:Contrer les attaques|retour au menu pour contrer les attaques]]''
''&rarr; [[LINUX:Contrer les attaques|retour au menu pour contrer les attaques]]''
----
__NOEDITSECTION__
__NOEDITSECTION__
[[Category:LINUX]]
[[Category:LINUX]]