Partager via


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

Le contrôle de posture SSH vous permet d’auditer et de configurer la posture de sécurité du serveur SSH sur les distributions Linux prises en charge, notamment Ubuntu, Red Hat, Azure Linux, etc. 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 des normes sshd dans votre industrie ou organisation
  • Réduire la surface d’attaque de la gestion à distance basée sur sshd
  • Garantir une configuration cohérente de sshd 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 comment 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 stratégie, qui sont alignées sur la base de référence de sécurité Azure pour Linux.

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 SSH Posture Control, vous pouvez choisir comportement d’audit uniquement (appelé « Audit ») ou comportement d’audit et de configuration (appelé « Configurer »).

Définition de stratégie Effet Azure Policy Remarques sur ce à quoi s’attendre
comportement audit uniquement **Audit** SSH Posture Control on Linux 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 États non conformes signalés.
de comportement audit et configuration **Configure** SSH Posture Control on Linux machines deployIfNotExists Comme ci-dessus, vous pouvez vous attendre à voir états non conformes signalés initialement. Par la suite, les machines seront reconfigurées pour correspondre à la stratégie, ce qui aboutit à des états conformes.

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.

Prudence

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,permitRootLogin, etc.) n’autorisent pas les connexions dont vous avez besoin
  • Le port que vous configurez pour sshd est bloqué par d’autres contrôles dans votre environnement (stratégies SELinux, règles de pare-feu hôte, règles de pare-feu réseau, etc.)
    • Notez que de nombreuses distributions de famille Red Hat ont des stratégies SELinux en place par défaut, ce qui empêche sshd d’utiliser des ports autres que 22.
    • 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 stratégies SELinux sur machine, les règles de pare-feu, etc. pour prendre en charge le port sshd configuré. Si vous souhaitez discuter de ces scénarios avec nous, contactez-nous (consultez 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. Chacune d’elles est appelée règle de .

Chaque règle a une valeur de configuration par défaut, alignée sur la base de référence de sécurité Azure pour Linux.

La plupart des règles peuvent être attribuées à des valeurs personnalisées, via l’attribution de stratégie paramètres pour auditer 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 plus d’informations, 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 autoriser et refuser listes se croisent.

Note

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 d’affichage du paramètre
Vérifiez que les autorisations sur /etc/ssh/sshd_config sont configurées 600 <note de bas de page 1> Autorisations d’accès pour sshd_config
Vérifiez que IgnoreRhosts est défini oui ignoreHosts Ignorer les rhosts et les hôtes
Vérifier que LogLevel est défini INFO logLevel Niveau de détail du journal
Vérifier que MaxAuthTries est défini 6 maxAuthTries Nombre maximal de tentatives d’authentification
Vérifiez que les utilisateurs autorisés pour l’accès SSH sont configurés @ <voir la note de bas de page 5> allowUsers Utilisateurs autorisés pour SSH
Vérifiez que les utilisateurs refusés pour l’accès SSH sont configurés racine denyUsers Utilisateurs refusés pour SSH
Vérifiez que les groupes autorisés pour l’accès SSH sont configurés * allowGroups Groupes autorisés pour SSH
Vérifiez que les groupes refusés pour l’accès SSH sont configurés racine denyGroups Groupes refusés pour SSH
Vérifier que HostbasedAuthentication est défini Non hostBasedAuthentication Authentification basée sur l’hôte
Vérifier que PermitRootLogin est défini Non permitRootLogin Indique si la racine peut se connecter à l’aide de ssh
Vérifier que PermitEmptyPasswords est défini Non permitEmptyPasswords Indique si le serveur autorise la connexion aux comptes avec des chaînes de mot de passe vides
Vérifier que ClientAliveCountMax est défini 0 clientAliveCountMax Nombre de messages actifs du client qui peuvent être envoyés sans recevoir sshd les messages de retour du client
Vérifier que ClientAliveInterval est défini 3600 clientAliveInterval Intervalle de délai d’expiration en secondes après lequel, si aucune donnée n’a été reçue du client, sshd envoie un message pour demander une réponse
Vérifier que les contrôleurs de domaine d’application sont configurés <note de bas de page 2> <note de bas de page 3> Liste des algorithmes mac (Message Authentication Code) disponibles
Vérifier qu’une bannière est configurée <note de bas de page 4> banner Contenu du fichier de bannière envoyé à l’utilisateur distant avant l’authentification autorisée
Vérifiez que PermitUserEnvironment est défini Non permitUserEnvironment Indique si les options ~/.ssh/environment= dans ~/.ssh/authorized_keys sont traitées par sshd
Vérifier que les chiffrements sont configurés aes128-ctr,aes192-ctr,aes256-ctr ciphers Liste des chiffrements autorisés
Vérifiez que le port SSH est configuré 22 port Port SSH
Vérifier que le protocole de bonne pratique est utilisé 2 <aucun paramètre> <aucun paramètre>

Notes de bas de page du tableau :

  1. accessPermissionsForSshdConfig

  2. messageAuthenticationCodeAlgorithms

  3. hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com

  4. #######################################################################\n\nAuthorized access only!\n\nIf you are not authorized to access or use this system, disconnect now!\n\n#######################################################################\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!
    
    #######################################################################
    
  5. Dans allowUsers la valeur par défaut « @ » représente tous les comptes sur l’ordinateur

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 Description Faire 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
Effet Activer ou désactiver l’exécution de cette stratégie <Dépend de 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 affectation de stratégie lie une définition de stratégie (par exemple, « Auditer le contrôle de posture SSH pour les machines Linux ») à 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 affectations d’invités

Description
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 Linux ».
d’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.
de configuration de l’ordinateur Service et agent Azure qui gèrent l’audit et la configuration des paramètres au niveau du système d’exploitation.
affectation 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 puis-je voir les termes « Guest Configuration » et « Automanage » dans les emplacements ?
machine Une machine avec Arc ou une machine virtuelle Azure.

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

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

  • dont le cycle de vie est géré par le système init sush as systemd
  • dont le comportement est goverened par sshd_configde fichier, cohérent avec le comportement sshd OpenSSH
  • dont la configuration/l’état effectif est révélé par sshd -T sortie, cohérente avec le comportement sshd OpenSSH

Pour toutes les distributions prises 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.

Ssh Posture Control est destiné à être utilisé sur ces distributions Linux prises en charge par Azure Policy et Configuration de machine, à l’exclusion de celles qui étaient en support étendu au moment du développement. Plus précisément, les éléments suivants sont dans l’étendue de 2024-06-05 :

  • AlmaLinux 9
  • Amazon Linux 2
  • Ubuntu Server 20.04
  • Ubuntu Server 22.04
  • Debian 10
  • Debian 11
  • Debian 12
  • Azure Linux (CBL Mariner) 2
  • Oracle Linux 7
  • Oracle Linux 8
  • CentOS 7.3
  • CentOS 8
  • RHEL 7.4
  • RHEL 8
  • RHEL 9
  • Rocky Linux 9
  • SLES 15

Dans la mesure possible, SSH Posture Control est testé avec des compositions système très utilisées spécifiques des distributions ci-dessus. Par exemple, les compositions d’images de système d’exploitation publiées par les responsables de distribution dans la galerie Azure. 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, de bloquer les actions d’agent avec SELinux, etc.

Compatibilité avec les directives Include sshd_config

Le contrôle de posture SSH tente de prendre en charge et d’utiliser des directives Include 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 :
    • Si l’implémentation sshd sur la machine prend en charge Include, liez un nouveau fichier spécifique au contrôle de posture SSH à 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.
    • Si l’implémentation sshd sur l’ordinateur ne prend pas en charge les directives Include, écrivez les modifications de configuration directement dans sshd_config.

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 de Match conditionnels (le cas échéant) qui peuvent appliquer différentes configurations sshd à des populations spécifiques.

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 nécessaire. 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 "LinuxSshServerSecurityBaseline"
    | 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 "LinuxSshServerSecurityBaseline"
    | 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 "LinuxSshServerSecurityBaseline"
    | 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 permissions on /etc/ssh/sshd_config are configured        true            Access to '/etc/ssh/sshd_config' matches required ...
    sshdemovm01 Ensure SSH is configured to meet best practices (protocol 2)     true            'Protocol 2' is found uncommented in /etc/ssh/sshd_config
    sshdemovm01 Ensure SSH is configured to ignore rhosts                        true            The sshd service reports that 'ignorerhosts' is set to 'yes'
    sshdemovm01 Ensure SSH LogLevel is set to INFO                               true            The sshd service reports that 'loglevel' is set to 'INFO'
    sshdemovm01 Ensure SSH MaxAuthTries is configured                            true            The sshd service reports that 'maxauthtries' is set to '6'
    sshdemovm01 Ensure allowed users for SSH access are configured               true            The sshd service reports that 'allowusers' is set to '*@*'
    sshdemovm01 Ensure denied users for SSH are configured                       true            The sshd service reports that 'denyusers' is set to 'root'
    sshdemovm01 Ensure allowed groups for SSH are configured                     true            The sshd service reports that 'allowgroups' is set to '*'
    sshdemovm01 Ensure denied groups for SSH are configured                      true            The sshd service reports that 'denygroups' is set to 'root'
    sshdemovm01 Ensure SSH host-based authenticationis disabled                  true            The sshd service reports that 'hostbasedauthentication' is ...
    #>
    

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.

displayName id
Auditer le contrôle de posture SSH sur les machines Linux /providers/Microsoft.Authorization/policyDefinitions/a8f3e6a6-dcd2-434c-b0f7-6f309ce913b4
Configurer ssh Posture Control sur des machines Linux /providers/Microsoft.Authorization/policyDefinitions/e22a2f03-0534-4d10-8ea0-aa25a6113233
  • 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