Accéder au contenuNavigation Accéder à la page : page précédente [raccourci clavier p] / page suivante [raccourci clavier n]
documentation.suse.com / Sécurisation de SLE Micro à l'aide de Keylime

Sécurisation de SLE Micro à l'aide de Keylime

Date de publication : 12 déc 2024
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 commande quote 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).

Note
Note

Par 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.

Note
Note

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.

  1. Identifiez l'image de la charge de travail Keylime.

    # podman search keylime
    [...]
    registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane
  2. Extrayez l'image à partir du registre.

    # podman pull\
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest
  3. Cré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:latest
  4. Démarrez le conteneur et les services associés.

    # podman container runlabel run \
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest

    Le 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.

Astuce
Astuce

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/
Astuce
Astuce

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 :

  1. Installez le paquet rust-keylime comme suit :

    # transactional-update pkg in rust-keylime

    Redémarrez ensuite le système.

  2. Ajustez la configuration de l'agent par défaut.

    1. 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.d
    2. Cré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
       EOF

      1

      L'identificateur unique est généré chaque fois que l'agent est exécuté. Toutefois, vous pouvez définir une valeur spécifique par cette option.

      2

      Adresse IP du système de registre.

      3

      Adresse IP du vérificateur.

    3. Remplacez le propriétaire du répertoire /etc/keylime/ par keylime:tss :

      # chown -R keylime:tss /etc/keylime
    4. Modifiez les autorisations sur le répertoire /etc/keylime/ :

      # chmod -R 600 /etc/keylime
  3. 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 :

    1. Préparez un répertoire pour le certificat :

      # mkdir -p /var/lib/keylime/cv_ca
    2. Copiez le certificat sur l'agent :

      # scpCERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_ca
    3. Remplacez le propriétaire du certificat par keylime:tss :

      # chown -R keylime:tss /var/lib/keylime/cv_ca
  4. 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

1

AGENT est une adresse IP de l'agent à enregistrer.

2

UUID est l'identificateur unique de l'agent.

3

Le fichier transmis par l'option include est utilisé pour fournir des données de charge utile secrètes à l'agent. Pour plus d'informations, reportez-vous à la Section 5, « Charges utiles sécurisées Keylime ».

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 :

  1. 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"
  2. Regénérez grub.cfg en exécutant :

    # transactional-update grub.cfg
  3. Redé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