Table des matières 1 JOURNALISATION ET AUDIT... 2 1.1 Introduction... 2 1.2 Fichiers de journalisation... 3 1.3 Type de journalisation... 4 1.4 Journalisation via les démons... 4 1.4.1 Journalisation des ressources... 4 1.4.2 Journalisation des accès... 4 1.5 Journalisation par syslogd... 7 1.5.1 Principes de fonctionnement... 7 1.5.2 Fichier de configuration... 9 1.5.3 Activater syslog... 11 1.5.4 Utilisation de la commande logger... 11 1.5.5 Journalisation des accès... 11 1.6 Outils d audit... 12 2011 Hakim Benameurlaine 1
1 JOURNALISATION ET AUDIT 1.1 Introduction Le système de comptabilité (accounting), le noyau et de nombreux démons génèrent des données et des informations qui se trouvent écrites dans des fichiers de journalisation (log files). Les fichiers de journalisation permettent d auditer le système et peuvent servir à : détecter les accès non autorisés au système (intrus) facturer les utilisateurs suivant les ressources utilisées (temps de connexion par exemple) diagnostiquer les problèmes de configuration. La journalisation a un coût : en performance du système en espace disque en temps d analyse et de traitement des données en maintenance Par défaut, seuls les accès au système, aux imprimantes et les messages des démons sont journalisés. Les ressources utilisées par chaque processus (temps CPU, mémoire, etc.) ne sont comptabilisées que lorsque l utilitaire accounting est utilisé (info accounting) pour plus de détails. La comptabilité des ressources utilisées par les processus engendre d énormes quantités de données et s avère souvent inutile. Il est recommandé de ne l utiliser que si c est vraiment nécessaire. 2011 Hakim Benameurlaine 2
# rpm -q psacct 1.2 Fichiers de journalisation Les fichiers de journalisation peuvent être stockés dépendamment des familles (BSD et SYS V) et des constructeurs dans : /var/log (RedHat) /var/adm /usr/adm /var/run /etc Les fichiers de journalisation ont tendance à croître et la plupart doivent être régulièrement purgés. On le faire de deux façons: Les remettre à zéro régulièrement. On peut simplement les effacer en les ayant aux préalables sauvegardés. Faire des rotations sur plusieurs jours. On peut par exemple conserver un journal sur 3 jours. Le script pour la rotation d un fichier journal serait le suivant : #!/bin/sh rm -f journal.3 mv f journal.2 journal.3 mv f journal.1 journal.2 mv f journal journal.1 cat /dev/null > journal chmod 644 journal 2011 Hakim Benameurlaine 3
Certains fichiers ne doivent pas être purgés, tandis que pour d autres certaines précautions doivent être prises. 1.3 Type de journalisation Il y a 2 types de journalisation : La journalisation faite directement par les démons. La journalisation faite par l intermédiaire du démon syslogd. 1.4 Journalisation via les démons La journalisation faite directement par les démons concerne : les ressources utilisées par les processus. les accès au système. 1.4.1 Journalisation des ressources Les ressources utilisées par les processus sont journalisées dans /var/account/pacct. 1.4.2 Journalisation des accès Les accès au système sont conservés dans trois fichiers : utmp lastlog wtmp 1) utmp 2) lastlog Fichier binaire (situé dans /var/run) qui contient des informations sur les utilisateurs ayant une session active. Les informations contenues dans ce fichier sont affichables à l aide de la commande who. # who -H USER LINE LOGIN-TIME FROM root tty1 May 26 10:10 hakimb tty2 May 27 08:15 root tty3 May 27 08:16 Fichier binaire (situé dans /var/log) qui contient les informations sur la dernière session de chacun des utilisateurs du système. On peut accéder à 2011 Hakim Benameurlaine 4
l information contenue dans ce fichier à l aide des commandes lastlog et finger. # lastlog Username Port From Latest root tty3 Sun May 27 08:16:46-0400 2001 bin daemon adm lp sync shutdown halt mail news uucp operator games gopher ftp nobody vcsa mailnull rpm ntp rpc xfs gdm rpcuser nfsnobody nscd ident radvd hakimb tty2 Sun May 27 08:15:59-0400 2001 apache usager2 pts/0 lune Wed Apr 18 16:42:33-0400 2001 u44 tty3 Fri May 18 10:21:07-0400 2001 # finger root Login: root Name: root Directory: /root Shell: /bin/bash On since Sat May 26 10:10 (EDT) on tty1 On since Sun May 27 08:16 (EDT) on tty3 9 minutes 55 seconds idle Mail last read Sat Jan 22 04:02 2005 (EST) No Plan. 2011 Hakim Benameurlaine 5
3) wtmp REMARQUE Les fichiers /var/run/utmp et /var/log/lastlog ne doivent pas être purgés. Leur taille reste toujours faible. Fichier binaire (situé dans /var/log) qui contient un historique de toutes les sessions effectuées sur le système. Les informations contenues dans ce fichier sont affichables à l aide des commandes last et ac. # last root tty3 Sun May 27 08:16 still logged in hakimb tty2 Sun May 27 08:15 still logged in root tty1 Sat May 26 10:10 still logged in root tty1 Thu May 24 16:11 - down (00:00) root tty1 Thu May 24 15:44-16:11 (00:27) root tty4 Fri May 18 10:25 - down (01:14) u44 tty3 Fri May 18 10:21 - down (01:18) u44 tty3 Fri May 18 10:12-10:21 (00:08) hakimb tty2 Fri May 18 10:09-11:11 (01:01) hakimb tty2 Fri May 18 10:03-10:09 (00:06) hakimb tty2 Fri May 18 09:59-10:03 (00:04) root tty1 Fri May 18 09:57 - down (01:42) reboot system boot Fri May 18 09:53 (01:46) root tty1 Wed May 9 13:26 - down (3+03:06) root pts/0 :0 Wed Mar 9 18:53-10:10 (15:17) hakimb pts/0 lune Tue Mar 8 22:03-22:04 (00:00) 21:22 - down (1+14:15) wtmp begins Tue Feb 1 09:30:57 2005 Sur AIX : # /usr/sbin/acct/ac total 31476.25 # /usr/sbin/acct/ac root total 2725.54 /usr/sbin/acct/ac -d root May 12 total 165.78 May 13 total 131.18 May 16 total 385.59 May 17 total 171.41 May 18 total 147.96 2011 Hakim Benameurlaine 6
May 19 total 129.77 May 20 total 145.85 May 21 total 175.85 May 22 total 176.08 May 23 total 172.98 May 24 total 194.29 May 25 total 185.32 May 26 total 245.08 May 27 total 97.78 NOTE Sur les systèmes basés sur Solaris, on rencontre également les fichiers /var/adm/sulog et /var/adm/loginlog. /var/adm/sulog : fichier ASCII qui contient la liste de toutes les utilisations de la commande su. /var/adm/loginlog : fichier ASCII qui contient la liste de tous les logins infructueux plus de 5 fois consécutives. 1.5 Journalisation par syslogd 1.5.1 Principes de fonctionnement Afin de simplifier la programmation de la journalisation et de laisser un meilleur contrôle à l administrateur, de nombreux démons ne font pas la journalisation euxmêmes mais effectuent des appels système au démon syslog (openlog(), syslog(), closelog()). Les évènements qu un programme envoie au démon syslog sont identifiés par 3 éléments : Le sous-système (facility) Le niveau (level) L action à réaliser 1) Le sous-système permet d identifier quelle partie du système d exploitation envoie le message. Les valeurs possibles ont : auth, authpriv, cron, daemon, kern, lpr, mail, news, syslog, user, uucp et local0 à local7. Les facilités disponibles sont : kern user Le noyau. Processus des utilisateurs. 2011 Hakim Benameurlaine 7
mail Système de courrier. daemon Démons systèmes. auth lpr news uucp cron mark Authentification. Système de spooling d'imprimante. Usenet. UUCP. Démon cron. Messages générés à intervalle réguliers. local0-7 Huit niveaux de messages locaux. syslog Messages internes à syslogd. authpriv Messages privés auth. * Toutes les facilités sauf mark. 2) Le niveau permet d identifier la sévérité de l évènement. Les valeurs possibles sont (du plus important au moins important) : emerg, alert, crit, err, warning, notice, info et debug. A chaque facilité est associé un niveau de trace, du plus grave au moins important: emerg (panic) alert crit err (error) Erreur de niveau > situations de panique Erreur de niveau > situations urgentes. Erreur de niveau > situations critiques. Erreur de niveau > erreurs. warning (warn) Erreur de niveau > messages de WARNING. notice info debug Erreur de niveau > messages divers. Erreur de niveau > messages d'informations. Erreur de niveau > messages déboguage. * Tous les niveaux (équivalent à debug) =niveau_alert Erreur de niveau=niveau_alert!=niveau_alert Erreur de niveau!=niveau_alert none Equivalent à!* 3) Après avoir défini une facilité et ses niveaux, il faut y ajouter une action : fichier Ecrire les traces dans fichier ( par exemple /var/log/messages) 2011 Hakim Benameurlaine 8
@machine Rediriger les traces du vers la machine (nom ou adresse IP) User1[,user2,.] Envoyer les messages vers l'écran de l'utilisateur s il est connecté * Envoyer les messages vers tous les utilisateurs connectés 1.5.2 Fichier de configuration Le démon syslog est configuré avec le fichier /etc/syslog.conf : # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log Chaque entrée dans le fichier /etc/syslog.conf est de la forme : Sous-système.niveau action Une entré permet de définir une action à prendre si un message venant d un certain sous-système avec un certain niveau minimal est reçu. En général, l action à prendre est simplement d écrire dans un fichier. Par exemple, l entrée : 2011 Hakim Benameurlaine 9
Local2.notice /var/log/ppp_log Permet de journaliser dans le fichier /var/log/ppp_log les messages venant du sous-système local2 avec un niveau de sévérité supérieur ou égal à notice. Le sous-système et le niveau peuvent être aussi le méta-caractère * signifiant n importe quel sous-système ou niveau. Par exemple, l entrée : *.err /var/adm/errlog Permet de journaliser dans le fichier /var/adm/errlog tous les événements de sévérité supérieure ou égale à err. Le niveau peut être aussi le mot clé none signifiant aucun niveau. Par exemple, l entrée : *.err;user.none /var/adm/errlog Permet de journaliser dans le fichier /var/adm/errlog tous les événements de sévérité supérieure à err sauf ceux du sous-système user. L action peut être un nom de fichier où écrire, mais aussi un nom de serveur de journalisation (@nom_serveur), l écran de tous les utilisateurs du système (*), l écran de certains des utilisateurs (u1, u2). Par exemple, l entrée : *.emerg;user.none * Permet d afficher à l écran tous les événements de sévérité supérieure à emerg sauf ceux du sous-système user. EXEMPLES *.=info;*.=notice *.=debug *.warn mail.* *.err *.alert /var/adm/messages /var/adm/debug /var/adm/syslog.warn /var/adm/syslog.mail /var/adm/syslog.err od mail.debug /var/log/mail *.info /var/log/user daemon.=notice /var/log/daemon lpr.*;lpr.!=info /var/log/lpr tout ce qui vient de lpr sauf de niveau info lpr.*;lpr.!err /var/log/lpr tout ce qui vient de lpr niveau entre debug et err lpr.info;lpr.!err /var/log/lpr tout ce qui vient de lpr de niveau entre info et err *.crit;mail.none @loghost toutes les erreurs critiques sauf du mail 2011 Hakim Benameurlaine 10
1.5.3 Activater syslog syslogd syslogd h syslogd r syslog d lance le démon le démon va forwarder les messages destinés à d'autres machines accepte les messages reçus sur le port syslog Activer le mode debug 1.5.4 Utilisation de la commande logger Pour journaliser dans le fichier /var/log/syslog.local2 tous les événements de sévérité supérieure à info, ajouter l entrée suivante dans /etc/syslog.conf : local2.info /var/log/syslog.local2 Redémarrer le service syslog : # service syslog restart Afin de tester la configuration du fichier syslog.conf, la commande logger simule un message pour une facilité et un niveau donné (logger -p facilité.niveau message). Par exemple pour tester si la facilité local2.info, insérée dans le fichier de configuration avec un fichier de trace /var/log/syslog.local2, fonctionne correctement, il suffira de taper : logger -p local2.info "Message dans le fichier syslog.local2" Le message apparaît alors dans le fichier /var/log/syslog.local2, si la configuration est correcte. 1.5.5 Journalisation des accès 1) Les commandes ou démons qui demandent des logins et des mots de passe (su, login, getty, etc) effectuent leur journalisation par syslogd au niveau du sous-système auth. 2) Pour ce sous-système, il peut être intéressant de journaliser les messages de sévérité supérieure ou égale à notice dans un fichier séparé (/var/log/authlog par exemple) en utilisant dans /etc/syslog.conf une entrée de la forme : auth.notice /var/log/authlog 2011 Hakim Benameurlaine 11
3) Ce fichier contiendra : 1.6 Outils d audit Les logins comme root (sévérité notice) Les utilisations de la commande su (réussite avec sévérité notice et échec avec sévérité crit) Les échecs lors de 5 tentatives successives infructueuses (avec sévérité crit) 1) COPS (Computer Oracle and Password System) est un ensemble d outils écrits en Bourne Shell, PERL et langage C destinés à vérifier la sécurité d un système UNIX. 2) TIGER est un ensemble d outils écrits en Bourne Shell et en langage C destinés à vérifier les problèmes de sécurité d un système UNIX et en particulier si le compte root peut être compromis. 2011 Hakim Benameurlaine 12