Partager via


Qu’est-ce que le contrôle de posture SSH pour Windows ?

Le contrôle de la posture SSH vous permet d’auditer et de configurer la posture de sécurité du serveur SSH sur Windows Server 2019, 2022 et 2025. SSH Posture Control s’intègre en toute transparence avec les services de gouvernance Azure (stratégie, configuration de l’ordinateur) afin de pouvoir :

  • Garantir la conformité avec les normes sshd dans votre secteur ou votre organisation
  • Réduire la surface d’attaque de la gestion à distance basée sur sshd
  • Garantir une configuration sshd cohérente dans votre flotte pour la sécurité et la productivité

Capture d’écran montrant la liste des vérifications SSH conformes

Pour vous aider à démontrer la conformité aux auditeurs (et à prendre des mesures si nécessaire), chaque vérification de conformité inclut des preuves via le champ Raisons indiquant la façon dont la conformité ou la non-conformité a été déterminée.

Vous pouvez personnaliser les paramètres sshd (numéro de port, groupes autorisés, etc.) ou utiliser les valeurs par défaut de la stratégie.

Documentation pour la prise en main

Sélection du comportement d’audit uniquement par rapport au comportement audit-and-configure

Lors de l’attribution d’une stratégie de contrôle de posture SSH, vous pouvez choisir le comportement d’audit uniquement (appelé « Audit ») ou le comportement audit-and-configure (appelé « Configurer »).

Définition de stratégie Effet d’Azure Policy Remarques sur ce à quoi s’attendre
Comportement d’audit uniquement **Audit** SSH Posture Control on Windows machines auditIfNotExists La stratégie inclut des paramètres plus restrictifs par rapport à de nombreuses images système populaires. Par exemple, déni d’accès ssh racine. En conséquence, attendez-vous à voir les états non conformes signalés.
Comportement d’audit et de configuration **Configure** SSH Posture Control on Windows machines deployIfNotExists Comme ci-dessus, vous pouvez vous attendre à voir les états non conformes signalés initialement. Par la suite, les machines sont reconfigurées pour correspondre à la stratégie, ce qui entraîne des états conformes éventuels.

Pour les machines existantes, les administrateurs commencent généralement par un comportement d’audit uniquement pour déterminer l’état existant et pour découvrir les dépendances telles que les comptes autorisés pour l’automatisation des systèmes. Après avoir comparé la flotte existante par défaut au contrôle de posture SSH, vous décidez quels paramètres ssh Posture Control personnaliser. Après cette analyse et la planification, vous allez ensuite passer au comportement d’audit et de configuration (avec des pratiques de déploiement sécurisées telles que des anneaux).

Pour les scénarios greenfield ou les machines de test jetables, vous pouvez choisir d’ignorer cette analyse et de passer directement au comportement d’audit et de configuration, en commençant par les valeurs par défaut fortes du contrôle de posture SSH.

Avertissement

Avant de configurer des machines, veillez à valider votre nouvelle configuration. Vous pourriez perdre accidentellement l’accès à vos machines.

Voici quelques exemples de verrouillage accidentel de vous-même :

  • Les paramètres d’autorisation net appliqués (combinaison de allowUsers,denyGroups, etc.) n’autorisent pas les connexions dont vous avez besoin
  • La port configuration de sshd est bloquée par d’autres contrôles dans votre environnement (règles de pare-feu hôte, règles de pare-feu réseau, etc.)
    • Pour éviter de dépasser les limites de l’équipe d’entreprise, SSH Posture Control a configuré sshd uniquement. Il n’essaie actuellement pas de modifier les règles de pare-feu sur ordinateur, etc. pour prendre en charge le port sshd configuré. Si vous souhaitez discuter de ces scénarios avec nous, contactez-nous (voir ressources supplémentaires ci-dessous).

Étendue du contrôle de posture SSH : règles, valeurs par défaut et personnalisation

Le tableau suivant répertorie les éléments qui peuvent être audités ou configurés avec ssh Posture Control. Chacun d’eux est appelé règle.

La plupart des règles peuvent recevoir des valeurs personnalisées, via des paramètres d’attribution de stratégie pour effectuer un audit sur ou configurer et auditer. Par exemple, si la norme de votre organisation consiste à utiliser le port 1111 (au lieu de 22) pour sshd, vous devez définir le paramètre correspondant dans l’attribution de stratégie. Ces paramètres ont des identificateurs inclus dans le tableau ci-dessous. En règle générale, le nom court du paramètre est utilisé par programmation (par exemple avec az policy assignment create --params ...), tandis que le nom d’affichage de paramètre plus long est utilisé dans les flux de travail du portail Azure.

Lors de la personnalisation des valeurs, veillez à fournir des valeurs compatibles avec sshd. Par exemple, allowGroups prend une liste délimitée d’espaces de modèles de noms de groupe. Pour référence, consultez la page sshd_config man. La référence sshd_config est également utile pour comprendre d’autres comportements sshd tels que la façon dont les listes d’autorisation et de refus se croisent.

Remarque

Pour conserver la disposition du tableau, certaines valeurs de cellule ont été déplacées vers des notes de bas de page sous le tableau.

Nom de la règle Valeur par défaut Nom du paramètre Nom complet du paramètre
Vérifiez que les groupes autorisés pour SSH sont configurés <Note de bas de page 1> AllowGroups Groupes autorisés
Vérifiez que les utilisateurs autorisés pour l’accès SSH sont configurés "" AllowUsers Utilisateurs autorisés
Vérifiez que la méthode d’authentification pour SSH est configurée quelconque AuthenticationMethods Méthodes d’authentification
Vérifiez que les groupes refusés pour SSH sont configurés "" DenyGroups Groupes refusés
Vérifiez que les utilisateurs refusés pour SSH sont configurés "" DenyUsers Utilisateurs refusés
Vérifiez que le code d’installation utilisé lors de la journalisation des messages pour SSH est configuré LOCAL0 SyslogFacility Installation de journalisation du système
Vérifiez que ssh MaxAuthTries est configuré 6 MaxAuthTries Nombre maximal de tentatives d’authentification
Vérifiez que ssh HostKey est configuré <Note de bas de page 2> HostKey Clé hôte
Vérifiez que le fichier de clé autorisé pour SSH est configuré <Note de bas de page 3> AuthorizedKeysFile Fichier de clé autorisé
Vérifiez que GSSApiAuthentication pour SSH est configuré faux GSSAPIAuthentication Authentification GSSAPI
Vérifiez que la bannière d’avertissement SSH est configurée <Note de bas de page 4> Banner Bannière
Vérifiez que les chiffrements appropriés sont utilisés pour SSH aes128-ctr,aes192-ctr,aes256-ctr Ciphers Chiffrements autorisés
Vérifiez que seuls les algorithmes MAC approuvés sont utilisés hmac-sha2-256 MACs Algorithmes MAC
Vérifiez que ssh ClientAliveCountMax est configuré 0 ClientAliveCountMax Nombre de messages actifs du client
Vérifiez que le port SSH est configuré 22 Port Port
Vérifiez que ssh LoginGraceTime est configuré soixante LoginGraceTime Heure de grâce de connexion
Vérifiez que ssh ClientAliveInterval est configuré 3600 ClientAliveInterval Intervalle actif du client
Vérifiez que ssh PermitEmptyPasswords est configuré faux PermitEmptyPasswords Autorisation de mot de passe vide

Notes de bas de page du tableau :

  1. administrators "openssh users"

  2. __PROGRAMDATA__/ssh/ssh_host_ecdsa_key

  3. %programdata%/ssh/administrators_authorized_keys

  4. #######################################################################/r/n/r/nAuthorized access only!/r/n/r/nIf you are not authorized to access or use this system, disconnect now!/r/n/r/n#######################################################################/r/n

    1. Remarque : cela s’affiche pour les utilisateurs finaux comme suit :
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    

Paramètres de stratégie supplémentaires (non sshd)

Ces paramètres de stratégie supplémentaires sont disponibles pendant l’attribution de stratégie. Celles-ci influencent le comportement de l’affectation d’Azure Policy, par opposition aux paramètres sshd sur les machines.

Nom Descriptif Par défaut
Inclure des serveurs connectés à Arc En sélectionnant cette option, vous acceptez d’être facturé tous les mois par ordinateur connecté à Arc. FAUX
Résultat Activer ou désactiver l’exécution de cette stratégie <Dépend de la sélection de l’audit uniquement par rapport au comportement d’audit et de configuration>

Définitions de stratégie ? Affectations de stratégie ? Affectations d’invités ? Configuration de l’ordinateur ? Comment cela s’adapte-t-il ?

Pour commencer à utiliser SSH Posture Control, votre action principale consiste à créer une attribution de stratégie. Votre attribution de stratégie lie une définition de stratégie (par exemple, « Auditer le contrôle de posture SSH pour les machines Windows ») à une étendue (par exemple, « my_factory_3_resource_group »).

À mesure que vous utilisez le système, vous rencontrerez des types de ressources et une terminologie supplémentaires, comme indiqué ci-dessous.

diagramme montrant comment une attribution de stratégie lie des machines au service Machine Configuration via des attributions d’invités

Descriptif
Définition de stratégie Dans le service de stratégie, les données abstraites qui décrivent un cluster de comportements d’audit et/ou de configuration disponibles. Par exemple, « Auditer le contrôle de posture SSH sur les machines Windows ».
Affectation de stratégie Lie une définition de stratégie abstraite à une étendue concrète, telle qu’un groupe de ressources. L’attribution de stratégie peut inclure des paramètres et d’autres propriétés spécifiques à cette affectation.
Configuration d’une machine Service et agent Azure qui gèrent l’audit et la configuration des paramètres au niveau du système d’exploitation.
Attribution d’invité Ressource qui agit comme un lien tridirectionnel entre l’attribution de stratégie, l’ordinateur et le service De configuration de l’ordinateur. La stratégie crée et surveille les ressources d’affectation d’invité en fonction des besoins.
Pour plus d’informations sur la terminologie « invité » et « machine », consultez Pourquoi voir les termes « Guest Configuration » et « Automanage » dans les emplacements ?
Machine Une machine avec Arc ou une machine virtuelle Azure.

À propos de la compatibilité (implémentations de serveur SSH, etc.)

Le contrôle de posture SSH est conçu pour le scénario Windows Server universel standard d’une seule instance de serveur SSH longue durée :

  • dont le cycle de vie est géré par le système init tel que Service Control Manager
  • dont le comportement est régi par sshd_config fichier, cohérent avec le comportement sshd OpenSSH
  • dont la configuration/l’état effectif est révélé par sshd -T la sortie, cohérente avec le comportement sshd OpenSSH

Pour tous les systèmes d’exploitation pris en charge (voir ci-dessous), il s’agit du cas d’utilisation par défaut du serveur SSH.

En principe, un ordinateur peut avoir n’importe quel nombre d’instances de serveur SSH s’exécutant avec des durées de vie variables, en fonction de n’importe quel nombre de bases de code et en prenant leur configuration à partir de n’importe quel nombre d’emplacements (fichiers de configuration, arguments de ligne de commande, paramètres de temps de compilation, etc.). Ces cas sont hors de portée pour le contrôle de posture SSH pour l’instant. Si vous êtes intéressé par ces cas pour l’avenir, veuillez nous contacter pour discuter.

Le contrôle de posture SSH est destiné à être utilisé sur les machines Windows Server 2019, 2022 et 2025 prises en charge par Azure Policy et la configuration de l’ordinateur :

La compatibilité avec n’importe quel ordinateur spécifique au moment de l’exécution ne peut pas être garantie, car les administrateurs système d’exploitation et les générateurs d’images sont libres de supprimer les composants du système d’exploitation, de rendre les systèmes de fichiers en lecture seule, etc.

Compatibilité avec les directives Include sshd_config

Ssh Posture Control tente de prendre en charge et d’utiliser des Include directives dans sshd_config, comme suit :

  • Pour les actions d’audit/lecture : reposez sur des -T sshd pour refléter la configuration net du point de vue de sshd, en tenant compte des éléments inclus.
  • Pour configurer/écrire des actions :
    • Lier un nouveau fichier ssh Posture Control spécifique à sshd_config (en tant qu’include). Ensuite, placez toutes les écritures dans le fichier SSH Posture Control lié. Cela améliore l’hygiène du système et la traçabilité des changements du système.

Compatibilité avec les directives sshd_config Match

Le contrôle de posture SSH est conçu pour auditer et configurer le comportement sshd principal. Il ne tente pas d’interagir avec des blocs conditionnels Match (le cas échéant) qui peuvent appliquer différentes configurations sshd à des populations spécifiques.

Compatibilité avec plusieurs valeurs de sshd_config

Ssh Posture Control ne prend pas en charge l’utilisation de plusieurs valeurs pour la règle « port », c’est-à-dire la définition de la règle « port » sur 22 et 33. Cette règle doit être configurée avec une valeur unique pour garantir une fonctionnalité et une conformité appropriées pour l’audit et la configuration des scénarios. D’autres règles telles que les utilisateurs autorisés/refus et les chiffrements peuvent avoir plusieurs valeurs, tant qu’elles sont ajoutées sur une seule ligne.

Exemple:

  • Un fichier sshd_config existant comprend une ligne « port :22 » et une autre ligne « port :33 ».
  • La stratégie « Audit SSH » est utilisée pour auditer une valeur de port attendue de 33.
  • Résultat : l’audit peut passer ou échouer de façon imprévisible.
  • Recommandation : n’utilisez pas cette fonctionnalité avec des scénarios tels que ceux-ci.

Comment interroger les résultats par programmation ?

À l’aide de requêtes Azure Resource Graph (ARG), vous pouvez intégrer des données d’affectation et d’état dans vos propres flux de travail. Ces exemples utilisent Search-AzGraph dans PowerShell pour exécuter la requête ARG, mais PowerShell n’est pas obligatoire. Vous pouvez utiliser ARG à partir de nombreux points d’entrée, notamment le portail Azure, Azure CLI, les appels REST, etc.

  1. À l’altitude la plus élevée de résumé, vous pouvez obtenir le nombre d’ordinateurs par compartiment d’état de conformité. Par exemple:

    $machineCountsQuery = @'
    // SSH machine counts by compliance status
    guestconfigurationresources
    | where name contains "SecureShell"
    | extend complianceStatus = tostring(properties.complianceStatus)
    | summarize machineCount = count() by complianceStatus
    '@
    
    Search-AzGraph -Query $machineCountsQuery
    
    <#
    Sample output from an environment with two machines:
    
    complianceStatus machineCount
    ---------------- ------------
    Pending                     1
    Compliant                   1
    #>
    
  2. Pour explorer de telle sorte que vous voyiez l’état de conformité global par machine, vous pouvez utiliser les éléments suivants :

    $machinePerRowQuery = @'
    // SSH machine level compliance
    guestconfigurationresources
    | where name contains "SecureShell"
    | project 
     machine = split(properties.targetResourceId,'/')[-1],
     complianceStatus = properties.complianceStatus,
     lastComplianceStatusChecked = properties.lastComplianceStatusChecked
    '@
    
    Search-AzGraph -Query $machinePerRowQuery
    
    <#
    Sample output:
    
    machine     complianceStatus lastComplianceStatusChecked
    -------     ---------------- ---------------------------
    sshdemovm01 Compliant        2/15/2024 11:07:21 PM
    sshdemovm02 Pending          1/1/0001 12:00:00 AM
    #>
    
  3. Pour explorer les détails de définition par paramètre, vous pouvez utiliser les éléments suivants :

    $settingPerRowQuery = @'
    // SSH rule level detail
    GuestConfigurationResources
    | where name contains "SecureShell"
    | project report = properties.latestAssignmentReport,
     machine = split(properties.targetResourceId,'/')[-1],
     lastComplianceStatusChecked=properties.lastComplianceStatusChecked
    | mv-expand report.resources
    | project machine,
     rule = report_resources.resourceId,
     ruleComplianceStatus = report_resources.complianceStatus,
     ruleComplianceReason = report_resources.reasons[0].phrase,
     lastComplianceStatusChecked
    '@
    
    Search-AzGraph $settingPerRowQuery
    
    <#
    Sample output:
    
    machine     rule                                                  ruleComplianceStatus     ruleComplianceReason
    -------     ---------------                                                  ------               ------
    sshdemovm01 Ensure that the allowed groups for SSH are configured            true            ["administrators","openssh users"] contains the expected values: ["administrators","openssh users"]
    sshdemovm01 Ensure that appropriate ciphers are used for SSH                 true            ["aes128-ctr","aes192-ctr","aes256-ctr"] contains the expected values: ["aes128-ctr","aes192-ctr","aes256-ctr"]
    sshdemovm01 Ensure that the authorized key file for SSH is configured        true            "%programdata%/ssh/administrators_authorized_keys" is equal to "%programdata%/ssh/administrators_authorized_keys"
    sshdemovm01 Ensure that the SSH ClientAliveInterval is configured            true            3600 is equal to 3600
    sshdemovm01 Ensure that the SSH PermitEmptyPasswords is configured           true            false is equal to false
    sshdemovm01 Ensure that the SSH port is configured                           true            22 is equal to 22
    sshdemovm01 Ensure that the SSH MaxAuthTries is configured                   true            6 is equal to 6
    sshdemovm01 Ensure that only approved MAC algorithms are used                true            ["hmac-sha2-256"] contains the expected values: ["hmac-sha2-256"]
    sshdemovm01 Ensure that the SSH HostKey is configured                        true            "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key" is equal to "__PROGRAMDATA__/ssh/ssh_host_ecdsa_key"
    sshdemovm01 Ensure that the SSH LoginGraceTime is configured                 true            60 is equal to 60
    #>
    

Pourquoi puis-je voir les termes « Guest Configuration » et « Automanage » sur place ?

Le service Machine Configuration a également été appelé Guest Configuration et Automanage Machine Configuration. Vous pouvez rencontrer ces noms lorsque vous interagissez avec les services et la documentation. Par exemple:

  • Dans les exemples de requête Azure Resource Graph de cet article, la table de données est appelée guestconfigurationresources.
  • Dans le portail Azure, une vue utile pour observer les résultats est appelée « Attributions d’invités ».
  • Dans le portail Azure, lors de l’application de l’extension de machine virtuelle appropriée pour activer la configuration de l’ordinateur, le titre de l’extension est « Automanage Machine Configuration ».

Pour les besoins du contrôle de posture SSH, il n’existe aucune distinction significative entre « invité » et « machine ». Les machines avec Arc et les machines virtuelles Azure sont éligibles.

Quels sont les identificateurs des définitions de stratégie intégrées ?

Dans certains cas, comme la création d’affectations de stratégie avec Azure CLI, il peut être utile ou nécessaire de faire référence à une définition de stratégie par ID plutôt que par nom complet.

nom d’affichage pièce d'identité
Audit SSH Posture Control sur les machines Windows /providers/Microsoft.Authorization/policyDefinitions/fe4e11ff-f561-4d4a-877c-256cc0b6470e
Configurer le contrôle de posture SSH sur les machines Windows /providers/Microsoft.Authorization/policyDefinitions/42830b63-79aa-4ea5-85dc-6baa719d7d7c
  • Pour obtenir du support technique, etc., contactez le support Technique Microsoft
  • Pour fournir des commentaires, discuter des demandes de fonctionnalités, etc. contactez : linux_sec_config_mgmt@service.microsoft.com