[ Présentation  | Prelude ( PrésentationInstallation , Enregistement d'une sondeLe frontend prewikka ) ]

Dernière modification 3 novembre 2008

Détecter les attaques en temps réel

Sécurité



Présentation

Le but de cette page est de vous présenter des outils permettant de détecter en temps réel les attaques lorsque vous êtes connectés à internet, dans cette catégorie vous trouverez des outils de détection passifs se contentant de vous avertir d'attaques, libre à vous de mener les actions en conséquence, vous trouverez ensuite des outils de détection actifs, c'est à dire qu'ils vont eux mêmes automatiquement faire des manips systèmes pour bloquer les attaques le plus rapidement possibles.
Ce type d'outils de détection d'intrusion réseau sont des programmes qui permettent d'analyser le trafic réseau et de remonter les alarmes quand ça devient suspect. On distingue deux grandes familles
- les NIDS (Network Based Intrusion Detection System) qui vérifient la sécurité au niveau du réseau
- les HIDS (Host Based Intrusion Detection System) qui vérifient la sécurité au niveau des machines

Un NIDS est généralement un système dédidé qui vérifie les paquets circulant sur ou plusieurs liens réseau, pour cela il dispose souvent de plusieurs cartes réseau qui fonctionnent en mode promiscuité (promiscuous mode) ce qui permet de capture les paquets qui ne lui sont pas destinés.

Le HIDS est un daemon qui tourne sur une machine particulière qui analyse les journaux de logs et capture également les trames réseau qui entrent ou sortent de l'hôte afin de déceler les intrusions.

Snort présentée dans cette page est un NIDS, je présente dans cette page un outil hybride à la fois HIDS et NIDS et qui se nomme Prelude.

Par la suite j'aurais tendance à mélanger capteur, sonde ou senseur mais c'est la même chose !


[Retour haut de la page]

Prelude

Présentation

Prelude est un IDS qui se décompose en :
- des capteurs (sensors en anglais) ou bien encore sondes qui sont chargés de détecter les évènements et de remonter les alarmes à un manager
- le manager prelude est chargé de collecter les évènements rapportés par les différents capteurs. Il archive les informations et permet en outre de définir une action pour contrer une attaque (contre mesure)
- les agents de contre mesure sont chargés de contrer les attaques
- le frontend prewikka est une interface d'administration accessible via un navigateur qui lui permet d'avoir en un coup d'oeil les alertes et statistiques associés
La communication entre tous ses outils se fait grâce au format IDMEF (Intrusion Detection Message Exchange Format) basé sur XML (RFC4765).

Les outils concernés sont:
- la bibliothèque Prelude (libprelude) sur laquelle se base tous les autres outils, elle gère notamment tout le dialogue entre les composants (capteurs et manager), le dialogue comprend la connexion réseau jusqu'à l'authentification.
- la bibliothèque PreludeDB fournit des outils de base pour tous les composants pour pouvoir accéder facilement à la base de données sans se soucier de son type (MySQL, SQLlite, et j'en passe)
- le capteur/sonde Prelude-LML permet la collecte et l'analyse des informations issues de tous types d’applications émettant des événements sous forme de logs (journaux système, messages syslog, etc.) afin de détecter des activités suspectes et de les transformer en alerte vers le Manager. C'est une sonde qui est locale à une machine.
- le manager Prelude est le serveur chargé de recevoir les messages de l'ensemble des sondes. Il enregistre les évènements et les transforme en alerte.
- prewikka est l'interface web qui fournit une console d'analyse graphique
- Prelude-Correlator est un outil puissant basé sur un langage de programmation qui permet grâce à de multiples informations de diverses sondes et sources d'être corrélées à partir de certaines règles à écrire pour pouvoir générer telle ou telle action.

vous découvrirez sur le site de prelude qu'il existe un certain nombre de sondes externes qui ne sont pas présentées dans cette page dont des sondes qui tournent sous windows. On retient que snort en fait partie.

A noter qu'il peut y avoir plusieurs manager, dans ce cas il y a souvent un manager principal et des manageurs secondaires qui alimentent le manager principal comme le fait un capteur/sonde. On parle alors de relais (relaying dans la litterature anglo saxonne). Ce type d'architecture est utilisé dans le cas d'un réseau étendu avec plusieurs sous réseau distants (type réseau d'entreprise).

Pour mémoire Prelude sait analyser les logs issus de diverses origines dont:

Firewall, Routers & VPNBIG-IP, Check Point, CISCO ASA, CISCO IOS, CISCO Router, CISCO VPN, D-Link, Ipchains, IpFw, Juniper Networks NetScreen, Linksys WAP11, ModSecurity v2, Netfilter, SonicGuard SonicWall
SwitchsCISCO CSS
IDSCISCO IPS, Portsentry, Shadow, Tripwire
MonitoringAPC-EMU, ArpWatch, Dell OpenManage, Nagios
AntiVirus/AntiSpamClamAV, P3Scan, SpamAssassin
DatabaseMicrosoft SQL Server, Oracle
SMTP/POP ServerExim, Postfix, Qpopper, Sendmail, Vpopmail
FTP ServerProFTPD, WU-FTPD
Web ServerApache
Vulnerability ScannerNessus
HoneypotsHoneyd, Honeytrap, Kojoney
AuthenticationOpenSSH, Su
ApplicationsAsterisk, Cacti, Libsafe, Shadow Utils, Squid, Sudo
OS (security tools)GrSecurity, PaX, SELinux
MiscellaneousUnix specific logs, Webmin, Windows Server, Arbor, Linux bonding, Microsoft Cluster Service, NetApp ONTAP, NTSyslog, OpenHostAPD, Rishi, Suhosin


[Retour haut de la page]

Installation

Il faudra préalablement avoir installé une base de données, pour ma part j'utilise MySQL tel que décrit dans cette page.
La page principale de Prelude est http://www.prelude-ids.org/ on récupérera un certain nombre de tarball qu'on installera dans l'ordre suivant:

installation de libprelude

tout d'abord libprelude, on décompresse l'archive en tapant

tar xvfz libprelude-0.9.21.2.tar.gz

Cela donne le libprelude-0.9.21.2 il faudra préalablement installer le package suivant

urpmi libgnutls-devel

on tape ensuite

./configure

cela donne (à la fin)

*** Dumping configuration ***
    - Generate documentation   : no
    - Libtool dynamic loader   : System
    - LUA binding              : no
    - Perl binding             : yes
    - Python binding           : yes
    - Ruby binding             : no
    - Easy bindings            : no

on tape ensuite make puis en tant que root

make install


[Retour haut de la page]

Installation de libpreludedb

on passe maintenant à libpreludedb, on décompresse l'archive en tapant

tar xvfz libpreludedb-0.9.15.1.tar.gz

cela donne le répertoire libpreludedb-0.9.15.1 dans lequel on tape

./configure

voilà le résultat de la commande

*** Dumping configuration ***
    - Generate documentation      : no
    - Enable MySQL plugin         : yes
    - Enable PostgreSQL plugin    : no
    - Enable SQLite3 plugin       : no
    - Perl binding                : yes
    - Python binding              : yes

on tape maintenant make puis en tant que root

make install

on rajoute dans le fichier /etc/ld.so.conf les lignes suivantes

/usr/local/lib/libpreludedb/plugins/formats
/usr/local/lib/libpreludedb/plugins/sql

puis on tape ldconfig

on crée maintenant la base de données correspondante

mysql -u root -p                     
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.67 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>CREATE database prelude;
Query OK, 1 row affected (0,02 sec)

on donne les droits d'accès à la base à un utilisateur particulier

mysql>GRANT ALL PRIVILEGES ON prelude.* TO olivier@'localhost' IDENTIFIED BY 'mot-de-passe';
Query OK, 0 rows affected (0,00 sec)

mysql>quit

création des tables de la base

mysql -u olivier prelude -p < /usr/local/share/libpreludedb/classic/mysql.sql


[Retour haut de la page]

Installation de prelude-lml

on passe à prelude-lml on décompresse l'archive en tapant

tar xvfz prelude-lml-0.9.14.tar.gz

Cela donne le répertoire prelude-lml-0.9.14 dans lequel on tape

./configure

voilà le résultat de la commande

*** Dumping configuration ***
    - Enable unsupported rulesets:        : yes

on tape ensuite make puis en tant que root

make install

on édite le fichier /etc/ld.so.conf on rajoute la ligne suivante

/usr/local/lib/prelude-lml

puis en tant que root on tape ldconfig

Le fichier de configuration est /usr/local/etc/prelude-lml/prelude-lml.conf voilà un exemple pour prendre en compte syslog

[format=syslog]
time-format = "%b %d %H:%M:%S"
prefix-regex = "^(?P<timestamp>.{15}) (?P<hostname>\S+) (?:(?P<process>\S+?)(?:\[(?P<pid>[0-9]+)\])?: )?"
file = /var/log/messages

pour apache

[format=apache]
time-format = "%d/%b/%Y:%H:%M:%S"
prefix-regex = "(?P<hostname>\S+) \S+ \S+ \[(?P<timestamp>.{20}) [+-].{4}\] "
file = /usr/local/apache2/logs/access_log
file = /usr/local/apache2/logs/online-access_log

[format=apache-error]
time-format = "%a %b %d %H:%M:%S %Y"
prefix-regex = "^\[(?P<timestamp>.{24})\] \S+ (\[client (?P<hostname>\S+)\] )?"
file = /usr/local/apache2/logs/error_log
file = /usr/local/apache2/logs/apache2/online-error_log


[Retour haut de la page]

Installation de prelude-manager

on passe à prelude-manager on décompresse l'archive en tapant

tar xvfz prelude-manager-0.9.14.2.tar.gz

cela donne le répertoire prelude-manager-0.9.14.2 dans lequel on tape

./configure

voilà le résultat de la commande

*** Dumping configuration ***
    - TCP wrapper support    : no
    - XML plugin support     : yes
    - Database plugin support: yes

on tape ensuite make puis en tant que root

make install

on rajoute les lignes suivantes dans le fichier /etc/ld.so.conf

/usr/local/lib/prelude-manager/decodes
/usr/local/lib/prelude-manager/filters
/usr/local/lib/prelude-manager/reports

on tape ensuite ldconfig

A présent on va modifier le fichier de configuration /usr/local/etc/prelude-manager/prelude-manager.conf voilà les modifs que j'ai faites

tout d'abord la liste des interfaces à écouter

listen = 127.0.0.1
listen = 192.168.2.10

puis des infos sur la base de données

[db]

# The type of database: mysql, pgsql or sqlite3.
type = mysql

# Host the database is listening on.
host = localhost

# Port the database is listening on.
port = 3306

# Name of the database.
name = prelude

# Username to be used to connect the database.
user = olivier

# Password used to connect the database.
pass = mot-de-passe


[Retour haut de la page]

Installation de prewikka

on passe à prewikka, on décompresse l'archive en tapant

tar xvfz prewikka-0.9.14.tar.gz

cela donne le répertoire prewikka-0.9.14 dans lequel on tape en tant que root

urpmi python-cheetah
python setup.py install

on crée maintenant la base de données de prewikka en tapant

mysql -u root -p mysql
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.0.67 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE database prewikka;
Query OK, 1 row affected (0,01 sec)

on donne ensuite les droits sur la base sur un utilisateur qui va bien

mysql> GRANT ALL PRIVILEGES ON prewikka.* TO olivier@'localhost' IDENTIFIED BY 'mot-de-passe';
Query OK, 0 rows affected (0,00 sec)

on crée les tables de la base prewikka

mysql -u olivier prewikka -p < /usr/share/prewikka/database/mysql.sql

maintenant on va créer un hôte virtuel avec apache, on modifie le fichier httpd.conf pour y rajouter

<VirtualHost 192.168.2.10>
  ServerName ids.kervao.fr
  Alias /prewikka/ /usr/share/prewikka/htdocs/
  ScriptAlias / /usr/share/prewikka/cgi-bin/prewikka.cgi
</VirtualHost>

<Directory "/usr/share/prewikka">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

je vous laisse bien entendu adapter à votre adresse IP et au nom du serveur. On modifie maintenant le fichier de configuration de prewikka /etc/prewikka/prewikka.conf voilà les lignes que j'ai modifiées

# Default locale to use (default is English):
default_locale: fr

type: mysql
host: localhost
user: olivier
pass: mot-de-passe
name: prelude

[database]
type: mysql
host: localhost
user: olivier
pass: mot-de-passe
name: prewikka


[Retour haut de la page]

Installation de prelude-correlator

On passe à prelude-correlator, on décompresse l'archive en tapant

tar xfvz prelude-correlator-0.9.0-beta3.tar.gz

Cela donne le répertoire prelude-correlator-0.9.0-beta3, préalablement j'ai du installer le package suivant

urpmi lua-devel

on revient dans le répertoire où l'on tape

./configure

puis make j'ai droit à l'erreur suivante

prelude-correlator.c:48: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘got_signal’

pour la corriger il suffit d'éditer le fichier  ./src/prelude-correlator.c et de rajouter au niveau des includes

#include <signal.h>

on retape make et enfin en tant que root

make install

on rajoute maintenant la ligne suivante

/usr/local/lib/prelude-correlator

dans le fichier /etc/ld.so.conf et on tape ldconfig


[Retour haut de la page]

Engistrement d'une sonde

Présentation

Pour pouvoir utiliser une sonde il faut d'abord l'enregistrer. auprès du manager Prelude. Pour cela il faut donner un identifiant unique à la sonde puis l'enregistrer avec les permissions qui vont bien. Dans la litterature anglo saxonne l'identifiant est souvent connu sous le terme de "profile".

Un profil est donc l'identifiant pour une sonde, quand celle-ci est lancée elle va chercher auprès du manager Prelude un fichier profil fixant sa configuration.

Pour enregistrer une sonde et donc créer un profil il faudra taper la commande suivante

prelude-admin register (nom du profil) (permissions) (adresse du manager) --uid (uid) --gid (gid)

avec

(nom du profil) le nom de votre sonde

(permissions) il existe plusieurs types de permission, idmef et admin qui peuvent avoir des droits en lecture (read r) ou écriture (w). Généralement une sonde a besoin d'un accès en écriture à la base (idmef:w) et en accès en lecture aux fichiers profils (admin:r)

(uid gid) on doit indiquer l'uid et le gid qui permettent d'utiliser la sonde et d'accéder aux informations sur le profil

(adresse du manager) c'est l'adresse IP du manager Prelude, si c'est une installation locale on peut mettre localhost.

A noter que la première fois qu'une sonde est enregistrée prelude-admin crée une clé privée.

La première chose à faire est de créer un profil pour le manager Prelude lui même en tapant

prelude-admin add "prelude-manager" --uid 0 --gid 0
Generating 1024 bits RSA private key... This might take a very long time.
[Increasing system activity will speed-up the process].
Generation in progress... X..+++++O.+++++O

Created profile 'prelude-manager' with analyzerID '3897808600812191'.

C'est fait et plus à faire. On peut lancer maintenant le manager en tapant

prelude-manager

voilà le résultat

02 Nov 16:55:41 (process:12957) INFO: Subscribing Normalize to active decoding plugins.
02 Nov 16:55:41 (process:12957) INFO: server started (listening on 127.0.0.1 port 4690).
02 Nov 16:55:41 (process:12957) INFO: server started (listening on 192.168.2.10 port 4690).
02 Nov 16:55:41 (process:12957) INFO: Generating 1024 bits Diffie-Hellman key for TLS...
02 Nov 17:25:49 (process:15259) INFO: Subscribing db[default] to active reporting plugins.


[Retour haut de la page]

Engistrement de la sonde prelude-lml

Pour enregistrer la sonde prelude-lml on tapera

prelude-admin register prelude-lml "idmef:w admin:r" localhost

voilà le résultat

* WARNING: no --uid or --gid command line options were provided.
*
* The profile will be created under the current UID (0) and GID (0). The
* created profile should be available for writing to the program that will
* be using it.
*
* Your sensor WILL NOT START without sufficient permission to load the profile.
* [Please press enter if this is what you intend to do]

Generating 1024 bits RSA private key... This might take a very long time.
[Increasing system activity will speed-up the process].
Generation in progress... .+++++O.+++++O


You now need to start "prelude-admin" registration-server on localhost:
example: "prelude-admin registration-server prelude-manager"

Enter the one-shot password provided on localhost:

Quelques commentaires, je n'ai pas mis d'uid et de gid par défaut il a mis ceux de root. Par ailleurs j'ai indiqué que le manager tournait localement (localhost), vous pouvez évidemment indiquer une adresse distante. Comme il nous l'indique dans le commentaire je tape maintenant sur la machine où tourne le manager (qui est la même machine me concernant)

prelude-admin registration-server prelude-manager

voilà le résultat

The "svgdj6t6" password will be requested by "prelude-admin register"
in order to connect. Please remove the quotes before using it.

Generating 1024 bits Diffie-Hellman key for anonymous authentication...
Waiting for peers install request on :::5553...
Waiting for peers install request on 0.0.0.0:5553...

je reviens sur la machine prelude-lml et je tape le mot de passe qui est indiqué

Enter the one-shot password provided on localhost:
Confirm the one-shot password provided on localhost:

Connecting to registration server (localhost:5553)... Authentication succeeded.

sur la machine manager on voit s'afficher ensuite sur la console

Connection from ::ffff:127.0.0.1:38635...
Registration request for analyzerID="46154944204286" permission="idmef:w admin:r".
Approve registration? [y/n]: y

::ffff:127.0.0.1:38635 successfully registered.

voilà prelude-lml est enregistré, on peut le lancer en tapant simplemant

prelude-lml

voilà les traces dans la console

02 Nov 20:05:42 (process:17778) INFO: PCRE plugin loaded 443 rules.
02 Nov 20:05:42 (process:17778) INFO: Connecting to 127.0.0.1:4690 prelude Manager server.
02 Nov 20:05:42 (process:17778) INFO: TLS authentication succeed with Prelude Manager.
02 Nov 20:05:42 (process:24978) INFO: /usr/local/apache2/logs/online-error_log: No metadata available, starting from tail.
02 Nov 20:05:42 (process:24978) INFO: /usr/local/apache2/logs/error_log: No metadata available, starting from tail.
02 Nov 20:05:42 (process:24978) INFO: /usr/local/apache2/logs/online-access_log: No metadata available, starting from tail.
02 Nov 20:05:42 (process:24978) INFO: /usr/local/apache2/logs/access_log: No metadata available, starting from tail.
02 Nov 20:05:42 (process:17778) WARNING: /var/log/everything/current does not exist.
02 Nov 20:05:42 (process:17778) INFO: /var/log/messages: No metadata available, starting from tail.


[Retour haut de la page]

Engistrement de la sonde réseau snort

De la même manière que plus haut, sur le poste où tourne snort je tape

prelude-admin register snort "idmef:w admin:r" localhost

* WARNING: no --uid or --gid command line options were provided.
*
* The profile will be created under the current UID (0) and GID (0). The
* created profile should be available for writing to the program that will
* be using it.
*
* Your sensor WILL NOT START without sufficient permission to load the profile.
* [Please press enter if this is what you intend to do]

Generating 1024 bits RSA private key... This might take a very long time.
[Increasing system activity will speed-up the process].
Generation in progress... .+++++O+++++O


You now need to start "prelude-admin" registration-server on localhost:
example: "prelude-admin registration-server prelude-manager"

Enter the one-shot password provided on localhost:

sur la machine serveur

prelude-admin registration-server prelude-manager
The "z5l59zd6" password will be requested by "prelude-admin register"
in order to connect. Please remove the quotes before using it.

Generating 1024 bits Diffie-Hellman key for anonymous authentication...
Waiting for peers install request on :::5553...
Waiting for peers install request on 0.0.0.0:5553...

sur la machine où tourne snort je mets le mot de passe indiqué plus haut

Enter the one-shot password provided on localhost:
Confirm the one-shot password provided on localhost:

Connecting to registration server (localhost:5553)... Authentication succeeded.

et voilà ce qu'on retrouve sur le serveur

Connection from ::ffff:127.0.0.1:47647...
Registration request for analyzerID="495528782460288" permission="idmef:w admin:r".
Approve registration? [y/n]: y
::ffff:127.0.0.1:47647 successfully registered.

maintenant je lance snort en tapant

snort -c /etc/snort.conf -i eth1

vous pouvez indiquer l'interface qui vous plait. Préalablement il faudra éventuellement créer le répertoire /var/log/snort


[Retour haut de la page]


Le frontend prewikka

Comme indiqué plus haut l'adresse pour accéder au frontend est http://ids.kervao.fr le login est par défaut admin avec le mode de passe admin (qu'on pourra changer). Voilà quelques screenshots



sur ce screenshot on peut voir les deux sondes qui ont été enregistrées ainsi que le manager Prelude. Et voilà la page d'alerte



j'ai déclenché un scan avec nmap pour générer l'alerte, voilà quand on clique sur l'alerte en question



il y a des infos supplémentaires en descendant plus bas dans la fenêtre.

Pour aller plus loin le manuel d'administration de Prelude se trouve par ici
https://trac.prelude-ids.org/wiki/ManualPreludeAdmin
  

[Retour page d'accueil FUNIX]