Compartilhar via


O que é o controle de postura SSH para 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 Controle de Postura SSH integra-se perfeitamente aos serviços de Governança do Azure (Política, Configuração do Computador) para que você possa:

  • Garantir a conformidade com os padrões SSHD em seu setor ou organização
  • Reduzir a superfície de ataque do gerenciamento remoto baseado em sshd
  • Garantir a configuração consistente de sshd 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 a conformidade com os auditores (e para ajudá-lo a tomar medidas quando necessário), cada verificação de conformidade inclui evidências por meio do campo Motivos que indicam como a conformidade ou a 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 o comportamento somente auditoria vs. audit-and-configure

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 do Azure Policy Anotações sobre o que esperar
Comportamento somente auditoria **Audit** SSH Posture Control on Windows machines auditIfNotExists A política inclui configurações mais restritivas em comparação com muitas imagens populares do sistema. Por exemplo, negação do acesso ssh raiz. Assim, espere ver estados não compatíveis relatados.
Comportamento de auditoria e configuração **Configure** SSH Posture Control on Windows machines deployIfNotExists Como acima, você pode esperar ver os estados incompatíveis relatados inicialmente. Posteriormente, os computadores serão reconfigurados para corresponder à política, resultando em eventuais estados em conformidade .

Para computadores existentes, os administradores normalmente começam com o 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 de Controle de Postura SSH, você decidirá quais parâmetros de Controle de Postura SSH serão personalizados. Após essa análise e planejamento, você fará 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 computadores de teste descartáveis, você pode optar por ignorar essa análise e mover-se diretamente para o comportamento de auditoria e configuração, começando de novo com padrões fortes de Controle de Postura SSH.

Cuidado

Antes de configurar computadores, tome muito cuidado para validar sua nova configuração. Você pode perder acidentalmente o acesso aos seus computadores.

Exemplos de bloqueio acidental entre si incluem:

  • As configurações de autorização de rede aplicadas (combinação de allowUsers,denyGroups, etc.) não permitem os logons necessários
  • O port SSHD configurado é 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 empresarial, o Controle de Postura SSH configurou apenas o sshd. No momento, ele não tenta modificar as regras de firewall no computador, etc. para acomodar a porta sshd configurada. Se você quiser 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 uma delas é conhecida como regra.

A maioria das regras pode receber valores personalizados por meio de parâmetros de atribuição de política para auditoria ou configuração e auditoria. 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. Esses parâmetros têm identificadores 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 de parâmetro mais longo é usado nos fluxos de trabalho do portal do Azure.

Ao personalizar valores, tome cuidado para fornecer valores compatíveis com sshd. Por exemplo, allowGroups usa uma lista delimitada por espaço de padrões de nome de grupo. Para obter referência, consulte a página sshd_config homem. A referência sshd_config também é útil para entender outros comportamentos de sshd, como como permitir e negar a interseção de listas.

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 padrão 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 Usuários 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 Instalação de registro em log do sistema
Verifique se o MaxAuthTries do SSH está configurado 6 MaxAuthTries Máximo de tentativas de autenticação
Verifique se o HostKey do SSH está configurado <nota de rodapé 2> HostKey Chave de host
Verifique se o arquivo de chave autorizado para SSH está configurado <nota de rodapé 3> AuthorizedKeysFile Arquivo de chave autorizado
Verifique se GSSApiAuthentication para SSH está configurado falso GSSAPIAuthentication Autenticação GSSAPI
Verifique se a faixa de aviso SSH está configurada <nota de rodapé 4> Banner Estandarte
Verifique se as criptografias apropriadas são usadas para SSH aes128-ctr,aes192-ctr,aes256-ctr Ciphers Criptografias permitidas
Verifique se somente algoritmos MAC aprovados são usados hmac-sha2-256 MACs Algoritmos MAC
Verifique se o SSH ClientAliveCountMax está configurado 0 ClientAliveCountMax Número de mensagens ativas do cliente
Verifique se a porta SSH está configurada 22 Port Porto
Verifique se o LoginGraceTime do SSH está configurado 60 LoginGraceTime Hora de carência de logon
Verifique se o ClientAliveInterval do SSH está configurado 3600 ClientAliveInterval Intervalo ativo 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. Observação: isso é exibido para os usuários 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. Elas influenciam o comportamento de atribuição do Azure Policy, em oposição às configurações de sshd em computadores.

Nome Descrição Padrão
Incluir servidores conectados ao Arc Ao selecionar essa opção, você concorda em ser cobrado mensalmente por computador conectado ao Arc. FALSO
Efeito Habilitar ou desabilitar a execução dessa política <Depende da seleção do comportamento somente auditoria vs. audit-and-configure>

Definições de política? Atribuições de política? Atribuições de convidado? Configuração do computador? Como tudo isso 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 computadores Windows") a um escopo (por exemplo, "my_factory_3_resource_group").

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

diagrama mostrando como uma atribuição de política vincula computadores ao serviço de Configuração de 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, "Audite o controle de postura SSH em computadores Windows".
Atribuição de política 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 para essa atribuição.
Configuração do computador O serviço e o agente do Azure que lidam com a auditoria e a configuraçã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, o computador e o serviço de Configuração de Máquina. A política cria e monitora os recursos de atribuição de convidado conforme necessário.
Para obter mais informações sobre a terminologia "convidado" versus "computador", consulte Por que vejo os termos "Configuração de Convidado" e "Gerenciamento Automatizado" em locais?
Máquina Um computador habilitado para Arc ou uma VM do Azure.

Sobre compatibilidade (implementações do servidor SSH, etc.)

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

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

Para todos os OSes com suporte (veja abaixo), esse é o caso de uso padrão do Servidor SSH.

Em princípio, um computador pode 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 usando sua configuração de qualquer número de locais (arquivos de configuração, argumentos de linha de comando, parâmetros de tempo de compilação etc.). Esses casos estão fora do escopo do Controle de Postura SSH no momento. Se você estiver interessado nesses casos para o futuro, entre em contato conosco para discutir.

O Controle de Postura SSH destina-se ao uso em computadores Windows Server 2019, 2022 e 2025 compatíveis com Azure Policy e Configuração de Computador –

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

Compatibilidade com diretivas de inclusão sshd_config

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

  • Para ações de auditoria/leitura: dependa do sshd -T para refletir a configuração da rede da perspectiva do sshd, levando em conta todas as inclusões.
  • Para configurar/gravar ações:
    • 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 aprimora a higiene do sistema e a rastreabilidade das alterações do sistema.

Compatibilidade com diretivas de correspondência sshd_config

O Controle de Postura SSH foi projetado para auditar e configurar o comportamento do 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 de sshd_config

O Controle de Postura SSH não dá suporte ao uso de vários valores para a regra 'port', ou seja, definindo a regra 'port' como 22 e 33. Essa regra deve ser configurada com um único valor para garantir a funcionalidade e a conformidade adequadas para auditar e configurar cenários. Outras regras, como permitir/negar usuários e criptografias, podem ter vários valores, desde que sejam adicionadas em uma única linha.

Exemplo:

  • Um arquivo sshd_config existente inclui uma linha "port:22" e outra linha "port:33".
  • A política "Audit SSH" é 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 use esse recurso com cenários como estes.

Como posso consultar os resultados programaticamente?

Usando consultas do ARG (Azure Resource Graph), você pode integrar dados de atribuição e status em seus próprios fluxos de trabalho. Esses exemplos usam 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, a CLI do Azure, chamadas REST etc.

  1. Na altitude mais alta de resumo, você pode obter contagens de computador 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 fazer drill in de modo que você veja o status geral de conformidade por computador, 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 os detalhes de 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 Automatizado" em locais?

O serviço de Configuração de Máquina também foi conhecido como Configuração de Convidado e como Configuração de Computador de Gerenciamento Automatizado. Você pode encontrar esses nomes enquanto interage com serviços e documentação. Por exemplo:

  • Nos exemplos de consulta do Azure Resource Graph neste artigo, a tabela de dados é chamada guestconfigurationresources.
  • No portal do Azure, uma exibição útil para observar os resultados é chamada de "Atribuições de Convidado".
  • No portal do Azure, ao aplicar a extensão de VM relevante para habilitar a Configuração do Computador, o título da extensão é "Configuração do Computador de Gerenciamento Automatizado".

Para fins de Controle de Postura SSH, não há distinção significativa entre "convidado" e "computador". Computadores habilitados para Arc e VMs do Azure são elegíveis.

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 exibir o nome.

nome de exibição id
Auditar o controle de postura SSH em computadores 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