Introduction
Pourquoi Debian ?
Il n’est pas rare, en entreprise, lors de l’initialisation d’un nouveau projet ou d’un nouveau serveur, de se poser des questions sur la sécurité. Du moins, ce serait logique d’y réfléchir sérieusement avant de se lancer dans la mise en œuvre et la programmation d’une nouvelle application.
Malheureusement, dans les faits, ce n’est pas toujours le cas, et beaucoup choisissent la voie de la facilité et de la rapidité. Les causes invoquées sont souvent l’aspect pécuniaire et les contraintes de temps. Par conséquent, certains logiciels se retrouvent avec des failles de sécurité assez importantes. Indépendamment de cela, les serveurs ne sont pas toujours étudiés pour rendre le service pour lequel ils sont conçus. Enfin, l’infrastructure n’est pas non plus toujours optimale.
Pour toutes ces raisons, les applications informatiques deviennent les bêtes noires des utilisateurs alors qu’elles sont censées leur rendre service. Une fois ce constat effectué, il est intéressant de se poser aussi la question « pourquoi doit-on sécuriser les données manipulées au travers d’un ou plusieurs serveurs de l’entreprise ou via le réseau ? ».
En fait, la réponse se trouve dans l’architecture et le mode de fonctionnement même du réseau tel qu’on l’utilise : la pile réseau TCP/IP émet des trames selon un principe d’émission, appelé broadcast. Ainsi, certains paquets peuvent être récupérés et analysés par un tiers, sans que ce dernier ne soit concerné par la diffusion.
Il faut aussi reconnaître que les entreprises cherchent à faire baisser les coûts de production, tout en ayant un support efficient. La plupart intègrent les services déjà en place : très souvent, il s’agit d’infrastructure Active Directory (Microsoft Windows) et de réseaux WINS (Windows Internet Name Service) associés. Ceci suffisait il y a encore quelques années, au temps où certains actes de piraterie n’existaient pas encore.
Mais, aujourd’hui avec l’apparition et l’amélioration des systèmes...
Généralités sur la sécurité
Maintenant que les actions à mettre en place sont plus claires, il est possible de résumer la situation de la façon suivante : sécuriser un système revient à le protéger contre un fonctionnement imprévu ou défectueux, voire même un dysfonctionnement.
Il peut s’agir :
-
d’une panne matérielle ou d’un dysfonctionnement,
-
d’une erreur de programmation ou d’une faille logicielle,
-
d’un utilisateur malveillant, voire indésirable.
1. Sécurité et sûreté de fonctionnement
En termes de responsabilités, la sécurité est l’affaire de tous. Par contre, la sûreté de fonctionnement concerne la direction informatique, qui doit définir une stratégie de sécurité devant être respectée de tous.
Un peu à la façon dont une maison est sécurisée, en la divisant en zones maîtrisées, et en regroupant l’ensemble sur une alarme centralisée, il faut alors intervenir sur les serveurs à différents niveaux et sécuriser les points suivants :
-
l’installation et l’outil la pilotant,
-
le système d’exploitation,
-
l’environnement proposé aux utilisateurs,
-
les téléchargements et les mises à jour,
-
le réseau,
-
les services opérationnels sur le serveur,
-
les bases de données,
-
les logiciels installés,
-
mutualiser les ressources (virtualisation, partages et mise en cluster).
Il faut toujours disposer de sauvegardes à jour, ainsi que de mécanismes redondants sur les différents points évoqués ci-dessus. On peut aussi envisager la création et le montage d’un cluster de services permettant non seulement la reprise des opérations en cas d’interruption, mais également l’équilibrage de charge et la gestion de qualité de services. Cela a pour but de garder un œil sur l’évolution et le rendu des différents services opérationnels du système.
La sécurité de l’architecture ne peut être complète sans un mécanisme antiviral et une détection...
Quels sont les éléments à sécuriser sur GNU/Linux
Afin de mieux comprendre l’ampleur de la tâche et de percevoir la difficulté, peut-être est-il utile de revoir rapidement comment un système GNU/Linux et son noyau linux s’initialisent, en décomposant, sous forme de rappels, les différents éléments d’interaction.
Le système d’exploitation GNU/Linux est un système fondé autour d’un noyau (aussi appelé kernel) embarquant lui-même du code applicatif sous forme de modules, chargés dans une image appelée l’initrd. L’impulsion donnée au démarrage est initiée grâce à un programme, appelé chargeur au démarrage (ou bootloader). Une fois l’étape initiale passée, un programme d’initialisation est exécuté au travers d’un interpréteur du système (appelé shell) et qui permet l’exécution des applications.
En ce qui concerne la première phase, au démarrage, nous allons donc devoir prêter attention aux éléments suivants :
-
le BIOS
-
le bootloader
-
le noyau linux
-
les modules
-
l’initrd
-
les pseudo-systèmes de fichiers
-
la mémoire
Suite à cette première phase de démarrage, il faut être conscient que le noyau contient du code et que laisser les anciens noyaux en place peut nuire à la sécurité et à la stabilité de l’écosystème de la machine. Il convient donc d’effectuer un ménage régulier des anciens noyaux, en supprimant les fichiers associés. Nous détaillerons d’ailleurs, lors de cette section, les différents jalons d’un démarrage standard du noyau linux. Voyons maintenant le détails des structures énoncées ci-avant.
1. Le BIOS
Le BIOS (ou Basic Input/Output System) est un système d’entrées/sorties contenant l’ensemble des fonctions de la carte mère d’un serveur, permettant d’effectuer les opérations élémentaires depuis la mise sous tension, jusqu’à la mise en œuvre du système d’exploitation.
Ces fonctions ou ce code sont très souvent contenus en zone mémoire...
Suppression des anciens noyaux
Lorsque l’on a ajouté un nouveau noyau, il est prudent aussi de s’intéresser aux anciens noyaux encore présents et éventuellement de les faire disparaître pour :
-
faire de la place au niveau système,
-
ne pas être confronté à d’anciens bugs système, à cause du code embarqué,
-
ne pas avoir de disparité de versions.
Pour toutes ces excellentes raisons, il faut établir une procédure rigoureuse permettant d’effacer les anciennes versions de noyaux.
1. Phase d’initialisation init
Cette partie représente la dernière étape d’initialisation du système d’exploitation. Le mini-système de l’image initrd continue de fonctionner le temps que son système de fichiers racine bascule sur celui, lu, depuis le disque dur. Le programme init est le premier processus à être démarré sur le système d’exploitation. Il porte d’ailleurs le PID n°1. Il commande l’exécution de plusieurs sous-programmes. Cette instruction se trouve par défaut dans /sbin/init. Un tiers malveillant peut le dérouter en exécutant l’instruction :
...init=/new/chemin
Mais cela a été empêché en sécurisant le menu du chargeur initial par un mot de passe et en sécurisant le BIOS.
Jusqu’à la version Debian Squeeze, le mécanisme utilisé s’apparentait à une initialisation simple style SysV. Mais, depuis la version Debian 7 (Wheezy), le système ordonnance la séquence de boot et utilise alors les en-têtes LSB (Linux Standard Base) en lançant des exécutions parallèles de scripts de démarrage :
Dans le modèle SysV, le processus de démarrage s’articule de la façon suivante :
1. |
Passage au niveau N de fonctionnement (appelé runlevel N) afin d’initialiser le système selon ce qui est décrit dans le fichier /etc/inittab ; |
2. |
Passage au niveau S de fonctionnement pour démarrer le système dans un mode d’utilisation non concurrentiel et terminer l’initialisation matérielle ; |
3. |
Démarrage des services complémentaires du système et passage à un des niveaux... |
La sécurité fondamentale
Quoi qu’il en soit, sur n’importe quel serveur, lorsque l’on souhaite travailler sur le système, il est essentiel de toujours commencer par sécuriser au moins les éléments d’accès, indépendamment des points que l’on va développer, par la suite, tout au long de cet ouvrage. Pour ce faire, il faut :
-
sécuriser le compte avec lequel on doit travailler, en utilisant un mot de passe fort ;
-
restreindre le nombre de comptes « ouverts » permettant de se connecter au système ;
-
mettre en œuvre une politique de gestion de mots de passe avec changement régulier ;
-
Fermer les services inutiles en les rendant inutilisables.
1. Sécurisation des comptes utilisateurs
Avant de commencer à mettre en œuvre la sécurité, on ne peut négliger le fait de disposer d’un mot de passe suffisamment fort sur le ou les comptes avec lesquels on souhaite travailler. En effet, en informatique le b.a-ba de la sécurisation passe par la conception d’un mot de passe fort ou robuste, servant à se protéger d’attaques dites « force brute ».
La création d’un tel mot de passe répond à plusieurs critères importants :
-
Le mot de passe doit comporter au moins dix caractères.
-
Il ne doit contenir aucun nom d’utilisateur, de famille ou de nom d’entreprise.
-
On ne doit pas utiliser de mots entiers.
-
On doit combiner des lettres minuscules, capitales, des chiffres, des caractères spéciaux ( ;:?/&§ !...) et/ou nationaux comme les signes diacritiques.
-
On peut également volontairement introduire des fautes d’orthographe.
On doit toutefois respecter certaines règles de prudence quant à la constitution de ce genre de mot de passe :
-
On doit renouveler régulièrement les mots de passe qui protègent les contenus ou les accès les plus sensibles.
-
Il ne faut jamais utiliser le même code pour sécuriser plusieurs accès et/ou comptes. Même si cela engendre la gestion de plusieurs types de mots de passe.
-
On ne doit bien évidemment jamais communiquer son mot de passe.
-
Enfin, il faut toujours se déconnecter d’un service, ou d’un système, avant...