Sécurité système

Installer un système sécurisé

Choisir le système en fonction :

  • des services qu’il va héberger

    Linux = polyvalent mais gros, *BSD plus minimaliste ?
    Disponibilité des fonctionnalités souhaitées ?

  • du besoin d’avoir un support commercial (RHEL, SLES…)

    parfois nécessaire pour le support des logiciels (Oracle…)

  • de la durée d’utilisation et la capacité de le maintenir à jour

    RIP CentOS et bof pour BTW I use Arch

  • de la capacité à l’administrer !

Orientations techniques

Configuration matérielle

  • Protéger le BIOS / UEFI

    Mot de passe administrateur ?

  • Privilégier UEFI : SecureBoot

  • Mode 64 bits

  • Bit Intel VT-x / AMD V seulement si virtualisation nécessaire

Configuration système

  • Partitionner finement

  • N’installer que le strict minimum nécessaire

    Pas d’interface graphique sur un serveur !

  • Durcir les options noyau (sysctl)

  • Durcir le système (règles sudoers granulaires…)

  • Durcir les services (empêcher les connexions root sur SSH…)

  • Filtrer les accès (Netfilter iptables / nftables)

  • Mot de passe root complexe et spécifique à ce système

    Au coffre-fort ou dans un gestionnaire de mot de passe

Chiffrement de disque

  • Utiliser un secret distinct (passphrase ou token)

    LUKS / LUKS2 (Linux) ou BitLocker (Windows Pro)

  • Impératif pour une station nomade !

  • Envisageable pour une station fixe

    Permet d’éviter de disséminer des documents sensibles lors de la mise au rebus

  • Plus discutable pour un serveur

    Comment saisir la passphrase ?

  • Prévoir une clé de séquestre (accident, réquisition judiciaire…)

    Au coffre-fort ou dans un gestionnaire de mot de passe

Partitionnement

Point de
montage
Options Description
/ Racine, contient le reste
/boot nosuid,nodev,noexec
(noauto optionnel)
Contient le noyau et le bootloader, pas d’accès après démarrage sauf mise à jour
/tmp nosuid,nodev,noexec Fichiers temporaires, ne doit pas contenir d’exécutables.
Nettoyé après redémarrage, préférer du tmpfs
/proc hidepid=2 Informations sur les processus et le système
Point de
montage
Options Description
/home nosuid,nodev,noexec
(ro optionnel)
Répertoires utilisateurs.
ro si non utilisé.
noexec à discuter sur station de travail
/usr nodev Majorité des utilitaires (exécutables et bibliothèques)
/var nosuid,nodev,noexec Fichiers variables pendant la vie du système (mails, BDD…)
/var/log nosuid,nodev,noexec Journaux du système
/var/tmp nosuid,nodev,noexec Fichiers temporaires conservés après extinction
Point de
montage
Options Description
/opt nosuid,nodev
(ro optionnel)
Packages additionnels.
ro si non utilisé
/srv nosuid,nodev
(noexec,ro optionnels)
Fichiers servis par un service

D’après les Recommandations de sécurité relatives à un système GNU/Linux, ANSSI


Nota : utiliser correctement le système de fichier et se référer au Filesystem Hierarchy Standard, hier(7)

  • nodev empêche de jouer avec les fichiers spéciaux pour accéder sans droit ni titre à une partition autrement protégée (avec mknod utilisé par exemple sur une clé USB) :

    brw-rw---- 1 root disk     8,   0 18 mars  16:29 sda
    brw-rw---- 1 root disk     8,   1 18 mars  16:29 sda1
    brw-rw---- 1 root disk     8,   2 18 mars  16:29 sda2
    brw-rw---- 1 root disk     8,   3 18 mars  16:29 sda3
    
  • /var/log peut vous exploser à la figurer et bloquer le démarrage d’applications (comme X.org)

Configuration noyau (sysctl)

Se référer aux Recommandations de sécurité relatives à un système GNU/Linux de l’ANSSI :

  • pour la pile réseau, durcir les configuration IPv4 et IPv6 face à des paquets peu commun ou non standards

    ANSSI : serveur sans routage et avec adresse IPv6 statique

    Pas d’IPv6 : net.ipv6.conf.all.disable_ipv6 = 1

  • pour le reste du systèmes, paramétrages de la mémoire, des processus, du système de fichiers…

# Pas de routage entre les interfaces
net.ipv4.ip_forward = 0
# Filtrage par chemin inverse
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ne pas envoyer de redirections ICMP
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Refuser les paquets de source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Ne pas accepter les ICMP de type redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# Loguer les paquets ayant des IPs anormales
net.ipv4.conf.all.log_martians = 1
# RFC 1337
net.ipv4.tcp_rfc1337 = 1
# Ignorer les réponses non conformes à la RFC 1122
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Augmenter la plage pour les ports éphémères
net.ipv4.ip_local_port_range = 32768 65535
# Utiliser les SYN cookies
net.ipv4.tcp_syncookies = 1
# Désactiver le support des "router solicitations"
net.ipv6.conf.all.router_solicitations = 0
net.ipv6.conf.default.router_solicitations = 0
# Ne pas accepter les "router preferences" par "router advertisements"
net.ipv6.conf.all.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
# Pas de configuration auto des prefix par "router advertisements"
net.ipv6.conf.all.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
# Pas d'apprentissage du routeur par défaut par "router advertisements"
net.ipv6.conf.all.accept_ra_defrtr = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
# Pas de configuration auto des adresses à partir des "router advertisements"
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
# Ne pas accepter les ICMP de type redirect
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Refuser les packets de source routing
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
# Nombre maximal d'adresses autoconfigurées par interface
net.ipv6.conf.all.max_addresses = 1
net.ipv6.conf.default.max_addresses = 1
# Désactivation des SysReq
kernel.sysrq = 0
# Pas de core dump des exécutables setuid
fs.suid_dumpable = 0
# Interdiction de déréférencer des liens vers des fichiers dont
# l'utilisateur courant n'est pas le propriétaire
# Peut empêcher certains programmes de fonctionner correctement
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
# Activation de l'ASLR
kernel.randomize_va_space = 2
# Interdiction de mapper de la mémoire dans les adresses basses (0)
vm.mmap_min_addr = 65536
# Espace de choix plus grand pour les valeurs de PID
kernel.pid_max = 65536
# Obfuscation des adresses mémoire kernel
kernel.kptr_restrict = 1
# Restriction d'accès au buffer dmesg
kernel.dmesg_restrict = 1
# Restreint l'utilisation du sous système perf
kernel.perf_event_paranoid = 2
kernel.perf_event_max_sample_rate = 1
kernel.perf_cpu_time_max_percent = 1

Questions ?