Se connecter

Informatique

Linux

Sujet : Questions durcissement Linux
1
[Soft]Ware
Niveau 40
23 novembre 2020 à 18:13:25

Salut :ok:

Alors j'essaye de me documenter au mieux sur le durcissement Linux :ok:

:cd: Côté gestion d'ACL avancés, il y a :

:d) 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.

:d) 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.

:cd: Côté durcissement Noyau

:d) 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...

:d) 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) :

  1. Télécharger un kernel
  2. Télécharger un patch GRSecurity correspondant
  3. Télécharger gradm = Administration program for the grsecurity RBAC system
  4. Patcher le kernel avec GRSecurity
  5. Configuration du kernel, séléctionner Grsecurity
  6. 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

  1. Compiler et installer le noyau
  2. RBAC est pré-configuré, mais pas forcément suffisamment ?
  3. Mode learning pour générer une configuration, attention à ne pas faire de maintenance pendant ce temps.
  4. 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 :ok:

:d) 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 :

  1. Le mode intégrité qui empêche la modification du noyau en cours d’exécution
  2. 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 :sarcastic:

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 :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
ou
echo "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) désactivation
lsmod | grep psmouse :d) pas de résultat donc effectivement désactivé
sudo modprobe psmouse :d) réactivation
lsmod | grep psmouse :d) 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.

:cd: 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 !

:merci:

PS : sacré pavé :hap:

Google_Bot
Niveau 12
23 novembre 2020 à 19:38:01

Hello, joli pavé, sujet très intéressant :oui:
Concernant GR, j'ai vu qu'il était passé full-proprio il y a quelques temps et je ne l'ai encore jamais vu en prod sur des environnements durcis (à voir s'il est plus populaire dans certains secteurs).
Par contre de l'AppArmor et du SELinux ça oui yen a partout, c'est très important à maitriser et ça rajoute pas mal de contraintes d'intégration avec d'autres produits, il faut le savoir (par exemple certaines suites anti-virus vont avoir tendance à faire la gueule ou nécessiter quelques étapes de configuration supplémentaires lorsqu'elles sont déployées dans un environnement avec AppArmor ou SELinux actifs).

Concernant Lockdown, je ne connaissais pas trop le projet jusqu'à présent, il faudra que je jette un oeil (surtout si c'est intégré out-of-the-box sur les nouveaux kernels). Mais dans la lignée de Wireguard, si c'est documenté pareil (càd sur un coin de table en mode "tiens voilà 5 lignes à jouer pour l'initialiser puis démerde-toi pour les détails), on est pas rendus. Une approche un peu bourrine et chronophage consisterait à bouquiner succinctement le code source mais ce serait sinistre de devoir en arriver là pour comprendre un truc aussi important.

[Soft]Ware
Niveau 40
23 novembre 2020 à 21:53:47

Merci pour la réponse :hap:

GRSecurity, c'est une boîte de cybersec qui m'en a parlé, donc j'imagine que c'est utilisé. :hap: J'en sais pas encore plus.

Ouais AppArmor et SELinux je connais leur importance pour le coup, faut que j'apprenne à maîtriser c'est dans ma shortlist :oui:

Et Lockdown malheureusement la documentation est quasi inexistante... Mais j'aimerais bien aller au bout parce que j'ai l'impression d'être près du but, je pense même que mon incompréhension vient plutôt de manque de connaissances du kernel :(

Ahokhey
Niveau 7
23 novembre 2020 à 23:19:19

Pour lockdown tu dois l'activer via les paramètres de commande du noyau (/proc/cmdline), càd en ajoutant les paramètres suivants à ton bootloader:
"lsm=lockdown lockdown=integrity"

Ahokhey
Niveau 7
23 novembre 2020 à 23:27:45

D'ailleurs c'est pareil pour apparmor, il faut l'ajouter à la liste des LSM dans la configuration du bootloader.

Pour KSPP tu as la ressource suivante qui explique comment le configurer :
https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings

C'est peut être mieux de partir d'un noyau déjà durci:

https://github.com/anthraxx/linux-hardened

[Soft]Ware
Niveau 40
24 novembre 2020 à 18:10:31

Le 23 novembre 2020 à 23:19:19 Ahokhey a écrit :
Pour lockdown tu dois l'activer via les paramètres de commande du noyau (/proc/cmdline), càd en ajoutant les paramètres suivants à ton bootloader:
"lsm=lockdown lockdown=integrity"

Effectivement :ok:
Mon bootloader étant grub, je peux ajouter lockdown=integrity dans le fichier /etc/default/grub, dans la ligne
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
qui devient
GRUB_CMDLINE_LINUX_DEFAULT="quiet lockdown=integrity"

On remarque que Lockdown est déjà chargé dans le fichier /boot/config-5.9.0-3-amd64 dans la ligne
CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo,bpf"
Il suffit donc de l'activer comme dit plus haut.

--

Pour ce qui est de tester, mon exemple dans le post original était a priori incorrect, la commande modprobe restant autorisée par Lockdown.
Par contre si je veux ajouter un module.ko avec la commande insmod, je ne peux le faire que si Lockdown est désactivé.
Mais Lockdown n'empêche pas la suppression d'un module avec rmmod.

Pour ce qui est du mode confidentiality, je suis censé ne pas pouvoir récupérer d'informations confidentielles du kernel.
Mais je ne sais pas ce que représente une telle information, donc je ne sais pas comment tester ça.
Qu'est-ce que je peux essayer de récupérer comme information ?

J'ai pensé à /dev/mem qui est partiellement accessible en lecture en root avec Lockdown désactivé, et pas du tout accessible avec Lockdown en mode Integrity. Pas de différence avec le mode Confidentiality.
Comment je peux mettre en évidence la différence entre Integrity et Confidentiality ?

[Soft]Ware
Niveau 40
24 novembre 2020 à 18:13:54

Le 23 novembre 2020 à 23:27:45 Ahokhey a écrit :
D'ailleurs c'est pareil pour apparmor, il faut l'ajouter à la liste des LSM dans la configuration du bootloader.

Pour KSPP tu as la ressource suivante qui explique comment le configurer :
https://kernsec.org/wiki/index.php/Kernel_Self_Protection_Project/Recommended_Settings

C'est peut être mieux de partir d'un noyau déjà durci:

https://github.com/anthraxx/linux-hardened

Mouais c'est pas terrible comme doc, ça m'explique pas grand chose, c'est un exemple de configuration brut sans explications derrière, je sais même pas à quoi ça sert ni ce que ça fait, comment, dans quel but... :(

Et sinon mon but n'est pas d'avoir un noyau durci, mais de savoir durcir un noyau :ok:

[Soft]Ware
Niveau 40
24 novembre 2020 à 22:08:02

Le 24 novembre 2020 à 20:57:14 QuadrantDub a écrit :

Mouais c'est pas terrible comme doc, ça m'explique pas grand chose, c'est un exemple de configuration brut sans explications derrière, je sais même pas à quoi ça sert ni ce que ça fait, comment, dans quel but... :(

Quand tu fais un .config de kernel avec make menuconfig ou nconfig tu peux avoir la description de chaque option en détail comme ça : https://image.noelshack.com/fichiers/2020/48/2/1606247424-image.png

Ah ouais d'accord, pas mal :ok:

1
Sujet : Questions durcissement Linux
   Retour haut de page
Consulter la version web de cette page