Restreindre userfaultfd
Un programme ordinaire ne peut plus utiliser le versant noyau de cette interface, dont des attaquants se sont servis pour chronométer leurs coups. Les programmes qui gèrent leur mémoire en espace utilisateur continuent de fonctionner.
Pourquoi il compte
L’appel système userfaultfd laisse un programme gérer lui-même les défauts de page. Des attaquants s’en sont servis pour suspendre le noyau à un instant exact, élargissant un infime écart de temps suffisant pour gagner une course dans un bug du type use-after-free. Retirer la forme noyau de cet appel aux utilisateurs ordinaires complique nombre de ces exploits.
Comment il fonctionne
Met vm.unprivileged_userfaultfd à 0. Selon la documentation du noyau, les utilisateurs sans CAP_SYS_PTRACE ne peuvent alors employer userfaultfd que pour les défauts survenant en mode utilisateur, en passant l’option UFFD_USER_MODE_ONLY. L’accès par /dev/userfaultfd peut être accordé à part.
À qui il s'adresse
Convient à presque tout ordinateur de bureau et serveur. À revoir si vous utilisez la migration à chaud de machines virtuelles, des outils de point de contrôle et restauration, ou un autre logiciel bâti sur userfaultfd.
Ce que vous pouvez remarquer
Presque jamais visible. Un logiciel qui a besoin du userfaultfd complet comme utilisateur normal peut échouer avec une erreur de permission jusqu’à recevoir /dev/userfaultfd ou tourner avec plus de droits.
Le vérifier sur votre ordinateur
Lire la valeur actuelle :
sysctl vm.unprivileged_userfaultfd L'appliquer à la main
La définir maintenant (jusqu'au prochain redémarrage) :
sudo sysctl -w vm.unprivileged_userfaultfd=0 La conserver après les redémarrages, dans un fichier qui vous appartient :
sudo tee /etc/sysctl.d/90-kernel-userfaultfd.conf <<'EOF'
vm.unprivileged_userfaultfd = 0
EOF
sudo sysctl --system L'annuler
Supprimez le fichier et redémarrez, ou remettez l'ancienne valeur avec sysctl -w.
Réglages liés
Sources
- Linux Hardening Guide (madaidans)
- 2.2.1