Tenshi : Analyse des logs système
Contents
1 Introduction et installation
L'analyse des fichiers de logs est un bon compromis à l'absence régulière de considération dans les entreprises pour ces fichiers qui contiennent de nombreuses informations vitales en vue de protéger les systèmes vis à vis des intrusions réalisées par les pirates à l'intérieur même des réseaux.
NDLR : ce document a été rédigé en 2006, certaines versions ainsi que certaines configurations des logiciels utilisés selon ces versions peuvent être différentes de celles qui sont mentionnées ; merci de vous reporter vers les sites officiels des projets en question en cas de problème.
Dédier une personne à cette analyse n'étant pas chose facilement réalisable économiquement dans bon nombre d'entreprises, la mise en place de logiciels qui automatisent au mieux ce traitement est un moindre mal à condition bien sûr que le nombre d'informations reportées reste dans les limites du raisonnable tout en gardant l'aspect qualitatif des alertes qui seront remontées ; ce qui nécessite une configuration fine et donc souvent complexe à mettre en oeuvre.
LogWatch, Logsentry, Logcheck et Swatch sont les plus connues de ces solutions dans le monde du libre ; nous vous proposons à travers ce document de découvrir Tenshi, un analyseur de ce type anciennement connu sous le nom de Wasabi.
Tenshi offre de multiples fonctionnalités : rapports par email, capacité de traitement importante, utilisation d'expressions régulières (regexp perl), mise en place d'exception et de filtrage.
Ces fonctionnalités sont alliées à une installation des plus simples et une souplesse de configuration qui ravira les plus rétissants à ce genre d'applicatifs : fichier unique basé sur un concept d'objets ou de groupe d'objets, syntaxe intuitive et « crontab » interne.
A noter également le peu de ressources nécessaires à cette analyse d'où la possibilité de traiter de multiples fichiers présentant un grand nombre d'enregistrements.
D'un point de vue technique, il est tout d'abord nécessaire de récupérer l'archive de la dernière version stable disponible sur le site de gentoo; lors de la rédaction de ce document cette version était la 0.4. Les autres versions sont également mises en téléchargement depuis le site officiel. Sinon, si vous êtes sous Debian, ne vous prenez pas la tête ;-).
1.1 Debian
Avec Debian, Tenshi s'installe de la manière suivante :
apt-get |
apt-get install tenshi |
1.2 Sources
Pour faire l'installation depuis les sources :
Tenshi est un programme reposant sur le langage PERL ; pour l'envoi des rapports par email, il nécessite l'installation préalable du module additionnel « Net::SMTP ».
Ce module fournit une API au protocole SMTP en ce sens ; son installation peut être réalisée via un autre module qui permet d'accéder à l'archive CPAN (Comprehensive PERL Archive Network) regroupant l'ensemble des modules homologués PERL ainsi que leurs différentes documentations.
Pour lancer la connexion à CPAN :
perl |
root@ns30074:~/tenshi-0.4 # perl -e shell -MCPAN cpan shell -- CPAN exploration and modules installation (v1.7601) ReadLine support available (try 'install Bundle::CPAN') |
Pour les néophytes à l'utilisation du module CPAN, vous pouvez récupérer et consulter, si vous le souhaitez, des informations relatives au module « Net::SMTP » grâce à la commande suivante :
L'installation du module est à réaliser de la manière suivante :
cpan> install Net::SMTP Running install for module Net::SMTP ......... /usr/bin/make install -- OK |
On peut constater que l'installation a été correctement effectuée ; on peut maintenant se déconnecter de CPAN :
cpan> exit |
Intéressons-nous à l'archive de Tenshi que nous avons précédemment récupérée ; en premier lieu décompressez la tout en réalisant son désarchivage :
Accédez ensuite au répertoire ainsi récemment créé et contenant les fichiers nécessaires à l'installation de l'application :
root@ns30074:~ # cd tenshi-0.4/ |
Listez le répertoire pour prendre connaissance de son arborescence :
root@ns30074:~/tenshi-0.4 # ls Changelog CREDITS LICENSE README tenshi.8 tenshi.debian-init tenshi.gentoo-init COPYING INSTALL Makefile tenshi tenshi.conf tenshi.ebuild tenshi.solaris-init |
Les deux opérations suivantes consistent à créer un utilisateur « tenshi » et un groupe du même nom qui régiront l'exécution de Tenshi sur votre système :
root@ns30074:~/tenshi-0.4 # useradd tenshi |
Avant de procéder à l'installation proprement dite, il est nécessaire, suivant le système d'exploitation et la distribution qui y sont présents, d'ajuster la configuration du fichier « Makefile » ; il a été pour ma part nécessaire de changer le chemin d'installation des pages de manuel en modifiant la ligne numéro 9 du fichier sur une « debian-like » :
root@ns30074:~ # updatedb | locate "man8/" | more /usr/share/man/man8/update-passwd.8.gz root@ns30074:~/tenshi-0.4 # vi Makefile |
Remplacer « mandir = /usr/man » par « mandir = /usr/share/man/ ».
Vous pouvez maintenant installer Tenshi sur le système :
2 Configuration
Dissection du fichier de configuration partie par partie afin de comprendre les tenants et les aboutissants du fonctionnement de Tenshi, ce qui nous permettra également de faire la connaissance des mécanismes qui régissent l'analyse des logs.
Une fois l'installation réalisée, nous pouvons passer à l'étape suivante, à savoir la configuration : celle-ci s'opère par l'intermédiaire d'un fichier unique dénommé « tenshi.conf » et présent sous le chemin « /etc/ tenshi/tenshi.conf »
vi |
root@ns30074:~/tenshi-0.4 # vi /etc/tenshi/tenshi.conf |
On retrouve en début de fichier les configurations dites « génériques » avec notamment le positionnement de l'utilisateur « tenshi » et du groupe « tenshi » précédemment évoqués, créés sur le système et qui seront les propriétaires des processus liés au lancement ultérieur de Tenshi :
Les opérations suivantes sont alors à réaliser pour résoudre ce problème :
- création d'un répertoire spécifique au PID de Tenshi,
mkdir |
root@ns30074:~/tenshi-0.4 # mkdir /var/run/tenshi |
- positionnement des droits nécessaires à la création future des fichiers PID dans ce répertoire lors du lancement de Tenshi,
chown |
root@ns30074:~/tenshi-0.4 # chown tenshi:root /var/run/tenshi/ |
- vérification de la bonne tenue de l'opération précédente :
ls |
root@ns30074:~/tenshi-0.4 # ls -l /var/run/ | grep tenshi drwxr-xr-x 2 tenshi root 4096 2006-06-16 01:49 tenshi |
Il ne reste plus ensuite qu'à remplacer, dans le fichier de configuration, la ligne « set pidfile /var/run/tenshi.pid » par « set pidfile /var/run/tenshi/tenshi.pid » afin d'éviter les avertissements relatifs au problème évoqué lors des prochains lancements de Tenshi.
La suite de la configuration permet de définir les fichiers de logs qui vont être surveillés et dont les alertes vont vous être reportées ; par défaut on retrouve les deux lignes suivantes :
/etc/tenshi/tenshi.conf |
set logfile /var/log/messages set logfile /var/log/mail.log |
Idéalement, et à ajuster selon le contexte de votre distribution en ce qui concerne la gestion du « logging » des différents événements par « syslogd » ou autres, vous pouvez ajouter les lignes suivantes pour rendre cette liste la plus exhaustive possible et l'analyse plus efficace :
/etc/tenshi/tenshi.conf |
set logfile /var/log/syslog set logfile /var/log/sulog set logfile /var/log/user.log set logfile /var/log/auth.log |
Viennent maintenant quelques optimisations que vous pouvez laisser par défaut au contraire de la définition du serveur SMTP qui sera utilisé pour l'envoi des rapports si vous ne souhaitez pas utiliser celui par défaut tournant sur « localhost » donc localement :
/etc/tenshi/tenshi.conf |
set sleep 5 set limit 800 set pager_limit 2 set mask ___ set mailserver mail.deimos.fr set subject Tenshi report set hidepid on |
Tenshi a la particularité singulière de ne pas utiliser la « crontab » du système pour son fonctionnement ; il est donc possible de configurer différents éléments d'automatisation directement dans le fichier « tenshi.conf » et cela selon plusieurs critères.
Les éléments de type « queue » sont à mettre en place via la syntaxe suivante : « set queue [] » ; le sujet par défaut est « tenshi report » si vous n'en précisez pas de spécifiques.
On peut voir ci-dessous 6 éléments configurant l'envoi depuis « webmaster@deimos.fr » vers « deimos@deimos.fr » selon des fréquences et des périodes différentes dans la journée en fonction de leur criticité.
Pour l'élément « mail », envoi programmé à 18h30 d'un rapport et cela tous les jours :
/etc/tenshi/tenshi.conf |
set queue mail webmaster@deimos.fr deimos@deimos.fr [30 18 * * *] |
Pour l'élément « nf », envoi programmé toutes les trente minutes d'un rapport et cela tous les jours :
/etc/tenshi/tenshi.conf |
set queue nf webmaster@deimos.frt deimos@deimos.fr [*/30 * * * *] |
Pour l'élément « report », envois programmés toutes les 2 heures dans l'intervalle compris entre 9 heures et 17 heures d'un rapport et cela tous les jours :
/etc/tenshi/tenshi.conf |
set queue report webmaster@deimos.frt deimos@deimos.fr [0 9-17/2 * * *] |
Pour l'élément « misc », envois programmés dans les mêmes conditions que l'élément précédent :
/etc/tenshi/tenshi.conf |
set queue misc webmaster@deimos.fr deimos@deimos.fr [0 9-17/2 * * *] |
Pour l'élément « critical », envoi programmé immédiatement à chaque occurrence identifiée :
/etc/tenshi/tenshi.conf |
set queue critical webmaster@deimos.fr deimos@deimos.fr [now] |
Pour l'élément « root », envoi programmé immédiatement à chaque occurrence identifiée :
/etc/tenshi/tenshi.conf |
set queue root webmaster@deimos.fr deimos@deimos.fr [now] |
L'envoi des rapports vers des utilisateurs multiples est également possible à configurer ; il suffit pour cela de remplacer « deimos@deimos.fr » par « deimos@deimos.fr , root@deimos.fr » par exemple.
On trouve à la suite du fichier les exceptions qui permettront de ne pas reporter des informations ne présentant pas d'intérêt ; elles sont envoyées vers un élément « trash » qui ne fait pas parti de la « contrab » d'envoi des rapports :
Dans le même registre, on supprime les indications pour les répétitions des enregistrements :
/etc/tenshi/tenshi.conf |
repeat ^(?:last message repeated|above message repeats) (\\d+) time |
Un groupe d'exemple pour le service SSHD ; définition du groupe :
/etc/tenshi/tenshi.conf |
group ^sshd(?:\(pam_unix\))?: |
Toutes les occurrences de la chaîne de caractère « sshd: fatal: Timeout before authentication for » quels que soient les caractères suivants indiquant qu'une session SSH a été close pour une durée d'inactivité trop longue , ; cela sera enregistré dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: fatal: Timeout before authentication for (.+) |
Toutes les occurrences de la chaîne de caractère « critical ^sshd: Illegal user » indiquant qu'un nom d'utilisateur non conforme au système a été utilisé pour l'authentification SSH ; cela sera enregistré dans les rapports appartenant à l'élément « critical » :
/etc/tenshi/tenshi.conf |
critical ^sshd: Illegal user |
Toutes les occurrences de la chaîne de caractère « sshd: Connection from » quels que soient les caractères suivants indiquant une connexion SSH établie ; cela sera enregistré dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: Connection from (.+) |
Toutes les occurrences de la chaîne de caractère « sshd: Connection closed » quels que soient les caractères suivants indiquant une session SSH fermée ; cela sera enregistré dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: Connection closed (.+) |
Toutes les occurrences de la chaîne de caractère « sshd: Closing connection » quels que soient les caractères suivants indiquant la fermeture en cours d'une connexion SSH ; cela sera reporté dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: Closing connection (.+) |
Toutes les occurrences de la chaîne de caractère « sshd: Found matching (.+) key: (.+) » quels que soient les caractères suivants et intemédiaires indiquant que la clé proposée pour l'authentification SSH a été trouvée dans la liste des clés du système ; cela sera enregistré dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: Found matching (.+) key: (.+) |
Toutes les occurrences de la chaîne de caractère « sshd: Accepted publickey » quels que soient les caractères suivants indiquant que la clé publique utilisée pour l'ouverture de session SSH a été acceptée ; cela sera enregistré dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: Accepted publickey (.+) |
Toutes les occurrences de la chaîne de caractère « sshd: Accepted rsa for (.+) from (.+) port (.+) » quels que soient les caractères suivants et intermédiaires indiquant que la clé RSA proposée a été acceptée ; cela sera enregistré dans les rapports appartenant à l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^sshd: Accepted rsa for (.+) from (.+) port (.+) |
Toutes les occurrences de la chaîne de caractère « sshd\(pam_unix\): session opened for user root by root\(uid=0\) » indiquant l'ouverture d'une session SSH avec le compte root depuis le compte root ; cela sera enregistré dans les rapports appartenant à l'élément « root » :
/etc/tenshi/tenshi.conf |
root ^sshd\(pam_unix\): session opened for user root by root\(uid=0\) |
Toutes les occurrences de la chaîne de caractère « sshd\(pam_unix\): session opened for user root by \(uid=0\) » indiquant l'ouverture d'une session SSH avec le compte root ; cela sera enregistré dans les rapports appartenant à l'élément « root » :
/etc/tenshi/tenshi.conf |
root ^sshd\(pam_unix\): session opened for user root by \(uid=0\) |
Et finalement la fermeture du groupe sshd :
/etc/tenshi/tenshi.conf |
group_end |
Sur les mêmes principes, plusieurs autres groupes sont à définir en fonction de votre système et de ses applicatifs/services.
Le service « Sendmail » avec :
Le service « Sm-mta » :
Le service « Ipop3d » avec :
Le service « Imapd » avec :
Le service « login\(pam_unix\) » avec :
Le service « su(pam_unix) » avec :
Ensuite tous les enregistrements de la chaîne de caractère « netfilter » pour le filtrage seront envoyés vers l'élément « nf » :
/etc/tenshi/tenshi.conf |
nf ^netfilter |
Tous les enregistrements de la chaîne de caractère « sudo » pour les commandes exécutées sous un autre compte que le compte actif du SHELL seront envoyés vers l'élément « critical » :
/etc/tenshi/tenshi.conf |
critical ^(?:/usr/bin)?sudo: |
Tous les enregistrements de la chaîne de caractère « init » pour les lancements de service seront envoyés vers l'élément « critical » :
/etc/tenshi/tenshi.conf |
critical ^init |
Tous les enregistrements de la chaîne de caractère « passwd\(pam_unix\): » pour les changements de mots de passe seront envoyés vers l'élément « report » :
/etc/tenshi/tenshi.conf |
report ^passwd\(pam_unix\): |
Tous les autres enregistrements ne correspondant pas aux expressions régulières d'identification précédentes seront envoyés vers l'élément « misc » :
/etc/tenshi/tenshi.conf |
misc .* |
3 Utilisation
Configurations faites, on passe à l'utilisation de Tenshi en se mettant dans des cas concrets d'alertes afin de recevoir les alarmes correspondantes sur un email prédéfini à condition que les configurations de base aient bien été effectuées prélablement.
Tenshi fonctionne en tant que service, ce qui implique notamment que vous pouvez fermer le terminal où vous l'avez lancé sans pour autant que cela ne l'arrête (équivalent à l'ajout du caractère « & » en fin de commande SHELL).
Lors d'un « ls » précédent, vous aurez peut être remarqué la présence de 3 scripts d'initialisation pour les systèmes d'exploitation Linux (distribution Debian et Gentoo) et Solaris :
root@ns30074:~/tenshi-0.4 # ls | grep init tenshi.debian-init tenshi.gentoo-init tenshi.solaris-init |
Nous utilisons actuellement une distribution de type « Debian-like » (Ubuntu), il faut alors copier le script d'initialisation correspondant dans le répertoire « /etc/init.d/ » qui contient l'ensemble des scripts d'initialisation des services du système :
root@ns30074:~/tenshi-0.4 # cp tenshi.debian-init /etc/init.d/tenshi |
Testez ce script :
root@ns30074:~/tenshi-0.4 # sh /etc/init.d/tenshi Usage: /etc/init.d/tenshi {start|stop|restart} |
Ajoutez des droits d'exécution au script :
root@ns30074:~/tenshi-0.4 # chmod +x /etc/init.d/tenshi |
Effectuez le démarrage du « daemon » Tenshi :
root@ns30074:~/tenshi-0.4 # /etc/init.d/tenshi start Starting log monitor: tenshi. |
Testez le lancement effectif de Tenshi :
Arrêtez Tenshi :
root@ns30074:~/tenshi-0.4 # /etc/init.d/tenshi stop Stopping log monitor: tenshi. |
Arrêt forcé de Tenshi en cas de problème avec les scripts :
killall |
root@ns30074:~/tenshi-0.4 # killall -9 tail tenshi |
Redémarrage de Tenshi :
root@ns30074:~/tenshi-0.4 # /etc/init.d/tenshi restart Stopping log monitor: tenshi. Starting log monitor: tenshi. |
Tenshi peut également être lancé hors des scripts d'initialisation afin par exemple de tester un fichier de configuration ou de lancer le service avec un fichier alternatif. Le mode « Debug » est également possible entre autres, et sera d'une grande utilité si vous rencontrez un problème notamment avec l'envoi des mails,
Dernier point à aborder et non des moindres puisque ce sont les rapports avec les alertes qui vous seront envoyées par email. Le premier est un rapport issu de l'élément « report » pour une fermeture due à une inactivité trop longue sur une session active du service SSH :
Le second exemple est un rapport pour l'élément « misc » avec une erreur d'authentification SSH, ainsi que l'exécution d'une commande par la « crontab » système et l'ouverture d'une session « pam_unix » pour le compte root associé à cette précédente entrée « */1 * * * * root /usr/local/rtm/bin/rtm 41 >/dev/null 2>/dev/null » de la « crontab » :
Le système d'analyse des logs est fonctionnel, il ne vous reste maintenant plus qu'à adapter la configuration en fonction de vos besoins et du temps que vous souhaitez allouer à la lecture des rapports qui en sont issus.
Si vous souhaitez des informations complémentaires, deux listes de diffusion sont à votre disposition :
la première concerne les discussions générales, pour vous y inscrire il suffit d'envoyer un message à tenshi-user+subscribe@lists.inversepath.com les messages pour la liste sont à envoyer à tenshi-user@lists.inversepath.com
la seconde est dédiée aux évolutions de Tenshi, inscription sur tenshi-announce+subscribe@lists.inversepath.com et messages « liste » sur tenshi-announce@lists.inversepath.com