Sécurisation de SLE Micro à l'aide de Keylime
- CONTENU
Keylime est un outil de mesure d'intégrité d'exécution et d'attestation de démarrage à distance basée sur TPM.
- MOTIF
Cet article décrit comment configurer et exécuter Keylime sur SLE Micro.
- EFFORT
La lecture de l'article prend environ 25 minutes.
- OBJECTIF
Vous en saurez plus sur Keylime : son fonctionnement, sa configuration et son exécution.
- CONDITIONS REQUISES
Une instance en cours d'exécution de SLE Micro.
1 Attestation à distance à l'aide de Keylime #
Face à la demande croissante de sécurisation des périphériques contre les modifications non autorisées, l'utilisation du mécanisme de sécurité appelé attestation à distance (Remote Attestation, RA) s'est considérablement développée. La RA permet à un hôte (client) d'authentifier son état de chaîne de démarrage et son logiciel en cours d'exécution sur un hôte distant (vérificateur). La RA est souvent associée au chiffrement à clé publique (à l'aide de TPM2), de sorte que les informations envoyées ne peuvent être lues que par les services ayant demandé l'attestation et que la validité des données peut être vérifiée.
L'attestation à distance sur SLE Micro est implémentée par Keylime.
1.1 Terminologie #
La technologie d'attestation à distance utilise les termes suivants :
- Clé d'attestation (Attestation Key, AK)
Clé de signature de données qui prouve que les données proviennent d'un module de plate-forme approuvée (Trusted Platform Module, TPM) réel et qu'elles n'ont pas été altérées.
- Racine principale de confiance pour la mesure (Core Root of Trust for Measurement, CRTM)
Calcule son propre hachage et le hachage de l'étape suivante du processus de démarrage, en lançant la chaîne de mesures.
- Clé d'approbation (Endorsement Key, EK)
Clé de chiffrement intégrée de façon permanente au TPM lors de sa fabrication. La partie publique de la clé et la certification stockée dans le TPM sont utilisées pour reconnaître un TPM authentique.
- Architecture de gestion de l'intégrité (Integrity Management Architecture, IMA)
Sous-système d'intégrité du kernel qui permet de détecter les modifications malveillantes apportées aux fichiers.
- Démarrage mesuré (Measured Boot)
Méthode avec laquelle chaque composant de la séquence de démarrage calcule un hachage du composant suivant avant de déléguer l'exécution de ce dernier. Le hachage étend un ou plusieurs registres de configuration de la plate-forme du TPM. Un événement est créé avec les informations sur l'endroit où la mesure a eu lieu et ce qui a été mesuré. Ces événements sont collectés dans un journal des événements et, avec les valeurs PCR étendues, les événements peuvent être comparés aux valeurs attendues représentant un système sain.
- Registre de configuration de plate-forme (Platform Configuration Register, PCR)
Emplacement mémoire dans le TPM qui, par exemple, stocke les hachages des couches de démarrage. Le PCR ne peut être mis à jour qu'à l'aide de l'opération non réversible
extend
. Il est possible d'obtenir une liste signée des valeurs PCR actuelles à l'aide de la commandequote
exécutée sur le TPM. Cette liste peut être vérifiée par un tiers au cours du processus d'attestation.- Démarrage sécurisé (Secure Boot)
Chaque étape du processus de démarrage vérifie une signature cryptographique sur l'exécutable de l'étape suivante avant de le lancer.
- Module de plate-forme approuvée (Trusted Platform Module, TPM)
Processeur cryptographique de sécurité autonome présent sur le système en tant que matériel ou implémenté dans le microprogramme qui fait office de racine de confiance. Le TPM fournit un PCR pour stocker les hachages des couches de démarrage. Un TPM standard fournit plusieurs fonctions, telles qu'un générateur de nombres aléatoires, des compteurs ou une horloge locale. Il stocke également 24 PCR regroupés par banques pour chaque fonction de hachage cryptographique prise en charge (SHA1, SHA256, SHA384 ou SHA512).
NotePar défaut, l'utilisation d'un TPM est désactivée, de sorte que le démarrage mesuré n'a pas lieu. Pour activer l'attestation à distance, activez le TPM dans le menu EFI/BIOS.
- Charge utile sécurisée
Mécanisme permettant de communiquer des données chiffrées aux agents sains. Les charges utiles sont utilisées pour fournir des clés, des mots de passe, des certificats, des configurations ou des scripts qui sont ensuite utilisés par l'agent.
1.2 Qu'est-ce que Keylime ? #
Keylime est une solution d'attestation à distance qui vous permet de surveiller l'état de santé des noeuds distants à l'aide d'un TPM comme racine de confiance pour la mesure. Keylime vous permet d'effectuer diverses tâches, telles que les suivantes :
Valider des PCR étendus pendant le démarrage mesuré.
Créer une analyse et effectuer des assertions du journal des événements.
Effectuer des assertions concernant la valeur de n'importe quel PCR sur le système distant.
Surveiller la validité des fichiers ouverts ou exécutés.
Fournir des données chiffrées aux noeuds vérifiés via des charges utiles sécurisées.
Exécuter des scripts personnalisés qui sont déclenchés lorsqu'une machine échoue par rapport aux mesures attestées.
1.3 Architecture #
Keylime se compose d'un agent, d'un vérificateur, d'un système de registre et d'un outil de ligne de commande (locataire). Les agents sont situés sur les systèmes à attester. Le vérificateur et le système de registre se trouvent sur des systèmes distants qui effectuent l'enregistrement et l'attestation des agents. N'oubliez pas que seul le rôle d'agent est disponible sur SUSE Linux Micro. Pour plus d'informations sur chaque composant, reportez-vous aux sections suivantes.
1.3.1 Agent Keylime #
L'agent est un service qui s'exécute sur le système à attester. L'agent envoie le journal des événements, les hachages IMA et les informations sur le démarrage mesuré au vérificateur, en utilisant le TPM local comme certificateur de la validité des données.
Lorsqu'un nouvel agent est démarré, il doit d'abord s'enregistrer auprès du système de registre. Pour ce faire, il a besoin d'un certificat TLS afin d'établir la connexion. Le certificat TLS est généré par le système de registre, mais il doit être installé manuellement sur l'agent. Après l'enregistrement, l'agent envoie sa clé d'attestation et la partie publique de la clé d'approbation au système de registre. Ce dernier répond à l'agent par une question de vérification d'identité dans un processus appelé « activation des informations d'identification », qui valide le TPM de l'agent. Une fois que l'agent a été enregistré, il est prêt à être inscrit pour l'attestation.
1.3.2 Système de registre Keylime #
Le système de registre est utilisé pour enregistrer les agents qui doivent être attestés. Le système de registre collecte la clé d'attestation de l'agent, la partie publique de la clé d'approbation et la certification de clé d'approbation, et vérifie que la clé d'attestation de l'agent appartient à la clé d'approbation.
1.3.3 Vérificateur Keylime #
Le vérificateur effectue l'attestation réelle des agents et extrait en permanence les données d'attestation requises des agents (entre autres, les valeurs PCR, les journaux IMA et les journaux des événements UEFI).
2 Exécution de la charge de travail Keylime à l'aide de Podman #
Keylime est une solution d'attestation à distance qui vous permet de surveiller l'état de santé des noeuds distants. Le vérificateur et le système de registre sont des composants essentiels de Keylime sur les systèmes distants pour effectuer l'enregistrement et l'attestation des agents Keylime.
Le conteneur décrit dans cet article fournit un vérificateur et un système de registre de services de plan de contrôle, et un outil de ligne de commande (CLI) de locataire qui font partie du projet Keylime.
Avant de commencer l'installation et l'enregistrement des agents, préparez le vérificateur et le système de registre sur les hôtes distants, comme décrit dans la procédure suivante.
Identifiez l'image de la charge de travail Keylime.
#
podman search keylime [...] registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-planeExtrayez l'image à partir du registre.
#
podman pull\ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestCréez le volume
keylime-control-plane
pour conserver la base de données et les certificats requis pendant le processus d'attestation.#
podman container runlabel install \ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestDémarrez le conteneur et les services associés.
#
podman container runlabel run \ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestLe conteneur
keylime-control-plane
est créé. Il contient les services de vérificateur et de système de registre configurés et en cours d'exécution. En interne, le conteneur expose les ports 8881, 8890 et 8891 à l'hôte en utilisant les valeurs par défaut. Validez la configuration du pare-feu pour autoriser l'accès aux ports et permettre la communication entre les conteneurs, car la CLI du locataire en a besoin.
Si vous devez arrêter les services Keylime, exécutez la commande suivante :
#
podman kill keylime-control-plane-container
2.1 Surveillance des services Keylime #
Pour obtenir l'état des conteneurs en cours d'exécution sur l'hôte, exécutez la commande suivante :
#
podman ps
Pour afficher les journaux des services Keylime, exécutez la commande suivante :
#
podman logs keylime-control-plane-container
2.2 Exécution de la CLI locataire #
L'outil CLI locataire est inclus dans le conteneur et, si le pare-feu hôte n'interfère pas avec les ports exposés par les services Keylime, vous pouvez l'exécuter à l'aide de la même image, par exemple :
#
podman run --rm \ -v keylime-control-plane-volume:/var/lib/keylime/ \ keylime-control-plane:latest \ keylime_tenant -v 10.88.0.1 -r 10.88.0.1 --cert default -c reglist
2.3 Extraction du certificat Keylime #
La première fois que le conteneur Keylime est exécuté, ses services créent un certificat requis par plusieurs agents. Vous devez extraire le certificat du conteneur et le copier dans le répertoire /var/lib/keylime/cv_ca/
de l'agent.
#
podman cp \ keylime-control-plane-container:/var/lib/keylime/cv_ca/cacert.crt .
#
scp cacert.crt AGENT_HOST:/var/lib/keylime/cv_ca/
Pour plus d'informations sur l'installation de l'agent, reportez-vous à la Section 3, « Installation de l'agent Keylime ».
3 Installation de l'agent Keylime #
Keylime est une solution d'attestation à distance qui vous permet de surveiller l'état de santé des noeuds distants. L'agent Keylime est un service qui s'exécute sur le système devant être attesté et qui envoie au vérificateur le journal des événements, les hachages IMA et les informations sur le démarrage mesuré.
L'agent Keylime n'est pas présent sur SLE Micro par défaut ; vous devez l'installer manuellement. Pour installer l'agent, procédez comme suit :
Installez le paquet rust-keylime comme suit :
#
transactional-update pkg in rust-keylimeRedémarrez ensuite le système.
Ajustez la configuration de l'agent par défaut.
Créez un répertoire afin de stocker un nouveau fichier de configuration pour vos modifications dans
/etc/keylime/agent.conf.d/
. La configuration par défaut est stockée dans/usr/etc/keylime/agent.conf
, mais nous vous déconseillons de modifier ce fichier, car il risque d'être écrasé dans les prochaines mises à jour système.#
mkdir -p /etc/keylime/agent.conf.dCréez un fichier
/etc/keylime/agent.conf.d/agent.conf
:#
cat << EOF > /etc/keylime/agent.conf.d/agent.conf [agent] uuid = "d111ec46-34d8-41af-ad56-d560bc97b2e8"1 registrar_ip = "<REMOTE_IP>"2 revocation_notification_ip = "<REMOTE_IP>"3 EOFRemplacez le propriétaire du répertoire
/etc/keylime/
parkeylime:tss
:#
chown -R keylime:tss /etc/keylimeModifiez les autorisations sur le répertoire
/etc/keylime/
:#
chmod -R 600 /etc/keylime
Copiez les certificats générés par l'autorité de certification sur le noeud de l'agent. Sur le noeud de l'agent, procédez comme suit :
Préparez un répertoire pour le certificat :
#
mkdir -p /var/lib/keylime/cv_caCopiez le certificat sur l'agent :
#
scpCERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_caRemplacez le propriétaire du certificat par
keylime:tss
:#
chown -R keylime:tss /var/lib/keylime/cv_ca
Démarrez et activez
keylime_agent.service
:#
systemctl enable --now keylime_agent.service
4 Enregistrement de l'agent Keylime #
Keylime est une solution d'attestation à distance qui vous permet de surveiller l'état de santé des noeuds distants. L'agent Keylime est un service qui s'exécute sur le système devant être attesté et qui envoie au vérificateur le journal des événements, les hachages IMA et les informations sur le démarrage mesuré.
Vous pouvez enregistrer un nouvel agent à l'aide de la CLI locataire ou en modifiant la configuration du vérificateur. À l'aide du locataire sur l'hôte du vérificateur, exécutez la commande suivante :
#
keylime_tenant -v 127.0.0.1 \
-tAGENT \1
-u UUID \2
--cert default \
-c add
[--include PATH_TO_ZIP_FILE]3
AGENT est une adresse IP de l'agent à enregistrer. | |
UUID est l'identificateur unique de l'agent. | |
Le fichier transmis par l'option |
Vous pouvez lister les agents enregistrés à l'aide de la commande reglist
sur l'hôte du vérificateur comme suit :
#
keylime_tenant -v 127.0.0.1 \
--cert default \
-c reglist
Pour supprimer un agent enregistré, spécifiez l'agent à l'aide des options -t
et -u
et de la commande -c
delete
comme suit :
#
keylime_tenant -v 127.0.0.1 \
-tAGENT \
-u UUID \
-c delete
5 Charges utiles sécurisées Keylime #
Keylime est une solution d'attestation à distance qui vous permet de surveiller l'état de santé des noeuds distants.
5.1 Qu'est-ce qu'une charge utile sécurisée ? #
Une charge utile sécurisée Keylime vous permet de fournir des données chiffrées à des agents sains. Les charges utiles sont utilisées pour fournir des clés, des mots de passe, des certificats, des configurations ou des scripts qui sont utilisés par l'agent Keylime à un stade ultérieur.
5.2 Comment fonctionne une charge utile sécurisée ? #
Une charge utile sécurisée est fournie à l'agent dans un fichier zip
qui doit contenir un script shell nommé autorun.sh
. Le script n'est exécuté que si l'agent a été correctement enregistré et vérifié. Pour distribuer le fichier zip
, utilisez l'option --include
de la commande keylime_tenant
.
Par exemple, le script autorun.sh
suivant crée une structure de répertoires et y copie les clés SSH. L'archive zip
associée doit inclure ces clés SSH.
>
cat autorun.sh
#!/bin/bash
mkdir -p /root/.ssh/
cp id_rsa* /root/.ssh/
chmod 600 /root/.ssh/id_rsa*
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
6 Activation du suivi IMA pour Keylime #
Keylime est une solution d'attestation à distance qui vous permet de surveiller l'état de santé des noeuds distants. L'architecture de gestion de l'intégrité (Integrity Management Architecture, IMA) est un sous-système d'intégrité du kernel qui permet de détecter les modifications malveillantes des fichiers.
Lorsque vous utilisez la technologie IMA, le kernel calcule un hachage des fichiers consultés. Le hachage est ensuite utilisé pour étendre le PCR 10 dans le TPM et également pour consigner la liste des fichiers consultés. Le vérificateur peut demander une citation signée à l'agent pour que le PCR 10 obtienne les journaux de tous les fichiers consultés, y compris les hachages de fichiers. Les vérificateurs comparent ensuite les fichiers consultés avec une liste d'autorisation locale de fichiers approuvés. Si l'un des hachages n'est pas reconnu, le système est considéré comme non sécurisé et un événement de révocation est déclenché.
Avant que Keylime puisse collecter des informations, IMA/EVM doit être activé. Pour activer le processus, démarrez un kernel de l'agent avec les paramètres ima_appraise=log
et ima_policy=tcb
:
Mettez à jour l'option
GRUB_CMDLINE_LINUX_DEFAULT
avec les paramètres dans/etc/default/grub
:GRUB_CMDLINE_LINUX_DEFAULT="ima_appraise=log ima_policy=tcb"
Regénérez
grub.cfg
en exécutant :#
transactional-update grub.cfgRedémarrez votre système.
La procédure ci-dessus utilise la stratégie IMA du kernel par défaut. Pour éviter de surveiller un trop grand nombre de fichiers et donc de générer de longs journaux, créez une nouvelle stratégie personnalisée. Pour plus de détails, reportez-vous au document Keylime documentation.
Pour indiquer les hachages attendus, utilisez l'option --allowlist
de la commande keylime_tenant
lors de l'enregistrement de l'agent. Pour afficher les fichiers exclus ou ignorés, utilisez l'option --exclude
de la commande keylime_tenant
:
#
keylime_tenant --allowlist
-v 127.0.0.1 \
-uUUID
7 Informations supplémentaires #
La page d'accueil de Keylime se trouve à l'adresse https://keylime.dev.
La documentation Keylime la plus récente est disponible à l'adresse https://keylime.readthedocs.io/en/latest/.
Pour une présentation générale des technologies IMA/EVM, reportez-vous au document https://en.opensuse.org/SDB:Ima_evm#Introduction.
Pour plus d'informations sur la création d'une stratégie IMA de kernel, reportez-vous au document https://keylime-docs.readthedocs.io/en/latest/user_guide/runtime_ima.html.
8 Mentions légales #
Copyright © 2006–2024 SUSE LLC et contributeurs. Tous droits réservés.
Il est autorisé de copier, distribuer et/ou modifier ce document conformément aux conditions de la licence de documentation libre GNU version 1.2 ou (à votre discrétion) 1.3, avec la section permanente qu'est cette mention de copyright et la licence. Une copie de la version de licence 1.2 est incluse dans la section intitulée « Licence de documentation libre GNU ».
Pour les marques commerciales SUSE, consultez le site Web https://www.suse.com/company/legal/. Toutes les autres marques de fabricants tiers sont la propriété de leur détenteur respectif. Les symboles de marque (®, ™, etc.) désignent des marques commerciales de SUSE et de ses sociétés affiliées. Des astérisques (*) désignent des marques commerciales de fabricants tiers.
Toutes les informations de cet ouvrage ont été regroupées avec le plus grand soin. Cela ne garantit cependant pas sa complète exactitude. Ni SUSE LLC, ni les sociétés affiliées, ni les auteurs, ni les traducteurs ne peuvent être tenus responsables des erreurs possibles ou des conséquences qu'elles peuvent entraîner.