Protéger son grub

La première chose à faire lorsque l’on a fini d’installer et d’épurer son serveur c’est de protéger son GRUB via un mot de passe. En effet il est très simple de prendre le contrôle d’une machine grâce au GRUB si ce dernier n’est pas protégé. Pour cela il suffira de reboot la machine et, au moment où le GRUB s’affiche, taper sur la lettre e (pour edit). Cette page s’affichera :

grub1.png

Il faudra ensuite trouver cette ligne :

grub2.png

Il faudra ensuite remplacer l’option read only (ro) en read write (rw) et ajouter la directive « init=/bin/bash » :

grub3.png

Pour qu’un shell root nous soit donné :

grub4.png

Alors globalement qu’est ce qu’il vient de se passer ? Au démarrage de notre système d’exploitation un premier binaire est exécuté : init. Init est responsable de la mise en place de notre système de fichiers et par la suite du lancement d’autres services. En modifiant notre GRUB nous avons fait en sorte que le premier binaire à être exécuté ne soit pas init mais /bin/bash. En plus de ça nous avons demandé à ce que notre partition primaire soit montée en read write de manière à pouvoir en modifier le contenu.

A ce stade un attaquant aura un accès total sur votre serveur, pas cool right ?

En protégeant notre GRUB avec un mot de passe, un attaquant ne sera pas en mesure de modifier le processus d’initialisation du système d’exploitation et ne pourra donc pas faire pop de shell root.

Pour protéger notre GRUB il faudra commencer par générer un mot de passe hashé via l’utilitaire grub-mkpasswd-pbkdf2 :

grub5.png

Ce hash nous allons le copier coller, ouvrir le fichier  /etc/grub.d/40_custom et le remplir de cette manière :

cat << EOF
set superusers="username"
password_pbkdf2 username votre_hash
EOF

Attention, lorsque vous allez ouvrir le fichier vous verrez qu’il est déjà rempli avec, notamment, cette ligne :

exec tail -n +3 $0

Ce qu’il faut savoir c’est que GRUB va en fait lister tous les fichiers de configuration positionnés dans le répertoire /etc/grub.d/ et les concaténer dans un seul fichier de configuration. L’exécution de la commande tail permet simplement de supprimer les trois premières lignes de notre fichier de configuration de manière à ce qu’il ne reste que les directives de configuration.

Pour ma part j’ai remplacé cette directive par un bloc de type :

cat << EOF
directives
EOF

Ce qui au final nous donnera ceci :

grub5.png

Et sera parfaitement valable. Il ne nous restera plus qu’à update notre GRUB via cette commande :

update-grub  

En rebootant notre machine et en tentant d’accéder au grub on devrait tomber sur un prompt d’authentification :

frub6.png

Le seul souci c’est qu’avec cette configuration vous serez obligés de taper votre mot de passe GRUB même si ce n’est que pour lancer votre système d’exploitation et ça c’est relou. Nous ce qu’on veut c’est avoir à entrer un mot de passe seulement si on veut éditer le GRUB. Pour cela il faudra modifier le fichier /etc/grub.d/10_linux et ajouter la directive :

--unrestricted

A chaque entrées présentes dans la fonction linux_entry  (la fonction commence à la ligne 130 environ) :

grub7.png

On re-update notre GRUB :

update-grub

Et à partir de maintenant nous n’aurons plus à taper notre mot de passe pour booter  !