Controle d'intégrité système avec Integrit

integrit jpg

Dans la suite d'Osiris et Tripwire.

Installation d'Integrit :

Sous Debian, comme d'habitude pas de problème avec apt-get ou aptitude :

aptitude install integrit

Malheureusement Integrit n'est pas présent dans les dépôts Redhat et Centos, regardez du coté de Aide.

Notez qu'Integrit nécessite la présence d'un MTA, donc l'installation de Postfix (choix par défaut sous Ubuntu) ou d'Exim (sous Debian) sera obligatoire. Configuration

Il y a deux fichiers de configuration à modifier : Integrit.conf et Integrit.debian.conf, tous deux situés dans le répertoire /etc/integrit/. Le fichier integrit.debian.conf

Voilà à quoi il ressemble :

# Configuration of the example daily cron job /etc/cron.daily/integrit

# Set the configuration file(s) for integrit.  /etc/cron.daily/integrit
# will run ``integrit -uc -C <file>'' for each file specified in CONFIGS.
# An empty CONFIGS variable disables /etc/cron.daily/integrit.  Multiple
# file names are separated with spaces, e.g.:
# CONFIGS="/etc/integrit/usr.conf /etc/integrit/lib.conf"
CONFIGS="/etc/integrit/integrit.conf"

# Set the mail address reports are sent to
EMAIL_RCPT="votre@email.tld"

# Set the subject line for the report mails
EMAIL_SUBJ="[integrit] `hostname -f`: report on changes in the filesystems"

# If ALWAYS_EMAIL is set to ``true'', a report is mailed on every run.
# Normally a report is only generated when integrit(1) exits non-zero.
ALWAYS_EMAIL=false

Il ne contient que quatre éléments, le chemin du fichier de configuration (CONFIGS="/le/chemin/du/fichier"), l'adresse email où envoyer les rapports (EMAIL_RCPT="votre@email.tld"), le sujet à donner à ces emails (EMAIL_SUBJ="integrit `hostname -f`: report on changes in the filesystems") et enfin il faut choisir si integrit envoi un rapport systématiquement (avec ALWAYS_EMAIL=true) ou uniquement en cas de changements (avec ALWAYS_EMAIL=false). Le fichier /etc/integrit/integrit.conf

C'est le fichier de configuration principal qui contient les paramètres concernant les vérifications à réaliser. Par défaut il est totalement commenté et il faut donc dé-commenter les lignes qui nous intéressent ou en ajouter de nouvelles.

Les trois premiers éléments à indiquer sont la racine du système de fichier à vérifier et l'emplacement des deux fichiers de données qu'utilise integrit.

Pour la racine, dans la majorité des situations il faut indiquer / :

root=/

Pour les fichiers qui serviront de base de données à Integrit, ils sont par défaut situés dans /var/lib/integrit et se nomment known.cdb et current.cdb :

known=/var/lib/integrit/known.cdb
current=/var/lib/integrit/current.cdb

Le fichier known.cdb est essentiel ! Il contient l'empreinte du système considéré comme sain, et servira de base aux comparaisons futures. Il faut donc, immédiatement après avoir créé ce fichier, le copier en l'envoyant par email, FTP ou en utilisant scp vers un emplacement distant, pour assurer son intégrité et pouvoir vérifier son système si on le pense compromis. Si vous ne faites pas cette copie, autant ne pas utiliser Integrit...

Le gros du travail consiste à choisir les emplacements du disque qui seront vérifiés, et les vérifications à réaliser sur ces emplacements. Affiner le choix des fichiers/répertoires à vérifier

Il existe trois caractères qui, s'ils sont placés en début de ligne, modifient la signification de la vérification configurée avec cette ligne :

  • Un point d'exclamation ! en début de ligne indique qu'il faut ignorer ce fichier/répertoire, ainsi que les sous répertoires. Par exemple, pour ne pas vérifier le répertoire /etc :
! /etc

C'est tout, le répertoire /etc sera totalement ignoré par Integrit.

  • Un signe égal = en début de ligne indique qu'il faut vérifier ce fichier/répertoire, mais s'il s'agit d'un répertoire, il ne faut pas vérifier récursivement les sous répertoires qu'il contient. Par exemple :
= /etc

Va provoquer la vérification du répertoire /etc lui-même, mais ignorera tout son contenu.

   * Un symbole Dollar $ en début de ligne indique que les sous répertoires ne vont pas hériter de la configuration du répertoire parent. Par exemple la ligne suivante :
$ /etc MC

Permet de ne pas vérifier le mtime et le ctime (voir ci dessous pour la signification de "MC") du répertoire /etc, mais par contre, les fichiers et répertoires contenus dans /etc seront eux vérifiés avec mtime et ctime. Affiner le choix des vérifications à réaliser

Il est possible de spécifier les vérifications à réaliser sur un répertoire. Voici la liste des possibilités et la lettre correspondant :

  • s → checksum
  • i → inode
  • p → permissions
  • l → nombre de liens
  • u → uid
  • g → gid
  • z → taille du fichier (fait double emploi si checksum est activé)
  • a → atime (dernier accès)
  • m → mtime (dernière modification)
  • c → ctime (date de création)
  • r → RAZ du dernier accès (à utiliser avec prudence)

Les vérifications par défaut font très bien l'affaire, mais il peut être intéressant de ne pas en faire certaines. Pour cela il faut indiquer en fin de ligne la lettre correspondant à la vérification en majuscule. Par exemple :

/etc MC

permet de ne pas vérifier le mtime et le ctime du répertoire /etc.

C'est une fonctionnalité qui est précieuse pour les configurations avancées, mais qui est assez peu utile pour surveiller simplement un système de fichier.

Pour plus d'informations sur les possibilités d'Integrit, consultez la page du manuel sur integrit.sourceforge.net/texinfo/integrit.html Utilisation

Une fois la configuration bien en place, il reste à créer la base de données initiale. Pour cela utilisez la commande suivante :

integrit -C /etc/integrit/integrit.conf -u

Cette commande spécifie grâce à l'option -C d'utiliser le fichier de configuration /etc/integrit/integrit.conf. Comme c'est la première fois qu'Integrit est lancé, l'option -u va créer le fichier /var/lib/integrit/current.cdb. Lors des prochaines lancements avec cette option -u, ce fichier sera mis à jour.

Il faut immédiatement copier ce fichier current.cdb vers /var/lib/integrit/known.cdb pour disposer d'une empreinte connue et fiable :

mv /var/lib/integrit/current.cdb /var/lib/integrit/known.cdb

Encore une fois, n'oubliez pas de copier ensuite le fichier known.cdb vers un emplacement distant et fiable !

On lance ensuite Integrit de cette façon pour faire une vérification :

integrit -C /etc/integrit/integrit.conf -c

L'option "-c" a ne pas confondre avec "-C" (la majuscule est importante) permet de faire une vérification qui renverra la liste des différences relevées entre la situation actuelle et la situation lors de la création du fichier known.cdb :

integrit: ---- integrit, version 4.1 -----------------
integrit:                      output : human-readable
integrit:                   conf file : /etc/integrit/integrit.conf
integrit:                    known db : /var/lib/integrit/known.cdb
integrit:                  current db : /var/lib/integrit/current.cdb
integrit:                        root : /
integrit:                    do check : yes
integrit:                   do update : no
changed: /etc   m(20100226-162449:20100303-172758) c(20100226-162449:20100303-172758) 
changed: /etc/cron.daily/integrit   m(20070811-203809:20100301-095221) c(20100226-150605:20100303-095221) 
new:     /etc/isssue   p(644) t(100000) u(0) g(0) z(28) m(20090410-134952) 
new:     /etc/isssue   s(8903a70b9a4f99f7331f71fc880a5488acd0a6b3) 
changed: /home/user   m(20100224-163114:20100201-171729) c(20100227-163114:20100302-171729) 
changed: /home/user/backup.tar.gz.gpg   s(17286101378e693e1f9866be2b40a820a230239c:a369aec44c05f302d8f3115ee7316123b52d4f4d)
changed: /home/user/backup.tar.gz.gpg   i(1226858:1226475) m(20100226-163114:20100301-171729) c(20100226-163114:20100301-171729) 
changed: /home/user/known.cdb   s(275a1afb295198fade8c207c9ccab64c12d49ef9:7658c3ca69c231d0e611206e34008cf3cb42293d)
changed: /home/user/known.cdb   m(20100301-170947:20100301-171349) c(20100301-170947:20100301-171349) 

Une formidable source pour découvrir les modifications sur le système.

Conclusion :

Integrit est une solution simple et efficace de surveillance d'un système de fichier. Rapide à mettre en place et très peu gourmand en ressource, on peut sans hésitation le déployer sur toute machine un peu isolée qui demande une attention particulière. A condition de respecter quelques règles essentielles :

  • Être sûr de l'intégrité du système lors de la mise en place d'Integrit. Si l'empreinte originale est celle d'un fichier déjà compromis, ça n'est pas très utile.
  • Garder impérativement une copie de la base de données connue (fichier known.cdb) sur une machine distante et sûre. Idéalement sur un support non ré-inscriptible.
  • Avoir une configuration adéquate. Ce qui n'est pas une mince affaire, tant le nombre de fichiers à surveiller est important sur un serveur.
  • Être capable de faire le tri dans les retours d'alertes, sachant que ce genre de programme renvoie de nombreux faux positifs lors de mise à jour du système.

En respectant ces quelques règles et en suivant régulièrement les alertes, on renforce la sécurité du système. Pas contre les intrusions mais contre les compromissions qui en résultent, en compliquant la tâche d'un intrus.

SOURCE : http://pastoutafait.org

Vus : 773
Publié par System Linux : 211