---
# System prepended metadata

title: Sécurité Linux
tags: [Sécurité Linux]

---

# Mesures de sécurité préalables
Avant de s'intéressé au renforcement du système d'exploitation en lui même, il convient de prendre des mesures de sécurité préalables, notamment concernant la configuration matérielle de notre système.
## Configuration du BIOS
:::spoiler
Recommandation ANSSI : R2  
Niveau de sécurisation : 2/4
:::
:::warning
Les rubriques à consulter peuvent différer selon le constructeur de la carte mère.  
:::
### Mot de passe d'accès aux ressources
Un accès au BIOS peut permettre d'accéder aux ressources de l'ordinateur (périphériques, politique de sécurité, etc) et de les modifier, il convient donc de le protéger.

Il est possible de demander un mot de passe à tout utilisateur souhaitant modifier des paramètres du BIOS.

Pour cela, il faut :
1. Accéder au BIOS ;
2. Aller dans la rubrique "sécurité" (l'IHM peut dépendre du fabriquant de la carte mère) ;
3. Sélectionner "Set Supervisor Password" et entrer un mot de passe ;
4. Modifier le paramètre "Password on boot" à "Enabled".
:::info
Il est aussi possible de définir un mot de passe pour un utilisateur lambda en sélectionnant "Set User Password". La différence entre le "Supervisor" et le "User" est que le premier pourra modifier les paramètres du BIOS, tandis que le dernier ne pourra que les consulter.
:::
### Activation du Secure Boot
:::spoiler
Recommandation ANSSI : R3  
Niveau de sécurisation : 2/4
:::
Faire booter l'appareil sur un périphérique externe peut permettre de modifier des paramètres systèmes et constitue donc un risque majeur. Il convient donc d'activer le "Secure Boot" afin d'empécher le démarrage du système sur un périphérique externe.

Pour activer le "Secure Boot":
1. Accéder au BIOS et renseigner le mot de passe du superviseur défini précédemment ;
2. Accéder à la rubrique "Security" ;
3. Modifier le paramètre "Secure Boot" à "Enabled".
### Désactivation de certains ports
Certains ports (ou fonctions), si détectés, peuvent lancer l'installation de services inutiles, voir dangereux. Il convient donc de les désactiver. Il ne faut laisser activé que les ports (ou fonctions) qui seront utilisé par les utilisateurs dans le cadre de l'utilisation normale de l'appareil (par exemple, si un périphérique externe de stockage doit être branché sur la machine, il faut laisser activé le port USB qui sera utilisé).

Pour désactiver les ports/fonctions au choix:
1. Accéder au BIOS et renseigner le mot de passe du superviseur défini précédemment ;
2. Accéder à la rubrique "Advanced" (ou "Security", dépend du BIOS) ;
3. Passer le paramètre des ports/fonctions à désactiver à "Disabled".
:::warning
Certains BIOS ne proposent pas de gérer les ports USB. C'est par exemple le cas du BIOS des PC portables, limité en fonctionnalités.
:::
# Installation de Debian
:::spoiler
Recommandation ANSSI : R31, R58, R59  
Niveau de sécurisation : 1/4
:::
Le  mot de passe root est généré à partir de la commande « pwgen -y 16 ».  Nous créons un utilisateur lambda Jean dont le mot de passe est généré  de la même manière.

Dans l'étape de partitionnement du disque, nous choisissons l'option "Assisté - utiliser tout un disque avec LVM chiffré".

Exceptionnellement  pour ces tests, nous choisissons de ne créer qu'une seule partition. En  situation réelle, nous aurions crée au moins une autre partition afin  d'y écrire les journaux logs (qui prennent beaucoup de place).

Le mot de passe utilisé pour le chiffrement est aussi généré depuis la commande « pwgen -y 16 » sur une autre machine Linux.

Pour  le choix des logiciels à installer, nous ne souhaitons pas disposer  d’interface graphique (seulement en ligne de commande). De plus, nous ne  souhaitons disposer que des utilitaires usuels du système Debian ainsi  que d’un utilitaire permettant de configurer un serveur SSH. 

Le partitionnement final est donc le suivant:
![lsblk](https://hackmd.io/_uploads/ByIiEoG0R.png)
## Sécurité post-installation
Maintenant que notre système est installé, nous pouvons appliquer certaines mesures de sécurité dès maintenant.
### Protection du chargeur de démarrage
:::spoiler
Recommandation ANSSI : R5  
Niveau de sécurisation : 2/4
:::
Avant que le système ne boot sur un système d'exploitation, le chargeur de démarrage GNU GRUB permet d'accéder à tous les fichiers système sans restriction. Nous souhaitons donc restreindre l'accès au terminal et aux paramètres du GRUB par un mot de passe. Pour cela, nous allons créer un utilisateur GRUB "root" dont lui seul en aura l'accès  
1. Dans le terminal Debian, nous entrons la commande "*grub-mkpasswd-pbkdf2*" et nous entrons le mot de passe que nous souhaitons mettre en place.  
Cette commande permet d'afficher le hash pbkdf2 (Password-Based Key Derivation Function) du mot de passe que l'on souhaite créer. Ce hash sera à écrire dans le fichier de configuration de GRUB. Cela permet de stocker le mot de passe dans le fichier de configuration GRUB de manière sécurisée, même si ce fichier ne l'est pas.  
La ligne suivante nous est renvoyée :  
```
Le hachage PBKDF2 du mot de passe est grub.pbkdf2.sha512.10000.B5544476E6C5206E00F3...
```
2. Nous ne pouvons pas modifier directement le fichier de configuration de GRUB, nous écrivons donc les lignes suivantes dans le fichier */etc/grub.d/40_custom* :  
```
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.B5544476E6C5206E00F3...
```
Ainsi, lorsqu'un utilisateur souhaite effectuer une action depuis GRUB, il doit indiquer "root" en tant que nom d'utilisateur et le mot de passe précédemment défini.

3. Nous ne souhaitons pas restreindre le fait de pouvoir booter sur la partition Debian. Il nous faut donc l'indiquer dans le fichier */etc/grub.d/10_linux* en modifiant la variable *CLASS* par :
```
CLASS="--class gnu-linux --class gnu --class os --unrestricted"
```
4. Nous pouvons maintenant importer les paramètres au fichier de configuration principal (*/boot/grub/grub.cfg*) avec la commande "*grub-mkconfig -o /boot/grub/grub.cfg*", ou avec la commande "*update-grub2*".  
Désormais, tout utilisateur peut choisir de booter sur la partition Debian. Cependant, si un utilisateur souhaite accéder à d'autres paramètres depuis l'interface du chargeur de démarrage, il doit renseigner le nom d'utilisateur "root" ainsi que le mot de passe précédemment défini.
:::info
Il est aussi possible de supprimer complètement la possibilité d'accéder au terminal et aux options de GRUB en définissant la variable "superusers" à une chaine de caractères vides.   Cependant, si nous nous trouvons dans un contexte d'entreprise, laisser la possibilité d'y accéder moyennant un mot de passe robuste facilite grandement une éventuelle opération de maintenance.
:::
### Forcer la virtualisation des entrées/sorties
:::spoiler
Recommandation ANSSI : R7  
Niveau de sécurisation : 3/4
:::
Une autre protection que nous pouvons activer est la virtualisation des entrées et sorties, permettant la protection contre les accés arbitraires par les périphériques.  
Cette page [Wikipedia](https://en.wikipedia.org/wiki/List_of_IOMMU-supporting_hardware) permet de lister les configurations matérielles compatibles avec le forçage de cette technologie de virtualisation.  
Nous pouvons entrer la ligne suivante dans le fichier "*/etc/default/grub*":
```
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
```
Il nous faut ensuite mettre à jour ce fichier de configuration pour que le changement soit pris en compte:
```
update-grub
```
Nous pouvons vérifier que la mesure est correctement appliquée à l'aide de la commande suivante:
```
dmesg | grep -e IOMMU
```
Le terminal devrais renvoyer le résultat suivant :
```
DMAR: IOMMU enabled
```
Si la configuration matérielle n'est pas supportée, la ligne suivante est affichée :
```
AMD IOMMUv2 functionality not available on this system - This is not a bug.
```
## Scan post-installation
Nous  voulons effectuer un scan à l'aide de l'outil debsecan afin d'avoir un  premier aperçue des vulnérabilités présentes sur la machine. Nous installons donc l'outil à l'aide de la commande ```apt update  && apt install debsecan```. Nous exécutons ensuite l'outil avec la commande ```debsecan –suite $(lsb_release –codename –short) –only-fixed –format detail```. L'outil ne nous renvoie aucun résultat.

Nous allons donc réaliser la même opération avec l'outil Lynis.
[Rapport Lynis 1](https://hackmd.io/@Ragnos/r1SZf3GAC)
# Mise en place des recommandations de l'ANSSI
## [Recommandations de niveau M](https://hackmd.io/@Nyvae/BJksoPufyx)
### [Rapport Lynis du niveau M](https://hackmd.io/@Ragnos/rk4PoIMJyx)
Suite à l'application de l'ensemble des mesures cité plus haut, on observe un léger changement passant d'un score de 63 à un score de 64.
## [Recommandations de niveau I](https://hackmd.io/@Nyvae/rkWOnP_Mye)
### [Rapport Lynis du niveau I](https://hackmd.io/@Ragnos/r1z6ODE41x)
Suite à l'application de l'ensemble des mesures cité plus haut, on observe un changement passant d'un score de 64 à un score de 69.
## [Recommandations de niveau R](https://hackmd.io/@Nyvae/HyRe6vOMyl)
### [Rapport Lynis du niveau R](https://hackmd.io/@Ragnos/SJhi_NsVyg)
Suite à l'application de l'ensemble des mesures cité plus haut, on observe un léger changement passant d'un score de 69 à un score de 70.
## [Recommandations de niveau E](https://hackmd.io/@Nyvae/SJx1-j4GJl)
L'application des recommandations de niveau E sont en cours et feront l'objet d'un futur rapport Lynis.