Se connecter avec Microsoft
S'identifier ou créer un compte.
Bonjour,
Sélectionnez un autre compte.
Vous avez plusieurs comptes
Choisissez le compte avec lequel vous voulez vous connecter.

Résumé

En plus de permettre aux utilisateurs de fournir leurs propres paires de clés SSH à des fins d’authentification, la plateforme Microsoft Azure repose sur les paires de clés SSH pour activer certaines fonctionnalités ajoutées à la machine virtuelle (VM) lors du déploiement. Nous avons récemment découvert que, dans quelques rares scénarios, les clés publiques de ces certificats de la plateforme Azure pouvaient être ajoutées de manière inattendue au fichier .ssh/authorized_keys. Ces scénarios se limitent à une situation dans laquelle la machine virtuelle est approvisionnée à l’aide de cloud-init et l’utilisateur sélectionne des fonctionnalités Azure supplémentaires reposant sur des certificats, comme une identité de service gérée par le système.

Ce comportement inattendu se produit en raison d’une modification de la logique d’approvisionnement de systèmes d’exploitation spécifiques. Il s’agit de systèmes qui utilisent cloud-init et qui installent par inadvertance la clé publique de tous les certificats disponibles pour la machine virtuelle dans le fichier de clés autorisées par SSH lors de la création de la machine virtuelle. 

Pour en savoir plus, consultez la page CVE-2019-0816.

Informations supplémentaires

Détails du scénario

La logique cloud-init mentionnée dans la section « Résumé » existe dans les images Azure pour Ubuntu 18.04 en plus des images cloud-init de CentOS 7.4 et RHEL 7.4/7.5/7.6 de préversion publique. Elle peut également être présente dans des images personnalisées qui utilisent ces systèmes d’exploitation.
 
Si vous activez l’une des fonctionnalités suivantes lors de l’approvisionnement de l’une des images Linux, vous pouvez constater la présence de clés supplémentaires inattendues dans un fichier .ssh/authorized_keys :

  • Identité gérée

  • Extensions avec paramètres protégés

  • Déployer une machine virtuelle avec des clés Key Vault dans une machine virtuelle

Identification et correction des machines virtuelles existantes

Identification

Pour vérifier la présence de clés supplémentaires, consultez le fichier des clés autorisées (vi .ssh/authorized_keys file) pour déterminer si des clés supplémentaires que vous n’aviez pas l’intention d’inclure ont été ajoutées.

Vous pouvez supprimer manuellement les clés publiques SSH supplémentaires éventuellement ajoutées en toute sécurité. Cette suppression n’aura pas d’impact sur les fonctionnalités déployées avec la machine virtuelle. De plus, elle ne perturbera pas la paire de clés SSH que vous avez spécifiée à des fins d’authentification.

Si vous ne connaissez pas ou ne pouvez pas déterminer les clés publiques du fichier .ssh/authorized_keys spécifiées à des fins d’authentification, procédez comme suit :

  1. Vérifiez vos modèles de déploiement :

    1. Clés publiques SSH

    2. Clés SSH dans la configuration cloud-init

  2. Récupérez les clés SSH déployées lors de la création depuis la machine virtuelle, si vous disposez d’un accès sudo/root. Pour cela, procédez comme suit :

    1. Vérifiez que la configuration cloud-init a été transmise dans CustomData : sudo cat /var/lib/waagent/ovf-env.xml | grep "<ns1:CustomData>"
      Utilisez la valeur CustomData puis le décodage base64 pour obtenir les clés publiques déployées : echo "<customData value>" | base64 -D

    2. Vous pouvez également consulter le service IMDS (Instance Meta Data Service) pour connaître la clé publique SSH transmise dans la propriété de clé publique SSH lors de la création de la machine virtuelle : curl -H Metadata:true "http://169.254.169.254/metadata/instance/compute/publicKeys?api-version=2018-04-02&format=json"

Correction

Si vous avez identifié des certificats supplémentaires que vous n’aviez pas l’intention de déployer sur la machine virtuelle, vous pouvez les supprimer en effaçant la ligne correspondante dans le fichier authorized_keys.

Effectuez la correction en vous connectant à la machine virtuelle de manière interactive ou utilisez l’extension de script personnalisé ou RunCommand sur plusieurs machines virtuelles.

Machines virtuelles déployées à l’aide d’extensions disposant de paramètres protégés ou d’une identité gérée

Utilisez le script ci-dessous pour supprimer les clés publiques des certificats dans lesquels la machine virtuelle a été déployée avec des extensions ou une identité gérée. Cette opération ne supprime pas les clés spécifiées lors du déploiement d’une machine virtuelle ou si la machine virtuelle a été déployée avec des clés Key Vault.

Important : Nous vous recommandons d’effectuer une sauvegarde du fichier authorized_keys avant d’exécuter ce script.

 

#!/bin/bash
set -e

# /var/lib/waagent has *.crt files that include the crt files corresponding to 
# the user provided public keys and one additional .crt file from MSI.
# This script converts the content of the .crt file into the ssh public key and
# remove it from the authorized_keys file
readarray -t CRT_FILES < <(grep -l -E "(Microsoft.ManagedIdentity|Windows Azure)" /var/lib/waagent/*.crt)
for ((i=0; i < ${#CRT_FILES[@]}; i++))
do
    PUBKEY=$(openssl x509 -in "${CRT_FILES[$i]}" -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8)
    sed -i -e "\@$PUBKEY@d" $HOME/.ssh/authorized_keys
Done 

Après avoir exécuté le script, consultez le fichier .ssh/authorized_keys pour vérifier que seules les clés publiques connues sont présentes.

Machines virtuelles déployées avec des secrets Key Vault

Pour déterminer si la clé a été ajoutée lors du déploiement avec des clés Key Vault, procédez comme suit :

  1. Obtenez le nom du certificat Key Vault déployé à l’aide de la machine virtuelle, vérifiez les modèles ARM ou Az CLI du code de déploiement ou exécutez cette interface CLI Az :
      az vm show --resource-group <resourceGroupName> --name <vmName> | grep certificateUrl

    La réponse affiche le nom du certificat :
      "certificateUrl": "https://<keyVaultname>.vault.azure.net/secrets/<certName>/xxxxxxxxxxxxx"

  2. Téléchargez le certificat :
      az keyvault certificate download --vault-name <keyVaultName> --name <certName> --encoding PEM --file public.pem

  3. Extrayez la clé publique :
      openssl x509 -in public.pm -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8

  4. Comparez le résultat de l’étape précédente aux certificats restants dans le fichier .ssh/authorized_keys.
      vi .ssh/authorized_keys file

Résolution

Images Azure Marketplace

Des correctifs ont été appliqués à cloud-init dans les images Azure identifiées :

  • Canonical:UbuntuServer:18.04-LTS:18.04.201902190

Remarque

Une mise à jour sera ajoutée ultérieurement aux images ci-dessous.

  • Canonical:UbuntuServer:18.10:x

  • RedHat:RHEL:7-RAW-CI (image de préversion publique)

  • OpenLogic:CentOS:7-CI (image de préversion publique)

Cet article sera mis à jour dès que les images seront disponibles.

Images personnalisées

Si vous utilisez des images personnalisées approvisionnées par cloud-init pour les systèmes d’exploitation connus, vous devez mettre à jour votre image personnalisée source.

Images Ubuntu 18.04

Pour mettre à jour une image personnalisée source, vous devez apporter les modifications suivantes :

  • Modifiez le fichier suivant :

    /etc/cloud/cloud.cfg.d/90-azure.cfg

  • Ajoutez le code suivant à la fin du fichier :

Important : Le code doit être ajouté exactement comme indiqué, y compris avec les espaces.

datasource:
   Azure:
     agent_command: [service, walinuxagent, start]

Images RHEL 7.4/7.5/7.6 et CentOS 7.6

Si vous avez déjà créé les images RHEL/CentOS à l’aide de cette procédure (ou d’une méthode similaire), vous devez mettre à jour l’image source à partir de laquelle vous avez créé les machines virtuelles. Vous devez ajouter les étapes supplémentaires ci-dessous à votre configuration d’image de machine virtuelle source existante :

Étape 1

Modifiez le fichier suivant :

/etc/cloud/cloud.cfg.d/91-azure_datasource.cfg 

Important : Le code doit être ajouté exactement comme indiqué, y compris avec les espaces.

Ajoutez les lignes suivantes à la fin du fichier :

datasource:
   Azure:
     agent_command: [systemctl, start, waagent, --no-block]

Étape 2

Mettez à jour la configuration de l’Agent comme suit :

cp /lib/systemd/system/waagent.service /etc/systemd/system/waagent.service
sed -i 's/After=network-online.target/WantedBy=cloud-init.service\\nAfter=network.service systemd-networkd-wait-online.service/g' /etc/systemd/system/waagent.service
systemctl daemon-reload

Packages cloud-init

Tous les packages cloud-init qui incluent un correctif font actuellement l’objet d’une mise à jour. Microsoft étudie actuellement ce problème et publiera des informations supplémentaires dans cet article dès qu’elles seront disponibles.

Forum aux questions

Q1 : Microsoft a-t-elle eu accès à ma machine virtuelle ?

R1 : Les clés de chiffrement servent à gérer les identités et les extensions ne sont pas conçues pour permettre un accès aux employés de Microsoft. Nous avons mis en place des processus destinés à surveiller, consigner et empêcher ce type d’accès. Par mesure de précaution, nous vérifions actuellement l’ensemble des journaux afin de garantir qu’aucune clé client n’a fait l’objet d’un accès inapproprié. En ce qui concerne les certificats stockés dans Key Vault qui sont référencés dans un déploiement VM ou VMSS, les employés de Microsoft ne disposent d’aucun accès aux éléments secrets.

Q2 : Les systèmes d’exploitation et versions sur lesquels cloud-init est déployé sont-ils concernés ?

R2 : Non. Nous n’avons constaté ce problème de clés superflues que dans les systèmes d’exploitation identifiés. Il ne s’est pas produit dans les versions antérieures d’Ubuntu, car ces systèmes définissent les clés publiques à l’aide d’un autre mécanisme.

Q3 : Les packages cloud-init concernés pour les distributions Linux incluent-ils le correctif ?

R3 : Nous sommes en train d’ajouter les correctifs aux packages correspondant aux versions concernées et nous mettrons à jour cet article dès que cette tâche sera terminée.

Q4 : Microsoft va-t-elle mettre à jour automatiquement les machines virtuelles concernées ? 

R4 : Non. Microsoft ne modifiera pas le contenu des machines virtuelles que vous avez déjà approvisionnées.

Q5 : D’après nos stratégies de sécurité, je ne peux pas utiliser une machine virtuelle Linux avec du contenu superflu dans authorized_keys. Que dois-je faire à l’heure actuelle ?

R5 : Vous pouvez supprimer en toute sécurité la ligne incriminée du fichier authorized_keys. Cette suppression n’aura aucun impact sur la paire de clés SSH créée et contrôlée ou sur l’identité gérée. Vous pouvez effectuer cette opération manuellement ou à l’aide d’un script ou d’une commande personnalisée sur une flotte concernée.

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.

Les communautés vous permettent de poser des questions et d'y répondre, de donner vos commentaires et de bénéficier de l'avis d'experts aux connaissances approfondies.

Ces informations vous ont-elles été utiles ?

Dans quelle mesure êtes-vous satisfait(e) de la qualité de la langue ?
Qu’est-ce qui a affecté votre expérience ?
En cliquant sur Envoyer, vos commentaires seront utilisés pour améliorer les produits et services de Microsoft. Votre administrateur informatique sera en mesure de collecter ces données. Déclaration de confidentialité.

Nous vous remercions de vos commentaires.

×