Vérifier les permissions du grub.cfg du chargeur d'amorçage UEFI
Garantit que le fichier du chargeur d'amorçage UEFI /boot/grub2/grub.cfg appartient à root et n'est ni lisible, ni modifiable, ni exécutable par le groupe ou les autres, sans bits setuid/setgid/sticky, afin que seul root puisse lire ou modifier les paramètres d'amorçage.
Vérifié sur le contenu d’un fichier de configuration persistant, la source de vérité qui survit aux redémarrages.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
/boot/grub2/grub.cfg définit le menu de démarrage, la ligne de commande du noyau et les paramètres d'amorçage. S'il est modifiable par le groupe ou les autres, un attaquant peut altérer les arguments du noyau, par ex. ajouter init=/bin/bash, désactiver des contre-mesures de sécurité ou contourner un mot de passe d'amorçage imposé, et prendre le contrôle du système au démarrage. S'il est lisible par le groupe/les autres, tout mot de passe d'amorçage haché qu'il contient est exposé à un cassage hors ligne. Restreindre l'accès à root garantit que seul l'administrateur peut lire ou modifier les paramètres d'amorçage critiques.
Ce que vérifie Pavois
Pavois lit l'inode réel via file('/boot/grub2/grub.cfg') et vérifie l'absence d'accès groupe/autres et de bits spéciaux, avec une garde only_if qui l'ignore si le fichier est absent (ex. systèmes BIOS ou distributions utilisant /boot/efi/.../grub.cfg). Inspecter les permissions effectives sur le disque détecte la dérive introduite lorsque le fichier est régénéré par grub2-mkconfig, une mise à jour du noyau ou une restauration de sauvegarde, qui peut réinitialiser le mode, au lieu de supposer la valeur d'après la documentation.
only_if { file('/boot/grub2/grub.cfg').exist? }
describe file('/boot/grub2/grub.cfg') do
it { should_not be_setuid }
it { should_not be_executable.by('group') }
it { should_not be_writable.by('group') }
it { should_not be_readable.by('group') }
it { should_not be_setgid }
it { should_not be_executable.by('other') }
it { should_not be_writable.by('other') }
it { should_not be_readable.by('other') }
it { should_not be_sticky }
endComment vérifier qu’elle est appliquée
Exécutez stat -c '%a %U %G' /boot/grub2/grub.cfg. Attendu : mode 600 (ou plus strict, ex. 700), propriétaire root, groupe root, aucune lecture/écriture/exécution pour group ni other, et aucun bit setuid/setgid/sticky.
Inspecter et investiguer
Aucun journal de service ne s'applique ; inspectez avec stat /boot/grub2/grub.cfg ou ls -l /boot/grub2/grub.cfg. Pour détecter une altération, ajoutez une surveillance auditd (auditctl -w /boot/grub2/grub.cfg -p wa -k grub) et recherchez key="grub" dans /var/log/audit/audit.log.
Remédiation
Aucune remédiation automatique n'est définie ; appliquez-la manuellement : chown root:root /boot/grub2/grub.cfg && chmod 600 /boot/grub2/grub.cfg. Relancez le scan pour confirmer que la règle passe.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| mode | 0700 |
|---|---|
| path | /boot/grub2/grub.cfg |
| resource | file |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque si laissé mal configuré : un grub.cfg modifiable par le groupe/les autres permet à un attaquant local de réécrire la ligne de commande du noyau et de prendre le contrôle du système au prochain démarrage ; lisible, il divulgue le hachage du mot de passe GRUB. Précautions : durcir à root:root 600 est sans danger, GRUB lit le fichier depuis le firmware/l'amorçage précoce, pas en tant qu'utilisateur normal, donc le démarrage n'est pas affecté. Notez que grub2-mkconfig peut réécrire le fichier et réinitialiser son mode ; revérifiez après toute mise à jour du noyau ou du chargeur d'amorçage.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R29 | direct | 2.0 | haute |
| NIST | 3.4.5 | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| CIS | 1.4.2 | direct | per OS, see the benchmark table | haute |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.