Partilhar via


O que é o Controle de Postura SSH?

O Controle de Postura SSH permite auditar e configurar a postura de segurança do Servidor SSH em distros Linux suportados, incluindo Ubuntu, Red Hat, Azure Linux e muito mais. 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 o da superfície de ataque do gerenciamento remoto baseado em sshd
  • Garanta uma configuração de 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 Razões 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, que são alinhados à linha de base de segurança do Azure para Linux.

Documentação para introdução

  • Guia de início rápido: Para uma experiência prática clique a clique, consulte Guia de início rápido : aplicar de controle de postura SSH a uma máquina de teste.
  • Visão geral ede referência : Para obter informações conceituais, referências e perguntas frequentes, continue com este artigo.

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

Ao atribuir uma política de Controle de Postura SSH, você pode escolher comportamento de somente auditoria (também conhecido como "Auditoria") ou comportamento de 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 de auditoria **Audit** SSH Posture Control on Linux machines auditIfNotExists 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. Assim, espere ver estados de não conformes relatados.
de comportamento de auditoria e configuração **Configure** SSH Posture Control on Linux machines deployIfNotExists Como acima, você pode esperar ver estados de não compatíveis relatados inicialmente. Posteriormente, as máquinas serão reconfiguradas para corresponder à política, resultando em eventuais estados de em conformidade.

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,permitRootLogin, etc.) não permitem os logins necessários
  • O port que você configura para sshd é bloqueado por outros controles em seu ambiente (políticas SELinux, regras de firewall de host, regras de firewall de rede, etc.)
    • Observe que muitas distros da família Red Hat têm políticas SELinux em vigor por padrão, que impedem o sshd de usar portas diferentes de 22.
    • Para evitar ultrapassar os limites da equipe corporativa, o Controle de Postura SSH configurou apenas o sshd. Atualmente, ele não tenta modificar políticas SELinux na máquina, regras de firewall, 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 .

Cada regra tem um valor de configuração padrão, alinhado à linha de base de segurança do Azure para Linux.

A maioria das regras pode receber valores personalizados, por meio da atribuição de políticas parâmetros 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 permitir que e negar listas se cruzem.

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 as permissões em /etc/ssh/sshd_config estão configuradas 600 <nota de rodapé 1> Permissões de acesso para sshd_config
Verifique se IgnoreRhosts está definido Sim ignoreHosts Ignorar rhosts e shosts
Verifique se LogLevel está definido INFORMAÇÃO logLevel Nível de verbosidade do log
Certifique-se de que MaxAuthTries está definido 6 maxAuthTries Número máximo de tentativas de autenticação
Verifique se os usuários permitidos para acesso SSH estão configurados @ <ver nota 5> allowUsers Usuários permitidos para SSH
Verifique se os usuários negados para acesso SSH estão configurados raiz denyUsers Usuários negados para SSH
Verifique se os grupos permitidos para acesso SSH estão configurados * allowGroups Grupos permitidos para SSH
Verifique se os grupos negados para acesso SSH estão configurados raiz denyGroups Grupos negados para SSH
Verifique se HostbasedAuthentication está definido Não hostBasedAuthentication Autenticação baseada em host
Certifique-se de que PermitRootLogin está definido Não permitRootLogin Se o root pode fazer login usando ssh
Verifique se PermitEmptyPasswords está definido Não permitEmptyPasswords Se o servidor permite o login em contas com cadeias de caracteres de senha vazias
Certifique-se de que ClientAliveCountMax está definido 0 clientAliveCountMax O número de mensagens vivas do cliente que podem ser enviadas sem que o sshd receba mensagens de volta do cliente
Certifique-se de que ClientAliveInterval está definido 3600 clientAliveInterval Intervalo de tempo limite em segundos após o qual, se nenhum dado tiver sido recebido do cliente, o sshd enviará uma mensagem para solicitar uma resposta
Certifique-se de que os MACs estão configurados <nota de rodapé 2> <nota de rodapé 3> A lista de algoritmos de código de autenticação de mensagem (MAC) disponíveis
Verifique se um banner está configurado <nota de rodapé 4> banner O conteúdo do arquivo de faixa que é enviado ao usuário remoto antes que a autenticação seja permitida
Certifique-se de que PermitUserEnvironment está definido Não permitUserEnvironment Se as opções ~/.ssh/environment e environment= em ~/.ssh/authorized_keys são processadas pelo sshd
Verifique se as cifras estão configuradas AES128-CTR,AES192-CTR,AES256-CTR ciphers A lista de cifras permitidas
Verifique se a porta SSH está configurada 22 port A porta SSH
Garantir que o protocolo de práticas recomendadas seja usado 2 <nenhum parâmetro> <nenhum parâmetro>

Notas de rodapé da tabela:

  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. Nota: isto é apresentado aos utilizadores finais como:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    
  5. No allowUsers o valor padrão "@" representa todas as contas na máquina

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.

Designação Descrição Inadimplência
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 Seleção 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 de . Sua atribuição de política vincula uma definição de política (por exemplo, "Controle de postura SSH de auditoria para máquinas Linux") a um de 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 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, "Auditar o controle de postura SSH em máquinas Linux".
de 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.
de 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?
Machine Uma máquina habilitada para Arc ou uma VM do Azure.

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

O SSH Posture Control foi projetado para o cenário Linux de uso geral convencional de uma única instância do SSH Server de longa execução:

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

Para todas as distros suportadas (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, por favor, entre em contato conosco para discutir.

O Controlo de Postura SSH destina-se a ser utilizado nas distribuições Linux suportadas pela Política do Azure e pela Configuração de Máquina, excluindo aquelas que estavam em suporte alargado no momento do desenvolvimento. Especificamente, estão em vigor a partir 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 [en]
  • CentOS 7,3
  • CentOS 8
  • RHEL 7,4
  • RHEL 8
  • RHEL 9
  • Linux rochoso 9
  • SLES 15

Na medida do possível, o Controle de Postura SSH é testado com composições de sistema específicas amplamente utilizadas das distros acima. Por exemplo, composições de imagens do sistema operacional publicadas por mantenedores de distro na galeria do Azure. 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, bloquear ações do agente com o SELinux, 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:
    • Se a implementação do sshd na máquina suportar Includes, vincule um novo arquivo específico do SSH Posture Control 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.
    • Se a implementação sshd na máquina não suportar diretivas Include, escreva quaisquer alterações de configuração diretamente no sshd_config.

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 de Match condicionais (se houver) que podem aplicar diferentes configurações de sshd a populações específicas.

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

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

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 Guest Configuration e como Automanage Machine Configuration. 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 guestconfigurationresources.
  • 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.

displayName ID
Auditoria SSH Posture Control em máquinas Linux /providers/Microsoft.Authorization/policyDefinitions/a8f3e6a6-dcd2-434c-b0f7-6f309ce913b4
Configurar o Controle de Postura SSH em máquinas Linux /providers/Microsoft.Authorization/policyDefinitions/e22a2f03-0534-4d10-8ea0-aa25a6113233
  • 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