• 10 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 01/12/2023

Sécurisez les systèmes Linux

Après avoir vu comment sécuriser les systèmes Windows, nous allons voir les mêmes principes pour Linux. De la même façon, vous apprendrez comment supprimer les services réseau inutiles, mettre en place une restriction logicielle et limiter l'accès des médias amovibles.

Limitez la surface d'exposition réseau

Commençons par limiter la surface d'exposition sur le réseau en supprimant les services inutiles. Tout d'abord, vous pouvez obtenir la liste des services en écoute sur le réseau avec les commandesnetstatoulsof :

 OC:~# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 572 root 6u IPv4 519 0t0 UDP *:sunrpc
rpcbind 572 root 7u IPv4 11100 0t0 UDP *:666
rpcbind 572 root 8u IPv4 11101 0t0 TCP *:sunrpc (LISTEN)
rpcbind 572 root 9u IPv6 11102 0t0 UDP *:sunrpc
rpcbind 572 root 10u IPv6 11103 0t0 UDP *:666
rpcbind 572 root 11u IPv6 11104 0t0 TCP *:sunrpc (LISTEN)
rpc.statd 582 statd 4u IPv4 11134 0t0 UDP localhost:758
rpc.statd 582 statd 7u IPv4 11139 0t0 UDP *:50232
rpc.statd 582 statd 8u IPv4 539 0t0 TCP *:37032 (LISTEN)
rpc.statd 582 statd 9u IPv6 542 0t0 UDP *:57314
rpc.statd 582 statd 10u IPv6 546 0t0 TCP *:54689 (LISTEN)
avahi-dae 922 avahi 12u IPv4 13453 0t0 UDP *:mdns
avahi-dae 922 avahi 13u IPv6 13454 0t0 UDP *:mdns
avahi-dae 922 avahi 14u IPv4 13455 0t0 UDP *:50375
avahi-dae 922 avahi 15u IPv6 13456 0t0 UDP *:57222
sshd 1169 root 3u IPv4 13584 0t0 TCP *:ssh (LISTEN)
sshd 1169 root 4u IPv6 13586 0t0 TCP *:ssh (LISTEN)
cups-brow 1207 root 8u IPv4 14041 0t0 UDP *:ipp
dhclient 3786 root 6u IPv4 52555 0t0 UDP *:bootpc
dhclient 3786 root 20u IPv4 51973 0t0 UDP *:44365
dhclient 3786 root 21u IPv6 51974 0t0 UDP *:6568
cupsd 6776 root 10u IPv6 248471 0t0 TCP ip6-localhost:ipp (LISTEN)
cupsd 6776 root 11u IPv4 248472 0t0 TCP localhost:ipp (LISTEN)

Le résultat de la commande ci-dessus montre que plusieurs services réseau sont potentiellement inutiles sur le système : RPC, Avahi (autoconfiguration réseau), Cups (impression).

Pour les désactiver, vous pouvez soit désinstaller le service que vous ne voulez pas, soit le désactiver. Par exemple, pour désinstaller le service Avahi sur Debian ou Ubuntu :

 OC:~# apt-get remove avahi-daemon

Ou pour le désactiver :

OC:~# systemctl disable avahi-daemon.socket
Removed symlink /etc/systemd/system/sockets.target.wants/avahi-daemon.socket.

OC:~# systemctl disable avahi-daemon.service
Synchronizing state of avahi-daemon.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install disable avahi-daemon
Removed symlink /etc/systemd/system/dbus-org.freedesktop.Avahi.service.

Limitez l'exécution de logiciels

Plusieurs mécanismes sous Linux permettent de limiter les appels système et en particulier l'exécution de logiciels. Un des plus simples est AppArmor. Il permet de restreindre la capacité de chaque programme du système en lui associant un profil de sécurité. Ce profil définit la liste de tout ce que peut faire le programme concerné. Les profils se trouvent dans le répertoire  /etc/apparmor.d/  .

Deux modes existent, soit enforce pour bloquer tous les appels qui débordent du profil, soit complain pour journaliser seulement.

OC:~# aa-complain /etc/apparmor.d/*
Profile for /etc/apparmor.d/apache2.d not found, skipping
Setting /etc/apparmor.d/bin.ping to complain mode.
Setting /etc/apparmor.d/lightdm-guest-session to complain mode.
Setting /etc/apparmor.d/sbin.dhclient to complain mode.
Setting /etc/apparmor.d/sbin.klogd to complain mode.
Setting /etc/apparmor.d/sbin.syslogd to complain mode.
Setting /etc/apparmor.d/sbin.syslog-ng to complain mode.
Setting /etc/apparmor.d/usr.bin.chromium-browser to complain mode.
Setting /etc/apparmor.d/usr.bin.evince to complain mode.
Setting /etc/apparmor.d/usr.sbin.identd to complain mode.
Setting /etc/apparmor.d/usr.sbin.mdnsd to complain mode.
Setting /etc/apparmor.d/usr.sbin.nmbd to complain mode.
Setting /etc/apparmor.d/usr.sbin.nscd to complain mode.
Setting /etc/apparmor.d/usr.sbin.rsyslogd to complain mode.
Setting /etc/apparmor.d/usr.sbin.smbd to complain mode.
Setting /etc/apparmor.d/usr.sbin.tcpdump to complain mode.

Les fichiers de profil sont de simple fichiers texte qui listent les capabilities, fichiers de programme, librairies, fichiers de configuration, etc, auxquels peut accéder le programme. Un simple exemple pour ping sous Ubuntu : 

OC:~# cat /etc/apparmor.d/bin.ping
[…]
#include <tunables/global>
/{usr/,}bin/ping flags=(complain) {
   #include <abstractions/base>
   #include <abstractions/consoles>
   #include <abstractions/nameservice>
   capability net_raw,
   capability setuid,
   network inet raw,
   /bin/ping mixr,
   /etc/modules.conf r,
   #include <local/bin.ping>
}

Vous pouvez identifier quepinga le droit de disposer de la capabilitynet_rawpour injecter des paquets directement forgés, lire et exécuter le programme stocké dans  /bin/ping  et lire sans plus de droit son fichier de configuration.

Vous pouvez générer rapidement un profil avec la commande  aa-autodep , suivi du nom de l'exécutable à profiler.

OC:~# aa-autodep /usr/bin/vim
Writing updated profile for /usr/bin/vim.basic.

Restreignez l'usage des médias amovibles

Vous avez vu comment limiter la surface d'attaque en désactivant les services réseau inutiles. En complément, AppArmor permet de limiter ce que pourrait faire un attaquant qui a accès localement au système ou qui a exploité une vulnérabilité dans un des logiciels.

Pour aller plus loin dans les scénarios d'attaque avec un accès physique, vous pouvez limiter quels médias amovibles ont le droit de se brancher sur le système. Le filtre peut se faire dans la configuration Udev, soit par identifiant de la marque du média amovible, soit de son modèle. Udev permet par ailleurs d'aller plus loin en restreignant d'autres types de périphériques USB. Vous verrez ci-dessous un exemple de fichier de configuration qui restreint l'usage des médias amovibles à une seule marque (d'identifiant 1234) et un seul modèle (d'identifiant 2121).

 OC:~$ cat /etc/udev/rules.d/100-restrict-usb-devices.rules
# Ignore les cles qui n'ont pas la bonne marque
ACTION=="add", ATTRS{idVendor}!="1234", OPTIONS+="ignore_device", RUN+="/usr/bin/logger UnauthorizedUSBConnected", RUN+="/lib/udev/unmount.sh"

# Ignore les cles qui n'ont pas le bon modele
ACTION=="add", ATTRS{idVendor}=="1234", ATTRS{idProduct}!="2121", OPTIONS+="ignore_device", RUN+="/usr/bin/logger UnauthorizedUSBConnected", RUN+="/lib/udev/unmount.sh"

# Pour les cles qui ont la bonne marque et le bon modele
ACTION=="add", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="2121", RUN+="/lib/udev/syslog-authorized-device-connected.sh", RUN+="/usr/bin/logger AuthorizedUSBConnected"

En résumé

  • Comme pour Windows, désactivez les services réseau inutiles ;

  • AppArmor permet de définir une politique très fine d'accès au système pour chaque programme ;

  • Pour traiter les scénarios d'attaque par média amovible, vous pouvez restreindre les médias qui peuvent être connectés.

Exemple de certificat de réussite
Exemple de certificat de réussite