Partilhar via


O que é o SSH Posture Control for Windows?

O Controle de Postura SSH permite auditar e configurar a postura de segurança do Servidor SSH no Windows Server 2019, 2022 e 2025. O Controlo de Postura SSH integra-se perfeitamente com os serviços de Governação do Azure (Política, Configuração de Máquina) para que possa:

  • Garantir a conformidade com os padrões sshd em seu setor ou organização
  • Reduza a superfície de ataque do gerenciamento remoto baseado em sshd
  • Garanta uma configuração sshd consistente em toda a sua frota para segurança e produtividade

Captura de tela mostrando a lista de verificações SSH compatíveis

Para ajudá-lo a demonstrar conformidade aos auditores (e para ajudá-lo a tomar medidas quando necessário), cada verificação de conformidade inclui evidências por meio do campo Motivos , indicando como a conformidade ou não conformidade foi determinada.

Você pode personalizar os parâmetros sshd (número da porta, grupos permitidos, etc.) ou usar os valores padrão da política.

Documentação para introdução

Selecionando somente auditoria versus comportamento de auditoria e configuração

Ao atribuir uma política de Controle de Postura SSH, você pode escolher o comportamento somente auditoria (também conhecido como "Auditoria") ou o comportamento de auditoria e configuração (também conhecido como "Configurar").

Definição de política Efeito da Política do Azure Notas sobre o que esperar
Comportamento somente auditoria **Audit** SSH Posture Control on Windows machines auditarSeNãoExiste A política inclui configurações mais restritivas em comparação com muitas imagens populares do sistema. Por exemplo, negação de acesso ssh raiz. Consequentemente, espere ver os estados não conformes relatados.
Comportamento de auditoria e configuração **Configure** SSH Posture Control on Windows machines deployIfNotExists Como acima, você pode esperar ver os estados não compatíveis relatados inicialmente. Posteriormente, as máquinas serão reconfiguradas para corresponder à política, resultando em eventuais estados Compatíveis .

Para máquinas existentes, os administradores normalmente começam com um comportamento somente auditoria para determinar o estado existente e descobrir dependências, como contas permitidas para automação de sistemas. Depois de comparar a frota existente com os padrões do Controle de Postura SSH, você decidirá quais parâmetros do Controle de Postura SSH personalizar. Após essa análise e planejamento, você faria a transição para o comportamento de auditoria e configuração (com práticas de implantação seguras, como anéis).

Para cenários greenfield ou máquinas de teste descartáveis, você pode optar por ignorar essa análise e passar diretamente para o comportamento de auditoria e configuração, começando de novo com padrões fortes de Controle de Postura SSH.

Atenção

Antes de configurar qualquer máquina, tenha muito cuidado para validar sua nova configuração. Pode perder acidentalmente o acesso às suas máquinas.

Exemplos de bloqueios acidentais incluem:

  • As configurações de autorização de rede aplicadas (combinação de allowUsers,denyGroups, etc.) não permitem os logins que você precisa
  • O port que você configura para sshd é bloqueado por outros controles em seu ambiente (regras de firewall do host, regras de firewall de rede, etc.)
    • Para evitar ultrapassar os limites da equipe corporativa, o Controle de Postura SSH configurou apenas o sshd. Atualmente, ele não tenta modificar as regras de firewall na máquina, etc. para acomodar a porta sshd configurada. Se você gostaria de discutir esses cenários conosco, entre em contato conosco (consulte Recursos adicionais abaixo).

Escopo do Controle de Postura SSH: regras, padrões e personalização

A tabela a seguir lista os itens que podem ser auditados ou configurados com o Controle de Postura SSH. Cada um deles é conhecido como uma regra.

A maioria das regras pode receber valores personalizados, por meio de parâmetros de atribuição de política para auditar ou configurar e auditar. Por exemplo, se o padrão em sua organização for usar a porta 1111 (em vez de 22) para sshd, você definirá o parâmetro correspondente na atribuição de política. Estes parâmetros têm identificadores que estão incluídos na tabela abaixo. Normalmente, o nome do parâmetro curto é usado programaticamente (por exemplo, com az policy assignment create --params ...), enquanto o nome de exibição do parâmetro mais longo é usado nos fluxos de trabalho do portal do Azure.

Ao personalizar valores, tenha o cuidado de fornecer valores que sejam compatíveis com sshd. Por exemplo, allowGroups usa uma lista delimitada por espaço de padrões de nome de grupo. Para referência, consulte a página do manual sshd_config. A referência sshd_config também é útil para entender outros comportamentos sshd, como como as listas de permissão e negação se cruzam.

Observação

Para preservar o layout da tabela, alguns valores de célula foram movidos para notas de rodapé abaixo da tabela.

Nome da regra Valor predefinido Nome do parâmetro Nome de exibição do parâmetro
Verifique se os grupos permitidos para SSH estão configurados <Nota de rodapé 1> AllowGroups Grupos permitidos
Verifique se os usuários permitidos para acesso SSH estão configurados "" AllowUsers Utilizadores permitidos
Verifique se o método de autenticação para SSH está configurado qualquer AuthenticationMethods Métodos de autenticação
Verifique se os grupos negados para SSH estão configurados "" DenyGroups Grupos negados
Verifique se os usuários negados para SSH estão configurados "" DenyUsers Usuários negados
Verifique se o código do recurso usado ao registrar mensagens para SSH está configurado LOCAL0 SyslogFacility Recurso de registro do sistema
Verifique se o SSH MaxAuthTries está configurado 6 MaxAuthTries Máximo de tentativas de autenticação
Verifique se a HostKey SSH está configurada <Nota de rodapé 2> HostKey Chave do anfitrião
Verifique se o arquivo de chave autorizado para SSH está configurado <Nota de rodapé 3> AuthorizedKeysFile Arquivo de chave autorizado
Verifique se o GSSApiAuthentication para SSH está configurado falso GSSAPIAuthentication Autenticação GSSAPI
Verifique se o banner de aviso SSH está configurado <Nota de rodapé 4> Banner Estandarte
Garantir que as cifras apropriadas sejam usadas para SSH AES128-CTR,AES192-CTR,AES256-CTR Ciphers Cifras permitidas
Certifique-se de que apenas algoritmos MAC aprovados sejam usados HMAC-SHA2-256 MACs Algoritmos MAC
Verifique se o SSH ClientAliveCountMax está configurado 0 ClientAliveCountMax Número de mensagens vivas do cliente
Verifique se a porta SSH está configurada 22 Port Porto
Verifique se o SSH LoginGraceTime está configurado 60 LoginGraceTime Tempo de carência de login
Verifique se o SSH ClientAliveInterval está configurado 3600 ClientAliveInterval Intervalo de vida do cliente
Verifique se o SSH PermitEmptyPasswords está configurado falso PermitEmptyPasswords Permissão de senha vazia

Notas de rodapé da tabela:

  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. Nota: isto é apresentado aos utilizadores finais como:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    

Parâmetros de política adicionais (não sshd)

Esses parâmetros de política adicionais estão disponíveis durante a atribuição de política. Isso influencia o comportamento de atribuição da Política do Azure, em oposição às configurações de sshd em máquinas.

Nome Descrição Predefinido
Incluir servidores conectados Arc Ao selecionar esta opção, você concorda em ser cobrado mensalmente por máquina conectada Arc. FALSO
Efeito Ativar ou desativar a execução desta política <Depende de Selecionar somente auditoria versus comportamento de auditoria e configuração>

Definições de políticas? Atribuições políticas? Atribuições de convidados? Configuração da máquina? Como é que tudo isto se encaixa?

Para começar a usar o Controle de Postura SSH, sua ação principal é criar uma atribuição de política. Sua atribuição de política vincula uma definição de política (por exemplo, "Auditar o Controle de Postura SSH para máquinas Windows") a um escopo (por exemplo, "my_factory_3_resource_group").

Ao usar o sistema, você encontrará tipos de recursos e terminologia adicionais, conforme resumido a seguir.

diagrama mostrando como uma atribuição de política vincula máquinas ao serviço de Configuração da Máquina por meio de atribuições de convidado

Descrição
Definição de política No serviço Política, os dados abstratos que descrevem um cluster de comportamentos de auditoria e/ou configuração disponíveis. Por exemplo, "Auditar o controle de postura SSH em máquinas Windows".
Atribuição de políticas Vincula uma definição de política abstrata a um escopo concreto, como um grupo de recursos. A atribuição de política pode incluir Parâmetros e outras propriedades específicas dessa atribuição.
Configuração da máquina O serviço e o agentry do Azure que lidam com a auditoria e a definição de configuração no nível do sistema operacional.
Atribuição de convidado Recurso que atua como um link de três vias entre a atribuição de política, a máquina e o serviço de Configuração da Máquina. A política cria e monitora recursos de atribuição de convidados conforme necessário.
Para obter mais informações sobre a terminologia "convidado" versus "máquina", consulte Por que vejo os termos "Configuração do convidado" e "Gerenciamento automático" em alguns locais?
Máquina Uma máquina habilitada para Arc ou uma VM do Azure.

Sobre compatibilidade (implementações de SSH Server, etc.)

O Controle de Postura SSH foi projetado para o cenário principal de uso geral do Windows Server de uma única instância de SSH Server de longa execução :

  • cujo ciclo de vida é gerenciado pelo sistema init, como o Service Control Manager
  • cujo comportamento é regido por sshd_config arquivo, consistente com o comportamento sshd do OpenSSH
  • cuja configuração/estado efetivo é revelado pela sshd -T saída, consistente com o comportamento sshd do OpenSSH

Para todos os sistemas operacionais suportados (veja abaixo), este é o caso de uso padrão do SSH Server.

Em princípio, uma máquina poderia ter qualquer número de instâncias de servidor SSH em execução com tempos de vida variáveis, com base em qualquer número de bases de código, e tendo sua configuração de qualquer número de lugares (arquivos de configuração, argumentos de linha de comando, parâmetros de tempo de compilação, etc.). Tais casos estão fora do escopo do Controle de Postura SSH neste momento. Se você estiver interessado em tais casos para o futuro, entre em contato conosco para discutir.

O Controlo de Postura SSH destina-se a ser utilizado em máquinas Windows Server 2019, 2022 e 2025 suportadas pela Política do Azure e Configuração de Máquina -

A compatibilidade com qualquer máquina específica em tempo de execução não pode ser garantida, pois os administradores de sistemas e construtores de imagens são livres para remover componentes do sistema operacional, tornar os sistemas de arquivos somente leitura, etc.

Compatibilidade com sshd_config Incluir diretivas

O Controle de Postura SSH tenta acomodar e fazer uso de Include diretivas em sshd_config, da seguinte forma:

  • Para ações de auditoria/leitura: confie no -T sshd para refletir a configuração da rede da perspetiva do sshd, levando em consideração quaisquer Includes.
  • Para ações de configuração/gravação:
    • Vincule um novo arquivo específico do Controle de Postura SSH ao sshd_config (como um Include). Posteriormente, coloque todas as gravações no arquivo de Controle de Postura SSH vinculado. Isso melhora a higiene do sistema e a rastreabilidade das alterações do sistema.

Compatibilidade com as diretivas sshd_config Match

O Controle de Postura SSH foi projetado para auditar e configurar o comportamento sshd principal. Ele não tenta interagir com blocos condicionais Match (se houver) que podem aplicar diferentes configurações de sshd a populações específicas.

Compatibilidade com vários valores sshd_config

O SSH Posture Control não suporta a utilização de múltiplos valores para a regra 'port', ou seja, definir a regra 'port' para 22 e 33. Esta regra deve ser configurada com um único valor para garantir a funcionalidade e a conformidade adequadas para auditoria e configuração de cenários. Outras regras, como permitir/negar usuários e cifras, podem ter vários valores, desde que sejam adicionados em uma única linha.

Exemplo:

  • Um arquivo sshd_config existente inclui uma linha "port:22" e outra linha "port:33".
  • A política "SSH de auditoria" é usada para auditar um valor de porta esperado de 33.
  • Resultado: A auditoria pode ser aprovada ou falhar de forma imprevisível.
  • Recomendação: Não utilize esta funcionalidade em cenários como estes.

Como posso consultar os resultados programaticamente?

Usando consultas do Azure Resource Graph (ARG), você pode integrar dados de atribuição e status em seus próprios fluxos de trabalho. Esses exemplos são usados Search-AzGraph no PowerShell para executar a consulta ARG, mas o PowerShell não é necessário. Você pode usar o ARG de muitos pontos de entrada, incluindo o Portal do Azure, CLI do Azure, chamadas REST, etc.

  1. Na altitude mais alta de sumarização, você pode obter contagens de máquinas por bucket de status de conformidade. Por exemplo:

    $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. Para detalhar de forma que você veja o status geral de conformidade por máquina, você pode usar o seguinte:

    $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. Para detalhar detalhadamente a configuração por configuração, você pode usar o seguinte:

    $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
    #>
    

Por que vejo os termos "Configuração de convidado" e "Gerenciamento automático" em alguns locais?

O serviço Configuração da Máquina também é conhecido como Configuração de Convidado e como Configuração de Máquina de Gerenciamento Automático. Você pode encontrar esses nomes à medida que interage com serviços e documentação. Por exemplo:

  • Nos exemplos de consulta do Azure Resource Graph neste artigo, a tabela de dados é chamada guestconfigurationresourcesde .
  • No portal do Azure, uma exibição útil para observar resultados é chamada de "Atribuições de convidado".
  • No portal do Azure, ao aplicar a extensão de VM relevante para habilitar a Configuração da Máquina, o título da extensão é "Configuração da Máquina de Gerenciamento Automático".

Para efeitos de Controlo de Postura SSH, não existe uma distinção significativa entre "convidado" e "máquina". Máquinas habilitadas para arco e VMs do Azure são qualificadas.

Quais são os identificadores para as definições de política internas?

Em alguns casos, como a criação de atribuições de política com a CLI do Azure, pode ser útil ou necessário fazer referência a uma definição de política por id em vez de nome para exibição.

nome de exibição ID
Auditar o Controle de Postura SSH em máquinas Windows /providers/Microsoft.Authorization/policyDefinitions/fe4e11ff-f561-4d4a-877c-256cc0b6470e
Configurar o Controle de Postura SSH em máquinas Windows /providers/Microsoft.Authorization/policyDefinitions/42830b63-79aa-4ea5-85dc-6baa719d7d7c
  • Para obter suporte com problemas, etc., entre em contato com o Suporte da Microsoft
  • Para fornecer comentários, discutir solicitações de recursos, etc., entre em contato com: linux_sec_config_mgmt@service.microsoft.com