Condividi tramite


Che cos'è il controllo del comportamento SSH per Windows?

Ssh Posture Control consente di controllare e configurare il comportamento di sicurezza del server SSH in Windows Server 2025. Controllo comportamento SSH si integra perfettamente con i servizi di governance di Azure (Criteri, Configurazione computer) in modo da poter:

  • Garantire la conformità agli standard sshd nell'organizzazione o nel settore
  • Ridurre la superficie di attacco della gestione remota basata su sshd
  • Garantire una configurazione sshd coerente nella flotta per la sicurezza e la produttività

Screenshot che mostra l'elenco dei controlli SSH conformi

Per illustrare la conformità ai revisori e per intervenire dove necessario, ogni controllo di conformità include prove tramite il campo Motivi che indica come è stata determinata la conformità o la mancata conformità.

È possibile personalizzare i parametri sshd (numero di porta, gruppi consentiti e così via) o usare i valori predefiniti dei criteri.

Documentazione per iniziare

Selezione del comportamento solo controllo e configurazione

Quando si assegnano criteri di controllo della postura SSH, è possibile scegliere il comportamento di sola controllo (ovvero "Audit") o il comportamento audit-and-configure (noto anche come "Configura").

Definizione di criteri effetto Criteri di Azure Note su cosa aspettarsi
Comportamento di sola controllo **Audit** SSH Posture Control on Windows machines auditIfNotExists I criteri includono impostazioni più restrittive rispetto a molte immagini di sistema più diffuse. Ad esempio, negazione dell'accesso SSH radice. Di conseguenza, si prevede di visualizzare gli stati non conformi segnalati.
Comportamento di controllo e configurazione **Configure** SSH Posture Control on Windows machines deployIfNotExists Come indicato in precedenza, è possibile che vengano visualizzati inizialmente gli stati non conformi . Successivamente, i computer verranno riconfigurati in modo che corrispondano ai criteri, determinando eventuali stati conformi .

Per i computer esistenti, gli amministratori iniziano in genere con il comportamento di solo controllo per determinare lo stato esistente e individuare dipendenze come gli account consentiti per l'automazione dei sistemi. Dopo aver confrontato la flotta esistente con le impostazioni predefinite del controllo del comportamento SSH, è necessario decidere quali parametri di controllo del comportamento SSH personalizzare. Dopo questa analisi e pianificazione, si passa quindi al comportamento di controllo e configurazione (con procedure di distribuzione sicure, ad esempio anelli).

Per gli scenari greenfield o i computer di test usa e getta, è possibile scegliere di ignorare l'analisi e passare direttamente al comportamento di controllo e configurazione, a partire dalle impostazioni predefinite avanzate del controllo della postura SSH.

Attenzione

Prima di configurare i computer, prestare molta attenzione alla convalida della nuova configurazione. È possibile perdere accidentalmente l'accesso ai computer.

Alcuni esempi di blocco accidentale includono:

  • Le impostazioni di autorizzazione net applicate (combinazione di allowUsers,denyGroups e così via) non consentono gli account di accesso necessari
  • L'oggetto port configurato per sshd è bloccato da altri controlli nell'ambiente (regole del firewall host, regole del firewall di rete e così via)
    • Per evitare di superare i limiti del team aziendale, SSH Posture Control configurato solo sshd. Attualmente non tenta di modificare le regole del firewall sul computer e così via per supportare la porta sshd configurata. Per discutere questi scenari con Microsoft, contattare Microsoft (vedere Risorse aggiuntive di seguito).

Ambito di controllo del comportamento SSH: regole, impostazioni predefinite e personalizzazione

La tabella seguente elenca gli elementi che possono essere controllati o configurati con SSH Posture Control. Ognuno di questi è noto come regola.

La maggior parte delle regole può avere valori personalizzati, tramite parametri di assegnazione dei criteri per il controllo o la configurazione e il controllo. Ad esempio, se lo standard dell'organizzazione consiste nell'usare la porta 1111 (anziché 22) per sshd, impostare il parametro corrispondente nell'assegnazione dei criteri. Questi parametri hanno identificatori inclusi nella tabella seguente. In genere, il nome breve del parametro viene usato a livello di codice (ad esempio con az policy assignment create --params ...), mentre il nome visualizzato del parametro più lungo viene usato nei flussi di lavoro del portale di Azure.

Quando si personalizzano i valori, prestare attenzione a fornire valori compatibili con sshd. Ad esempio, allowGroups accetta un elenco delimitato da spazi di modelli di nomi di gruppo. Per informazioni di riferimento, vedere la pagina sshd_config man. Il riferimento sshd_config è utile anche per comprendere altri comportamenti sshd, ad esempio la modalità di intersezione tra elenchi consenti e nega .

Annotazioni

Per mantenere il layout della tabella, alcuni valori delle celle sono stati spostati nelle note a piè di pagina sotto la tabella.

Nome regola Valore predefinito Nome del parametro Parameter display name (Nome visualizzato parametro)
Assicurarsi che i gruppi consentiti per SSH siano configurati <nota a piè di pagina 1> AllowGroups Gruppi consentiti
Assicurarsi che gli utenti autorizzati per l'accesso SSH siano configurati "" AllowUsers Utenti consentiti
Verificare che il metodo di autenticazione per SSH sia configurato qualunque AuthenticationMethods Metodi di autenticazione
Assicurarsi che i gruppi negati per SSH siano configurati "" DenyGroups Gruppi negati
Assicurarsi che gli utenti negati per SSH siano configurati "" DenyUsers Utenti negati
Assicurarsi che il codice della struttura usato durante la registrazione dei messaggi per SSH sia configurato LOCAL0 SyslogFacility Funzionalità di registrazione del sistema
Verificare che sia configurato SSH MaxAuthTries 6 MaxAuthTries Numero massimo di tentativi di autenticazione
Assicurarsi che la chiave host SSH sia configurata <nota a piè di pagina 2> HostKey Chiave host
Assicurarsi che il file di chiave autorizzata per SSH sia configurato <nota a piè di pagina 3> AuthorizedKeysFile File di chiave autorizzata
Assicurarsi che GSSApiAuthentication per SSH sia configurato falso GSSAPIAuthentication Autenticazione GSSAPI
Assicurarsi che il banner di avviso SSH sia configurato <nota a piè di pagina 4> Banner Striscione
Assicurarsi che vengano usate crittografie appropriate per SSH aes128-ctr,aes192-ctr,aes256-ctr Ciphers Crittografie consentite
Assicurarsi che vengano usati solo gli algoritmi MAC approvati hmac-sha2-256 MACs Algoritmi MAC
Assicurarsi che il client SSHAliveCountMax sia configurato 0 ClientAliveCountMax Numero di messaggi attivi del client
Assicurarsi che la porta SSH sia configurata 22 Port Porto
Assicurarsi che l'account di accesso SSHGraceTime sia configurato 60 LoginGraceTime Tempo di tolleranza di accesso
Assicurarsi che il client SSHAliveInterval sia configurato 3600 ClientAliveInterval Intervallo di durata del client
Assicurarsi che l'opzione SSH PermitEmptyPasswords sia configurata falso PermitEmptyPasswords Autorizzazione password vuota

Note a piè di pagina della tabella:

  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: viene visualizzato agli utenti finali come segue:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    

Parametri dei criteri aggiuntivi (non sshd)

Questi parametri di criteri aggiuntivi sono disponibili durante l'assegnazione dei criteri. Questi influiscono sul comportamento di assegnazione di Criteri di Azure, anziché sulle impostazioni sshd nei computer.

Nome Descrizione Predefinito
Includere i server connessi arc Selezionando questa opzione, si accetta di essere addebitati mensilmente per ogni computer connesso Arc. Falso
Effetto Abilitare o disabilitare l'esecuzione di questo criterio <Dipende dalla selezione del comportamento solo controllo e configurazione>

Definizioni di criteri? Assegnazioni di criteri? Assegnazioni guest? Configurazione del computer? Come si adatta tutto questo insieme?

Per iniziare a usare SSH Posture Control, l'azione principale consiste nel creare un'assegnazione di criteri. L'assegnazione dei criteri collega una definizione di criteri (ad esempio, "Controlla controllo comportamento SSH per i computer Windows") a un ambito (ad esempio, "my_factory_3_resource_group").

Quando si usa il sistema, si riscontrano tipi di risorse e terminologia aggiuntivi, come riepilogato nel codice seguente.

diagramma che mostra come un'assegnazione di criteri collega i computer al servizio Configurazione computer tramite assegnazioni guest

Descrizione
Definizione criteri All'interno del servizio Criteri, i dati astratti che descrivono un cluster di comportamenti di controllo e/o configurazione disponibili. Ad esempio, "Audit SSH Posture Control on Windows machines".
Assegnazione di criteri Collega una definizione di criteri astratta a un ambito concreto, ad esempio un gruppo di risorse. L'assegnazione dei criteri può includere parametri e altre proprietà specifiche di tale assegnazione.
Configurazione macchina Servizio e agente di Azure che gestiscono il controllo e l'impostazione della configurazione a livello di sistema operativo.
Assegnazione guest Risorsa che funge da collegamento a tre vie tra l'assegnazione dei criteri, il computer e il servizio Configurazione computer. I criteri creano e monitorano le risorse di assegnazione guest in base alle esigenze.
Per altre informazioni sulla terminologia "guest" e "machine", vedere Perché vengono visualizzati i termini "Configurazione guest" e "Gestione automatica" nelle posizioni?
Macchina Un computer abilitato per Arc o una macchina virtuale di Azure.

Informazioni sulla compatibilità (implementazioni del server SSH e così via)

Il controllo del comportamento SSH è progettato per lo scenario di Windows Server per utilizzo generico mainstream di un'unica istanza del server SSH a esecuzione prolungata :

  • il cui ciclo di vita è gestito dal sistema init, ad esempio Service Control Manager
  • il cui comportamento è regolato da sshd_config file, coerente con il comportamento sshd OpenSSH
  • la cui configurazione/stato effettivo viene rivelato dall'output sshd -T , coerente con il comportamento sshd OpenSSH

Per tutti i sistemi operativi supportati (vedere di seguito), questo è il caso d'uso predefinito del server SSH.

In linea di principio, un computer potrebbe avere un numero qualsiasi di istanze del server SSH in esecuzione con durate variabili, in base a qualsiasi numero di codebase e prendendo la configurazione da qualsiasi numero di posizioni (file di configurazione, argomenti della riga di comando, parametri di compilazione e così via). Questi casi non rientrano nell'ambito per il controllo del comportamento SSH in questo momento. Se siete interessati a tali casi per il futuro, vi preghiamo di contattarci per discutere.

Il controllo del comportamento SSH è destinato all'uso nei computer Windows Server 2025 supportati da Criteri di Azure e configurazione del computer -

La compatibilità con qualsiasi computer specifico in fase di esecuzione non può essere garantita perché sysadmins e image builder sono liberi di rimuovere componenti dal sistema operativo, rendere i file system di sola lettura e così via.

Compatibilità con le direttive include sshd_config

Il controllo del comportamento SSH tenta di supportare e usare direttive Include in sshd_config, come indicato di seguito:

  • Per le azioni di controllo/lettura: fare affidamento su sshd -T per riflettere la configurazione della rete dal punto di vista di sshd, tenendo conto di eventuali include.
  • Per le azioni di configurazione/scrittura:
    • Collegare un nuovo file specifico del controllo del comportamento SSH a sshd_config (come inclusione). Successivamente, inserire tutte le scritture nel file SSH Posture Control collegato. Questo migliora l'igiene del sistema e la tracciabilità dei cambiamenti di sistema.

Compatibilità con le direttive match sshd_config

Ssh Posture Control è progettato per controllare e configurare il comportamento sshd principale. Non tenta di interagire con blocchi condizionali Match (se presenti) che possono applicare configurazioni sshd diverse a popolazioni specifiche.

Compatibilità con più valori di sshd_config

Controllo comportamento SSH non supporta l'uso di più valori per la regola 'porta', ad esempio impostando la regola 'porta' su 22 e 33. Questa regola deve essere configurata con un singolo valore per garantire funzionalità e conformità appropriate per il controllo e la configurazione degli scenari. Altre regole, ad esempio consenti/negate, utenti e crittografie possono avere più valori, purché vengano aggiunti su una singola riga.

Esempio:

  • Un file di sshd_config esistente include una riga "port:22" e un'altra riga "port:33".
  • Il criterio "Audit SSH" viene usato per controllare il valore di porta previsto pari a 33.
  • Risultato: il controllo può superare o non riuscire in modo imprevedibile.
  • Raccomandazione: non usare questa funzionalità con scenari come questi.

Come è possibile eseguire una query sui risultati a livello di codice?

Usando le query di Azure Resource Graph (ARG) è possibile integrare i dati di assegnazione e stato nei propri flussi di lavoro. Questi esempi usano Search-AzGraph in PowerShell per eseguire la query ARG, ma PowerShell non è obbligatorio. È possibile usare ARG da molti punti di ingresso, tra cui il portale di Azure, l'interfaccia della riga di comando di Azure, le chiamate REST e così via.

  1. All'altitudine più elevata del riepilogo, è possibile ottenere i conteggi dei computer per ogni bucket di stato di conformità. Per esempio:

    $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. Per eseguire il drill-in modo che venga visualizzato lo stato di conformità complessivo in base al computer, è possibile usare quanto segue:

    $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. Per eseguire il drill-down fino ai dettagli delle impostazioni in base all'impostazione, è possibile usare quanto segue:

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

Perché vengono visualizzati i termini "Configurazione guest" e "Gestione automatica" nelle posizioni?

Il servizio Configurazione computer è stato noto anche come Configurazione guest e come Configurazione automatica del computer. Questi nomi possono essere riscontrati durante l'interazione con i servizi e la documentazione. Per esempio:

  • Negli esempi di query di Azure Resource Graph in questo articolo la tabella dei dati è denominata guestconfigurationresources.
  • Nel portale di Azure una visualizzazione utile per osservare i risultati è denominata "Assegnazioni guest".
  • Nel portale di Azure, quando si applica l'estensione vm pertinente per abilitare Configurazione computer, il titolo dell'estensione è "Gestione automatica configurazione computer".

Ai fini del controllo del comportamento SSH, non esiste alcuna distinzione significativa tra "guest" e "machine". I computer abilitati per Arc e le macchine virtuali di Azure sono idonei.

Quali sono gli identificatori per le definizioni di criteri predefinite?

In alcuni casi, ad esempio la creazione di assegnazioni di criteri con l'interfaccia della riga di comando di Azure, può essere utile o necessario fare riferimento a una definizione di criteri in base all'ID anziché al nome visualizzato.

nome visualizzato Id

| Controllare il controllo del comportamento SSH nei computer Windows | ... | | Configurare il controllo del comportamento SSH nei computer Windows | ... |

  • Per assistenza con problemi e così via, contattare il supporto tecnico Microsoft
  • Per fornire commenti e suggerimenti, discutere le richieste di funzionalità e così via: linux_sec_config_mgmt@service.microsoft.com