Sécurité des systèmes Linux
Transcription
Sécurité des systèmes Linux
Sécurité des systèmes Linux Hanteville Nicolas CFBS 24/11/2009 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 1 / 116 Historique - Unix Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 2 / 116 Historique - Linux Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 3 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) 2 Chargement primaire : Démarrage du BIOS Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) 2 Chargement primaire : Démarrage du BIOS 3 Chargement MBR (Master Boot Record) (les 512 premiers octets du lecteur activé) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) 2 Chargement primaire : Démarrage du BIOS 3 Chargement MBR (Master Boot Record) (les 512 premiers octets du lecteur activé) 4 Chargement secondaire : LILO, GRUB, WINDOWS. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) 2 Chargement primaire : Démarrage du BIOS 3 Chargement MBR (Master Boot Record) (les 512 premiers octets du lecteur activé) 4 Chargement secondaire : LILO, GRUB, WINDOWS. . . 5 Chargement du noyau/kernel (montage des partitions, initialisation des périphériques. . .) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) 2 Chargement primaire : Démarrage du BIOS 3 Chargement MBR (Master Boot Record) (les 512 premiers octets du lecteur activé) 4 Chargement secondaire : LILO, GRUB, WINDOWS. . . 5 Chargement du noyau/kernel (montage des partitions, initialisation des périphériques. . .) 6 Lecture et exécution des services/serveurs 7 Identification/Authentification Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Séquence de démarrage 1 Tests matériel (carte mère, processeur, mémoire, lecteurs. . .) 2 Chargement primaire : Démarrage du BIOS 3 Chargement MBR (Master Boot Record) (les 512 premiers octets du lecteur activé) 4 Chargement secondaire : LILO, GRUB, WINDOWS. . . 5 Chargement du noyau/kernel (montage des partitions, initialisation des périphériques. . .) 6 Lecture et exécution des services/serveurs 7 Identification/Authentification 8 Scripts d’ouverture de session, initialisation des variables de l’utilisateur. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 4 / 116 Chargement primaire Il en existe plusieurs types : - BIOS Basic Input Output System - bootadmin (EPROM HP-UX, Solaris) Erasable Programmable Read-Only Memory Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 5 / 116 Chargement primaire Il en existe plusieurs types : - BIOS Basic Input Output System - bootadmin (EPROM HP-UX, Solaris) Erasable Programmable Read-Only Memory Points de sécurité importants : Seul l’administrateur système doit pouvoir y avoir accès. Le démarrage doit se faire exclusivement sur le disque dur. Les périphériques non utilisés doivent être désactivés (FIREWIRE, USB, CDROM, DISQUETTE. . .). La partie matérielle de la machine doit être protégée afin d’éviter une réinitialisation (Clear CMOS), l’implémentation d’hologrammes ou rubans adhésifs cassants doit permettre de tracer une éventuelle ouverture de la machine. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 5 / 116 Chargement secondaire : chargeur d’amorçage Definition Programme permettant le démarrage de plusieurs systèmes d’exploitation sur un même système : localiser, charger et exécuter le noyau du système. Il en existe de multiples : Boot Camp (Apple) Bootman (BeOS boot loader) Chos (Choose OS) GAG (Graphical Boot Manager) GRUB (GRand Unified Bootloader) LILO (LInux LOader) NTLDR / Winload (Microsoft) Syslinux (Suite de gestionnaire de démarrage) ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 6 / 116 Chargement secondaire : chargeur d’amorçage Definition Programme permettant le démarrage de plusieurs systèmes d’exploitation sur un même système : localiser, charger et exécuter le noyau du système. Il en existe de multiples : Boot Camp (Apple) Bootman (BeOS boot loader) Chos (Choose OS) GAG (Graphical Boot Manager) GRUB (GRand Unified Bootloader) LILO (LInux LOader) NTLDR / Winload (Microsoft) Syslinux (Suite de gestionnaire de démarrage) ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 6 / 116 Chargement secondaire : GRUB Emplacement des fichiers : Fichier de configuration : /boot/grub/menu.lst Fichiers de l’application : /usr/sbin/grub/, /etc/grub.d/, usr/lib/grub/, man. Analyser le contenu du fichier de configuration : Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 7 / 116 Chargement secondaire : GRUB Emplacement des fichiers : Fichier de configuration : /boot/grub/menu.lst Fichiers de l’application : /usr/sbin/grub/, /etc/grub.d/, usr/lib/grub/, man. Analyser le contenu du fichier de configuration : more /boot/grub/menu.lst gedit /boot/grub/menu.lst kate /boot/grub/menu.lst ou kwrite /boot/grub/menu.lst ATTENTION, avant toute modification d’un fichier de configuration pensez à en faire une copie. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 7 / 116 Chargement secondaire : GRUB (fichier de configuration) # Temps d’attente en seconde. timeout 10 # Couleurs de fond/cadre/texte sélectionné/fond du texte. color black/cyan yellow/cyan # Choix de sélection par défaut, ici le premier. default 0 # Titre d’un choix sélectionnable. title linux # Image du noyau à charger (disque, partition). kernel (hd0,0)/vmlinuz root=/dev/hda6 devfs=mount # Partition à charger. initrd (hd0,0)/initrd.img title failsafe # Mode single-user. kernel (hd0,0)/vmlinuz root=/dev/hda6 failsafe devfs=nomount initrd (hd0,0)/initrd.img title Windows root (hd0,0) # Secteur de la partition à charger. chainloader +1 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 8 / 116 Chargement secondaire : GRUB (fichier de configuration) title linux kernel (hd0,0)/vmlinuz root=/dev/hda6 devfs=mount initrd (hd0,0)/initrd.img Exemple de nommage pour la sélection d’un disque : Primary Master : hda1 ou hd0,0 Primary slave : hdb1 ou hd1,0 Secondary Master : hdc1 ou hd2,0 Secondary slave : hdd1 ou hd3,0 Intérêt ? Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 9 / 116 Chargement secondaire : GRUB (fichier de configuration) title linux kernel (hd0,0)/vmlinuz root=/dev/hda6 devfs=mount initrd (hd0,0)/initrd.img Exemple de nommage pour la sélection d’un disque : Primary Master : hda1 ou hd0,0 Primary slave : hdb1 ou hd1,0 Secondary Master : hdc1 ou hd2,0 Secondary slave : hdd1 ou hd3,0 Intérêt ? En cas de perte d’un disque, après démarrage sur un LIVE-CD, on modifie le fichier de configuration et on met à jour grub : sudo update-grub Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 9 / 116 Chargement secondaire : GRUB (mot de passe MD5) Single-user Le single-user, permet sans aucun mots de passe (par défaut) d’accéder à des droits root en local. Afin d’éviter une exploitation de cette entrée il convient de : supprimer l’entrée ; ou d’y appliquer un mot de passe MD5 ; de vérifier les droits par défaut (644) du fichier /boot/grub/menu.lst Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 10 / 116 Chargement secondaire : GRUB (mot de passe MD5) Pour ajouter un mot de passe (en MD5) à une entrée il faut : 1 Générer un HASH MD5 et le copier : grub grub >md5crypt Password: password Encrypted: $1$0E56A/$yf/Xq7KY9lA2eJuvZhV3cl quit 2 Éditer le fichier de GRUB : sudo gedit /boot/grub/menu.lst 3 Ajouter : password --md5 HASH DU MDP après la ligne time-out 4 Ajouter la ligne : lock après le titre (title) 5 Enregistrer les modifications et les appliquer : sudo update-grub Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 11 / 116 Chargement secondaire : LILO Le fichier de configuration : /etc/lilo.conf S’il n’existe pas pour le créer et utiliser LILO : sudo liloconfig ou sudo liloconfig-color Analyser le contenu du fichier de configuration : Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 12 / 116 Chargement secondaire : LILO Le fichier de configuration : /etc/lilo.conf S’il n’existe pas pour le créer et utiliser LILO : sudo liloconfig ou sudo liloconfig-color Analyser le contenu du fichier de configuration : more /etc/lilo.conf gedit /etc/lilo.conf kate /etc/lilo.conf ou kwrite /etc/lilo.conf ATTENTION, avant toute modification d’un fichier de configuration pensez à en faire une copie. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 12 / 116 Chargement secondaire : LILO (fichier de configuration) boot=/dev/hda # LILO est placé dans la MBR du 1er disque. map=/boot/map # fichier contenant les informations de démarrage des OS. install=/boot/boot.b # deuxième partie de LILO. default=linux # Choix de sélection, ici ”linux”. # Temps d’attente ici : 5 secondes. prompt timeout=50 message=/boot/message # Message affiché avant le prompt. # C’est un Linux, on pointe vers l’image du noyau. image=/boot/vmlinuz label=linux # Zone de texte du menu. root=/dev/hda4 # Partition à charger. append=”” # Permet de forcer la taille de mémoire utilisée pour le démarrage (append=”mem=128m”). other=/dev/hda1 label=windows table=/dev/hda Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 13 / 116 Chargement secondaire : LILO (mot de passe) Sous LILO il est aussi possible d’ajouter un mot de passe, malheureusement il est écrit en clair dans le fichier de configuration. Pour ajouter un mot de passe il faut : 1 Éditer le fichier de LILO : sudo gedit /etc/lilo.conf 2 Ajouter après la ligne image, les lignes : password=mon mot de passe restricted 3 Enregistrer les modifications et les appliquer : /sbin/lilo -v 4 Vérifier les droits sur le fichier (600). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 14 / 116 Chargement secondaire Points de sécurité importants : 1 Désactiver ou restreindre le mode ”single-user”. 2 Désactiver les entrées inutiles. 3 Utiliser de préférence GRUB qui est plus sécurisé que LILO. 4 Vérifier les droits des fichiers de configuration et des binaires. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 15 / 116 Le noyau Definition Le noyau/kernel est le programme qui gère les interactions entre le matériel et les autres programmes. C’est lui qui amorce le système d’exploitation. Le noyau contient : le noyau brut (RAW KERNEL) ; les drivers utiles ; les services primaires : iptables, réseau, gestion de fichier. . . les services spécialisés : proxy, web. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 16 / 116 Le noyau Les bonnes pratique de conception d’un système spécialisé : (Serveur proxy, firewall. . .) recompiler le noyau avec les drivers et services utiles ; minimiser les modules à intégrer au noyau (performance) ; prendre en compte la sécurité dés le début (modules complémentaires, Gresecurity ou sysctl). La compilation d’un noyau en plusieurs étapes : 1 définition des besoins et installation minimale; 2 installation des librairies essentielles à la compilation ; 3 installation et extraction des sources du noyau ; 4 création du fichier de configuration exploité pour la compilation ; 5 compilation du paquetage ; 6 installation. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 17 / 116 1 définition des besoins et installation minimalle : configurer un noyau pour un serveur (proxy/firewall). 2 installation des librairies essentielles à la compilation : sudo aptitude install debconf-utils dpkg-dev debhelper build-essential kernel-package libncurses5-dev 3 installation et extraction des sources du noyau : sudo aptitude install linux-source cd /usr/src sudo tar xvjf linux-source-2.6.x.tar.bz2 linux 4 création du fichier de configuration exploité pour la compilation : cd linux-source-2.6.x sudo make defconfig Création d’un fichier .config minimum. sudo make menuconfig Importation du fichier, et configuration. 5 compilation du paquetage : sudo make && make modules install make-kpkg --append-to-version ”-version perso” --initrd -us -uc buildpackage Création d’un fichier .deb à copier dans /usr/src/. 6 installation : dpkg -i linux-image-2.6.x–version perso.deb Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 18 / 116 Configuration du système Ressources matérielles au niveau du BIOS : dmidecode Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 19 / 116 Configuration du système Ressources matérielles au niveau du BIOS : dmidecode Liste des cartes additionnelles disponibles sur la machine en PCI/USB. lspci, lsusb, lspci ∣grep -i network Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 19 / 116 Configuration du système Ressources matérielles au niveau du BIOS : dmidecode Liste des cartes additionnelles disponibles sur la machine en PCI/USB. lspci, lsusb, lspci ∣grep -i network Liste des pilotes associés à une carte (Mandriva) : lspcidrake Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 19 / 116 Configuration du système Ressources matérielles au niveau du BIOS : dmidecode Liste des cartes additionnelles disponibles sur la machine en PCI/USB. lspci, lsusb, lspci ∣grep -i network Liste des pilotes associés à une carte (Mandriva) : lspcidrake Information du périphérique (-t la vitesse, etc.) : hdparm -i /dev/hda, hdparm -i /dev/sda Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 19 / 116 Configuration du système Ressources matérielles au niveau du BIOS : dmidecode Liste des cartes additionnelles disponibles sur la machine en PCI/USB. lspci, lsusb, lspci ∣grep -i network Liste des pilotes associés à une carte (Mandriva) : lspcidrake Information du périphérique (-t la vitesse, etc.) : hdparm -i /dev/hda, hdparm -i /dev/sda Liste les périphériques et leurs propriétés : lshal Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 19 / 116 Configuration du système Ressources matérielles au niveau du BIOS : dmidecode Liste des cartes additionnelles disponibles sur la machine en PCI/USB. lspci, lsusb, lspci ∣grep -i network Liste des pilotes associés à une carte (Mandriva) : lspcidrake Information du périphérique (-t la vitesse, etc.) : hdparm -i /dev/hda, hdparm -i /dev/sda Liste les périphériques et leurs propriétés : lshal Analyse de disque dur, de technologie SMART : smartctl Version et type du processeur : grep -i ”model name” /proc/cpuinfo Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 19 / 116 Configuration du système Version du noyau: uname -arv Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 20 / 116 Configuration du système Version du noyau: uname -arv État de la mémoire : free Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 20 / 116 Configuration du système Version du noyau: uname -arv État de la mémoire : free Liste des modules chargés en mémoire : lsmod Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 20 / 116 Configuration du système Version du noyau: uname -arv État de la mémoire : free Liste des modules chargés en mémoire : lsmod Ajout / suppression de modules du noyau : modprobe -a [module] modprobe -r [module] Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 20 / 116 Liste des applications et services installés Code source à compiler : *.tar.gz, *.bz2 tar xzf *.tar.gz .configure make install Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 21 / 116 Liste des applications et services installés Code source à compiler : *.tar.gz, *.bz2 tar xzf *.tar.gz .configure make install Paquetage binaires /ou sources : RPM (Red Hat Package Manager) urpmi nom du paquet ou yum install nom du paquet Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 21 / 116 Liste des applications et services installés Code source à compiler : *.tar.gz, *.bz2 tar xzf *.tar.gz .configure make install Paquetage binaires /ou sources : RPM (Red Hat Package Manager) urpmi nom du paquet ou yum install nom du paquet Paquetage binaires /ou sources : DEB (DEBian package) apt-get install nom du paquet.deb ou dpkg -i nom du paquet.deb Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 21 / 116 Liste des applications et services installés Code source à compiler : *.tar.gz, *.bz2 tar xzf *.tar.gz .configure make install Paquetage binaires /ou sources : RPM (Red Hat Package Manager) urpmi nom du paquet ou yum install nom du paquet Paquetage binaires /ou sources : DEB (DEBian package) apt-get install nom du paquet.deb ou dpkg -i nom du paquet.deb Lister les services et leurs niveaux d’exécution : chkconfig --list Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 21 / 116 Liste des applications et services installés Code source à compiler : *.tar.gz, *.bz2 tar xzf *.tar.gz .configure make install Paquetage binaires /ou sources : RPM (Red Hat Package Manager) urpmi nom du paquet ou yum install nom du paquet Paquetage binaires /ou sources : DEB (DEBian package) apt-get install nom du paquet.deb ou dpkg -i nom du paquet.deb Lister les services et leurs niveaux d’exécution : chkconfig --list Liste des services en écoute : netstat -an Hanteville (CFBS)’COMMAND∣LISTEN’ Sécurité des systèmes Linux lsof -iNicolas -n∣egrep 24/11/2009 21 / 116 Applications Paquetage binaires /ou sources : DEB (DEBian package) apt-get install nom du paquet apt-get update apt-get remove nom du paquet Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 22 / 116 Applications Paquetage binaires /ou sources : DEB (DEBian package) apt-get install nom du paquet apt-get update apt-get remove nom du paquet Fichier de configuration et source pour apt-get : /etc/apt/apt.conf /etc/apt/preferences /etc/apt/source.list Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 22 / 116 Applications Paquetage binaires /ou sources : DEB (DEBian package) apt-get install nom du paquet apt-get update apt-get remove nom du paquet Fichier de configuration et source pour apt-get : /etc/apt/apt.conf /etc/apt/preferences /etc/apt/source.list Suppression des compilateurs, une personne mal intentionnée pourrait créer des exécutables nuisibles : rpm -qa∣grep -i gcc∣xargs rpm -e Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 22 / 116 Init Init (abréviation de initialisation) est le programme sous Unix qui lance toutes les autres tâches. Il s’exécute comme un démon informatique son identifiant de processus (PID) est 1. Depuis la version 6.10 de Ubuntu c’est Upstart qui remplace sysinit. Il est même prévu qu’à terme il remplace cron, at, anacron et inetd. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 23 / 116 Run level Le fonctionnement des systèmes Unix/Linux est basé sur différents niveaux d’exécution (run level) numérotés de 1 à 6. 0 : Arrêt 1-S : Maintenance (single user) 2-5 : Mode multi-utilisateurs complet avec serveur graphique si installé. 6 : Redémarrage Les distributions à base debian (Ubuntu, Kubuntu. . .) ne différencient pas les niveaux d’exécution de 2 à 5. Dans certaines distributions (Redhat, Mandriva. . .) elles représentent : 2 : Mode multi-utilisateurs sans la couche réseau. 3 : Mode multi-utilisateurs avec la couche réseau. 4 : Inutilisé. 5 : Mode multi-utilisateurs avec le serveur graphique. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 24 / 116 Script de démarrage Les raccourcis des scripts de démarrage sont situés dans /etc/rcX.d où X prend les valeurs 0-6 et S (single user). Le script update-rc.d permet de désactiver un module du démarrage : sudo update-rc.d -f mdadm remove Attention : La suppression de certains services peut rendre le système instable. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 25 / 116 Services Modifier/voir l’état d’un service : /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom Hanteville Nicolas (CFBS) du du du du service service service service start stop restart status Sécurité des systèmes Linux 24/11/2009 26 / 116 Services Modifier/voir l’état d’un service : /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom du du du du service service service service start stop restart status Ajouter un service : update-rc.d nom du service defaults Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 26 / 116 Services Modifier/voir l’état d’un service : /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom du du du du service service service service start stop restart status Ajouter un service : update-rc.d nom du service defaults Supprimer un service : update-rc.d nom du service remove update-rc.d nom du service stop 0 1 2 3 4 5 6 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 26 / 116 Services Modifier/voir l’état d’un service : /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom /etc/rc.d/init.d/nom du du du du service service service service start stop restart status Ajouter un service : update-rc.d nom du service defaults Supprimer un service : update-rc.d nom du service remove update-rc.d nom du service stop 0 1 2 3 4 5 6 Afficher les tâches programmées : crontab -l Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 26 / 116 Processus Lister les processus : ps -aux pstree Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 27 / 116 Processus Lister les processus : ps -aux pstree Tuer un processus : kill -9 pid processus Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 27 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. /root Répertoire Home de root. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. /root Répertoire Home de root. /lib Bibliothèques et modules noyau. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. /root Répertoire Home de root. /lib Bibliothèques et modules noyau. /opt Dans ce répertoire (optionnel), on peut ajouter des logiciels afin qu’ils ne s’installent pas dans les répertoires système. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. /root Répertoire Home de root. /lib Bibliothèques et modules noyau. /opt Dans ce répertoire (optionnel), on peut ajouter des logiciels afin qu’ils ne s’installent pas dans les répertoires système. /sys et /proc Fichiers d’information sur la configuration système (les fichiers sont générés dynamiquement, pas de modifications possibles). Les fichiers dans ce répertoire n’existent pas sur le disque. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. /root Répertoire Home de root. /lib Bibliothèques et modules noyau. /opt Dans ce répertoire (optionnel), on peut ajouter des logiciels afin qu’ils ne s’installent pas dans les répertoires système. /sys et /proc Fichiers d’information sur la configuration système (les fichiers sont générés dynamiquement, pas de modifications possibles). Les fichiers dans ce répertoire n’existent pas sur le disque. /usr Programmes, données, accessibles par les utilisateurs et non nécessaires lors du boot. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /bin Fichiers utilisés pour booter le système et le noyau. /dev Tous les périphériques. /home Répertoires de connexion des utilisateurs. /root Répertoire Home de root. /lib Bibliothèques et modules noyau. /opt Dans ce répertoire (optionnel), on peut ajouter des logiciels afin qu’ils ne s’installent pas dans les répertoires système. /sys et /proc Fichiers d’information sur la configuration système (les fichiers sont générés dynamiquement, pas de modifications possibles). Les fichiers dans ce répertoire n’existent pas sur le disque. /usr Programmes, données, accessibles par les utilisateurs et non nécessaires lors du boot. /boot Fichiers utilisés pour booter le noyau Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 28 / 116 Répertoires /etc Contient les fichiers de configuration système. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Répertoires /etc Contient les fichiers de configuration système. /initrd Répertoire temporaire de chargement Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Répertoires /etc Contient les fichiers de configuration système. /initrd Répertoire temporaire de chargement /mnt et /media Répertoires contenant les systèmes de fichiers montés. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Répertoires /etc Contient les fichiers de configuration système. /initrd Répertoire temporaire de chargement /mnt et /media Répertoires contenant les systèmes de fichiers montés. /sbin Programmes nécessaires au boot, disponibles au root uniquement Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Répertoires /etc Contient les fichiers de configuration système. /initrd Répertoire temporaire de chargement /mnt et /media Répertoires contenant les systèmes de fichiers montés. /sbin Programmes nécessaires au boot, disponibles au root uniquement /tmp Répertoire temporaire. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Répertoires /etc Contient les fichiers de configuration système. /initrd Répertoire temporaire de chargement /mnt et /media Répertoires contenant les systèmes de fichiers montés. /sbin Programmes nécessaires au boot, disponibles au root uniquement /tmp Répertoire temporaire. /var Fichiers de log, spool d’impression, de mail, etc. En général, fichiers qui changent tout le temps. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Répertoires /etc Contient les fichiers de configuration système. /initrd Répertoire temporaire de chargement /mnt et /media Répertoires contenant les systèmes de fichiers montés. /sbin Programmes nécessaires au boot, disponibles au root uniquement /tmp Répertoire temporaire. /var Fichiers de log, spool d’impression, de mail, etc. En général, fichiers qui changent tout le temps. /lost+found Fichier endommagés après un crash du système. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 29 / 116 Partitions Il est très important de créer des partitions dédiées pour les points de montage importants, afin d’éviter les débordements : / /tmp/ (les fichiers temporaires) /var/ (les journaux d’audit) /home/ (les profils utilisateurs) Un bon cloisonnement du système permet sa pérennité. Lister les partitions : fdisk -l sfdisk -l cat /proc/partitions Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 30 / 116 Montage de partition Pour monter une partition il faut utiliser les commandes mount et umount avec les droits appropriés. Le fichier /etc/fstab contient les systèmes montés. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 31 / 116 Montage de partition Pour monter une partition il faut utiliser les commandes mount et umount avec les droits appropriés. Le fichier /etc/fstab contient les systèmes montés. Identifier le point de montage à utiliser : sfdisk -l ou fdisk -l ou dmesg ∣tail -15 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 31 / 116 Montage de partition Pour monter une partition il faut utiliser les commandes mount et umount avec les droits appropriés. Le fichier /etc/fstab contient les systèmes montés. Identifier le point de montage à utiliser : sfdisk -l ou fdisk -l ou dmesg ∣tail -15 Monter une clé USB : mount -t vfat /dev/sda1 /mnt/Cle FAT mount -t ntfs-3g /dev/sda1 /mnt/Cle NTFS Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 31 / 116 Montage de partition Pour monter une partition il faut utiliser les commandes mount et umount avec les droits appropriés. Le fichier /etc/fstab contient les systèmes montés. Identifier le point de montage à utiliser : sfdisk -l ou fdisk -l ou dmesg ∣tail -15 Monter une clé USB : mount -t vfat /dev/sda1 /mnt/Cle FAT mount -t ntfs-3g /dev/sda1 /mnt/Cle NTFS Monter une image ISO : mount -o loop -t iso9660 fic.iso Rep Montage Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 31 / 116 Montage de partition Pour monter une partition il faut utiliser les commandes mount et umount avec les droits appropriés. Le fichier /etc/fstab contient les systèmes montés. Identifier le point de montage à utiliser : sfdisk -l ou fdisk -l ou dmesg ∣tail -15 Monter une clé USB : mount -t vfat /dev/sda1 /mnt/Cle FAT mount -t ntfs-3g /dev/sda1 /mnt/Cle NTFS Monter une image ISO : mount -o loop -t iso9660 fic.iso Rep Montage Synchroniser et démonter un support : sync umount /mnt/Ma Cle Usb Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 31 / 116 Quotas Il est possible d’implémenter des quotas via le paquetage quota : en modifiant le fichier /etc/fstab LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 usrquota : permet de définir un quota par utilisateur. grpquota : permet de définir un quota par groupe. La documentation est disponible sur le site de redhat. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 32 / 116 Identification & authentification Definition identification = login authentification = password Le seul contrôle d’accès effectué en local sur une machine est le mot de passe !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 33 / 116 Identification & authentification Definition identification = login authentification = password Le seul contrôle d’accès effectué en local sur une machine est le mot de passe !!! Donc : utilisez un mot de passe unique et complexe (chiffres, minuscules, majuscules et caractères spéciaux) ; le mots de passe ne doit pas exister (exemple : dans un dictionnaire) ; changer régulièrement de mots de passe ; ne jamais le communiquer à un tiers ! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 33 / 116 Identification & authentification Le mot de passe est stoqué chiffré dans le fichier /etc/passwd par défaut. Les droits pour ce fichier doivent toujours être (444). Dans le fichier /etc/shadow les mots de passe sont stoqués sous forme de hash MD5. Le fichier n’est lui lisible que par root (400). Activer le chiffrement des mots de passe : (fichier /etc/login.defs) Par défaut dans les nouvelles distributions elle est activée (pour la désactiver : MD5 CRYPT ENAB no). Pour les anciennes distributions il faut activer la ligne (MD5 CRYPT ENABLE yes). Ou en utilisant les commandes : /usr/sbin/pwconv /usr/sbin/pwunconv Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 34 / 116 Identification & authentification Le chiffrement utilisé par défaut : DES a : /etc/passwd MD5 b : /etc/shadow SHA-1 c SHA-2 d : /etc/pam.d/common-password password [success=1 default=ignore] pam unix.so obscure sha512 a. DES (Data Encryption Standard) : transformation de bloc de 64 bits avec une clé secrète de 56 bits. b. MD5 (Message Digest de Ron Rivest) : hash de 128 bits avec un traitement par bloc de 512 bits, basé sur MD4. c. SHA-1 (Sécure Hash Algorithme 1) : hash de 160 bits avec un traitement par bloc de 512 bits, basé sur MD4. d. SHA-2 (Sécure Hash Algorithme 2) : hashs de 256/384/512 bits avec un traitement par bloc de 512 bits, basé sur MD4 et se présente comme la future référence. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 35 / 116 Identification & authentification Reconnaı̂tre les différents algorithmes : Format d’un hash : $ID$SALT$PWD 1 ID : méthode de chiffrement utilisée ; 2 SALT (grain de sel) : permet de diminuer la facilité de brute force sur le mot de passe ; 3 PWD : Hash/mot de passe chiffré. 1 : MD5 (Linux, BSD) 2a : Blowfish (OpenBSD) md5 : Sun MD5 5 : SHA-256 6 : SHA-512 Note : le DES ne respecte pas ce schéma, le mot de passe chiffré est directement écrit. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 36 / 116 Identification & authentification : /etc/passwd 1 Nom de compte (8 caractères alpha-numériques, minuscules) 2 Mot de passe (chiffré en DES, taille mdp min 6 et max 8 *=ne peut pas ouvrir une session, !!=pas encore utilisé, ø=pas de mdp) 3 UID (User ID) 4 GID (Groupe ID) 5 Commentaire (peut être ajouté avec la commande chfn) 6 Répertoire de connexion 7 Shell Pour éditer ce fichier de manière sécurisée il faut utiliser : /bin/vipw Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 37 / 116 Identification & authentification : /etc/shadow 1 Nom de compte (8 caractères alpha-numériques, minuscules) 2 Hash Mot de passe (MD5 + sel, taille mdp 256 max, *=ne peut pas ouvrir une session, !!=désactivé, ø=pas de mdp) 3 Âge du mot de passe (en jours depuis le 1er janvier 1970) 4 Âge minimum du mot de passe (par défaut 0) 5 Âge maximum du mot de passe (par défaut 99999) 6 Nombre de jours avant avertissement de changement de mot de passe 7 Nombre de jours avant désactivation du compte après expiration du mot de passe 8 Nombre de jours depuis activation du compte 9 Champ réservé Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 38 / 116 Identification & authentification : groupes /etc/group 1 Nom du groupe 2 Mot de passe pour s’ajouter au compte. (x indique l’utilisation du fichier gshadow) 3 GID (Groupe ID) 4 utilisateurs du groupe (membre 1, membre 2, etc.) Pour éditer ce fichier de manière sécurisée il faut utiliser : /bin/vigr /etc/gshadow Accessible qu’au compte root, activé avec le fichier shadow. 1 Nom du groupe 2 Mot de passe pour s’ajouter au compte. 3 GID (Groupe ID) 4 utilisateurs du groupe (membre 1, membre 2, etc.) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 39 / 116 Identification & authentification : /etc/login.defs 1 CHFN AUTH : authentification obligatoire pour modifier la description de compte. 2 CHFN RESTRICT : configuration pour modifier la description de compte. 3 PASS MAX DAYS et PASS MIN DAYS : âge minimum/maximum des mots de passe, en jours. 4 PASS MIN LEN : taille minimum des mots de passe. 5 PASS WARN AGE : message avant expiration du mot de passe, en jours. 6 UID MIN et UID MAX : valeur minimum et maximum des Users ID. 7 GID MIN et GID MAX : valeur minimum et maximum des Groupes ID. 8 CREATE HOME : création du répertoire home lors de la création d’un utilisateur. 9 UMASK : initialise l’UMASK de l’utilisateur (par défaut 077). 10 USERDEL CMD : exécute la commande lors de la suppression d’un utilisateur. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 40 / 116 Identification & authentification : su & sudo La commande su Nom utilisateur permet de changer d’utilisateur, sudo permet d’exécuter une commande avec des privilèges particuliers. Le fichier de configuration de sudo est /etc/sudoers. Pour éditer ce fichier de manière sécurisée il faut utiliser : /bin/visudo Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 41 / 116 Identification & authentification : su & sudo La commande su Nom utilisateur permet de changer d’utilisateur, sudo permet d’exécuter une commande avec des privilèges particuliers. Le fichier de configuration de sudo est /etc/sudoers. Pour éditer ce fichier de manière sécurisée il faut utiliser : /bin/visudo Exemple de commandes : Exécuter une commande avec les droits d’un autre utilisateur/root : sudo -u Nom utilisateur ls sudo ls Exécuter une application graphique (ici sous gnom) : gksudo wireshark Lister les commandes autorisées : sudo -l Passage en mode permanent (équivalent à un su) : sudo -i Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 41 / 116 Identification & authentification : désactiver le compte root Pour désactiver le compte root il suffit d’éditer le fichier /etc/passwd avec la commande vipw et de remplacer le shell du compte root : Remplacer : /bin/bash par : /sbin/nologin Attention : les droits doivent être convenablement appliqués !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 42 / 116 Identification & authentification : commandes utiles Ajouter un utilisateur : adduser Nom utilisateur ou adduser Nom utilisateur -g Nom Groupe Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 43 / 116 Identification & authentification : commandes utiles Ajouter un utilisateur : adduser Nom utilisateur ou adduser Nom utilisateur -g Nom Groupe Supprimer un utilisateur : userdel Nom utilisateur Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 43 / 116 Identification & authentification : commandes utiles Ajouter un utilisateur : adduser Nom utilisateur ou adduser Nom utilisateur -g Nom Groupe Supprimer un utilisateur : userdel Nom utilisateur Modifier le mot de passe d’un utilisateur : passwd Nom utilisateur Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 43 / 116 Identification & authentification : commandes utiles Ajouter un utilisateur : adduser Nom utilisateur ou adduser Nom utilisateur -g Nom Groupe Supprimer un utilisateur : userdel Nom utilisateur Modifier le mot de passe d’un utilisateur : passwd Nom utilisateur Créer un groupe : groupadd Nom groupe Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 43 / 116 Identification & authentification : commandes utiles Ajouter un utilisateur : adduser Nom utilisateur ou adduser Nom utilisateur -g Nom Groupe Supprimer un utilisateur : userdel Nom utilisateur Modifier le mot de passe d’un utilisateur : passwd Nom utilisateur Créer un groupe : groupadd Nom groupe Supprimer un groupe : groupdel Nom groupe Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 43 / 116 Pluggable Authentication Modules PAM est un moyen d’authentification modulable et centralisé. Il permet de centraliser la politique des comptes en un seul point, d’augmenter les capacités en termes de politique de sécurité et d’utiliser des méthodes d’authentification différentes (exemple : LDAP). Les fichiers importants : /etc/pam.conf est le fichier de configuration par défaut. Sous certaines distributions Mandriva, Redhat ou Debian il existe un fichier de configuration par service situé dans /etc/pam.d/ /etc/pam.d/system-auth ou /etc/pam.d/common-auth est le fichier principal. /lib/security/ ou /usr/lib/ est le répertoire contenant les modules pour PAM (pam *.so). /etc/security/ est le répertoire contenant les fichiers de configuration des modules pour PAM (access.conf, group.conf, pam env.conf, namespace.conf, limits.conf. . .). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 44 / 116 Pluggable Authentication Modules Quelques modules : pam cracklib : Politique d’exploitation des mots de passe (utilisation unique, taille, ne fait pas partie d’un dictionnaire). pam unix : Politique d’authentification par défaut. pam time : autorise un accès par heure. pam limits : Permet de limiter les ressources mises à la disposition d’un utilisateur(/etc/security/limits.conf). pam nologin : permet de désactiver les comptes (/etc/nologin). pam securrety : Vérifie que le compte root a la possibilité de se connecter sur cette console (/etc/securrety). pam warm : journalisation des informations à syslog. pam ldap : permet d’utiliser une base LDAP. ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 45 / 116 Pluggable Authentication Modules Exemple de fichier /etc/pam.d/login (sous Ubuntu) : # Interdit à root de se connecter sur la console si configuré dans /etc/securrety auth requisite pam securetty.so # Vérifie la présence du fichier /etc/nologin, si c’est le cas, seul root peut se connecter. auth requisite pam nologin.so # Utilisation de modules @include common-auth @include common-account @include common-session @include common-password Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 46 / 116 Pluggable Authentication Modules 1 Indique le type de module : ▶ ▶ ▶ ▶ ▶ 2 Drapeau de contrôle : ▶ ▶ ▶ ▶ 3 auth : authentifie l’utilisateur ; account : restriction de compte (expiration) ; password : gestion des mots de passe ; session : ouverture/fermeture de session ; @include : dépendance d’un module. required : doit réussir, mais on continue à tester les autres modules ; requisite : doit réussir, on ne continue pas à lire les autres modules et transmet un message d’échec ; sufficient : si le test est correct, on obtient immédiatement une acceptation ; optimal : est ignoré, aucun impact sur la réussite ou l’échec. Indique l’emplacement et nom du module. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 47 / 116 Pluggable Authentication Modules Possibilités avec PAM : Ajouter une machine à un domaine (linux/windows) ; Mettre des restrictions d’horaires ; Forcer des règles de complexité pour les mots de passe ; Modifier les moyens de chiffrement ; ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 48 / 116 Pluggable Authentication Modules Mise en place d’un mot de passe en SHA-512 Dans le fichier /etc/pam.d/common-password password [success=1 default=ignore] pam unix.so obscure sha512 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 49 / 116 Authentification forte L’authentification forte (TWO FACTORS AUTHENTICATION) consiste à utiliser au moins deux méthodes parmi les quatre méthodes primaires : je connais, je possède, je suis et je sais faire. Les protocoles les plus connus OTP (One Time Password) : mot de passe à usage unique. Kerberos : authentification par secret partagé. SRP (Secure Remote Password Protocol) : protection du mot de passe et de la clé de session en cas de compromission d’un des deux. Moyen de centralisation de l’authentification RADIUS (Remote Authentication Dial-In User Service) est un protocole client-serveur permettant de centraliser des données d’authentification. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 50 / 116 Cassage de mots de passe Les mots de passe sont facilement cassables sous Unix/Linux/Windows si le mot de passe ou le niveau de chiffrement est faible. Il existe un grand nombre de logiciels de cassage de mots de passe : John the ripper, L0phtcrack, Tables rainbow. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 51 / 116 Cassage de mots de passe Nous allons utiliser ici John the ripper qui est un logiciel Open Source disponible sur un grand nombre de systèmes et permettant d’attaquer un grand nombre d’algorithmes. Site Web : www.openwall.com/john Definition John the ripper lancé sans option, fonctionne par défaut en utilisant trois modes : 1 single (simple) : règles de transformations définies dans john.conf (dure quelques secondes) ; 2 wordlist (dictionnaire) : par défaut il utilise le dictionnaire intégré ou celui du système ; 3 incremental (incrémental, brute force) : génération pseudo aléatoire de mots de passe (peut être très long). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 52 / 116 Cassage de mots de passe 1 Créer un utilisateur avec un mot de passe simple, puis faire une copie du fichier shadow et modifier les droits sur le fichier. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 53 / 116 Cassage de mots de passe 1 Créer un utilisateur avec un mot de passe simple, puis faire une copie du fichier shadow et modifier les droits sur le fichier. 2 Installation : apt-get ou téléchargement et décompression : tar xvzf john-1.6.tar.gz Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 53 / 116 Cassage de mots de passe 1 Créer un utilisateur avec un mot de passe simple, puis faire une copie du fichier shadow et modifier les droits sur le fichier. 2 Installation : apt-get ou téléchargement et décompression : tar xvzf john-1.6.tar.gz 3 Compiler les sources : make linux-x86-any-elf Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 53 / 116 Cassage de mots de passe 1 Créer un utilisateur avec un mot de passe simple, puis faire une copie du fichier shadow et modifier les droits sur le fichier. 2 Installation : apt-get ou téléchargement et décompression : tar xvzf john-1.6.tar.gz 3 Compiler les sources : make linux-x86-any-elf 4 Lancer le test : ./john ./john ./john ./john 5 copie shadow ou -single copie shadow ou -wordfile:dico perso copie shadow ou -stdin tapez le mot de passe copie shadow Afficher les résultats : ./john -show copie shadow Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 53 / 116 Gestion des droits La gestion des droits s’effectue sous forme d’arborescence. Plusieurs types de fichiers : fichier, dossier, lien. . . Un fichier caché est un fichier dont le nom commence par un ”.”. Lister le contenu de tous les fichiers d’un répertoire : ls -al Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 54 / 116 Gestion des droits : inode Pour chaque fichier on considère un ensemble d’informations contenues dans l’inode (I-LIST) (contraction de index et node, en français : nœud d’index). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 55 / 116 Gestion des droits : inode Pour chaque fichier on considère un ensemble d’informations contenues dans l’inode (I-LIST) (contraction de index et node, en français : nœud d’index). Contenu de l’inode : le type de fichier les droits d’accès (lecture/écriture/exécution, propriétaire, groupe) le nombre de liens l’UID, le GID la taille du fichier une table de blocs de données ou de redirection (pour les liens) les dates de création / modification / derniers accès Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 55 / 116 Gestion des droits Le contrôle d’accès sous UNIX/LINUX fonctionne par objets manipulés (fichiers et répertoires), ils sont exploités en fonction de 3 critères : le propriétaire, le groupe du propriétaire, et les autres. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 56 / 116 Gestion des droits Le contrôle d’accès sous UNIX/LINUX fonctionne par objets manipulés (fichiers et répertoires), ils sont exploités en fonction de 3 critères : le propriétaire, le groupe du propriétaire, et les autres. Par défaut le créateur du fichier est son propriétaire, il peut modifier ces accès par la suite (on appelle cela un système discrétionnaire). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 56 / 116 Gestion des droits : lecture (r) Si c’est un fichier on peut le lire ou le copier (cat, vi, cp) Si c’est un répertoire on peut le consulter (ls), pour accéder à la suite de l’arborescence (ls -R Chemin pour le mode récursif) il faut avoir le droit d’exécution en plus. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 57 / 116 Gestion des droits : écriture (w) Si c’est un fichier on peut le modifier ou l’effacer (vi, rm) Si c’est un répertoire on peut créer ou supprimer une entrée (mkdir, rmdir, rm) et modifier les droits d’entrée. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 58 / 116 Gestion des droits : exécution (x) Si c’est un fichier il peut être exécuté. Si c’est un répertoire il a le droit de passage (cd, ls -R). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 59 / 116 Gestion des droits : modification des droits Modifier le propriétaire d’un fichier : chown utilisateur fichier Modifier le groupe propriétaire d’un fichier : chgrp groupe fichier Modifier les droits d’un fichier : chmod 777 fichier on peut aussi le faire avec +r, -w. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 60 / 116 Gestion des droits : sticky bit Le sticky bit (bit T : bit de collage) est un droit complémentaire, positionné sur un fichier il permet de garder le fichier en mémoire, si par contre il est positionné sur un répertoire, les fichiers créés dans ce répertoire ne pourront être supprimés que par le propriétaire du fichier. Il est positionné par exemple sur le répertoire /tmp/ on peut le positionner avec la commande: chmod +t /tmp Attention son utilisation excessive peut ralentir lourdement le système !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 61 / 116 Gestion des droits : liens symboliques Création d’un lien symbolique : ln -s fichier pointe fichier raccourcis Supprimer un lien symbolique : unlink fichier raccourcis Attention un lien symbolique passe outre une arborescence sécurisée et permet de modifier les droits du fichier distant, de le supprimer. . . Suivant les systèmes (sous UNIX par exemple) d’autres systèmes de droits existent avec des liaisons à des comptes systèmes. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 62 / 116 Gestion des droits : attributs Les commandes chattr et lsattr permettent de positionner et d’afficher les attributs complémentaires. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 63 / 116 Gestion des droits : attributs Les commandes chattr et lsattr permettent de positionner et d’afficher les attributs complémentaires. a : on peut seulement ajouter des données au fichier. c : compressé automatiquement par le noyau. d : désactive la sauvegarde dans une partition montée avec l’option de sauvegarde automatique dump (ext2/ext3). i : ne peut être modifié (ni supprimé, ni renommé). j : active la journalisation de modification (ext3). s : remplacement de tous les blocs du fichier lors de la suppression par des 0. u : sauvegarde du fichier en cas de suppression. chattr +i monfichier : ajoute l’attribut chattr -i monfichier : supprime l’attribut chattr =i monfichier : ne laisse que l’attribut Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 63 / 116 Gestion des droits : SUID & SGID Pour exécuter certaines commandes ou modifier certains fichiers (/etc/passwd avec la commande passwd) il faut avoir les droits propriétaires. Avec la commande chmod on peut positionner ce droit avec la valeur 4000 pour le SUID et 2000 pour le SGID, ils sont visibles avec la commande : ls -l avec un s positionné à la place du x. (ls -l /usr/bin/passwd) find / ∖( -perm -4000 -o -perm -2000 ∖) -exec ls -l {} ∖; Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 64 / 116 Gestion des droits : umask Lors de l’installation du système, un masque de permission est appliqué aux fichiers, ce masque peut être modifié avec la commande : umask -S Droits par défaut : Masque par défaut pour un fichier : rwx rwx r-x Masque par défaut pour un répertoire : rw- rw- r-- Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 65 / 116 Gestion des droits : umask Les droits sont trop permissifs par défaut, il faut donc les changer. (droits octals par défaut, 022, 027, calcul 777-022 = 755) Attention la commande gère en fonctionnement octal, mais permet d’utiliser le mode posix comme avec chmod. Binaire 000 001 010 011 100 101 110 111 Hanteville Nicolas (CFBS) Droits ----x -w-wx r-r-x rwrwx Octal 0 1 2 3 4 5 6 7 Droits Umask 7 6 5 4 3 2 1 0 Sécurité des systèmes Linux 24/11/2009 66 / 116 Gestion des droits : ACL C’est un mécanisme de contrôle supplémentaire de système discrétionnaire natif (DAC : Discretionary Access Control), il peut être implémenté avec des modules supplémentaires. Ce système n’est pas recommandé, même s’il permet de définir des accès plus sélectifs aux fichiers (ajout de droits de personnes complémentaires. . .) il n’est à installer que si l’utilisation du système l’exige. Sous HP-UX : chacl ou lsacl Sous Linux : setacl et getacl Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 67 / 116 Compression & décompression de fichiers Sous Linux il est possible de compresser en tar, gz, bz2 qui sont des formats de compression du type ZIP. Les fichiers RPM (Redhat Package Manager) et DEB (DEBian) sont des répertoires compressés. Décompression de fichiers : Décompression de tar.gz: tar xfvz fichier.tar.gz Décompression de tar.bz2 : bzip2 -d fichier.tar.bz2 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 68 / 116 Contrôle d’intégrité : présentation Lors de piratage il est important de déterminer les modifications effectuées sur le système (qui, quand, où et quoi?) L’objectif d’un contrôle d’intégrité : Détecter les intrusions : pourquoi la commande bash a-t-elle changé de taille ? Corriger une configuration : depuis hier ce logiciel ne se lance plus, qu’est-ce qui a changé ? Faire des rapports d’installation : pour savoir ce qu’un logiciel installe exactement. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 69 / 116 Contrôle d’intégrité : fonctionnement Quoi contrôler ? la taille ; les droits ; les propriétaires et groupes ; la date de modification et d’accès ; le checksum (md5, sha1) : à calculer pour détecter des modifications. Le fonctionnement : Le logiciel travaille par comparaison avec un état précédent. Il stocke cet état dans une base de données. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 70 / 116 Contrôle d’intégrité : les limites La configuration initiale : Des fichiers sont modifiés en permanence, pour ne pas être submergé de fausses alarmes, on ne peut pas surveiller tous les fichiers, ni tous les paramètres. Il y a donc un travail important de configuration initiale. Après la configuration, il faut fabriquer le premier ”état”, il doit être sûr. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 71 / 116 Contrôle d’intégrité : les mises à jour 1 Attention à ne prendre que des correctifs sûrs : si possible signés par gpg, et contrôler l’intégrité du correctif. 2 Toute mise à jour va générer de gros rapports, qu’il va falloir contrôler pour voir si ça ne masque pas une intrusion. 3 Il faut mettre à jour la base de données du contrôleur d’intégrité. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 72 / 116 Contrôle d’intégrité : intrusion Lors d’une intrusion, l’attaquant va chercher à camoufler ses traces : journaux, modification de fichiers, programmes, noyau, base de données du contrôleur d’intégrité. Solutions : chiffrement de la base de données de référence ; base de données excentrée sur un serveur externe et en lecture seule (montage de partition, CD. . .) ; contrôle aussi de l’application de contrôle d’intégrité ; logiciel excentré (support externe, partage, CDROM. . .) ; en cas de modification du noyau, on peut aussi exécuter l’application sur un support externe propre (Live CD). La solution serait d’utiliser à la fois un test local (cron table) ainsi qu’un test externe par un live CD ou une autre machine. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 73 / 116 Contrôle d’intégrité : outils Des outils : Tripwire : permet d’enregistrer les modifications apportées aux fichiers du système (empreinte CRC32, MD5. . .) AFICK (Another File Integrity Checker) : comme Tripwire mais administrable à distance via webmin. MSEC (Mandrake/Mandriva SECurity tool) : intégré sous Mandriva il permet d’établir des niveaux de sécurité. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 74 / 116 Contrôle d’intégrité : AFICK Logiciel sous licence GPL (libre), multi-plateformes, syntaxe équivalente à tripwire, codé en perl/tk, centralisation des rapports pour un parc informatique. Présentation : afick : est l’outil de base, en mode ligne de commande (script perl) ; afick-gui (optionnel) : est une interface graphique (en perl/Tk) ; afick-webmin : est un module pour webmin qui permet une administration distante via un navigateur Internet ; rtafick (en test) : un IDS (détection temps réel), basé sur couplage d’afick et de fam (file alteration monitor), une version qui tournera comme un daemon (unix) ou comme un service windows. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 75 / 116 Contrôle d’intégrité : AFICK Paquets debian nécessaires : perl, perl-base, perl-module, perl-Tk; libdigest-md5-perl, libdigest-sha1-perl. Initialisation : Initialiser la base de données : afick.pl -c configfile -i par l”interface graphique : menu Action/init Comparaison : afick.pl -c configfile -k avec mise à jour de la base : afick.pl -c configfile -u par l”interface graphique : menu Action/kompare ou Action/update Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 76 / 116 Shells et environnements restreints Definition Un shell restreint (restricted shell) est un shell système, modifiable de sorte à restreindre les possibilités des utilisateurs. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 77 / 116 Shells et environnements restreints Les différents shells connus : sh bourne SHell csh C SHell ksh Korn SHell bash Bourne Again SHell tcsh TENEX C SHell zsh Zhong Shao SHell rc Run Commands Changer de shell : /bin/ksh /sbin/zsh Afficher le shell courant : echo $0 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 78 / 116 Shells et environnements restreints Les versions restreintes de shell sont nommées avec un ’r’ devant le nom. Exemples : /bin/rbash /bin/rsh ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 79 / 116 Shells et environnements restreints Les versions restreintes de shell sont nommées avec un ’r’ devant le nom. Exemples : /bin/rbash /bin/rsh ... S’ils n’existent pas, il est possible de les appeler avec les paramètres -r ou -restricted. Exemples : /bin/bash -r /bin/sh -restricted ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 79 / 116 Shells et environnements restreints Les restrictions les plus courantes : Le répertoire courant est verrouillé (commande cd, indisponible). La modification des variables d’environnement est désactivée (SHELL, PATH, ENV. . .). Interdire l’exécution de commande avec le chemin complet (/bin/cd). Interdire la redirection de commandes (<<, >>). Désactiver des commandes spécifiques (exec). L’utilisateur ne peut exécuter que des commandes contenues dans le shell ou dans le PATH. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 80 / 116 Shells et environnements restreints Fonctionnement standard : 1 l’utilisateur se connecte (identification/authentification) ; 2 transfert vers son répertoire personnel (/home/nom utilisateur/) ; 3 lancement du shell associé au compte ; lecture par le shell (par défaut) des fichiers de configuration : 4 1 2 3 /etc/profile /etc/bash.bashrc /home/nom utilisateur/.profile et .bashrc (enregistrement du PATH). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 81 / 116 Shells et environnements restreints Fonctionnement dans un environnement restreint : 1 l’utilisateur se connecte (identification/authentification) ; 2 transfert vers son répertoire personnel (/home/nom utilisateur/) ; 3 lancement du shell associé au compte (shell restreint ici); lecture par le shell (par défaut) des fichiers de configuration : 4 1 2 /etc/profile (une condition désactive le fonctionnement standard) /home/nom utilisateur/.bash profile Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 82 / 116 Shells et environnements restreints : mise en place 1 Si le fichier /bin/rbash n’existe pas on le crée : ln -s /bin/bash -r /bin/rbash Il faut que la ligne /bin/rbash soit présente dans le fichier /etc/shells Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 83 / 116 Shells et environnements restreints : mise en place 1 Si le fichier /bin/rbash n’existe pas on le crée : ln -s /bin/bash -r /bin/rbash Il faut que la ligne /bin/rbash soit présente dans le fichier /etc/shells 2 Il faut maintenant attribuer le shell à un utilisateur en modifiant le fichier : /etc/passwd avec la commande vipw ou en exécutant la commande : usermod -s /bin/rbash nom utilisateur Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 83 / 116 Shells et environnements restreints : mise en place 1 Si le fichier /bin/rbash n’existe pas on le crée : ln -s /bin/bash -r /bin/rbash Il faut que la ligne /bin/rbash soit présente dans le fichier /etc/shells 2 Il faut maintenant attribuer le shell à un utilisateur en modifiant le fichier : /etc/passwd avec la commande vipw ou en exécutant la commande : usermod -s /bin/rbash nom utilisateur 3 Appliquer des droits restrictifs aux répertoires et fichiers de l’utilisateur : ▶ ▶ /home/home utilisateur : 511, propriétaire : root (à créer) /home/home utilisateur/.bash profile : 444, propriétaire : root Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 83 / 116 Shells et environnements restreints : mise en place 1 Si le fichier /bin/rbash n’existe pas on le crée : ln -s /bin/bash -r /bin/rbash Il faut que la ligne /bin/rbash soit présente dans le fichier /etc/shells 2 Il faut maintenant attribuer le shell à un utilisateur en modifiant le fichier : /etc/passwd avec la commande vipw ou en exécutant la commande : usermod -s /bin/rbash nom utilisateur 3 Appliquer des droits restrictifs aux répertoires et fichiers de l’utilisateur : ▶ ▶ 4 /home/home utilisateur : 511, propriétaire : root (à créer) /home/home utilisateur/.bash profile : 444, propriétaire : root Pour chacune des applications que l’on veut rendre disponible, on crée un lien symbolique. Par exemple dans : /usr/local/rbin/ ln -s /usr/bin/passwd /usr/local/rbin/passwd Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 83 / 116 Shells et environnements restreints : mise en place 5 Pour que le fichier /etc/profile n’influence pas le rbash on le modifie : if [”$0” = ”-bash”]; then #contenu du fichier fi Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 84 / 116 Shells et environnements restreints : mise en place 5 Pour que le fichier /etc/profile n’influence pas le rbash on le modifie : if [”$0” = ”-bash”]; then #contenu du fichier fi 6 Le fichier /home/home utilisateur/.bash profile doit contenir : export PATH=/usr/local/rbin on peut aussi préciser les commandes interdites il suffit d’ajouter à la fin du fichier : enable -n pwd unset Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 84 / 116 Shells et environnements restreints : shell escape Definition Toutes les applications ne permettent pas l’utilisation de shell restreint, mais possèdent parfois une fonction intégré qui permet d’appeler le shell (shell escape). Cette fonction est en général appelée par le caractère !. Avec ftp, si vous voulez consulter la liste des fichiers dans le répertoire courant il suffit d’utiliser la commande : ! ls -al Exemple application utilisant le shell escape : telnet, ftp, mail ; less, more, vi. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 85 / 116 Configuration réseau Lors de la mise en place d’un réseau, il faut étudier l’architecture en fonction de nos besoins, mettre en place les éléments sécurisés qui conviennent (firewall, proxy, sondes IDS/IPS). Prendre en compte la sécurisation du réseau pour chaque couche (modem, PABX, routeur, switch, réseau, applications, utilisateur et sensibilisation). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 86 / 116 Configuration réseau : commandes ifconfig -a ou more /etc/sysconfig/network ou more /etc/network/interfaces route (Attention ARP poisoning, DOS, Man In The Middle) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 87 / 116 Configuration réseau : commandes ifconfig eth0 IP netmask 255.255.255.0 ifconfig eth0 hw ether adresse MAC ifconfig eth0 down / up pour d’autres options voir ifconfig -help via le client dhcp (si un serveur existe) dhclient On peut aussi modifier les fichiers de configuration : Réseau : /etc/sysconfig/network Liste des serveurs DNS : /etc/resolv.conf Résolution de nom statique : /etc/hosts Ordre de résolution de nom : /etc/host.conf Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 88 / 116 Renifleurs / Analyseurs réseau Definition Ils permettent d’afficher les informations lues par la carte réseau. Les plus connus sont Wireshark (ex Ethereal), TCPdump. . . 1 Que peut-on récupérer avec un sniffer? 2 Qu’est-ce que le mode promiscuous? Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 89 / 116 Renifleurs / Analyseurs réseau Definition Ils permettent d’afficher les informations lues par la carte réseau. Les plus connus sont Wireshark (ex Ethereal), TCPdump. . . 1 Que peut-on récupérer avec un sniffer? 2 Qu’est-ce que le mode promiscuous? 1 Les trames qui sont reçues par la carte la réseau. 2 Il permet d’écouter toutes les trames et pas seulement celles destinées à nos cartes réseaux. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 89 / 116 Les services réseaux Definition Application permettant la communication (serveur) à travers un médium. Les services les plus connus : Telnet, FTP, HTTP, SNMP, SMTP, SSH. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 90 / 116 Les services réseaux Definition Application permettant la communication (serveur) à travers un médium. Les services les plus connus : Telnet, FTP, HTTP, SNMP, SMTP, SSH. . . Problématique des services non sécurisés ? (Telnet, FTP, SNMP, SMTP. . .) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 90 / 116 Les services réseaux Definition Application permettant la communication (serveur) à travers un médium. Les services les plus connus : Telnet, FTP, HTTP, SNMP, SMTP, SSH. . . Problématique des services non sécurisés ? (Telnet, FTP, SNMP, SMTP. . .) Les identifiants , mots de passe et les données transitent en clair. Attention aux bannières trop verbeuses !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 90 / 116 Les services réseaux : TELNET Définition : Telnet (TErminal NETwork/TELecommunication NETwork/TELetype NETwork) est un protocole réseau utilisé sur tout réseau supportant le protocole TCP/IP. Il appartient à la couche session du modèle OSI et à la couche application du modèle ARPA. Il est normalisé par l’IETF (RFC 854 et RFC 855). Selon, l’IETF, le but du protocole Telnet est de fournir un moyen de communication très généraliste, bi-directionnel et orienté octet. Il est non sécurisé (toutes les transactions passent en clair sur le réseau). Éviter d’utiliser TELNET, préférer OpenSSH/SSH ! Les r-commandes rlogin, rcp sous Unix ou rsh, rexec sous Linux Elles permettent d’effectuer des commandes distantes simplement par réseau/IP de confiance (trusted hosts). Ce système est à éviter, car lorsqu’une machine du réseau est touchée toutes les autres le sont aussi (utilisé par le ver Morris). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 91 / 116 Les services réseaux : FTP Définition : FTP : File Transfert Protocol (port 21 TCP pour les commandes et 20 TCP pour les données), protocole non chiffré permettant la réception et l’envoie de fichier, RFC 959. . . Il fonctionne en mode actif/passif et gère l’envoie de fichier binaire, transforme automatiquement les fichiers ASCII (gestion des systèmes de fichier UNIX/WINDOWS) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 92 / 116 Les services réseaux : FTP Définition : FTP : File Transfert Protocol (port 21 TCP pour les commandes et 20 TCP pour les données), protocole non chiffré permettant la réception et l’envoie de fichier, RFC 959. . . Il fonctionne en mode actif/passif et gère l’envoie de fichier binaire, transforme automatiquement les fichiers ASCII (gestion des systèmes de fichier UNIX/WINDOWS) Points à vérifier : Rendre anonyme la bannière de connexion. Le compte Anonymous doit être désactivé Un filtrage doit être appliqué sur les IP des clients. Des ACL doivent être appliquées aux dossiers pour limiter l’écriture et la lecture. L’utilisation du FTP doit être limité au strict minimum (pas de centralisation de tous les journaux d’audit, mise à jour antivirus. . .). Le service doit être cloisonné (limiter les accès de l’application sur le système, CHROOT). Une journalisation des actions des clients distants doit être implémentée. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 92 / 116 Les services réseaux : SMTP Définition : SMTP (Protocole simple de transfert de messagerie) est un protocole réseau basé sur TCP/IP utilisant le port 25, permettant l’envoie de messages électronique (mails), RFC 4409. . . Il est non sécurisé (toutes les transactions passent en clair sur le réseau), mais il est possible d’implémenter du SSL pour chiffrer la connexion. En cas d’envoi de fichiers, le fichier est intégré dans la message en texte : codés en BASE64. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 93 / 116 Les services réseaux : SMTP Définition : SMTP (Protocole simple de transfert de messagerie) est un protocole réseau basé sur TCP/IP utilisant le port 25, permettant l’envoie de messages électronique (mails), RFC 4409. . . Il est non sécurisé (toutes les transactions passent en clair sur le réseau), mais il est possible d’implémenter du SSL pour chiffrer la connexion. En cas d’envoi de fichiers, le fichier est intégré dans la message en texte : codés en BASE64. Envoie d’un mail en SMTP et écoute avec Wireshark : Utilisation de TELNET. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 93 / 116 Les services réseaux : SMTP Exemple d’envoi de message : telnet 192.168.2.5 25 EHLO Jo MAIL FROM :<[email protected]> RCPT TO :<[email protected]> DATA From : Jo <[email protected]> Subject : test To : Chef <[email protected]> Mon message. . . QUIT Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 94 / 116 Les services réseaux : SMTP Points à vérifier : Rendre anonyme la bannière de connexion. L’envoi de mail ne doit être autorisé qu’après authentification. Lors de l’envoi de mail l’expéditeur doit être l’utilisateur authentifié. Lors de l’envoi de mail le destinataire doit être vérifié sinon le message doit être supprimé. Un quota d’espace de stockage utilisateur doit être implémenté. La taille des pièces jointes doit être limitée (en émission et réception). Les messages et pièces jointes doivent être automatiquement testés par un antivirus. Le service doit être cloisonné (limiter les accès de l’application sur le système, CHROOT). Les connexions au serveur et envois de mails doivent être journalisés (avec IP des clients). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 95 / 116 Les services réseaux NFS : Network File System Permet le partage de ressources (fichiers) de manière transparente. Depuis la version 4, ce service est mieux sécurisé. NIS/NIS+ : Network Information Service Son but est de distribuer les informations contenues dans des fichiers de configuration (/etc/hosts, /etc/passwd. . .). NIS est maintenant remplacé par Kerberos, LDAP, Radius. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 96 / 116 Les services réseaux : DNS DNS Domain Name System, est un service permettant d’établir une correspondance entre une adresse IP et un nom de domaine. Port 53 en UDP (résolution) et TCP (transfert de zone). BIND (Berkeley Internet Name Domain) est un service DNS. Quelques outils pour afficher les informations du DNS : host, dig et nslookup. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 97 / 116 Les services réseaux : DNS DNS Domain Name System, est un service permettant d’établir une correspondance entre une adresse IP et un nom de domaine. Port 53 en UDP (résolution) et TCP (transfert de zone). BIND (Berkeley Internet Name Domain) est un service DNS. Quelques outils pour afficher les informations du DNS : host, dig et nslookup. . . Liste des serveurs de messagerie de gouv.fr : nslookup -type=MX gouv.fr Lecture de toutes les informations du DNS gouv.fr : nslookup -type=any gouv.fr Transfert de zone : nslookup serveur DNS-de-transfert ls -d DNS-cible Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 97 / 116 Les services réseaux : HTTP HTTP HyperText Transfer Protocol, est un protocole de communication client-serveur développé pour le World Wide Web. Lecture de l’entête d’une page (exemple : unik.orange.fr) : telnet unik.orange.fr 80 HEAD / HTTP/1.0 Lecture d’une page : telnet unik.orange.fr 80 GET / HTTP/1.0 Exemple de recherche WEB en utilisant les google hack, pour rechercher les sous domaines d’un domaine : -inurl: orange.fr Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 98 / 116 Les services réseaux : SNMP SNMP Simple Network Management Protocol, est un protocole de communication qui permet aux administrateurs réseau de gérer les équipements du réseau, superviser et de diagnostiquer des problèmes réseaux, matériels à distance. Il existe plusieurs versions du protocole : V1 et V2 sont peu sécurisés, la connexion s’effectue grâce à un nom de communauté (privé et public) qu’il convient de modifier, préférer la V3 qui ajoute des mécanismes complémentaires de sécurité (chiffrement, authentification. . .) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 99 / 116 Les services réseaux : X11 XWindows (X11) Protocole peu sécurisé sert à l’affichage d’applications graphiques. Il fonctionne en modèle client-serveur (local/distant). Un serveur X est un serveur permettant l’envoi de données d’affichage. Plusieurs commandes permettent son utilisation: xhosts : permet de restreindre les clients pouvant s’y connecter. xauth : permet une authentification par clé de 32 chiffres hexadécimaux. Pour plus amples informations consulter l’aide. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 100 / 116 Les services réseaux : GPG & SSH 2 types de chiffrement nous intéressent ici : symétrique et asymétrique. le chiffrement des messages afin de garantir la confidentialité; l’authentification dans un environnement physique et logique, la signature des documents numériques (auteur/frauduleux); la garantie d’intégrité des données PGP Pretty Good Privacy de Philip Zimmerman : solution gratuite équivalente à GPG. GPG Fonctionnement par réseau de confiance, avec des certificats, clés publiques, clés privées, permet la signature des messages, le chiffrement des données. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 101 / 116 Les services réseaux : SSH Secure SHell, permet une administration distante sécurisée par tunneling (telnet, SFTP, SCP, redirection chiffrée) Attention! SSH est un protocole, qui englobe un grand nombre de fonctions. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 102 / 116 Les services réseaux : SSH Secure SHell, permet une administration distante sécurisée par tunneling (telnet, SFTP, SCP, redirection chiffrée) Attention! SSH est un protocole, qui englobe un grand nombre de fonctions. Copie d’un fichier à partir d’un serveur vers le répertoire courant : scp login@serveur:Chemin/Fichier Copie d’un répertoire vers le serveur : scp -r [répertoire] login@serveur:Chemin Redirection locale de port (-L, -R pour remote), ouvre une connexion entre le Ip local:port vers Ip distant:port en utilisant le serveur SSH login@serveur:port : ssh login@serveur:port -L Ip local:port:Ip distant:port Fichier de configuration du serveur SSH : /etc/ssh/sshd config Fichier de configuration du client SSH : /etc/ssh/ssh config Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 102 / 116 Les services réseaux : SSH Paramètres de /etc/ssh/sshd config : #Port du service, il vaut mieux le changer. Port 22 #Version du protocole de communication utilisé, ne laisser que 2. Protocol 2 #Ne pas autoriser la connexion directe avec root. PermitRootLogin no #Ne pas autoriser la redirection TCP. AllowTcpForwarding no #N’autorise l’utilisation de SSH que pour le compte toto #(même principes avec AllowGroups, DenyGroups ou DenyUsers). AllowUsers toto #Message s’affichant lors de la connexion au service. Banner fichier.txt #Adresse IP et port d’écoute de SSH. ListenAddress host:port #Nombre maximum de connexion non authentifiées au service SSH. MaxStartups 5 Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 103 / 116 Les services réseaux : SSH Paramètres de /etc/ssh/sshd config : #(Par défaut) Spécifie si l’authentification par mot de passe est autorisée. PasswordAuthentication yes #(Par défaut) Spécifie si un mot de passe vide est autorisée. PermitEmptyPasswords no #Clé de connexion pour une machine, fortement recommandé d’en utiliser une. HostKey $SYSCONFDIR/ssh host key #(Par défaut) Spécifie si on autorise les redirections X11. X11Forwarding no #Paramètres d’authentification par clé ou service : #HostbasedAuthentication, RhostsRSAAuthentication, HostKey, #KerberosAuthentication, PAMAuthenticationViaKbdInt. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 104 / 116 CHROOT CHROOT est une commande qui permet de modifier la racine virtuelle d’un programme. Son application permet de restreindre l’accès aux fichiers en cas d’exploitation d’une vulnérabilité, qui permettrait d’accéder au répertoire racine de la machine hôte. (exemple: buffer-overflow : dépassement de tampon) Il permet également de faire tourner plusieurs instances d’un même ensemble de services ou démons sur la même machine hôte. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 105 / 116 CHROOT CHROOT est une commande qui permet de modifier la racine virtuelle d’un programme. Son application permet de restreindre l’accès aux fichiers en cas d’exploitation d’une vulnérabilité, qui permettrait d’accéder au répertoire racine de la machine hôte. (exemple: buffer-overflow : dépassement de tampon) Il permet également de faire tourner plusieurs instances d’un même ensemble de services ou démons sur la même machine hôte. Dans le cas où un service n’est pas chrooté, l’exploitation d’une vulnérabilité de type buffer-overflow pourra nous permettre de remonter dans l’arborescence des fichiers avec les droits de l’utilisateur exécutant l’application. Donc le daemon doit être lancé avec un minimum de droits !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 105 / 116 Les services réseaux Il existe plusieurs méthodes pour sécuriser les services réseaux : en appliquant les droits adéquats aux services (droits des fichiers, droits d’exécution) ; en recompilant les applications qui le permettent (avec la fonction chroot()) ; en modifiant la racine (commande CHROOT) sur le service; en créant un compte restreint pour l’application (compte dédié et shell restreint) ; en recopiant en local les commandes utilisées par l’application, avec les droits associés; en modifiant le port par défaut et en supprimant les bannières verbeuses (version, heure. . .). Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 106 / 116 Scanner de ports et vulnérabilités : Nmap Nmap C’est un scanner de ports open source (le plus connu) qui permet de lister les ports ouverts et de déterminer les services associés. Fonctionnalités scan de ports de machines découverte de services liés aux ports Ping Of Death scan de ports par rebond ... Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 107 / 116 Scanner de ports et vulnérabilités : Nmap Nmap C’est un scanner de ports open source (le plus connu) qui permet de lister les ports ouverts et de déterminer les services associés. Fonctionnalités scan de ports de machines découverte de services liés aux ports Ping Of Death scan de ports par rebond ... Scanner une machine : nmap -F IP nmap -vv -sV -sR -sS -sU -p10-500 192.168.0.1 -oX FichierResultat.xml Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 107 / 116 Scanner de ports et vulnérabilités : Nessus Nessus C’est un scanner de vulnérabilités open source en deux parties (client-serveur). Le serveur est celui qui va scanner la machine distante. Le client est celui qui va envoyer les ordres d’exécution au serveur. La dernière version n’est plus open source, mais reste gratuite à usage personnel. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 108 / 116 Scanner de ports et vulnérabilités : Nessus Il faut créer un utilisateur avec la commande nessus-adduser. Lancer le daemon nessusd -D (les plugins vont se charger). Exécuter ensuite le client nessus& puis indiquer les logins + mdp. Sélectionner les pluggins qui nous intéressent. Effectuer un scan d’un poste. Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 109 / 116 Les Antivirus Sous Linux il existe des virus et des antivirus (clamav)!!! Sous Linux il existe des chevaux de Troie !!! Les mails sont de plus en plus infectés par des virus (SPAM, hoax). Donc installer et mettre à jour l’antivirus !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 110 / 116 Journalisation Syslog (syslogd) est l’application de gestion centralisée des journaux d’audit. Les applications utilisent syslog, pour un utilisateur il faut utiliser la commande logger. Le fichier de configuration de syslog : /etc/syslog.conf Fonctionnement du fichier : service.priorité fichier de destination Exemple : mail.info /var/log/mail.info Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 111 / 116 Journalisation Les différents services kern : noyau user : processus utilisateur mail : messagerie lpr : impression auth : authentification daemon : processus / services local : réservé à l’utilisation de code local mark : permet la consigne de message automatique cron : généré par les gestionnaires de tâches planifiées (cron, at) Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 112 / 116 Journalisation Les différents niveaux de priorité emerg : envoi global, le système est HS alert : doit être corrigé immédiatement crit : panne matérielle err : erreur générique warning : avertissement notice : pas une erreur mais nécessite un traitement particulier info : information debug : information dans un contexte de déboguage Attention : les niveaux de priorités info et debug ne doivent pas être présents sur un système en production !!! Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 113 / 116 Journalisation : analyse des journaux Les fichiers de journalisation peuvent être conséquents (plusieurs Go) il faut donc établir un traitement pour exploiter ces journaux. outils existants logcheck, swatch, logwatch, log3c, sfs, log-analysis. . . Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 114 / 116 Liens Compilation de noyau : http://doc.ubuntu-fr.org/tutoriel/ compiler_linux?s[]=compiler&s[]=noyau Configurer GRUB : http://doc.ubuntu-fr.org/grub Configurer LILO : http://doc.ubuntu-fr.org/lilo GAG (Graphical Boot Manager) : http://gag.sourceforge.net/download.html Syslinux (un autre gestionnaire de BOOT) : http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project PAM (Pluggable Authentication Modules) : http://www.linux-kheops. com/doc/cours/jgourdin/outils-tcp-ip/Linux-pam.html Guides d’administration : http://www.morot.fr/ AFICK : http://eric.gerbier.free.fr/controle_integrite.html Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 115 / 116 Des questions ? Contact : [email protected] Hanteville Nicolas (CFBS) Sécurité des systèmes Linux 24/11/2009 116 / 116