Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Controle de Postura SSH permite auditar e configurar a postura de segurança do Servidor SSH em distribuições do Linux com suporte, incluindo Ubuntu, Red Hat, Azure Linux e muito mais. 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 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 de sshd consistente em toda a sua frota para segurança e produtividade
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 Razões indicando 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, que são alinhados à linha de base de segurança do Azure para Linux.
Documentação para introdução
- início rápido: para obter uma experiência prática clique por clique, consulte Início Rápido: Aplicar de Controle de Postura SSH a um computador de teste.
- visão geral ede referência: para informações conceituais, referências e perguntas frequentes, continue com este artigo.
Selecionando o comportamento somente auditoria vs. audit-and-configure
Ao atribuir uma política de Controle de Postura SSH, você pode escolher comportamento de 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 | |
|---|---|---|---|
| de comportamento somente 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 do acesso ssh raiz. Assim, espere ver estados não compatíveis relatados. |
| de comportamento de auditoria e configuração | **Configure** SSH Posture Control on Linux machines |
deployIfNotExists | Como acima, você pode esperar ver estados de incompatíveis relatados inicialmente. Posteriormente, os computadores serão reconfigurados para corresponder à política, resultando em eventuais estados de compatíveis com |
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,permitRootLoginetc.) não permitem os logons necessários - O
portconfigurado 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 distribuições da família Red Hat têm políticas SELinux em vigor por padrão, o que impede o sshd de usar portas diferentes de 22.
- Para evitar ultrapassar os limites da equipe empresarial, o Controle de Postura SSH configurou apenas o sshd. No momento, ele não tenta modificar políticas do SELinux no computador, regras de firewall 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 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ítica 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. 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 permitir e negar listas se cruzam.
Nota
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 de log |
| Verifique se 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 de rodapé 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 |
| Verifique se PermitRootLogin está definido | Não | permitRootLogin |
Se a raiz pode fazer logon usando ssh |
| Verifique se PermitEmptyPasswords está definido | Não | permitEmptyPasswords |
Se o servidor permite logon em contas com cadeias de caracteres de senha vazias |
| Verifique se ClientAliveCountMax está definido | 0 | clientAliveCountMax |
O número de mensagens ativas do cliente que podem ser enviadas sem que o sshd receba mensagens de volta do cliente |
| Verifique se 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 |
| Verifique se os MACs estão configurados | <nota de rodapé 2> | <nota de rodapé 3> | A lista de algoritmos mac (código de autenticação de mensagem) disponíveis |
| Verifique se uma faixa está configurada | <nota de rodapé 4> | banner |
O conteúdo do arquivo de faixa que é enviado para o usuário remoto antes que a autenticação seja permitida |
| Verifique se 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 criptografias estão configuradas | aes128-ctr,aes192-ctr,aes256-ctr | ciphers |
A lista de criptografias permitidas |
| Verifique se a porta SSH está configurada | 22 | port |
A porta SSH |
| Verifique se o protocolo de prática recomendada é usado | 2 | <nenhum parâmetro> | <nenhum parâmetro> |
Notas de rodapé da tabela:
accessPermissionsForSshdConfigmessageAuthenticationCodeAlgorithmshmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-512-etm@openssh.com#######################################################################\n\nAuthorized access only!\n\nIf you are not authorized to access or use this system, disconnect now!\n\n#######################################################################\n- 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! #######################################################################No
allowUserso valor padrão "@" representa todas as contas no computador
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 | Inadimplência |
|---|---|---|
| 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 de Selecionar o comportamento somente auditoria versus auditoria e configuração> |
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 Linux") 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.
| Descrição | |
|---|---|
| de definição de política de |
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 Linux". |
| de atribuição de política de |
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. |
| de 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. |
| de 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? |
| Machine | Um computador habilitado para Arc ou uma VM do Azure. |
Sobre compatibilidade (distribuições, implementações do servidor SSH etc.)
O Controle de Postura SSH foi projetado para o cenário principal do Linux de uso geral de uma instância do servidor SSH de única de execução longa:
- cujo ciclo de vida é gerenciado pelo sistema de inicialização como systemd
- cujo comportamento é gerado por sshd_configde arquivo, consistente com o comportamento do sshd do OpenSSH
- cuja configuração/estado efetivo é revelado por
sshd -Tsaída, consistente com o comportamento do sshd do OpenSSH
Para todas as distribuições 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 nessas distribuições do Linux compatíveis com a Configuração de Máquina e Política do Azure, excluindo aquelas que estavam em suporte estendido no momento do desenvolvimento. Especificamente, os seguintes estão no escopo 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
- CentOS 7.3
- CentOS 8
- RHEL 7.4
- RHEL 8
- RHEL 9
- Rocky Linux 9
- SLES 15
Na medida em que for viável, o Controle de Postura SSH é testado com composições específicas do sistema amplamente utilizadas das distribuições acima. Por exemplo, composições de imagem do sistema operacional publicadas por mantenedores de distribuição na galeria do Azure. 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, bloquear ações do agente com SELinux etc.
Compatibilidade com diretivas de inclusão sshd_config
O Controle de Postura SSH tenta acomodar e usar diretivas de Include 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:
- Se a implementação do sshd no computador der suporte a Includes, 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.
- Se a implementação do sshd no computador não der suporte a diretivas Include, escreva as alterações de configuração diretamente no sshd_config.
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 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 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.
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 "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 #>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 "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 #>Para detalhar os detalhes de 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 Automatizado" em locais?
O serviço de Configuração de Máquina também é conhecido como de Configuração de Convidado e como de Configuração de Máquina 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 de
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.
| displayName | id |
|---|---|
| Auditar o controle de postura SSH em computadores Linux | /providers/Microsoft.Authorization/policyDefinitions/a8f3e6a6-dcd2-434c-b0f7-6f309ce913b4 |
| Configurar o controle de postura SSH em computadores Linux | /providers/Microsoft.Authorization/policyDefinitions/e22a2f03-0534-4d10-8ea0-aa25a6113233 |
Recursos relacionados
- Para obter suporte com problemas etc., entre em contato com o Suporte da Microsoft
- Para fornecer comentários, discutir solicitações de recursos etc. contate: linux_sec_config_mgmt@service.microsoft.com