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