Salut
Alors j'essaye de me documenter au mieux sur le durcissement Linux
Côté gestion d'ACL avancés, il y a :
AppArmor
Le principe repose sur un apprentissage dynamique, et donc posera "problème" en cas de comportement suspect.
J'ai déjà manipulé un peu cet outil l'année dernière, mais faudra que je revoie je suis pas encore vraiment au point, mais là c'est pas encore le sujet.
Outil plutôt utilisé dans le monde de Debian ?
Je poserais probablement des questions dessus dans pas si longtemps si tout va bien.
SELinux
Développé par RedHat, et donc utilisé dans cet univers.
Ça se base sur des ACL plus avancés, ceux de Linux étant limités à 1 user et 1 groupe (user/group/other).
J'ai déjà vu mais pas manipulé.
Je poserais aussi probablement des questions dessus dans pas si longtemps si tout va bien.
Côté durcissement Noyau
KSPP
Kernel Self Protection Project
J'ai du mal à trouver des informations sur ce truc, et je visualise pas comment ça marche en pratique.
Y'a bien cette doc : https://www.kernel.org/doc/html/latest/security/self-protection.html
Mais ça me dit pas vraiment comment je l'utilise ?
Ou est-ce que c'est juste quelque chose intégré au noyau et auquel je n'ai rien à faire ? ça m'étonnerait...
GRSecurity
Alors ça, ça m'a l'air intéressant. Mais ça reste très obscure.
Le site officiel :
https://grsecurity.net
Un document de prise en main :
https://grsecurity.net/quickstart.pdf
J'ai pas trouvé mieux ni plus récent... Et pourtant ce truc est vachement vieux (2003).
Dans le peu d'infos que je trouve, j'ai l'impression que c'est fait uniquement pour le kernel 2.4...
Mais à l'évidence ce n'est pas le cas, puisqu'il continue d'être mis à jour régulièrement. La dernière mise à jour date d'hier : https://grsecurity.net/download
Le problème c'est que c'est payant et complètement fermé, et depuis 2017 il n'y a même plus de version de test gratuite.
Donc j'ai aucune idée de comment je peux prendre un peu le truc en main, histoire de me faire au moins un avis.
De ce que j'ai pu noter sur sa mise en place, sans avoir pu manipuler (par contre j'ai déjà vite fait essayé de compiler un noyau) :
- Télécharger un kernel
- Télécharger un patch GRSecurity correspondant
- Télécharger
gradm
= Administration program for the grsecurity RBAC system - Patcher le kernel avec GRSecurity
- Configuration du kernel, séléctionner Grsecurity
- Choisir les modules GRSecurity à activer et à configurer :
* PaX Control
* Address Space Protection
* Role Based Access Control Options
* Filesystem Protections
* Kernel Auditing
* Executable Protections
* Network Protections
* Sysctl support
* Logging options
- Compiler et installer le noyau
- RBAC est pré-configuré, mais pas forcément suffisamment ?
- Mode learning pour générer une configuration, attention à ne pas faire de maintenance pendant ce temps.
- Peu de maintenance, mais surveiller les logs.
Voilà, j'arrive pas à obtenir plus d'infos que ça, donc si y'en a qui maîtrisent, ça m'intéresse
Lockdown
Ça c'est intéressant, et j'y vois déjà un peu plus clair que pour GRSecurity (même si le but n'est pas le même).
La proposition vient de Matthew Garrett en 2017 :
https://events19.linuxfoundation.org/wp-content/uploads/2017/12/Why-lock-down-the-kernel_Matthew-Garrett.pdf
Et a été approuvé en 2019 par Linus Torvalds :
https://linux.developpez.com/actu/279253/Linus-Torvalds-approuve-Lockdown-une-nouvelle-fonctionnalite-permettant-de-restreindre-l-acces-a-certaines-fonctions-du-noyau-qui-sera-publiee-a-partir-de-la-version-5-4-du-noyau/
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d
Et donc inclus à partir du kernel 5.4.
Globalement ça apporte 2 modes :
- Le mode intégrité qui empêche la modification du noyau en cours d’exécution
- Le mode confidentialité qui empêche l’extraction d’informations confidentielles du noyau.
Dans le but de l'essayer, j'ai installé une VM avec Debian SID kernel 5.9.0-3-amd64
.
En cherchant comment m'en servir (j'avais pas encore lu la source originale, le message d'approbation de M Torvalds), je suis tombé sur tout un tas d'articles qui expliquent à quel point c'est génial mais sans jamais expliquer comment on l'utilise
Je suis notamment tombé sur ce git :
https://gitlab.com/taggart/lockdown
Dont je ne suis pas vraiment sûr de l'authenticité ?
Déjà il ne fait pas mention de ces fameux 2 modes, et je n'ai pas non plus le fameux fichier /etc/default/lockdown
alors que c'est censé être inclus ?
J'ai remarqué que je peux installer Lockdown
via le gestionnaire APT
, et ça semble correspondre à ce git. Mais est-ce que c'est bien ce que je recherche ? J'en doute
En allant cette fois sur le message d'approbation : https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d
Je vois qu'il est mentionné un fichier /sys/kernel/security/lockdown
qui se trouve effectivement sur mon système et dont le contenu par défaut est [none] integrity confidentiality
donc désactivé, et je retrouve bien mes deux modes.
Une commande pour activer Lockdown serait :echo "integrity" | sudo tee /sys/kernel/security/lockdown
ouecho "confidentiality" | sudo tee /sys/kernel/security/lockdown
Attention, on ne peut pas aller dans le sens contraire :echo "none" | sudo tee /sys/kernel/security/lockdown
none
tee: /sys/kernel/security/lockdown: Opération non permise
Cependant, au reboot
on revient à none
.
Mais en fait je suis pas trop sûr de ce que j'ai fait... Est-ce que j'ai réellement activé Lockdown ? Et qu'est-ce que ça bloque concrètement ?
J'ai fait quelques essais infructueux, je sais pas si c'est parce que mon Lockdown ne fonctionne pas, ou si c'est "normal" et que je suis à côté de la plaque :
J'ai récupéré la liste des modules noyau activés avec lsmod
et j'en ai pris un au pif qui n'est pas en cours d'utilisation (psmouse).
J'ai d'abord tenté de le désactiver et réactiver avec Lockdown à None.sudo modprobe -r psmouse
désactivationlsmod | grep psmouse
pas de résultat donc effectivement désactivésudo modprobe psmouse
réactivationlsmod | grep psmouse
effectivement réactivé
J'ai ensuite activé Lockdown
en mode Integrity
de la façon dont j'ai expliqué plus haut, et refait la même manipulation avec psmouse.
A mon sens, le résultat attendu est que je ne puisse pas désactiver ce module.
Sauf que si, en fait. Le résultat est exactement le même.
Donc, est-ce que c'est parce que c'est une manipulation qui reste autorisée (si oui pourquoi ? je modifie le noyau non ?), ou est-ce c'est mon Lockdown qui ne fonctionne pas ?
Sinon autre option, Linus Torvalds nous dit que :
The included lockdown LSM provides an implementation with a simple
policy intended for general purpose use. This policy provides a coarse
level of granularity, controllable via the kernel command line:
lockdown={integrity|confidentiality}
Enable the kernel lockdown feature.
Et là je comprends pas du tout de quoi il parle. Comment fonctionnent les LSM (Linux Security Modules) ?
Où et quand est-ce que je suis censé rentrer la commande lockdown={integrity|confidentiality}
?
A partir de là j'y vois complètement flou, et je ne sais pas par où aller.
Sachant que effectivement je ne maîtrise pas le kernel Linux, mais je ne sais pas vraiment comment apprendre.
D'autres outils du genre à suggérer ?
Enfin voilà, si certains d'entre vous maîtrisent ce sujet, je serais ravi d'en savoir plus !
Et notamment si vous pouviez m'aider sur GRSecurity et Lockdown !
PS : sacré pavé