Installation / Configuration de LIDS

user_icon admin | icon2 Securite | icon4 21/1/2007 16h31| Type doc: article| Type File: txt| icon3 6 Comments

Installation / Configuration de LIDS


1. Introduction à LIDS ( Linux Intrusion Detection System )

LIDS est un patch Noyau qui permet de blinder un système Linux et notamment :

  • de contrôler l'accès au système de fichiers

  • de limiter à un programme exécuter en root d'accéder aux 'Capabities' du système.

Il est ainsi possible de forcer l'accès à un répertoire en lecture seule pour tous les utilisateurs, root compris :) ou encore d'autoriser un programme (et lui seul) d'accéder à un répertoire ou fichier, ou bien ne pas permettre aux programme root d'utiliser la CAPABILITIE SETUID et bien d'autres choses encore :)

voir http://talby.csu.umist.ac.uk/~mc/_unix_security/unix_sec_kernel_lids.htm

2. Installation de Lids

2.1. Patch du noyau Linux

Tout dabord installons les sources du noyau Linux et patchons le.


cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
tar xvjf linux-2.6.18.tar.bz2

cd /tmp
wget http://www.lids.org/download/v2.6/2.6.14/lids-2.2.2-2.6.14.tar.gz

tar xvzf lids-2.2.2-2.6.14.tar.gz
cd /usr/src/linux-2.6.18
patch -p1 < /tmp/lids-2.2.2-2.6.14/lids-2.2.2-2.6.14.patch

Il faut maintenant que notre future noyau puisse prendre en charge le patch que nous venons d'appliquer.

Nota: Pour récupérer la configuration du noyau de la distribution : cp /boot/config-2.6.18 /usr/src/linux-2.6.18/.config


make menuconfig

Les modifications suivantes sont necessaires à travers les menus:

Cryptographic options  --->
<*>   SHA256 digest algorithm


Security options  --->
< >   Default Linux Capabilities 
        LIDS support  --->

<*> Linux Intrusion Detection System support (EXPERIMENTAL)
    ---   LIDS Options
    [*]   Attempt not to flood logs
    [*]   Allow switching the LFS and States
    [*]     Allow switch the Linux Free Session
    [ ]     Restrict mode switching to specified terminals

On lance maintenant la compilation du noyau et des ses modules:

make bzImage
make modules
make modules_install
make install

Et enfin le bootloader prend en charge le nouvau noyau. Pour cela éditer le fichier menu.lst de grub ou lilo.conf et y ajouter quelque chose comme:

Dans meu.lst

title LIDS Core (2.6.18-lids)
       root (hd0,0)
       kernel /boot/bzImage-2.6.18 ro root=/dev/sda1

ou lilo.conf

image=/boot/vmlinuz-2.6.18
        label="2.6.18-lids"
        root=/dev/hda1
        read-only

Et voilà LIDS sera pris en charge lors du prochain démarrage.

2.2. Installation des LidsTools

Lids est livré avec des utilitaires nous permettant de le configurer que nous allons immédiatement installer.

cd /tmp
wget http://www.lids.org/download/v2.6/lidstools/lidstools-2.2.7.tar.gz

tar xvzf lidstools-2.2.7.tar.gz && cd lidstools-2.2.7

./configure
make
make install

Ajoutons un mot de passe à LIDS:

/sbin/lidsconf -P

Si nous redémarrons maintenant LIDS serait immédiatement fonctionnel et nous aurrons surement du mal à terminer le processus de boot. En effet aucun paramétrage n'ayant encore été fait LIDS va tout de même mettre en fonction ses mécanismes de protection. Pour que LIDS démarre en mode 'Apprentissage' modifions le fichier /etc/lids/lids.ini

ACL_DISCOVERY=1

Une mise à jour des ACL s'impose.

/sbin/lidsconf -U
/sbin/lidsconf -U BOOT
/sbin/lidsconf -U POSTBOOT
/sbin/lidsconf -U SHUTDOWN
/sbin/lidsconf -C

Et enfin on redémarrage :)

Si l'on veut que LIDS démarre en même temps que le système ajouter les lignes suivantes au fichier /etc/rc.local

echo "Execution de LIDS ..."
/sbin/lidsadm -I

3. Configuration de lids

3.1. Un premier exemple

Nous débutons par un exemple simple qui consistera à cacher le répertoire /usr/local/test à tous le système excepter au script /usr/local/test.pl .

Commençons par purger les règles de LIDS. Pour effectuer cette action nous devons désactiver LIDS. ( lidsadm -S -- -LIDS )


lidsadm -S -- -LIDS

/sbin/lidsconf -Z
/sbin/lidsconf -Z BOOT
/sbin/lidsconf -Z POSTBOOT
/sbin/lidsconf -Z SHUTDOWN

Ensuite il nous faut mettre à jour les fichiers *.cap pour qu'auncune restriction ne soit mise en place. Pour cela toutes les CAPABILITY doivent être positionnées à '+'.

Pour lister les CAPABILITY :

lidsadm -V

Plutot que de modifier les CAPABILITY à la main, il est aussi possible de changer l'état de chacune par la commande suivante :

lidsadm -S -- [+|-]CAP_XXXX

lidsadm -S -- +CAP_SETUID
lidsadm -S -- -ACL_DISCOVERY
...

On met à jour les règles ... cela a pour effet de créer les fichiers *.acl pour chacun des états.

/sbin/lidsconf -U
/sbin/lidsconf -U BOOT
/sbin/lidsconf -U POSTBOOT
/sbin/lidsconf -U SHUTDOWN
/sbin/lidsconf -C

Et en effet il n'y a plus de règles actives.


[STATE: 0] /etc/lids/lids.conf
[STATE: 1] /etc/lids/lids.boot.conf
        ACL Discovery is OFF
        Compiling into /etc/lids/lids.boot.acl
        Total 0 ACLs

[STATE: 2] /etc/lids/lids.postboot.conf
        ACL Discovery is OFF
        Compiling into /etc/lids/lids.postboot.acl
        Total 0 ACLs

[STATE: 3] /etc/lids/lids.shutdown.conf
        ACL Discovery is OFF
        Compiling into /etc/lids/lids.shutdown.acl
        Total 0 ACLs

Si nous activons LIDS ( lidsadm -S -- +LIDS et lidsadm -S -- +LIDS_GLOBAL ) celui-ci se comportera comme un système normal sans aucune restriction.

Limitons maintenant l'accès à /usr/local/test

Les objets sur lesquels les règles s'appliquent doivent exister

mkdir /usr/local/test

Et le script perl:

#!/usr/bin/perl

use strict;


open(iF,">/usr/local/test/TEST") or die "Ecriture impossible : $!\n";
print F "TEST";
close F;


print "OK : Ecriture du fichier /usr/local/test/TEST\n";

/sbin/lidsconf -A  -o /usr/local/test -j DENY

'-A' ajouter la règle (-j) DENY pour (-o) l'objet concerné.

/sbin/lidsconf -A  -o /usr/local/test.pl -j READONLY
/sbin/lidsconf -A  -s /usr/local/test.pl  -o /usr/local/test -j WRITE

Nous déclarons le script test.pl et lui affectons le droit de lire /usr/local/test.

Enfin mise à jour des nouvelle règles:


/sbin/lidsconf -U
lidsadm -S -- +RELOAD_CONF

Et pour finir prise en compte des règles au niveau global:

lidsadm -S -- +LIDS_GLOBAL

Pour résumer tout celà voici les deux scripts d'activation et désactivation de LIDS.

razlids.sh

#!/bin/sh

echo "Desactivation de LIDS"
lidsadm -S -- -LIDS
lidsadm -S -- -LIDS_GLOBAL


echo "RAZ des regles"
/sbin/lidsconf -Z
/sbin/lidsconf -Z BOOT
/sbin/lidsconf -Z POSTBOOT
/sbin/lidsconf -Z SHUTDOWN

echo "Compilation des regles"
/sbin/lidsconf -U
/sbin/lidsconf -C

echo "Rechargement de la configuration"
lidsadm -S -- +RELOAD_CONF

lids_1.sh


#!/bin/sh

echo "Ajout de regles"
/sbin/lidsconf -A POSTBOOT -o /usr/local/test/ -j DENY
/sbin/lidsconf -A POSTBOOT  -o /usr/local/test.pl -j READONLY
/sbin/lidsconf -A POSTBOOT  -s /usr/local/test.pl  -o /usr/local/test/ -j WRITE

echo "Mise a jour des regles"

/sbin/lidsconf -U

echo "Compilation des regles"
/sbin/lidsconf -C

echo "Rechargement des regles"
lidsadm -S -- +RELOAD_CONF

echo "Activation de LIDS"
lidsadm -S -- +LIDS
lidsadm -S -- +LIDS_GLOBAL

Vérifons que nos règles sont correctement configuées:


# ./razlids.sh
...
# ./lids_1.sh
...


# ls /usr/local/test
ls: /usr/local/test: Aucun fichier ou répertoire de ce type


# /usr/local/test.pl
OK : Ecriture du fichier /usr/local/test/TEST

Et ça fonctionne :)

3.2. Limitons l'accès à /var/log

LIDS va maintenant nous aider à protéger nos logs d'une modification malveillante.

Rien de plus simple, copions nos regles ' lids_1.sh' en ' lids_2.sh' et modifions ce dernier pour qu'il devient:


#!/bin/sh

echo "Ajout de regles"
/sbin/lidsconf -A POSTBOOT -o /var/log -j APPEND

echo "Mise a jour des regles"
/sbin/lidsconf -U

echo "Compilation des regles"
/sbin/lidsconf -C


echo "Rechargement des regles"
lidsadm -S -- +RELOAD_CONF

echo "Activation de LIDS"
lidsadm -S -- +LIDS
lidsadm -S -- +LIDS_GLOBAL

La regle APPEND n'autorise que l'ajout dans les fichiers déjà existants et dons la modification, suppression et ajout de nouveaux fichiers dans le répertoire /var/log devient impossible.

Testons:


# rm /var/log/messages
rm: ne peut enlever `/var/log/messages': Opération non permise


# echo "TEST" >> /var/log/messages
# tail -n 1 -f /var/log/messages
TEST

# touch /var/log/toto
touch: initialisation des dates de `/var/log/toto': Aucun fichier ou répertoire de ce type

Cool nos logs sont protégés :)

Mais peut être le sont ils trop :-(. En effet certains programmes doivent accéder à ce répertoire avec des droits particuliers. Par exemple ' logrotate' scrute le répertoire des logs et y fait diverses manipulations telles que la compressions et la rotation des logs.

Il nous faut donc tenir compte de tous les cas particuliers :(

Pour nous faciliter la vie nous pouvons utiliser la CAPACITY ACL_DISCOVERY qui nous founie un mode de découverte des ressources utilisées. Celles-ci sont loguées dans /var/log/messages.


lidsadm -S -- +ACL_DISCOVERY

tail -f /var/log/messages

Si j'éxécute /usr/sbin/logrotate /etc/lorate.conf je vois apparaitre dans /var/log/messages:

Jan 14 16:22:19 localhost kernel: LIDS_ACL_DISCOVERY:[state 2]572431:3145731:logrotate:7:0:1422654:3145731:apache2:0-0
Jan 14 16:22:19 localhost kernel: LIDS_ACL_DISCOVERY:[state 2]572431:3145731:logrotate:7:0:1424583:3145731:access.log.1.gz:0-0
Jan 14 16:22:19 localhost last message repeated 3 times
Jan 14 16:22:19 localhost kernel: LIDS_ACL_DISCOVERY:[state 2]572431:3145731:logrotate:7:0:1422654:3145731:apache2:0-0

Pour permettre à logrotate d'ecrire dans /var/log il suffit d'ajouter ces lignes à nos règles:


/sbin/lidsconf -A POSTBOOT -o /usr/sbin/logrotate -j READONLY
/sbin/lidsconf -A POSTBOOT  -s /usr/sbin/logrotate  -o /var/log -j WRITE

Si je relance logrotate plus aucune ligne n'apparait dans le log.

Le mode ACL_DISCOVERY nous permet donc donc de loguer tous les accès qui sont contraire aux règles en place. Il nous permet d'affiner les règles en place.

3.3. protection des binaires

De la meme manière nous protégerons les binaires:

/sbin/lidsconf -A POSTBOOT -o /sbin -j READONLY
/sbin/lidsconf -A POSTBOOT -o /bin -j READONLY
/sbin/lidsconf -A POSTBOOT -o /usr -j READONLY

De même nous protéderons les fichiers de configuration du répertoire /etc .

/sbin/lidsconf -A POSTBOOT -o /etc -j READONLY
/sbin/lidsconf -A POSTBOOT -o /etc/lids -j DENY

Attention: Si le repertoire /etc/lids devient DENY, les utilitaires lidsconf et lidsadm ne pourront plus accéder à leur fichiers de configuration. Pour toute modification il nous faudra tout dabord sortir du mode LIDS ( lidsadmm -S -- -LIDS), faire les modifs et réentrer dans le mode LIDS.

Un conseil donc: protéger le répertoire /etc/lids qu'a la fin des tests.

Commentaires:

user_iconAxley icon4 7/3/2007 - 0h22
Excellent tuto !Neanmoins je ne parviens pas à telecharger lids sur leur site et ailleurs...sic.Peux tu me l'envoyer ? Merci d'avance. 
user_icondab icon4 7/3/2007 - 13h46

En effet le site semble indisponible :( mais tu pourras trouver ton bonheur ici http://dab.free.fr/files/articles/lids/

user_iconAxley icon4 14/3/2007 - 20h52
Merci ca fait bien plaisir!!!! :-)) 
user_icondab icon4 16/3/2007 - 12h57

no pb ;)

Par contre inquiétant ce site qui te répond plus :( j'espère que le projet n'est pas abandoné.

Sinon il y a toujours SELinux que je n'ai pas testé mais qui semble beaucoup plus lourd à mettre en place.

Nota: j'ai ajouté quelques scripts dans lids/exemples/ qui pourrons peut être t'aider dans la config de lids ;)


user_iconAxley icon4 22/3/2007 - 12h38
Merci pour les scripts je vais les tester ... :-)Je suis en phase de test pour le moment et je pensai installer un produit comme Tripwire pour ne pas le citer, en plus de Lids afin de securiser à la couche superieure. T'en penses quoi ?A terme je souhaiterai installer 3 serveurs sous mandrake 9.2 avec le dernier kernel dispo:1 avec clamAV + Postfix en relais de messagerie,1 avec Squid en relais http+ftp & serveur web public sous Apacheet enfin 1 en tant que serveur http+ftp sous Apache & serveur de fichiers SambaTu as des bonnes adresses de tuto ?Contacte moi en MP si tu veux.Merci et a plus :-b 
user_icondab icon4 23/3/2007 - 19h45

Pour la sécurisation de tes serveurs tu peux t'aider de ce document http://www.debian.org/doc/manuals/securing-debian-howto/index.fr.html (surement applicable à Mandriva)
J'imagine que tes serveurs sont dans une DMZ ?

Tu peux si tu le souhaites t'enregistrer sur ce site de manière à être informé par mail des commentaires ou nouveaux articles ... pas très nombreux ces derniers temps ;) 



Add a comment

Validator_logo
Catapulse v0.06
( 0.083613 s)