7

Click here to load reader

Art Centralisation Logs Syslog Ng

Embed Size (px)

Citation preview

Page 1: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

L'art de centraliser et d'exploiter les messages journaux (logs) avec

Syslog-ng & LogZilla

By Elie MABOIT Security Professional

Network+, Security+http://www.matael.inf o

Février 2012

C'est quoi un mes s a ge journal?Un message journal (log en anglais) est une information générée par un programme suite à un événement (erreur, warning, etc.) survenu. L'évènement peut être par exemple la suppression d'un répertoire.En fonction des types de programmes, les messages journaux sont stockés dans des fchiers spéciaux destinés à contenir ceux ci.

La structure d'un message journal est découpée en trois grandes parties:

• Header: contient des informations sur la priorité, la version du protocole syslog, l'ID du processus, etc.

• Structured-data: contient des meta informations telles que les adresses, le trafc, etc.

• MSG: contient le texte du message.Je n'entrerai pas plus dans les détails de la structure d'un message journal, car ce n'est pas l'objectif de cet article. Si vous souhaitez en savoir plus, référez vous au RFC 5424.

Pouquoi centrali ser les mes s a ge s journaux?J'ai rédigé cet article avec une vision orientée plus vers des problématiques de sécurité dans un système d'information. Les messages journaux sont créés et et stockés dans des fchiers appelés fchiers journaux, par des programmes. Ces messages sont gérés par une application de gestion des logs. Par défaut, les fchiers journaux sont stockés localement sur chacune des ressources. Cependant, en cas d'incident (attaque, panne, efets bizzares, etc.), il est important d'analyser ceux-ci afn de détecter les causes possibles de l'incident. Hors l'une des premières actions d'un bon pirate une fois

introduit dans le système, c'est d'efacer rapidement les traces afn de rendre son identifcation difcile, voire impossible.

Les messages journaux étant très importants non seulement pour la gestion proactive des incidents (pannes, problèmes, etc.), mais aussi pour l'audit sécurité (cas d'incident sécurité par exemple), il convient de mettre en place des mesures visant à les protéger. Une des mesures de protection passe par l'implémentation d'un système de centralisation des messages journaux vers un serveur. D'où cet article.

Présentation de S y slog-N GSyslog-NG (Syslog New Generation) est une application permettant de gérer des messages journaux générés par des programmes suite aux évènements survenus. Il s'agit d'une implémentation Open Source du protocole syslog (normalisé par l'IETF, RFC 5424). Il permet d'enregistrer des informations sur des évènements (systèmes, réseaux, sécurités, applications, etc.) dans des f chiers spécifques appelés des fchiers journaux. Syslog-NG permet également de centraliser des messages journaux au niveau d'un point unique du réseau (serveur de logs par exemple), ce qui allège et facilite les tâches de gestion des logs d'un ensemble de ressources systèmes, réseaux et sécurité.

Syslog-NG est une alternative évoluée de « syslog », qui est le programme de gestion des logs retrouvé par défaut sur la plupart des ressources (serveurs Unix/Linux par exemple).

Syslog-NG est développé aujourd'hui par la société Balabit IT Security Ltd,

Fonctionnalités de S y slog-N GPar rapport à « syslog », syslog-NG ofre en plus des fonctionnalités déjà ofertes par syslog:

• la possibilité d'envoi et de réception des messages via le protocole TCP (très bien pour la fabilité)

• le fltrage et la répartition des messages avec des expressions régulières (super pour la fexibilité)

• la possibilité de chifrer les échanges

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 1/7

Page 2: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

de messages entre les ressources via le protocole TLS (très important d'un point de vue sécurité)

• la compatibilité avec IPv6 (génial pour l'avenir)

• la compatible avec les bases SQL (Mysql, PostgreSQL, Oracle, etc.)

Architechture de S y slog-N GSyslog-NG peut fonctionner comme client (envoi des logs), comme serveur (réception des logs), comme relay (relayage des messages), ou à la fois comme client et serveur. Dans le cadre de la centralisation et de l'exploitation des messages journaux dans un contexte sécurité, son architechture peut être étendue avec l'intégration de certains modules ou composants. Vous pourriez par exemple avoir:

• une base de données pour le stockage des logs

• une interface Web pour l'exploitation facilité des logs

• une PKI (Public Key Infrastructure) pour la gestion des certifcats et clés

• un ou plusieurs serveur (s)• un ou plusieurs client (s)

In stallation de sy slog-N GL'installation de syslog-NG peut créer des confits avec certains fchiers utilisés par d'autres programmes de logs déjà présents sur la machine. C'est le cas du fchier "/etc/logrotate.d/syslog" de « rsyslog ». Si c'est le cas, déinstallez « rsyslog » avant d'installer « syslog-ng ».Dans cet article, je me suis basé sur une installation faite sur deux machines linux (architechture CPU 64bits) utilisant la distribution Scientifc Linux en version 6.1. En faisant un yum search syslog-ng, vous avez des paquets disponibles pour une installation via le gestionnaire de packages « yum ».

yum search syslog-ng output :syslog-ng-devel.x86_64 : Development files for syslog-ng eventlog.x86_64 : Syslog-ng v2 support library eventlog-devel.x86_64 : Syslog-ng v2 support library development files eventlog-static.x86_64 : Syslog-ng v2 support static library files : Next-generation syslog server

Pour le fonctionnement de syslog-NG, vous avez besoin juste d'installer les packages syslog-ng.x86_64 et eventlog.x86_64

Je vous recommande tout de même de mettre à jour vos systèmes avant l'installation de syslog-NG. Un yum update fera l'afaire.

L'installation se fait à l'aide de la commande suivante: [root@sixfeet ~]# yum install syslog-ng.x86_64

Cette commande installe également le package « eventlog.x86_64 » et les dépendences nécessaires.

Configuration étape par étape de Sy slog-N G

Syslog-NG utilise plusieurs types d'objets à savoir: source, destination, log, parser, rewrite, template, etc. Dans cet article, j'aborde jusque quelques uns de ses objets.Le fchier de confguration de syslog-NG se trouve par défaut dans le répertoire « /etc/syslog-ng/ » et se nomme « syslog-ng.conf ». Il se compose de cinq (5) sections, à savoir:

1. Options globales de confguration2. Sources3. Filtres4. Destinations5. Routes (application des sources, fltres

et destinations précédemment défnis).

Ainsi, la confguration de syslog-NG consiste à modifer les paramètres de chacune de ces sections. Elle peut se faire suivants les 5 étapes ci-après:

Etape1: Défnition des options globales de confgurationCette étape permet de confgurer les paramètres globaux qui s'appliqueront à tous les autres niveaux de confguration de syslog-NG.

Voici quelques exemples de paramètres globaux:

• use_dns(yes)• use_fqdn(yes)• keep_hostname(yes)• log_msg_size(12345)

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 2/7

Page 3: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

Etape2: Défnition des sources Cette étape permet de défnir des sources de provenance des messages. Les messages proviennent des ressources (serveurs, frewalls, routeurs, etc.). La défnition des sources se fait à l'aide du mot clé « source » et des drivers sources.Une source est identifée par un nom et se compose d'un ou de plusieurs driver(s). Quelques exemples de drivers sources:

• unix-stream(): messages arrivant d'une socket unix

• internal(): messages générés pas syslog-NG

• tcp(): messages arrivant sur un port d'une interface réseau

• program(): messages générés par un programme

• fle(): messages lus depuis un fchier

Pour avoir la liste complète des drivers sources, consultez le guide d'administration de syslog-ng. Le lien est donné dans les références de cet article.

Voici un exemple de défnition d'une source: source svr_log_src {

internal();unix-stream("/dev/log/");tcp(ip(0.0.0.0) port(5000) max-

connections(250));};l'adresse IP 0.0.0.0 permet au serveur d'écouter sur toutes les interfaces réseaux opérationnelles.

Etape3: Défnition des fltres Cette étape permet de défnir des fltres à appliquer sur des mesages, afn d'exploiter uniquement les logs dont on a besoin. Les fltres permettent d'éviter des messages polluant, c'est à dire non utiles à la supervision des ressources. Il existe plusieurs types de fltres. Voici quelques uns:

• facility: permet de fltrer sur la base des parties du système qui envoient des messages (kernel par exemple)

• level: permet de fltrer à partir des niveaux d'importance (emergency, alert, critical, etc.)

• program: permet de fltrer à partir des programmes

• host: permet de fltrer à partir de l'adresses IP, d'un drapeau, d'un port

d'une machine• match: permet de fltrer à partir des

motifs défnis• flter: permet d'appeller d'autres fltres

et d'évaluer leurs valeurs• netmask: permet de déterminer si

l'adresse IP source fait bien partie d'un sous réseau IP

Voici un exemple de défnition d'un fltre : filter svr_log_filter1 {

host("system" flags (ignore-case)) and

level(warning);};

Etape4: Défnition des destinations Cette étape permet de déterminer les destinations des messages. Dans le cadre de la centralisation des logs, les messages sont généralement destinés aux serveurs de centralisation. Ils peuvent être stockés dans des fchiers, des pipes, sur des sockets, etc.La défnition des destinations se fait à l'aide du mot clé « destination » et des drivers destinations.Une destination est identifée par un nom et se compose d'un ou de plusieurs driver(s).Quelques exemples de drivers destinations:

• fle(): les messages sont écrits dans un fchier spécifque

• pipe(): les messages sont écrits dans un pipe spécifé

• sql(): les messages sont envoyés dans une base de données SQL

• usertty(): les messages sont envoyés sur le terminal d'un utilisateur spécifé

Pour avoir la liste complète des drivers destinations, consultez le guide d'administration de syslog-ng. Le lien est donné dans les références de cet article. Voici un exemple de défnition d'une destination: destination svr_log_dst {

file("/var/log/messages " );template("$DATE <$FACILITY.

$PRIORITY> $HOST $MSGHDR $MSG\n")};

La déclaration « template » permet de défnir le format d'afchage des messages. Les paramètres d'un template utilisent des macros.

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 3/7

Page 4: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

Etape5: Création des routes Cette étape permet de connecter des sources aux destinations précédemment défnies.La création des routes se fait à l'aide du mot clé « log ».Voici un exemple de création d'une route connectant une source et une destination: log svr_sphinx_log {

source (svr_log_src);filter( svr_log_filter1);destination (svr_log_dst);

};

Configuration des autres postes pour l'envoi des log s vers le serveur de log s-> C a s avec « sy slogd »Sur chacun des postes depuis lequel vous souhaitez envoyé des logs vers le serveur de logs, suivez les étapes suivantes:

- Editez le fchier « /etc/sysconfg/syslog »[root@sixfeet ~]# vim /etc/sysconfig/syslog

- Ajoutez l'option « -r ». Ainsi, la ligne SYSLOGD_OPTIONS="-m 0 " devient:SYSLOGD_OPTIONS="-m 0 -r"

- Editez le fchier « /etc/syslog.conf »[root@sixfeet ~]# vim /etc/syslog.conf

- Ajoutez la ligne suivante:*.* @sixfeet.lix.polytechnique.fr

- Redémarrez le démon « syslogd »[root@sixfeet ~]# service syslodg restart

Notez ici que les messages seront envoyés en clair sur le réseau, ce qui n'est pas conseillé en matière de sécurité réseau.

Je vous recommande à cet efet d'installer « syslog-ng » sur les postes clients afn d'exploiter les fonctionnalités de chifrement des échanges via le protocole TLS.

-> C a s des stations Window sPour les postes Windows, vous avez la possibilité d'installer des agents syslog-NG

pour Windows. Une fois l'installation faite, vous devez confguré l'agent de manière à ce qu'il puisse envoyer des messages journaux vers le serveur de centralisation des messages. La confguration de syslog-NG sur des postes Windows ne fait pas partie des objectifs de cet article.

S écurisation des échange s de me s s a ge s entre les machines via TL SSyslog-NG permet de sécuriser les échanges de messages journaux entre les diférentes réssources réseaux. Il s'appuie sur le protocole TLS (Transport Layer Security) pour chifrer les communications et authentifer les deux parties impliquées.Cela permet de garantir la confdentialité et l'authenticité des messages journaux échangés. Le schéma ci après présente les étapes préliminaires entre le serveur et le client:

Source: The syslog-ng Administrator Guide

Ce qu'il faut remarquer dans ce schéma, c'est l'authentifcation mutuelle entre le serveur et le client (pas obligatoire).

Création du certificat et de la clé du serveur (sixfeet)Nous allons créer et utiliser un certifcat (format X.509) côté serveur pour le chifrement des échanges de logs et l'authentifcation du serveur. La distribution Scientifc Linux, tout comme d'autres distributions Linux comprennent généralement une PKI installée et prête à l'utilisation.Suivez les étapes suivantes pour créer le certifcat et les clés du serveur et ensuite confgurer « syslog-NG » pour prendre en compte le chifrement des communications et l'authentifcation du serveur.

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 4/7

Page 5: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

→ Sur le serveur (sixfeet)

Etape1: En tant que root, accédez au répertoire « certs »[root@sixfeet ~]# cd /etc/pki/tls/certs/

Etape2: Utilisez la commande « make » pour créer le fchier « .pem » du serveur[root@sixfeet certs]# make syslog-ng.pem

Cette étape est interactive. Ce qui veut dire que vous devrez répondre aux questions posées lors de celle-ci.

Etape3: Créez deux répertoires « cert.d » et « key.d » dans le répertoire « /opt/syslog-ng/etc »[root@sixfeet certs]# mkdir /opt/syslog-ng/etc/cert.d [root@sixfeet certs]# mkdir /opt/syslog-ng/etc/key.d

Etape4: Duppiquez le fchier « syslog-ng.pem » en « syslog-ng.cert » et « syslog-ng.key »[root@sixfeet certs]# cp syslog-ng.pem syslog-ng.cert[root@sixfeet certs]# cp syslog-ng.pem syslog-ng.key

Etape5: Editez le fchier « syslog-ng.cert » et supprimez le bloc comprenant la clé privée -----BEGIN PRIVATE KEY----- xxxxxxxxx -----END PRIVATE KEY-----[root@sixfeet certs]# vim syslog-ng.cert

Editez le fchier « syslog-ng.key » et supprimez le bloc comprenant le certifcat -----BEGIN CERTIFICATE----- xxxxxxxxx -----END CERTIFICATE-----[root@sixfeet certs]# vim syslog-ng.cert

Supprimez le fchier « syslog-ng.pem » créé à l'étape 2[root@sixfeet certs]# rm -f syslog-ng.pem

Déplacez les fchiers « syslog-ng.cert » et « syslog-ng.key » dans les répertoires créés à l'étapes 3[root@sixfeet certs]# mv syslog-ng.cert /opt/syslog-ng/etc/cert.d/[root@sixfeet certs]# mv syslog-ng.key /opt/syslog-ng/etc/key.d/

→ Sur le client (sphinx)

Etape6: Créez un répertoire « cert.d » dans le répertoire « /opt/syslog-ng/etc »[root@sphinx]# mkdir /opt/syslog-ng/etc/cert.d

Etape7: Copiez le certifcat du serveur et coller le dans le répertoire « cert.d »[root@sphinx]# cd /opt/syslog-ng/etc/cert.d [root@sphinx cert.d]#scp root@sixfeet: /opt/syslog-ng/etc/cert.d/syslog-ng.cert .

Etape8: Créez un hash du certifcat et un lien symbolique entre ce certifcat et le hash créé.[root@sphinx cert.d]# openssl x509 -noout -hash -in syslog-ng.certroot@sphinx cert.d]# ln -s syslog-ng.cert 9a2982c8.0

Modifcation du fchier de confguration de syslog-ng sur le serveur

Editez le fchier de confguration de syslog-ng (vim /etc/syslog-ng/syslog-ng.conf ) et ajoutez les lignes ci-après (en gras) dans la section « source » pour indiquer au serveur que le certifcat doit être utilisé pour le chifrement des messages journaux et l'authentifcation du serveur.source svr_log_src_tls {

tcp(ip(129.104.11.63) port(514) max-connections(250)); tls( key_file("/opt/syslog-ng/etc/key.d/syslog-ng.key")

cert_file("/opt/syslog-ng/etc/cert.d/syslog-ng.cert")

peer_verify(optional-untrusted)) );

N'oubliez pas de remplacer l'adresse IP ci-dessus par la vôtre.N'oubliez pas également de créer une connexion (log) dans le fchier de confguration de syslog-NG entre vos sources et cette nouvelle destination, puis de redémarrer le démon « syslog-ng ».

Modifcation du fchier de confguration de syslog-ng sur le client

Editez le fchier de confguration de syslog-ng (vim /etc/syslog-ng/syslog-ng.conf ) et ajoutez les lignes ci-après (en gras) dans la section « destination » pour indiquer au client que le certifcat doit être utilisé pour le chifrement des messages journaux et

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 5/7

Page 6: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

l'authentifcation du serveur.destination svr_log_dst_tls {

tcp(129.104.11.63 port(514) tls( ca_dir("/opt/syslog-ng/etc/cert.d/))) ; );

N'oubliez pas de remplacer l'adresse IP ci-dessus par la vôtre.N'oubliez pas également de créer une connexion (log) dans le fchier de confguration de syslog-NG entre vos sources et cette nouvelle destination, puis de redémarrer le démon « syslog-ng ».

Exploitation des log s avec LogZillaUne fois les messages centralisés, il faut les analyser. L'analyse des messages brutes peut être fastidieux. C'est là qu'intervient des outils d'analyse et d'exploitation des messages journaux. Parmi ces outils, vous avez LogWatch, GrayLog, LogZilla, etc. Dans cet article, j'ai choisi de présenter LogZilla, bien qu'il ne soit pas gratuit. Mon choix étant délibéré.

Présentation de LogZillaLogZilla (anciennement Php-syslog-ng) est une solution logicielle de monitoring des messages journaux générés par des programmes et centralisés sur un serveur. Il permet d'exploiter des messages stockés dans une base de données grace aux interfaces graphiques. Vous comprenez donc pourquoi il est important de centraliser les logs générés par des ressources. Il permet également de faire une supervision proactive des ressources, ce qui permet d'anticiper sur certains incidents (pannes, problèmes, etc.).

Quelques fonctionnalités de LogZilla• Détection en temps réel des

évènements (erreur, warning, etc.)• Identifcation rapide de la dégradation

du réseau et des serveurs• Alerte en temps réel par mail• Possibilité d'Intégration avec LDAP ou

Active Directory

In stallation de LogZilla sou s LinuxL'installation de LogZilla sur un poste Linux difère en fonction la distribution (RedHat, Ubuntu, SUSE, etc.) que vous utilisée. je vous recommande d'aller sur ce site:

http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.1 En fonction de votre distribution, vous s'y trouverez une procédure bien élaborée et complète détaillant les étapes d'installation de LogZilla. Sachez que l'installation fait appel à l'installation des nombreux autres packages indispensables pour le fonctionnement de LogZilla.

Configuration de Log ZillaNormalement, au cours de l'installation, la confguration (base de données, rotation des logs, etc.) est faite en même temps. Une fois de plus, reférez vous à la procédure d'installation. Par défaut, les fchiers de confguration de LogZilla se trouvent dans le répertoire « /var/www/logzilla ».

Utilisation de LogZillaUne fois de plus, je ne vais pas re-inventer la roue. Pour l'utilisation de l´interface Web de LogZilla, je vous recommande d'aller sur ce site: http://nms.gdd.net/index.php/LogZilla_3.1_User_Guide

Vous s'y trouverez une documentation bien élaborée qui vous permettra d'utiliser facilement LogZilla.

Sur ce, il ne me reste plus qu'à vous souhaiter bon courage et bonne utilisation de cet article.

N'hésitez surtout pas de m'envoyer votre feedback par mail à mon adresse perso ([email protected])

Références1. Ofcial syslog-ng websitehttp://www.balabit.com/network-security/syslog-ng/

2. The syslog-ng Administrator Guidehttp://www.balabit.com/support/documentation/

3. Syslog-ng mailing listhttps://lists.balabit.hu/mailman/listinfo/syslog-ng

4. BalaBit Documentation Bloghttp://robert.blogs.balabit.com

5. ofcial logzilla website http://www.logzilla.pro

6. LogZilla user Guide http://nms.gdd.net/index.php/LogZilla_3.1_User_Guide

7. Install Guide for LogZilla v3.1http://www.gdd.net/index.php/Install_Guide_for_LogZilla_v

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 6/7

Page 7: Art Centralisation Logs Syslog Ng

Centraliser et exploiter les logs avec Syslog-ng et LogZilla

3.1

Un article sur la sécurité informatique de Elie M A B O (IT Security Professional) 7/7