OSSEC

OSSEC jpp

 
OSSEC installation et usage. 
Ossec est un HID qui semble très complet, de conception assez récente il est actuellement détenu par une société privée (Trend Micro) qui propose une version libre et une version professionnelle. 
OSSEC n'est pas un logiciel très compliqué (au moins extérieurement) mais l'installation est un peu complexe car le produit n'est pas intégré dans une distribution et il faut résoudre soi même les problèmes de compatibilité (voir plus loin le problème posé lors d'un upgrade de version Debian). 
Mais les fonctionnalités sont engageantes et j'ai eu envie de le voir à l'oeuvre.

Note 2016 : le produit est toujours actif en version 2.8 et l'interface "Analogi" fonctionne toujours bien qu'il génère des messages d'erreur PHP dans les logs Apache. 

Note 2018 : Le passage de OSSEC en version 2.9.3 s'accompagne d'une modification du schéma de la base de données Mysql et Analogi devient impossible à utiliser (multiples erreur SQL). 
J'ai trouvé une version "compatible" utilisant Analogi comme fondation mais entièrement "revampée". Malheureusement cette version téléchargeable sur https://github.com/NunesGodinho/OSSEC-WUI n'est pas non plus adaptée aux versions >= 2.9.2. 
Je suis en train de reprendre cette version comme base et de l'adapter au schéma de la base de OSSEC 2.9.3 en y ajoutant quelques fonctionnalités : statistiques, mise à jour du mapping des signatures / catégories, authentification ... 
Cette version est aujourd'hui prête (voir ici un groupe d'articles avec copies d'écrans) et est diffusée sur github elle a été testée sur OSSEC V3.0.0 stable dont la structure de base de données est compatible.

Note 2021 : Fonctionnement en version 3.2 
Depuis la panne du serveur réparée en septembre je n'ai pas eu le loisir de réinstaller OSSEC ... 
Mais j'y pense.

Note 2023 : Je pense réinstaller la version 3.6 dès que possible et présenter les nouvelles fonctionnalités, notamment OSSEC+.

OSSEC : la vie avec OSSEC

OSSEC : la vie avec OSSEC jpp

La vie avec OSSEC est assez facile, le produit est, d'origine, très bien paramétré. Les options fournies par défaut permettent déjà une analyse très fine des événements qui se passent dans vos machines. 
J'ai fait les tests avec : 
- un ossec serveur sur une Centos 5.5 
- un agent Windows sur une machine XP 
- un agent Linux sur une machine Debian. 
L'installation étant détaillée par ailleurs je n'y reviendrais pas, la bonne chose est que pour un petit réseau (moins de 10 machines) il n'y a pas besoin de retoucher le paramétrage. Le système est parfois un peu bavard (pas mal de mails) mais toutes les informations sont là : 
- les "login", on s'intéressera surtout aux login refusés ... 
- les fichiers modifiés (attributs, taille ....), certains fichiers sont peut-être superflus, mais on s'y habitue. 
- l'installation de logiciels est parfaitement repérée, que ce soit pas "yum update" ou "apt-get upgrade". 

Pour la partie interface Web, qui paraît un peu "spartiate au début", on peut faire rapidement un grand nombre d'interrogations ciblées : 
- y-a-t-il eu des tentatives de connexion multiples 
- Quels comptes ont été modifiés 
Les principaux critères de sélection sont (d'autres sont disponibles tels que le numéro de la règle ayant repéré l'erreur) : 
- fourchette date/heure

OSSEC : installation

OSSEC : installation jpp

Note : cet article est ancien (historique presque) voir la dernière version ici. 
L'installation pour tests a été faite sur une machine Centos 5.5 virtualisée avec XEN. 
Après récupération des sources (pour moi version 2.4.1) et détarage dans un répertoire d'installation il suffit de lancer le script "install.sh" 
Après le choix de la langue (fr pour moi) un récapitulatif de votre système s'affiche 
=====================================================================

OSSEC HIDS v2.4.1 Script d'installation - http://www.ossec.net 
  
 Vous êtes sur le point d'installer OSSEC HIDS. 
 Vous devez avoir une compilateur C préinstallé sur votre système. 
 Si vous avez des questions ou des commentaires, envoyez un email 
 à dcid@ossec.net (ou daniel.cid@gmail.com). 
  
  - Système: Linux machine.domaine 2.6.18-194.3.1.el5 
  - Utilisateur: root 
  - Hôte: machine.domaine 


  -- Appuyez sur Entrée pour continuer ou Ctrl-C pour annuler. --

====================================================================== 
On appuye bien sûr sur entrée ... et l'on doit alors choisir l'option d'installation entre : 
serveur    serveur d'analyse OSSEC 
agent    agent transmettant à un serveur     
local    machine indépendante 
Pour cette première approche je choisis "local" 
Pour le répertoire d'installation je garde "/var/ossec". Je configure les alertes par Email et saisis une adresse mail valide en précisant le serveur de mail à utiliser (localhost) puisque j'ai un serveur Postfix local. 
Je précise ensuite que je veux démarrer le démon de controle d'intégrité et le moteur de détection de rootkit. 
=======================================================================

1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? local 

  - Installation en local choisie. 

2- Définition de l'environnement d'installation. 

 - Choisissez votre répertoire d'installation de OSSEC HIDS [/var/ossec]: 

    - L'installation sera faite sur  /var/ossec . 

3- Configuration de OSSEC HIDS. 

  3.1- Voulez-vous une alerte par email ? (o/n) [o]: o 
   - Quel est votre adresse email ? xxxxxx@xxxxxx 
   - Quel est l'adresse IP ou le nom d'hôte de votre serveur SMTP ? localhost 

  3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: o 

   - Lancement de syscheck (démon de vérification d'intégrité). 

  3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]: o 
  3.4- La réponse active vous permet d'éxécuter des commandes 
       spécifiques en fonction d'évènement. Par exemple, 
       vous pouvez bloquer une adresse IP ou interdire 
       l'accès à un utilisateur spécifique. 
       Plus d'information sur : 
       http://www.ossec.net/en/manual.html#active-response 
        
   - voulez-vous démarrer la réponse active ? (o/n) [o]: o 
   - Par défaut, nous pouvons activer le contrôle d'hôte 
     et le pare-feu (firewall-drop). Le premier ajoute 
     un hôte dans /etc/hosts.deny et le second bloquera 
     l'hôte dans iptables (sous linux) ou dans ipfilter 
     (sous Solaris, FreeBSD ou NetSBD). 
   - Ils peuvent aussi être utilisés pour arrêter les scans 
     en force brute de SSHD, les scans de ports ou d'autres 
     formes d'attaques. Vous pouvez aussi les bloquer par 
     rapport à des évènements snort, par exemple. 

   - Voulez-vous activer la réponse pare-feu (firewall-drop) ? (o/n) [o]: o 
     - pare-feu (firewall-drop) activé (local) pour les levels >= 6 

   - liste blanche (white list) par défaut pour la réponse active : 
      - 192.168.1.x 
      - 192.168.1.y 

   - Voulez-vous d'autres adresses IP dans votre liste (white list) ? (o/n)? [n] o

============================================================================= 
J'ajoute ici les adresses IP que je ne veux pas voir bannir lors des tests ... 
=============================================================================

3.6- Mise en place de la configuration pour analyser les logs suivants : 
    -- /var/log/messages 
    -- /var/log/secure 
    -- /var/log/maillog 

 - Si vous voulez surveiller d'autres fichiers, changez 
   le fichier ossec.conf en ajoutant une nouvelle valeur 
   de nom de fichier local. 
   Pour toutes vos questions sur la configuration, 
   consultez notre site web http://www.ossec.net . 
    
    
   --- Appuyez sur Entrée pour continuer ---

============================================================================= 
Ensuite la compilation commence et est très courte . 
=============================================================================

- Configuration correctement terminée. 

 - Pour démarrer OSSEC HIDS: 
        /var/ossec/bin/ossec-control start 

 - Pour arrêter OSSEC HIDS: 
        /var/ossec/bin/ossec-control stop 

 - La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf 


    Merci d'utiliser OSSEC HIDS. 
    Si vous avez des questions, suggestions ou si vous trouvez 
    un bug, contactez nous sur contact@ossec.net ou en utilisant la 
    liste de diffusion publique sur ossec-list@ossec.net 
    ( http://www.ossec.net/en/mailing_lists.html ). 

    Plus d'information peut être trouver sur http://www.ossec.net 

    ---  Appuyez sur Entrée pour finir (peut-être plus d'info plus bas). ---

============================================================================= 
Un script de démarrage "/etc/init.d/ossec" a été ajouté et activé correctement dans la machine. 
Un petit reboot pour valider le tout et ça repart, on peut au passage voir le démarrage de OSSEC. Un premier mail de lancement est aussitôt envoyé, c'est une alerte de niveau 3 (les niveaux vont de 1 à 15, 15 étant l'alerte maxi) me signalant le démarrage du démon : 
OSSEC HIDS Notification. 
2010 Jun 29 14:06:13 
Received From:machine.domaine->ossec-monitord 
Rule: 502 fired (level 3) -> "Ossec server started." 
Portion of the log(s): 
ossec: Ossec started. 
--END OF NOTIFICATION 

Je me connecte en "root" sur la machine, nouvelle alerte de niveau 4 cette fois. 
Je me connecte avec un autre utilisateur cela déclenche un nouveau mail de "first time user logged in". Une autre connexion avec le même utilisateur ne déclenche aucun mail. Tout cela semble bel et bon. 
 

OSSEC : Mysql

OSSEC : Mysql jpp

Après l'installation qui se passe très simplement et la vérification de l'installation (cf article précédent) il va falloir tester ce logiciel, ce qui peut prendre un certain temps ! 
J'avais malheureusement oublié d'installer le support MYSQL, j'ai du réaliser une petite manipulation pour activer le support Mysql et relancer l'installation. 
Activation du support Mysql :

  • Charger la bibliothèque de développement ((mysql-devel.i386 sur Centos)
  • aller dans le répertoire "src" de l'installateur et lancer la commande 
    make setdb

Qui réponds gentiment : 
============================================================ 
Error: PostgreSQL client libraries not installed. 
Info: Compiled with MySQL support. 
============================================================ 
Il faut ensuite relancer le script "install.sh", 
Après avoir choisi le français, je choisis de mettre à jour mon installation ainsi que les règles. La compilation démarre  ... et se termine par l'installation.

 ........ 
OSSEC HIDS v2.4.1 Stopped 
Starting OSSEC HIDS v2.4.1 (by Trend Micro Inc.)... 
Started ossec-maild... 
Started ossec-execd... 
Started ossec-analysisd... 
Started ossec-logcollector... 
Started ossec-syscheckd... 
Started ossec-monitord... 
Completed. 
 - Configuration correctement terminée. 
 - Pour démarrer OSSEC HIDS: 
                /var/ossec/bin/ossec-control start 
 - Pour arrêter OSSEC HIDS: 
                /var/ossec/bin/ossec-control stop 
 - La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf 
    Merci d'utiliser OSSEC HIDS. 
    Si vous avez des questions, suggestions ou si vous trouvez 
    un bug, contactez nous sur contact@ossec.net ou en utilisant la 
    liste de diffusion publique sur ossec-list@ossec.net 
    ( http://www.ossec.net/en/mailing_lists.html ). 

    Plus d'information peut être trouver sur http://www.ossec.net 
    ---  Appuyez sur Entrée pour finir (peut-être plus d'info plus bas). --- 
 - Mise à jour complète.

Il faut ensuite s'occuper de la base de données :

  • Créer la base
  • Créer l'utilisateur
  • Donner les droits adéquats à l'utilisateur sur la base
  • Créer le schéma en allant dans le répertoire d'installation puis dans "src/os_dbd" où un fichier "mysql.schema" n'attends que votre bon vouloir et la commande :

mysql --user=le_user --password=le_password -D la_base <mysql.schema

Après contrôle 8 tables sont créées dans le schéma. 
Il est temps d'aller ajouter le paramétrage qui va bien dans le fichier (xml) de configuration de OSSEC. Il suffit d'ajouter en tête du fichier /var/ossec/etc/ossec.conf le petit bout de XML suivant :

<ossec_config> 
  <database_output> 
    <hostname>le_host</hostname> 
    <port>3306</port> 
    <username>ossec_user</username> 
<password>ossec_password</password> 
    <database>ossec_database</database> 
    <type>mysql</type> 
  </database_output> 
</ossec_config>

Exécuter avec ferveur l'incantation suivante :

  1. /var/ossec/bin/ossec-control enable database
  2.  Stopper et relancer le service.

L'enregistrement est alors effectué dans la base Mysql (Postgresql est aussi admis). 
Petite remarque : l'installation crée de nouveaux utilisateurs et un groupe "ossec" et la plupart des process ne tournent pas avec les privilèges de "root" ce qui est un gage de stabilité/sécurité. 
  
Tests en cours .... la suite au prochain article.

OSSEC : Interface WEB

OSSEC : Interface WEB jpp

Note 2019, il est possible d'utiliser la version décrite ici comme interface avec OSSEC.

Récupérer l'archive "ossec-wui....", pour moi la version 0.3, la détarer dans un répertoire tranquille. Il suffit ensuite de recopier le nouveau répertoire ossew-wui-0.3 dans l'arborescence WEB, pour moi /var/www/ossec-wui-0.3. 
Il faut ensuite ajouter le groupe "ossec" à l'utilisateur sous lequel Apache est lancé (apache pour Centos, www-data pour Debian). 
Il faut ensuite se rendre dans le répertoire /var/www/ossec... et y lancer le script de configuration "setup.sh" :

[root@xxxxxxx ossec-wui-0.3]# ./setup.sh 
Setting up ossec ui... 
Username: xxxxxx 
New password:  
Re-type new password:  
Adding password for user xxxxxx 
Setup completed successfuly.

Dans /var/www j'ai ensuite fait un lien ossec-wui-0.3 --> ossec puis dans le répertoire /etc/httpd/conf.d j'ai ajouté le fichier suivant :

<Directory "/var/www/ossec"> 
    Options Indexes 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory>

On relance Apache et l'accès est ensuite direct par http://localhost/ossec. 
Quelques images de l'interface Web (un peu "rude") mais qui semble assez commode pour les recherches. 
Image 1 : vue lors de l'accès 
 

Image 2 : critères de recherche : 
 

Cette interface se révèle assez commode pour les recherches.

OSSEC : Installation serveur

OSSEC : Installation serveur jpp

Si comme moi vous trouvez OSSEC "pas mal" vous pouvez installer des agents sur d'autres machines, pour cela il vous suffira de modifier votre machine originale en mode "serveur". 
Note juillet 2018 : cette version est aujourd'hui obsolete, voir l'article sur la version 3.0.0 stable. 
Il faut malheureusement détruire son installation existante et refaire une installation. 
Détruire les éléments suivants : 
/var/ossec 
/etc/ossec-init.conf 
/etc/init.d/ossec 
et 
./rc.d/rc2.d/S99ossec 
./rc.d/rc0.d/K15ossec 
./rc.d/rc4.d/S99ossec 
./rc.d/rc1.d/K15ossec 
./rc.d/rc5.d/S99ossec 
./rc.d/rc6.d/K15ossec 
./rc.d/rc3.d/S99ossec 
Il suffit alors comme d'habitude de se rendre dans le répertoire d'installation et de lancer l'inévitable "install.sh". 
Si vous désirez utiliser le stockage dans une base Mysql, n'oubliez pas d'activer la fonctionnaité "Mysql" (voir article). 
On choisit la langue, et on frappe "Entrée" sur l'invite ... 
======================================================================

... /... 
 -- Appuyez sur Entrée pour continuer ou Ctrl-C pour annuler. -- 
1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? serveur 
  - Installation du serveur choisie. 
2- Définition de l'environnement d'installation. 
  - Choisissez votre répertoire d'installation de OSSEC HIDS [/var/ossec]: 
    - L'installation sera faite sur  /var/ossec . 
3- Configuration de OSSEC HIDS. 
  3.1- Voulez-vous une alerte par email ? (o/n) [o]: o 
   - Quel est votre adresse email ? toto@monserveur 
   - Quel est l'adresse IP ou le nom d'hôte de votre serveur SMTP ? 192.168.1.xxx 
  3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: O 
   - Lancement de syscheck (démon de vérification d'int&grité). 
  3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]: O 
   - Lancement de rootcheck (détection de rootkit). 
  3.4- La réponse active vous permet d'éxécuter des commandes 
       spécifiques en fonction d'événement. Par exemple, 
       vous pouvez bloquer une adresse IP ou interdire 
       l'accès à un utilisateur spécifique. 
       Plus d'information sur : 
       http://www.ossec.net/en/manual.html#active-response 
   - voulez-vous démarrer la réponse active ? (o/n) [o]: O 
     - Réponse active activée. 
     - Par défaut, nous pouvons activer le contrôle d'hôte 
     et le pare-feu (firewall-drop). Le premier ajoute 
     un hôte dans /etc/hosts.deny et le second bloquera 
     l'hôte dans iptables (sous linux) ou dans ipfilter 
     (sous Solaris, FreeBSD ou NetSBD). 
   - Ils peuvent aussi être utilisés pour arrêter les scans 
     en force brute de SSHD, les scans de ports ou d'autres 
     formes d'attaques. Vous pouvez aussi les bloquer par 
     rapport à des événements snort, par exemple. 
   - Voulez-vous activer la réponse pare-feu (firewall-drop) ? (o/n) [o]: o 
    - liste blanche (white list) par défaut pour la réponse active : 
      - 192.168.2.xxx 
      - 192.168.2.xxx 
   - Voulez-vous d'autres adresses IP dans votre liste (white list) ? (o/n)? [n]: o 
   - IPs (séparées par des espaces) : 192.168.1.xxx 
  3.5- Voulez-vous activer fonctionnalités syslog (port udp 514) ? (o/n) [o]: n 
   --- Fonctionnalité syslog désactivée. 
  3.6- Mise en place de la configuration pour analyser les logs suivants : 
    -- /var/log/messages 
    -- /var/log/secure 
    -- /var/log/maillog 
    -- /var/log/httpd/error_log (apache log) 
    -- /var/log/httpd/access_log (apache log) 
 - Si vous voulez surveiller d'autres fichiers, changez 
   le fichier ossec.conf en ajoutant une nouvelle valeur 
   de nom de fichier local. 
   Pour toutes vos questions sur la configuration, 
   consultez notre site web http://www.ossec.net . 
   
... ... ... la compil se passe ... ... ... 
  
 - Le Système est Redhat Linux. 
 - Script d'initialisation modifié pour démarrer OSSEC HIDS pendant le boot. 
 - Configuration correctement terminée. 
 - Pour démarrer OSSEC HIDS: 
        /var/ossec/bin/ossec-control start 
 - Pour arrêter OSSEC HIDS: 
        /var/ossec/bin/ossec-control stop 
 - La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf 
    Merci d'utiliser OSSEC HIDS. 
    Si vous avez des questions, suggestions ou si vous trouvez 
    un bug, contactez nous sur contact@ossec.net ou en utilisant la 
    liste de diffusion publique sur ossec-list@ossec.net 
    ( http://www.ossec.net/en/mailing_lists.html ). 
    Plus d'information peut être trouver sur http://www.ossec.net 
    ---  Appuyez sur Entrée pour finir (peut-être plus d'info plus bas). --- 
 - Vous devez ajouter le(s) agent(s) avant qu'ils aient un accès autorisé. 
   Lancez 'manage_agent' pour les ajouter ou les supprimer: 
   /var/ossec/bin/manage_agents 
   Plus d'information sur: 
   http://www.ossec.net/en/manual.html#ma

==================================================================== 
Dès le service lancé on constate l'ouverture d'un port en écoute : 
lsof -Pn | grep UDP | grep oss 
ossec-rem 5859    ossecr    4u     IPv4     152930                 UDP *:1514  
après avoir démarré un poste muni d'un agent on peut voir dans le log de celui-ci la trace de la connection au serveur OSSEC (/var/ossec/logs/ossec.log) : 
2010/06/30 14:24:03 ossec-agentd(4102): INFO: Connected to the server (192.168.1.124:1514). 
2010/06/30 14:29:37 ossec-syscheckd: INFO: Finished creating syscheck database (pre-scan completed). 

Pour le reste du fonctionnement il est identique à celui de la version locale.

OSSEC : installation agent Linux

OSSEC : installation agent Linux jpp

Installation d'un agent sur une machine Linux, ici une distribution Debian, l'installation se fait à  partir des sources car il n'existe pas de paquet(s) Debian pour OSSEC. Les sources sont les mêmes que pour toute version Linux/Unix. 
Après détarage de l'archive on se rends dans le répertoire "ossec-hids-2.4.1" et on lance le script "install.sh". 
Je viens d'intégrer une nouvelle machine dans le système en version 2.7.1 sans aucun problème, les srcipts de comportent de manière identique. 
Après le choix de la langue (fr pour moi) un récap du système s'affiche, Entrée pour continuer : 
===================================================================

1- Quel type d'installation voulez-vous (serveur, agent, local ou aide) ? agent 
   - Installation de l'agent (client) choisie. 
  2- Définition de l'environnement d'installation. 
  - Choisissez votre répertoire d'installation de OSSEC HIDS [/var/ossec]: 
    - L'installation sera faite sur  /var/ossec . 
  3- Configuration de OSSEC HIDS. 
  3.1- Quelle est l'adresse IP de votre serveur OSSEC HIDS ?: 192.168.1.xxx 
   - Ajout de l'IP du Serveur 192.168.1.xxx 
  3.2- Voulez-vous démarrer le démon de vérification d'intégrité ? (o/n) [o]: o 
   - Lancement de syscheck (démon de vérification d'intégrité). 
  3.3- Voulez-vous démarrer le moteur de détection de rootkit ? (o/n) [o]: o 
   - Lancement de rootcheck (détection de rootkit). 
  3.4 - voulez-vous démarrer la réponse active ? (o/n) [o]: o 
  3.5- Mise en place de la configuration pour analyser les logs suivants : 
    -- /var/log/messages 
    -- /var/log/auth.log 
    -- /var/log/syslog 
    -- /var/log/xferlog 
    -- /var/log/mail.info 
    -- /var/log/squid/access.log 
    -- /var/log/dpkg.log 
    -- /var/log/snort/alert (snort-full file) 

 - Si vous voulez surveiller d'autres fichiers, changez 
   le fichier ossec.conf en ajoutant une nouvelle valeur 
   de nom de fichier local. 
   Pour toutes vos questions sur la configuration, 
   consultez notre site web http://www.ossec.net . 
   --- Appuyez sur Entrée pour continuer --- 
====================================================================== 
La compilation démarre et l'installation s'enchaîne pour se terminer en beauté ... 
====================================================================== 
 - Le Système est Debian (Ubuntu or derivative). 
 - Script d'initialisation modifié pour démarrer OSSEC HIDS pendant le boot. 
 - Configuration correctement terminée. 
 - Pour démarrer OSSEC HIDS: 
        /var/ossec/bin/ossec-control start 
 - Pour arrêter OSSEC HIDS: 
        /var/ossec/bin/ossec-control stop 
  - La configuration peut ếtre visualisée ou modifiée dans /var/ossec/etc/ossec.conf 
    Merci d'utiliser OSSEC HIDS. 
    Si vous avez des questions, suggestions ou si vous trouvez 
    un bug, contactez nous sur contact@ossec.net ou en utilisant la 
    liste de diffusion publique sur ossec-list@ossec.net 
    ( http://www.ossec.net/en/mailing_lists.html ). 

    Plus d'information peut ếtre trouver sur http://www.ossec.net 
    ---  Appuyez sur Entrée pour finir (peut-être plus d'info plus bas). --- 
... ... ... 
 - Vous devez d'abord ajouter cet agent sur le serveur pour 
   qu'ils communiquent entre eux. Quand cela sera fait, 
   vous pourrez lancer l'outil 'manage_agents' pour 
   importer la clef d'authentification depuis le serveur. 
   /var/ossec/bin/manage_agents 
   Plus d'information sur: 
   http://www.ossec.net/en/manual.html#ma

======================================================================= 
Il faut ensuite se rendre sur le serveur pour "ajouter" l'agent à  l'aide de la commande "/var/ossec/bin/manage_agents" : 
=======================================================================

 /var/ossec/bin/manage_agents 
**************************************** 
* OSSEC HIDS v2.4.1 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: A 
- Adding a new agent (use '\q' to return to the main menu). 
  Please provide the following: 
   * A name for the new agent: com-k400 
   * The IP Address of the new agent: 192.168.1.xxx 
   * An ID for the new agent[001]: 001 
Agent information: 
   ID:001 
   Name:xxxxxxxxx 
   IP Address:192.168.1.xxx 
Confirm adding it?(y/n): y 
Agent added. 
**************************************** 
* OSSEC HIDS v2.4.1 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: q 
** You must restart the server for your changes to have effect. 
manage_agents: Exiting ..

=================================================================== 
On redémarre le service OSSEC sur le serveur et ... pas de message. 
Les échanges étant authentifiés il faut ensuite procéder à  l'échange de clefs qui se fait par le même outil, sur le serveur : 
=====================================================================

 /var/ossec/bin/manage_agents 
**************************************** 
* OSSEC HIDS v2.4.1 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: E 
Available agents: 
   ID: 001, Name: com-k400, IP: 192.168.1.60 
Provide the ID of the agent to extract the key (or '\q' to quit): 001 
Agent key information for '001' is: 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
** Press ENTER to return to the main menu.

===================================================================== 
Sur l'agent on lance l'outil de management et on copiera la clef : 
=====================================================================

/var/ossec/bin/manage_agents 
**************************************** 
* OSSEC HIDS v2.4.1 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (I)mport key from the server (I). 
   (Q)uit. 
Choose your action: I or Q: I 
* Provide the Key generated by the server. 
* The best approach is to cut and paste it. 
*** OBS: Do not include spaces or new lines. 
Paste it here (or '\q' to quit): xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
Agent information: 
   ID:001 
   Name:xxxxxxxxx 
   IP Address:192.168.2.xxx 
Confirm adding it?(y/n): y 
Added. 
** Press ENTER to return to the main menu.

======================================================================= 
on peut alors démarrer le service sur la machine dont on vient d'installer l'agent. 
======================================================================= 
./ossec start 
Starting OSSEC HIDS v2.4.1 (by Trend Micro Inc.)... 
Started ossec-execd... 
Started ossec-agentd... 
Started ossec-logcollector... 
Started ossec-syscheckd... 
Completed. 
==========================================================================

OSSEC : sur un "vrai" serveur

OSSEC : sur un "vrai" serveur jpp

Je n'ai pas pu tenir et disposant de quelques temps j'ai décidé de tenter l'installation de OSSEC sur mon serveur de mail. 
C'est un serveur permanent (basse consommation cf ) qui supporte déjà plein de trucs, mais c'est la seule machine en fonctionnement continu et donc apte à gérer les agents à déposer dans les autres machines. Comme c'est aussi la passerelle vers Internet, elle doit être particulièrement surveillée. 
Installer le logiciel serveur. 
Installer le support MYSQL : 
cd ..../ossec.../src 
make setdb 
Error: PostgreSQL client libraries not installed. 
Info: Compiled with MySQL support. 
Installer "libz et libz-devel" par un petit coup de "apt-get install zlib1g zlig1g-dev ". 
Il ne reste plus alors qu'à lancer la procédure d'installation. 
./install.sh 
Qui se déroule avec un petit problème car gcc me dit méchamment qu'il ne reconnait pas le switch "-R". 
Sur cette machine est installé "ZIMBRA" (Serveur mail et webmail) et ,je ne sais pas pourquoi, toutes les définitions de répertoires de librairies (par exemple : -L/usr/lib) étaient préfixés -R/usr/lib, ce qui m'a obligé à mettre un "front end" bidon pour "gcc" dont voici le script (facile !) : 
========================================================= 
#!/bin/bash 
PARAM=`echo $* |  sed 's\ /-R/\ -L/g'`  
/usr/bin/gcc $PARAM 
========================================================== 
C'est tout et la compilation se termine bien. On passe alors à la partie Mysql :

  • Créer un utilisateur dans la base MySql, c'est facile avec mysql-admin.
  • Créer le schéma de base de données,
  • Donner les droits adéquats au user
  • Lancer le script de création des tables : 
    cd .../ossec..../src/dbd_os 
    mysql --user=osssec_user --password=ossec_mot_de_passe -D nom_de_la_base <mysql.schema
  • Ajouter dans /var/ossec/etc/ossec.conf le morceau (choisi) juste après "<ossec_config>" et avant <global> : 
     <database_output> 
       <hostname>localhost</hostname> 
       <port>3306</port> 
       <username>ossec_user</username> 
       <password>ossec_mot_de_passe</password> 
       <database>ossec_base</database> 
       <type>mysql</type> 
    </database_output>
  • Surtout ne pas oublier l'incantation à "/var/ossec/bin/ossec-control enable database"   avant de lancer le service.


Installer l'interface WEB

  • Décompresser l'archive dans "/var/www"
  • Aller dans le répertoire "/var/www/ossec_......"  pour exécuter le script "setup.sh"
  • Ne pas oublier (comme moi la première fois), d'affecter le user de lancement de Apache (www-data pour Debian) dans le groupe "ossec" (et redémarrer Apache), sinon vous n'obtiendrez que des messages d'insulte de type "access denied" ou au mieux un message "No agent available" dans l'interface alors même que le mails sont émis normalement et que tout semble baigner.
  • Mettre en place le petit fichier de déclaration pour Apache (/etc/apache2/conf.d pour Debian, /etc/httpd/conf.d pour les redhat like) :

# 
# This configuration file allows the manual to be accessed at  
# http://localhost/ossec/ 
# 
AliasMatch ^/ossec(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/var/www/ossec$1" 
<Directory "/var/www/ossec"> 
    Options Indexes 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
</Directory> 

Tester le résultat. 
Premier lancement. 
C'est horrible ! Tous les messages inscrits par ZIMBRA dans "/var/log/syslog ou /var/log/messages" déclenchent un mail d'anomalie de quoi saturer rapidement une boite mail. Je stoppe donc rapidement le service OSSEC. 
Après une petite réflexion un plan d'action se dessine : 
Actions à réaliser : 
1) modifier les paramètres de rsyslog dasn "/etc/rsyslog.conf" (utilisé par défaut sur ce serveur)

  • la ligne  : *.*;auth,authpriv.none        -/var/log/syslog 
    devient  :  *.*;auth,authpriv.none,mail,local0,local1    -/var/log/syslog
  • la ligne  : mail,news.none        -/var/log/message  
    devient  :      mail,news.none;\ 
    local0,local1;            -/var/log/messages

Ainsi les traces de ZIMBRA devraient être supprimées des logs "standard" et ne plus polluer les détections d'anomalies. Mais en contrepartie les actions de ZIMBRA ne seront plus analysées. 
2) Chercher un moyen d'analyser les logs de ZIMBRA. Il faut pour cela créer un nouveau "parser" capable d'analyser les logs de Zimbra. 
Heureusement Internet est là (http://www.zimbra.com/forums/administrators/39764-ossec-rules.html) et on y trouve exactement ce qu'il nous faut. 
Le gars qui a écrit ces règles a l'air de savoir de quoi il parle, je lui fait donc confiance et intègre ces règles là ou il est dit de le faire. 
Deuxième lancement. 
C'est le pied ... les messages de Zimbra ne polluent plus les détections ... si, il reste une source de mails intempestifs, c'est l'analyse du fichier "auth.log" où les "sudo .... " de Zimbra génèrent encore une palanquée d'anomalies (deux ou trois toutes les deux minutes) il faut donc faire quelque chose car je veux pas traiter plus de 1000 messages par jour ! 
Là aussi un peu de réflexion et beaucoup de lecture de la doc (RTFM) permettent d'entrevoir une solution : 
Modifier le comportement d'une règle standard. Cette possibilité est géniale et permet de traiter sans problème, et avec élégance,  des cas particuliers. C'est un gros plus de OSSEC par rapport à d'autres outils. 
Il suffit de créer une règle (avec la plage de numérotation qui va bien (100000 à 110000) ). Je crée donc une règle "101001" qui référence la règle 5402 (if_sid) qui me cause des ennuis et ajoute une contrainte spécifique (match), si cette règle "matche" alors le niveau de l'erreur est ramené à zéro (pas d'erreur). Et ceci s'écrit : 
 <rule id="101001" level="0"> 
    <if_sid>5402</if_sid> 
    <match>COMMAND=/opt/zimbra/libexec/zmm</match> 
    <description>Kill ZIMBRA SUDO </description> 
 </rule>

Traduction : Si la règle 5402 est levée (les messages indiquent toujours le numéro de la règle qui les a déclenchés) et si la ligne "offensante" de log comporte la chaine "COMMAND=/opt/zimbra/libexec/zmm" alors le niveau d'erreur sera zéro. 
A ajouter dans le groupe de règles dans lequel on a déjà intégré les règles "zimbra" du site mentionné au dessus. 
Je ne suis pas un grand amateur de XML, mais à ce niveau là j'arrive à suivre. 
On redémarre le service et on attend un peu pour voir si la modification est efficace. Après plusieurs minutes pas un seul mail à ce sujet, c'est gagné. Vite un petit test avec un autre "sudo" et ... il apparait dans la liste, c'est donc vraiment gagné. 
Quelques messages générés par AMAVIS attirent mon attention, mais il ne s'agit "que" du traitement d'un mail dont l'adresse mail comporte le mot "error" ! 
Le stockage des données dans la base Mysql est réalisé avec un modèle de données simple qui promet une grande facilité de réalisation de requêtes ciblées. Ces requêtes sont surtout intéressantes dans un réseau important, mais ici on doit pouvoir effectuer quelques tests facilement. 
L'interrogation avec "Mysql-browser" est facile car on accède immédiatement aux messages, obtenir la liste des connexions par machine et/ou par utilisateur sera super simple. 
Quelques messages du firewall apparaissent, d'autres de "SNORT" : avec quelques " Destination Unreachable Communication with Destination Host is Administratively Prohibited [**][Classification: Misc activity] [Priority: 3] ". 
En bref, après mes tests sur des machines virtuelles, cela marche assez bien dans le monde réel (a quelques adaptations faciles près) en promettant de pas noyer un pauvre administrateur sous un tas de fausses alertes.

OSSEC : la vie en vrai

OSSEC : la vie en vrai jpp

J'ai donc installé OSSEC sur un serveur "réel" et je l'ai laissé fonctionner quelques temps sans toucher au paramétrage. 
Sur ce même serveur tournent quelques outils de sécurité (AIDE et TIGER), Je vais pouvoir comparer les résultats. 
Le plus de OSSEC est le signalement rapide par mail des problèmes. Une détection par l'IDS (Snort) est signalée rapidement. 
Après un ou deux jours j'ai constaté que la surveillance de certains répertoires n'était pas installée par défaut, seuls les répertoires "etc" et la gamme des "bin" étaient surveillés, j'y ai donc ajouté (fichier /var/ossec/etc/ossec.conf) les répertoires "/lib" et "/usr/lib". 
Les lignes considérées sont actuellement les suivantes : 
   <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> 
   <directories check_all="yes">/bin,/sbin,/lib,/usr/lib</directories> 
J'attends les résultats des prochains passages. 
J'ai aussi essayé de mettre sous surveillance le serveur FTP (proftpd) car il existe des éléments de configuration prévus pour lui mais mis en commentaires. Je les ai donc activés et, là aussi, j'attends les résultats, il suffit qu'un petit malin vienne "titiller" ce FTP pour que je puisse vérifier si la détection est correcte. 
On pourra alors voir si la "réponse active" bloque bien les IP de ces offenseurs. 
 

OSSEC : après quelques semaines

OSSEC : après quelques semaines jpp

Après quelques semaines la vie avec OSSEC se passe très bien. Le nombre de messages n'est pas très élevé, sauf lors de mises à jour logicielles sur l'une des machines. Celle-ci déclenche en effet un certain nombre de messages pour : 
- la mise à jour elle-même (détection sur dpkg.log) 
- la modification des programmes (changement de l'empreinte) 
Les messages surviennent très rapidement après la mise à jour et, très souvent, les messages groupent un certain nombre de modifications ce qui réduit fortement leur nombre. 
On voit rapidement les tentatives d'accès indues, tous les "rigolos" qui essayent de forcer votre mot de passe SSH... ils essayent en général les users "Administrator" ou parfois "Administrateur", C'est bizarre celà me dit quelque chose ce genre de user... 
Toutes les erreurs de connexion, avec les mots de passe à la gomme qu'on est obligé d'utiliser il est vite fait de se mélanger les doigts et de frapper un mot de passe erroné. 
De même les tentatives d'accès sur le serveur FTP sont signalées et, en prime, OSSEC bloque l'IP correspondante pendant un temps paramétrable (600 secondes par défaut). 
La machine OSSEC étant aussi ma passerelle Internet il faut soigneusement mettre en "White list" les machines du réseau interne car si elles font des choses non prévues (ou "vilaines") leur IP est bloquée assez rapidement. 
J'ai ainsi constaté qu'un simple "apt-get update" va chercher des fichiers qui n'existent pas sur les serveurs et le proxy SQUID note soigneusement ces accès "loupés" ce qui déclenche un message et le blocage de l'IP "fautive", la White List est ici la bienvenue. 
Exemple de message OSSEC : 

OSSEC HIDS Notification.2010 Sep 14 23:29:39 
Received From: xxxxx->syscheck 
Rule: 550 fired (level 7) -> "Integrity checksum changed." 
Portion of the log(s): 
Integrity checksum changed for: '/etc/bind/db.192.1' 
Size changed from '1603' to '1657' 
Ownership was '0', now it is '105' 
Old md5sum was: '99bd18192e46198c2330a2f4b715fd00' 
New md5sum is : '146b5b6ddd094f633f1f55961ed17055' 
Old sha1sum was: 'aeacec95643c35ab23f9b45fdc0b4d137a04a38d' 
New sha1sum is : '39ccae1efc06a417b856242694fbe0931836b623' 
--END OF NOTIFICATION 
En effet j'ai procédé à une mise à jour d'un fichier de mon petit DNS interne, le signalement est rapide. 

OSSEC HIDS Notification. 2010 Sep 15 23:17:02 
Received From: (pcnic) 192.168.1.7->syscheck 
Rule: 550 fired (level 7) -> "Integrity checksum changed." 
Portion of the log(s): 
Integrity checksum changed for: 'ossec.conf' 
Size changed from '7554' to '7634' 
Old md5sum was: '91e2cfd5503cb7eeee496f6b83a195b4' 
New md5sum is : 'be35b5b28f893182a6c730e9533ed64d' 
Old sha1sum was: 'e0d47353e1d3339a7d4a5b080fb2853ed1ad8cc0' 
New sha1sum is : 'c25c7b4d2a6ea97c842f106df645874c5985a5ea' 
--END OF NOTIFICATION 
Là j'ai ajusté une règle pour modifier les conditions de syscheck sur le répertoire "c:\program files", la réaction a été très rapide car l'option "realtime" est activée sur les répertoires "sensibles". 
Pour les machines Windows j'attends le prochain "patch tuesday" pour voir ce qui est déclenché. 
En bref c'est un très bon logiciel qui semble très complet. Le paramétrage offre de grandes possibilités pour "filtrer" des messages superflus, le mot "error" dans un message logué est très mal vu ! Je suis abonné à une liste de distribution dont l'adresse de retour par défaut comporte le mot fatidique "error@....", une petite surcharge de règle et le tour est joué, les messages du log comportant un destinataire "error@...." ne déclenchent plus rien. 
Il faut essayer d'être assez précis dans ce type de filtre pour ne pas cacher de vrais "ERRORS". 
Ca y est, les patchs Windows sont arrivés et il y en a 11. Je déclenche cette mise à jour et je vais observer les messages de OSSEC dès leur arrivée. 
Tiens c'est curieux, déjà une heure de passée et aucun message ?!?! 
La machine en question vient de migrer sur un nouveau matériel à processeur ATOM et carte mini dans le même boitier que celui du petit frontal Internet pour un encombrement et une consommation  minimum. 
J'attends le prochain passage de patchs.

OSSEC : filtrage de regles

OSSEC : filtrage de regles jpp

Il arrive que certains messages pourtant "normaux" de votre système encombrent inutilement les mails envoyés par OSSEC. 
Certains logiciels laissent des traces dans les logs systèmes et OSSEC repère ces "anomalies", il est particulièrement sensible à certains mots "failed", "error" ... 
Si une de vos applications génère de tels messages il faut installer un filtre secondaire permettant d'éliminer ces "fausses alertes". 
Il faut alors récupérer le numéro de la règle offensée dans le message (la 1002 est particulièrement sensible) et créer une règle dépendante éliminant le cas gênant. 
Le fichier "local_rules.xml" est destiné à cet effet. 
Par exemple : 
Xen me génère régulièrement des messages "this function is not supported by the hypervisor: virConnectNumOfInterfaces" et c'est encore la règle 1002 qui repère ce truc. 
Il suffit d'ajouter dans le fichier local : 
  <rule id="101117" level="0"> 
    <if_sid>1002</if_sid> 
    <match>this function is not supported by the hypervisor: virConnectNumOfInterfaces</match> 
    <description>erreurs</description> 
  </rule> 
Il faut donner :

  • Un numéro à votre règle ( > 100000), ici 101117 et un niveau d'erreur. Un niveau à zéro annule la condition d'erreur <balise <rule...>. On pourrait aussi rendre une erreur plus grave en augmentant son LEVEL.
  • La règle offensée (ici la fameuse règle 1002) balise <if_sid>
  • Le texte du message, avec les blancs (je ne suis pas un spécialiste des expressions régulières ...)
  • Une description et c'est fini.

Un petit restart de OSSEC et le message ennuyeux s'évanouit ! 

Pour des messages plus complexes, comportant par exemple des parties variables il faut enchaîner deux règles dépendantes : 
  <rule id="101110" level="0"> 
    <if_sid>5104</if_sid> 
    <match>device tap</match> 
    <description>erreurs</description> 
  </rule> 
  <rule id="101111" level="0"> 
    <if_sid>101110</if_sid> 
    <match>entered promiscuous mode</match> 
    <description>erreurs</description> 
  </rule> 
Le message a intercepter comportait une partie variable : le numéro de "tap" concerné, rappel : je ne suis pas un spécialiste des expressions régulières ...). 
Bon filtrage ...

OSSEC : passage en Debian 6

OSSEC : passage en Debian 6 jpp

J'ai dernièrement passé la machine serveur de OSSEC de Debian 5 (Lenny) vers Debian 6 (Squeeze) et lors d'une mise à jour suivante OSSEC a refusé de démarrer avec un message "libmysqlclient_15 not found". 
J'ai vérifié la version installée, c'était la 16 qui avait désinstallé la 15. 
En attendant de tester une nouvelle version de OSSEC (2.5.1, version actuelle 2.4.1) j'ai cherché où trouver cette foutue librairie. 
Quelques recherches sur le site Debian m'ont montré que ce paquet était disponible dans "Lenny" sour le nom "libmysqlclient15off", le temps mettre la bonne ligne dans mon fichier "source.list" 
un "apt-get update" et un "apt-get install libmysqlclient15off" 
plus tard tout est OK. 
Ce paquet semble exister aussi pour Ubuntu dans certains depots "universe". 

Le prochain article sera consacré à l'upgrade de OSSEC 2.4.1 en 2.5.1 avec les problèmes pénibles (pas trop j'espère) d'une mise à niveau par un fichier "tar.gz" et donc une partie de compilation.

OSSEC : passage version 2.6

OSSEC : passage version 2.6 jpp

J'ai décidé d'upgrader mon installation de OSSEC de 2.4 en 2.6, il faut rester à la pointe du progrès. 
J'ai donc téléchargé le tar.gz de la 2.6 et je l'ai installé dans un petit coin tout propre. 
Là, dans le répertoire principal un joli petit script "install.sh" nous attends. 
Mais, d'abord sauvegardons le contenu "actuel" du logiciel : /var/ossec. 
Ensuite seulement on peut frapper le fatidique "./install.sh", Eh mais non, il faut d'abord activer l'accès Mysql. On va dans le répertoire "src" et on chante un petit truc comme "make setdb" et ... l'incantation fonctionne. Un petit "cd .." et le tentant "./install.sh" :

** Para instalação em português, escolha [br] 
  ** 要使用中文进行安装, 请选择 [cn]. 
  ** Fur eine deutsche Installation wohlen Sie [de]. 
  ** Για εγκατάσταση στα Ελληνικά, επιλέξτε [el]. 
  ** For installation in English, choose [en]. 
  ** Para instalar en Español , eliga [es]. 
  ** Pour une installation en français, choisissez [fr] 
  ** Per l'installazione in Italiano, scegli [it]. 
  ** 日本語でインストールします.選択して下さい.[jp]. 
  ** Voor installatie in het Nederlands, kies [nl]. 
  ** Aby instalować w języku Polskim, wybierz [pl]. 
  ** Для инструкций по установке на русском ,введите [ru]. 
  ** Za instalaciju na srpskom, izaberi [sr]. 
  ** Türkçe kurulum için seçin [tr]. 
  (en/br/cn/de/el/es/fr/it/jp/nl/pl/ru/sr/tr) [en]: fr

Il y a quelques hiéroglyphes mais je choisis bravement "fr".

OSSEC HIDS v2.6 Script d'installation - http://www.ossec.net 
Vous êtes sur le point d'installer OSSEC HIDS. 
Vous devez avoir une compilateur C préinstallé sur votre système. 
Si vous avez des questions ou des commentaires, envoyez un email 
à dcid@ossec.net (ou daniel.cid@gmail.com). 
  - Système: Linux kmail 2.6.39 
  - Utilisateur: root 
  - Hôte: xxxxxx 
  -- Appuyez sur Entrée pour continuer ou Ctrl-C pour annuler. -- 

Après un appui sur entrée : 
 - Vous avez déjà installé ossec. voulez-vous le mettre à jour ? (o/n): o 
 - Voulez-vous mettre à jour les règles ? (o/n): o 
Après 2 "o"+entrée la compilation démarre et 
Starting OSSEC HIDS v2.6 (by Trend Micro Inc.)... 
OSSEC analysisd: Testing rules failed. Configuration error. Exiting. 
/var/ossec/bin/ossec-dbd: /usr/lib/libmysqlclient.so.15: version `libmysqlclient_15' not found 
(required by /var/ossec/bin/ossec-dbd) 
- Configuration correctement terminée. 
- Pour démarrer OSSEC HIDS: 
        /var/ossec/bin/ossec-control start 
- Pour arrêter OSSEC HIDS: 
        /var/ossec/bin/ossec-control stop 
- La configuration peut être visualisée ou modifiée dans /var/ossec/etc/ossec.conf 
    Merci d'utiliser OSSEC HIDS. 
    Si vous avez des questions, suggestions ou si vous trouvez 
    un bug, contactez nous sur contact@ossec.net ou en utilisant la 
    liste de diffusion publique sur ossec-list@ossec.net 
    ( http://www.ossec.net/en/mailing_lists.html ). 
    Plus d'information peut être trouver sur http://www.ossec.net 
    ---  Appuyez sur Entrée pour finir (peut-ếtre plus d'info plus bas). ---

La tuile, OSSEC utilise une vieille version de la librairie Mysql Client, heureusement que j'ai aussi de vieilles machines qui possèdent encore cette librairie, je copie le tout dans /usr/lib : 
lrwxrwxrwx 1 root root      24 Aug  2 23:19 libmysqlclient.so.15 -> libmysqlclient.so.15.0.0 
-rw-r--r-- 1 root root 1993916 Feb 17  2009 libmysqlclient.so.15.0.0 
lrwxrwxrwx 1 root root      26 Aug  2 23:19 libmysqlclient_r.so.15 -> libmysqlclient_r.so.15.0.0 
-rw-r--r-- 1 root root 2002908 Feb 17  2009 libmysqlclient_r.so.15.0.0 

C'est pas très beau (horrible ?) de faire ce genre de chose dans un beau système Debian bien ordonné mais un petit tour dans le fichier "Contents...." ne me montre aucune librairie en version 15 accessible dans les magasins où je me sers habituellement. Aux grands maux les grands moyens. 
Un petit "service ossec start" et aucun message d'insulte, tout est OK. 
Les processes OSSEC ont l'air "ps -ef | grep ossec" d'être là. Un petit tour par l'interface graphique pour constater que le serveur a repris contact avec ses clients préférés et que tout semble baigner dans le plus parfait bonheur. 

Au fait j'ai gardé le tar des librairies dans un magnifique répertoire de sauvegarde de vieux trucs, ça pèse quand même # 4Mo.

OSSEC : version 2.7 et nouveau serveur

OSSEC : version 2.7 et nouveau serveur jpp

L'ancienne machine était très économique mais son processeur 32bits commençait à dater, par exemple les nouvelles versions de ZIMBRA ne se font plus qu'en 64bits. 
Il était donc nécessaire de passer sur une carte mère 64bits avec un Corei3 en version ECO TDP de 35W maxi dans le même boitier. Je passe l'installation (toujours Debian) pour en arriver à OSSEC en version 2.7. 
L'installation par elle même n'a pas changé, voir les chapitres précédents. 
Toutefois, pour changer un peu, je n'ai pas intégré OSSEC dans la base MYSQL de ZIMBRA mais j'ai utilisé une base PostgreSQL. 
La procédure est identique (on travaille dans les répertoires "sources" et non dans les répertoires d'installation du logiciel) :

cd mes_sources_OSSEC/src 
make setdb 
cd .. 
./install.sh

cd  répertoire_d_installation 
./bin/ossec-control enable database 

Il faut alors, comme pour MYSQL mettre en place (au début du fichier etc/ossec.conf le paramétrage de notre base PostgreSQL, par exemple en début de fichier :

<ossec_config> 
  <database_output> 
    <hostname>127.0.0.1</hostname> 
    <port>5432</port> 
    <username>mon_user_ossec</username> 
    <password>le_password_qui_tue</password> 
    <database>ma_base_ossec</database> 
    <type>postgresql</type> 
  </database_output> 
</ossec_config>

Il faut ensuite créer une base PostgreSQL avec le user qui va bien et initialiser cette base à l'aide du script dans le répertoire "répertoire_source/ossec-hids-2.7/src/os_dbd", on lance alors psql pour créer les tables: 
psql -U un_user_admin -W ma_base_ossec <postgresql.schema
On peut ensuite démarrer OSSEC et le tour est joué.
 
Mais tout ça c'était avant la découverte d'un nouvel interface Web pour OSSEC : ANALOGI. 
Cet interface est à première vue surprenant mais très efficacce, manque de pot il ne marche qu'avec MYSQL, donc exit PostgreSql et retour à Mysql. 
Vite un article sur ANALOGI malheureusement aujourd'hui défunt que j'ai du remplacer par un petit développement "perso".

OSSEC : 2.7 et interface Web ANALOGI

OSSEC : 2.7 et interface Web ANALOGI jpp

Note 2019 : La version décrite ici est ancienne et incompatible avec les version récentes (>2.9) de Ossec, il est possible d'utiliser la version décrite ici pour Ossec >= 3.0.

En installant la nouvelle version 2.7 j'ai cherché un interface Web un peu plus "sexy" que l'ancien interface d'OSSEC. En cherchant un peu je suis tombé sur AnaLogi et j'ai décidé de le tester, mais comme indiqué dans l'article précédent pas de PostgreSql avec AnaLogi. 
Note 2018, Analogi n"est plus compatible avec les versions de OSSEC >= 2.9.3,  voir ici. 
On le trouve à l'URL suivante : https://github.com/ECSC . 
L'installation est assez simple, on dézippe le machin dans un coin et on se débrouille pour que Apache soit capable de le trouver (si vous préférez Nginx cela ne devrait pas poser de problèmes). 
Ajouter dans "sites-available" le fichier "ANALOGI" contenant :

<VirtualHost 127.0.0.1:83> 
    ServerAdmin webmaster@localhost 
    ServerName  analogi.xxxx.xxx 
    Include /etc/apache2/sites-available/ANALOGI_body 
</VirtualHost> 
L'adresse en 127.0.0.1 est due à l'utilisation de "haproxy" pour aiguiller les requêtes, vous pouvez bien entendu mettre directement une adresse visible de l'extérieur.

Le fichier ANALOGI_body contient :

#       "Body" du site AnaLogi 
        DocumentRoot /opt/AnaLogi     
        <Directory /> 
                Options FollowSymLinks 
                AllowOverride None 
        </Directory> 
        <Directory /opt/AnaLogi> 
                Options Indexes FollowSymLinks MultiViews 
                AllowOverride None 
                Order allow,deny 
                allow from all 
        </Directory> 
        DirectoryIndex  index.php 
        ErrorLog /var/log/apache2/ANALOGI_error.log 
        # Possible values include: debug, info, notice, warn, error, crit, 
        # alert, emerg. 
        LogLevel warn 
        LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" personnel 
        CustomLog /var/log/apache2/ANALOGI_access.log personnel

Créer ensuite le lien adéquat de "sites-enabled" vers "sites-available" et relancer Apache.

La page d'accueil présente dès le lancement un récapitulatif des résultats : 
Page d'accueil ANALOGI 
En bas les principaux "problèmes" rencontrés, ces liens sont cliquables et mènet à une page détail. 
La recherche est donc très rapide. 
La zone "Filters" permet de :

  • Limiter la période,
  • Effectuer une statistique par source (machine)
  • Par chemin (répertoire d'origine des informations)
  • Par niveau.
  • Par règle.

La zone "Top Loc" donne la principale origine des messages. la zone "Rare" signale les événements un peu originaux qui peuvent être les plus intéressants. 
Les liens cliquables mènent sur une page détail qui présente une courbe en fonction du temps et le détail des alertes en partie basse. 
Page détail

L'exemple affiché ici concerne des tentatives de relais de mail avec toujours le même emmerdeur qui veut envoyer un mail à "therichsheickc@yahoo.com" , la plupart des serveurs ne sont pas en relais ouvert ce genre de "truc" est donc un peu inutile.

La période d'affichage est réglée par défaut à 72 heures ce qui est beaucoup pour moi, mais il est très facile de modifier cette valeur : 
Fichier = config.php 
Ligne à modifier : "$glb_hours=72;" 
Je l'ai mis à 12 heures ce qui me semble suffisant.

En bref je suis enchanté de cet interface qui simplifie grandement la vérification des anomalies interceptées par OSSEC, à utiliser et conseiller sans modération.

Analogi fonctionne encore en version 2.8.x de OSSEC.

OSSEC passage V2.9

OSSEC passage V2.9 jpp

J'ai voulu passer à la dernière version, la 2.9 mais cela m'a posé quelques problèmes car le schéma de la base  de données est différent. Il faut donc "laisser tomber" l'ancienne base et en créer une nouvelle et perdre l'historique à moins de se lancer dans une reprise de données (qui, par ailleurs, ne semble pas trop complexe). 
J'ai installé ensuite le serveur à partir du package Debian fourni par "Atomic corp" en version 2.9.3. 
Mon interface favori (ANALOGI) ne fonctionne plus (schéma de base différent) mais j'ai trouve une version améliorée d'ANALOGI (adaptée à la 2.8) téléchargeable : https://github.com/NunesGodinho/OSSEC-WUI et je suis en train d'en tirer une version adaptée au nouveau schéma de base de données en y ajoutant quelques fonctionnalités. 
Je vais la tester sur la future version 3.0 de OSSEC ( voir les résultats ici)  avant de la diffuser, car le schéma de base de données est identique à celui présent en version 2.9.3.

OSSEC : V3.0 stable

OSSEC : V3.0 stable jpp

Test complet de Ossec V3.0.0 stable. 
Cela va me permettre de tester la nouvelle version de l'interface OSSEC_GUI en version adaptée pour la 3.0.  
Cette version est issue de Analogi et de OSSEC_WUI,cCette nouvelle version reste compatible avec la 2.9.3 au niveau de la base de données.

Note juin 2018 : la version adaptée de l'interface est disponible, voir ici.

OSSEC V3.0.0 stable Installation serveur

OSSEC V3.0.0 stable Installation serveur jpp

J'ai commencé par télécharger l'archive par : 
 wget https://github.com/ossec/ossec-hids/archive/master.zip

Pour changer de Mysql (bloqué en 5.5.999 dans Stretch) j'installe MariaDB 10.1 qui, lui, estprésent dans Stretch. 
Pré-requis : 
un compilateur ... 
make 
Il m'a fallu faire un "ln -s " pour la commande "cc", "ar" et "nm" étaient OK. 
libmysql++-dev 
apt-get install libmysql++-dev 
qui installe aussi default-libmysqlclient-dev libmariadbclient-dev libmariadbclient-dev-compat libmysql++3v5 zlib1g-dev. 
Par précaution j'ai créé par avance un utilisateur "ossec"" avec son groupe.

Après dézippage de l'archive qui crée un répertoire "ossec-hids-master" on entre dans le vif du sujet et dans ce répertoire puis :

cd src 
make clean 
make TARGET=server DATABASE=mysql 2>&1 | tee LOG.MAKE

Tout se déroule bien et un examen du log ne montre que quelques warnings correspondant à des variables non initialisées.

La trace complète de la compilation est disponible ICI. 
Tout ceci étant OK on va pouvoir se lancer dans la procédure d'installation .

cd ossec-hids-master 
sudo ./install.sh

... 
  ** Para instalar en Español , eliga [es]. 
  ** Pour une installation en français, choisissez [fr] 
  ** A Magyar nyelvű telepítéshez válassza [hu]. 
.... 
  (en/br/cn/de/el/es/fr/hu/it/jp/nl/pl/ru/sr/tr) [en]: --> fr

Je vous épargne ici la trace complète que vous pouvez consulter ici. 
Le script "ossec" a été ajouté dans "/etc/init.d" mais aucun process ne tourne, un regard rapide dans le répertoire "/var/ossec" montre la structure de l'installation :

ls -1 /var/ossec 
active-response 
agentless 
bin 
etc 
logs 
lua 
queue 
rules 
stats 
tmp 
var

Ceci ressemble furieusement à d'autres installations de OSSEC.

Il nous reste maintenant à nous occuper de la base de données. 
Un magnifique fichier "./src/os_dbd/mysql.schema" attire l'oeil, et un examen superficiel montre que la structure de la base est identique à celle de la version 2.9.3. Mais il faut d'abord créer utilisateur et base de données, on lance donc mysql :

mysql --user=root -p 
create database ossec_base; 
create user 'ossec'@'localhost' identified by 'User_Ossec_1234'; 
create user 'ossec'@'ip_du_serveur_web' identified by 'User_Ossec_1234'; 
use ossec_base; 
source ./src/os_dbd/mysql.schema 
.... 
show tables; 
+----------------------------+ 
| Tables_in_ossec_base       | 
+----------------------------+ 
| agent                      | 
| alert                      | 
| category                   | 
| location                   | 
| server                     | 
| signature                  | 
| signature_category_mapping | 
+----------------------------+ 
7 rows in set (0.00 sec) 
-- Autoriser notre user (localhost) sur cette base. 
grant all on ossec_base.* to 'ossec'@'localhost'; 
grant select,insert,update,delete on ossec_base.* to 'ossec'@'ip_du_serveur_web'; 
-- On réduira les droits plus tard

Je vous conseille aussi de créer un "trigger" sur la table "alert" afin de s'assurer que toute signature est bien définie dans la table signature afin que tout fonctionne normalement. Pour cette action voir ici.

PS : au passage créer un utilisateur spécifique comme DBA, il n'y en a pas par défaut et 'root' ne convient pas pour MariaDB (10.1). Par contre cela est OK en 10.3.

Si vous voulez initialiser les tables (signature, category et signature_category_mapping) avec les valeurs que j'utilise, voir la page ici. 
Il nous faut maintenant activer le support BDD :

passer en "root" 
cd /var/ossec/bin 
./ossec-control enable database

La base est initialisée et il ne reste plus qu'à indiquer les éléments de connexion dans le fichier /var/ossec/etc/ossec.conf :

<database_output> 
    <hostname>127.0.0.1</hostname> 
    <port>3306</port> 
    <username>le_user</username> 
    <password>le_mot_de_passe</password> 
    <database>la_base</database> 
    <type>mysql</type> 
  </database_output>

Au passage il est bon de supprimer (ou commenter) les fichiers de règles qui ne vous concernent pas, cela allègera la config. Attention il peut y avoir des problèmes au redémarrage car certains fichiers présentent des éléments liés à d'autres fichiers ... mais il y a un message d'erreur à peu près explicatif dans les logs.

On lance pour voir :

/etc/init.d/ossec start 
Starting OSSEC HIDS v3.0.0 (by Trend Micro Inc.)... 
Started ossec-dbd... 
Started ossec-execd... 
Started ossec-analysisd... 
Started ossec-logcollector... 
Started ossec-remoted... 
Started ossec-syscheckd... 
Started ossec-monitord... 
Completed.

Tout s'est bien lancé ! Et on a même déjà un fichier "log" dans /var/ossec/logs", un petit regard dans ce fichier ne montre aucune anomalie, c'est le pied ! Et, en plus au bout de quelques secondes la table "alert" enregistre ses premiers rangs.

OSSEC V3.0.0 stable compilation agent

OSSEC V3.0.0 stable compilation agent jpp

Installation dans une machine KVM munie d'une debian Stretch "de base". 
Installation d'un environnement de compilation : gcc ... make. 
La aussi j'ai du effectuer un ln -s 
cd /usr/bin 
sudo ln -s gcc-6 cc 
Curieusement ar,nm et ranlib étaient OK. 
  
Aucun autre pré-requis pour l'installation de l'agent.

Lancer la compilation :

cd le_répertoire de compil/src 
make TARGET=agent 2>&1 | tee LOG.MAKE 
    CC external/cJSON/cJSON.o 
    LINK libcJSON.a 
    RANLIB libcJSON.a 
...... 
make[1]: Leaving directory '/usr/src/PGM/BUILD/ossec-hids-master/src' 
Done building agent

La trace ne montre aucune erreur ou même warning, on va donc pouvoir lancer le script "install.sh" (toujours dans le répertoire de compil) ... et voir la trace d'installation. 
Tout s'est bien passé, on passe en "root" pour aller faire les ajustements de paramétrage nécessaires du fichier ossec.conf : 
- enlever les fichiers inutiles (avec prudence) 
- paramétrer les répertoires à surveiller 
- ... 
Le fichier agent.conf a disparu ce qui est plutôt un bien. 
Il faut maintenant extraire une clef du serveur :

cd /var/ossec/bin 
./manage_agents 
**************************************** 
* OSSEC HIDS v2.9.0 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: -->A 
- Adding a new agent (use '\q' to return to the main menu). 
  Please provide the following: 
   * A name for the new agent: -->xxxxxxx 
   * The IP Address of the new agent: XXX.XXX.XXX.XXX 
   * An ID for the new agent[001]: 
Agent information: 
   ID:001 
   Name:kvmtest 
   IP Address:192.168.100.100

Confirm adding it?(y/n): -->y 
Agent added. 
**************************************** 
* OSSEC HIDS v2.9.0 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: -->E 
Available agents: 
   ID: 001, Name: kvmtest, IP: 192.168.100.100 
Provide the ID of the agent to extract the key (or '\q' to quit): 001 
Agent key information for '001' is: 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxU=

** Press ENTER to return to the main menu.

Copier cette valeur de "clef" pour recopie sur le client. 
Sur la machine cliente :

cd /var/ossec/bin 
./manage_agents 
**************************************** 
* OSSEC HIDS v2.9.0 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (I)mport key from the server (I). 
   (Q)uit. 
Choose your action: I or Q: I

* Provide the Key generated by the server. 
* The best approach is to cut and paste it. 
*** OBS: Do not include spaces or new lines.

Paste it here (or '\q' to quit): xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxU= 
Agent information: 
   ID:001 
   Name:kvmtest 
   IP Address:192.168.100.100 
Confirm adding it?(y/n): y 
Added. 
** Press ENTER to return to the main menu.

Puis lancer notre agent et aller voir ce qui se passe dans les logs, pour moi tout est OK. Ne pas oublier de mettre le lancement en mode automatique : 
update-rc.d ossec enable 
systemctl start ossec

Et rien n'apparait dans la base de données du serveur, un oeil sur les logs qui montre des messages : 
...ossec-syscheckd: WARN: Process locked. Waiting for permission... 
...ossec-logcollector: WARN: Process locked. Waiting for permission... 
Il suffit d'enlever le fichier  /var/ossec/queue/ossec/.wait et tout rentre dans l'ordre.

Au bout de quelques minutes des messages apparaissent sur le serveur ce qui est plutôt bon signe. 
En bref : tout c'est (presque) bien passé. 
Petit contrôle sur le serveur :

mysql .... 
select lo.name,al.rule_id 
from alert al, location lo 
where al.location_id = lo.id 
order by 1;

Si cela "crache" quelque chose avec le nom du client dans la "location" c'est bon signe. 
 

OSSEC V3.0.0 installation agent

OSSEC V3.0.0 installation agent jpp

Installation paquet OSSEC agent sur une Debian Stretch. 
On trouve sur le site des paquets pour les principales distributions. 
Pré-requis : 
Installer les paquets "expect" et "tcl-expect": 
apt-get install tcl-expect expect 
Télécharger l'archive depuis https://updates.atomicorp.com/channels/ossec/debian/pool/main/o/ossec-hids-agen…... 
Prenez la dernière version : ossec-hids-agent_3.0.0.5609stretch_amd64.deb à ce jour et installez le paquet avec :  
dpkg -i ossec-hids-agent_3.0.0.5609stretch_amd64.deb 
L'installation ajoute le user "ossec" et le groupe du même nom, tout est installé dans le répertoire /var/ossec. 
Aller vérifier le fichier "ossec.conf" dans le répertoire "/var/ossec/etc" et bien vérifier que l'adresse "<server-ip>.....</server-ip>" est bien celle du serveur, sinon corriger la valeur par défaut de "127.0.0.1". 
Il faut ensuite autoriser l'agent et le serveur à interagir :

  • Sur le serveur :

Aller dans le répertoire /var/ossec/bin et lancer ./manage-agent

**************************************** 
* OSSEC HIDS v2.9.2 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q:   A 
- Adding a new agent (use '\q' to return to the main menu). 
  Please provide the following: 
   * A name for the new agent: le_nom_de_l_agent 
   * The IP Address of the new agent: 192.168.2.x 
   * An ID for the new agent[005]:  
Agent information: 
   ID:005 
   Name:le_nom_de_l_agent 
   IP Address:192.168.2.x

Confirm adding it?(y/n): y 
Agent added. 
**************************************** 
* OSSEC HIDS v2.9.2 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: E 
Available agents:  
   ID: 001, Name: ....................... 
   ID: 002, Name: ....................... 
   ID: 003, Name: ............................ 
   ID: 004, Name: ............................. 
   ID: 005, Name: le_nom_de_l_agent, IP: 192.168.2.x 
Provide the ID of the agent to extract the key (or '\q' to quit): 005 
Agent key information for '005' is: MDA1IHBjbmljMiAxOT belle clef incompréhensible TU5  
Copier cette clef

** Press ENTER to return to the main menu. 
**************************************** 
* OSSEC HIDS v2.9.2 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (A)dd an agent (A). 
   (E)xtract key for an agent (E). 
   (L)ist already added agents (L). 
   (R)emove an agent (R). 
   (Q)uit. 
Choose your action: A,E,L,R or Q: q

  • Sur le client : 
    Aller dans le répertoire /var/ossec/bin et lancer ./manage-agent

**************************************** 
* OSSEC HIDS v2.9.0 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (I)mport key from the server (I). 
   (Q)uit. 
Choose your action: I or Q: I 
* Provide the Key generated by the server. 
* The best approach is to cut and paste it. 
*** OBS: Do not include spaces or new lines.

Paste it here (or '\q' to quit): Coller la clef obtenue du serveur

Confirm adding it?(y/n): y 
Added. 
** Press ENTER to return to the main menu. 
**************************************** 
* OSSEC HIDS v2.9.0 Agent manager.     * 
* The following options are available: * 
**************************************** 
   (I)mport key from the server (I). 
   (Q)uit. 
Choose your action: I or Q: Q

** You must restart OSSEC for your changes to take effect.

manage_agents: Exiting.

Un petit coup de "systemctl restart ossec" et le tour est joué, on vérifie la connection dans le fichier "/var/ossec:logs/ossec.log".

Il faut maintenant configurer correctement les paramètres de notre nouvel agent. Ceci concerne surtout les fichiers de log à surveiller et quelques paramètres. 
Les fichiers à surveiller sont fonction de chaque distribution, ne laisser que les fichiers utiles, cela évite des messages d'erreur.

 et des informations inutiles ... 
Voir aussi le fichier /var/ossec/etc/shared/agent.conf 
Fichiers de style "xml" les commentaires se définissent entre "<!--" et "-->" comme pour du HTML. 
Attention, certains fichiers ou répertoires se trouvent "en double" entre ossec.conf et agent.conf ce qui générera des erreurs dans les logs. 
J'ai par exemple mis en commentaire "Directories to check" dont les répertoires sont déjà indiqués dans le fichier "ossec.conf". 
On peut même mettre en commentaires ce qui ne concerne pas notre système préféré, j'ai commenté tout ce qui concernait Windows inutile ici.  
Si la machine supervisée n'est pas un serveur il faudra probablement inhiber les contrôles <system_audit>...</system_audit> dans le fichiers agent.conf ou au moins n'activer que celui correspondant à votre distribution. 
Pour vérifier rapidement si Ossec est bien actif rien de tel que : 
ps -ef | grep ossec 
Qui doit répondes gentiment : 
root     16688     1  0 18:14 ?        00:00:00 /var/ossec/bin/ossec-execd 
ossec    16692     1  0 18:14 ?        00:00:00 /var/ossec/bin/ossec-agentd 
root     16696     1  0 18:14 ?        00:00:00 /var/ossec/bin/ossec-logcollector 
root     16700     1  0 18:14 ?        00:00:00 /var/ossec/bin/ossec-syscheckd 
Remarques : 
Au premier passage il vous sera probablement signalé pas mal d'erreurs de droits sur certains fichiers/répertoires, il est bon de les corriger pour éviter des messages ultérieurs inutiles. 
Pour tester je tente une mise à jour du cron et quelques secondes plus tard mon interface graphique OSSEC-GUI montre l'événement.

Image ecran OSSEC-WUI 3.0
Copie écran après mise à jour crontab

 

OSSEC GUI V3.0

OSSEC GUI V3.0 jpp

J'avais beaucoup apprécié l'interface Analogi qui permettait de suivre assez agréablement les événements enregistrés par OSSEC, j'avais d'ailleurs écrit un article sur ce logiciel. 
Lorsque j'ai migré mes systèmes en 2.9 cet interface agréable ne fonctionnait plus du fait de la différence de structure de la base de données. 
J'ai cherché un produit équivalent plus récent (Analogi n'est plus maintenu depuis longtemps) et j'avais trouvé une version dérivée baptisée OSSEC WUI que l'on peut trouver sur github.

Malheureusement cette version utilise le schéma de base de données antérieur. J'ai donc décidé de repartir de cette version en l'adaptant au nouveau schéma de la base. J'ai ensuite vu paraître une nouvelle version d'Ossec (version V3.0) et je me suis dépêché de la tester pour bien vérifier si le schéma de la base avait évolué. J'ai vite constaté que ce schéma était resté identique (à celui de la version 2.9.3) et je me suis penché un peu plus sur OSSEC-WUI pour l'améliorer encore et y ajouter quelques fonctions statistiques, la possibilité de détruire des rangs spécifiques et séparer la réorganisation de la base de données de l'application "Management". 
J'ai aussi pensé à une fonctionnalité nouvelle, fonctionner selon deux modes :

  • Mode "running" directement à partir de la base alimentée par OSSEC, les événements une fois expliqués et/ou résolus peuvent être supprimés ce qui permet de n'avoir que peu d'alertes "actives". Rassurez vous ils ne sont pas perdus mais reportés dans une deuxième base de données.
  • Mode "history" qui fonctionne à partir de la base de sauvegarde avec exactement les mêmes fonctionnalités.

Voir quelques images d'écrans.

Afin de "sécuriser" les données, surtout les données archivées, j'ai ajouté une fonction d'authentification avec trois niveaux de responsabilité :

  1. Niveau lecture seule
  2. Niveau "delete autorisé" sur la base "running"
  3. Niveau "Admin" qui a tous les droits sur les deux modes, y compris pour la mise à jour des utilisateurs.


Note 2018/06/09 cette version baptisée "OSSEC-GUI-3.0" est disponible sur github en release V3.0.

Le projet contient toutes les doc d'installation des différentes possibilités :

  • Installation "simple"
  • Installation avec ou sans mode "historique"
  • Mise en place possible d'une l'authentification


J'espère que les docs sont OK, sinon il est facile de signaler les problèmes dans Github.

OSSEC ne recoit plus

OSSEC ne recoit plus jpp

Petit ennui : Les agents n'envoient plus rien au serveur. 
Depuis environ le 11 avril les données des clients ne sont plus reçues par la machine serveur. 
L'analyse des logs montre un message, un peu cryptique, après chaque redémarrage : 
getaddrinfo: Name or service not known 
Sans autre explication et aidé par quelques congés j'ai presque un mois pour trouver une solution ! 
En fait il m'aurait probablement suffi de porter mon attention sur la ligne suivante des logs : 
ossec-remoted(1206): ERROR: Unable to Bind port '1514' 
Qui m'aurait probablement ouvert les yeux ou au moins mis sur la piste. 
Je ne sais pas ce qu'il s'est passé aux environ du 11/04 mais "getaddrinfo" s'est mis à ne plus donner de résultat ??? alors que le DNS fonctionne parfaitement bien. 
La solution : mettre dans le fichier "/etc/hosts" une ligne avec l'adresse IP de communication avec les clients et le nom du serveur : "192.168.2.2 xxxxx xxxxx.yyy.zzz". 
C'est d'ailleurs ce que je fais en général, mais j'avais du l'oublier ici. 
Depuis OSSEC reçoit de nouveau les données des clients, la commande suivante permet de vérifier lla "bonne" ouverture du port UDP/1514 : 
lsof -Pn | grep UDP | grep :1514 
ossec-rem  9692         ossecr    4u     IPv4     41151085      0t0        UDP *:1514 
ossec-rem  9692  9694   ossecr    4u     IPv4     41151085      0t0        UDP *:1514 
..... 
Comme quoi il vaut mieux bien lire les logs en cas de problème !!!