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 :

Capture du 2019-10-01 18-36-21.png

Il faudra ensuite trouver cette ligne :

Capture du 2019-10-06 11-20-40.png

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

Capture du 2019-10-06 11-29-17.png

Pour qu’un shell root nous soit donné :

Capture du 2019-10-01 18-39-36.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 :

Capture du 2019-10-01 18-43-37.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 :

capture-du-2019-10-06-11-43-32.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 :

Capture du 2019-10-01 21-16-19.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) :

Capture du 2019-10-06 11-51-45.png

On re-update notre GRUB :

update-grub

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

 

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s