Freigeben über


Was ist SSH-Haltungssteuerung für Windows?

Mit der SSH-Statussteuerung können Sie den Sicherheitsstatus von SSH-Servern unter Windows Server 2019, 2022 und 2025 überwachen und konfigurieren. Die SSH-Haltungskontrolle lässt sich nahtlos in Azure Governance-Dienste (Richtlinie, Computerkonfiguration) integrieren, damit Sie:

  • Sicherstellen der Einhaltung von SSH-Standards in Ihrer Branche oder Organisation
  • Reduzieren der Angriffsfläche der sshd-basierten Remoteverwaltung
  • Sicherstellen eines konsistenten ssh-Setups in Ihrer Flotte für Sicherheit und Produktivität

Screenshot der Liste der kompatiblen SSH-Prüfungen

Zur Veranschaulichung der Compliance gegenüber Prüfern (und zur Unterstützung bei Bedarf) enthält jede Complianceüberprüfung Nachweise über das Feld "Gründe ", in dem angegeben wird, wie Compliance oder Nichtcompliance ermittelt wurde.

Sie können die sshd-Parameter (Portnummer, zulässige Gruppen usw.) anpassen oder die Richtlinienstandardwerte verwenden.

Dokumentation für erste Schritte

Auswählen des reinen Überwachungsverhaltens im Vergleich zu "Audit-and-Configure"-Verhalten

Bei der Zuweisung einer SSH-Richtlinie zur Haltungskontrolle können Sie das Verhalten "Audit" (auch als "Überwachung") oder das Verhalten "Überwachen und Konfigurieren " (auch als "Konfigurieren") festlegen.

Richtliniendefinition Azure-Richtlinienauswirkung Hinweise zu den Erwartungen
Nur-Überwachungsverhalten **Audit** SSH Posture Control on Windows machines auditIfNotExists Die Richtlinie enthält restriktivere Einstellungen im Vergleich zu vielen beliebten Systemimages. Beispiel: Denial of root ssh access. Erwarten Sie dementsprechend, dass notkonforme Zustände gemeldet werden.
Verhalten bei Überwachung und Konfiguration **Configure** SSH Posture Control on Windows machines deployIfNotExists Wie oben können Sie erwarten, dass notkonforme Zustände anfänglich gemeldet werden. Anschließend werden die Computer so konfiguriert, dass sie mit der Richtlinie übereinstimmen, was zu eventuellen konformen Zuständen führt.

Bei vorhandenen Computern beginnen Administratoren in der Regel mit dem Nur-Überwachungsverhalten, um den vorhandenen Zustand zu ermitteln und Abhängigkeiten wie Konten zu ermitteln, die für die Systemautomatisierung zulässig sind. Nachdem Sie die vorhandene Flotte mit den Standardeinstellungen für die SSH-Haltungssteuerung verglichen haben, würden Sie entscheiden, welche SSH-Haltungssteuerungsparameter angepasst werden sollen. Nach dieser Analyse und Planung würden Sie dann zum Verhalten der Überwachung und Konfiguration wechseln (mit sicheren Bereitstellungspraktiken wie Ringen).

Bei Greenfield-Szenarien oder einweg-Testcomputern können Sie diese Analyse überspringen und direkt zum Überwachungs- und Konfigurationsverhalten wechseln, beginnend mit starken SSH-Haltungssteuerungsstandarden.

Vorsicht

Bevor Sie Computer konfigurieren, sollten Sie ihre neue Konfiguration sorgfältig überprüfen. Sie könnten versehentlich den Zugriff auf Ihre Computer verlieren.

Beispiele für versehentliches Sperren von sich selbst sind:

  • Die angewendeten Nettoautorisierungseinstellungen (Kombination von allowUsers,denyGroups, usw.) lassen die benötigten Anmeldungen nicht zu.
  • Die port Konfiguration für sshd wird durch andere Steuerelemente in Ihrer Umgebung blockiert (Hostfirewallregeln, Netzwerkfirewallregeln usw.)
    • Um zu vermeiden, dass Unternehmensteamgrenzen übersprungen werden, konfigurierte SSH-Haltungssteuerung nur sshd. Es wird derzeit nicht versucht, Firewallregeln auf dem Computer zu ändern usw. zur Aufnahme des konfigurierten SSH-Ports. Wenn Sie diese Szenarien mit uns besprechen möchten, wenden Sie sich bitte an uns (siehe weitere Ressourcen unten).

Bereich der SSH-Haltungskontrolle: Regeln, Standardwerte und Anpassungen

In der folgenden Tabelle sind die Elemente aufgeführt, die mit SSH-Haltungssteuerung überwacht oder konfiguriert werden können. Jede dieser Elemente wird als Regel bezeichnet.

Die meisten Regeln können benutzerdefinierte Werte über Richtlinienzuweisungsparameter zum Überwachen oder Konfigurieren und Überwachen erhalten. Wenn der Standard in Ihrer Organisation beispielsweise port 1111 (anstelle von 22) für sshd verwendet, würden Sie den entsprechenden Parameter in der Richtlinienzuweisung festlegen. Diese Parameter haben Bezeichner, die in der folgenden Tabelle enthalten sind. In der Regel wird der kurze Parametername programmgesteuert (z. B. mit az policy assignment create --params ...) verwendet, während der längere Anzeigename des Parameters in Azure-Portalworkflows verwendet wird.

Achten Sie beim Anpassen von Werten darauf, Werte bereitzustellen, die mit sshd kompatibel sind. Nimmt beispielsweise allowGroups eine durch Leerzeichen getrennte Liste von Gruppennamenmustern an. Referenz finden Sie auf der sshd_config-Man-Seite. Der sshd_config-Verweis ist auch hilfreich, um andere sshd-Verhaltensweisen zu verstehen, z. B. wie Zulassungs - und Ablehnungslisten sich überschneiden.

Hinweis

Um das Tabellenlayout beizubehalten, wurden einige Zellwerte in Fußnoten unterhalb der Tabelle verschoben.

Regelname Standardwert Parametername Anzeigename des Parameters
Stellen Sie sicher, dass die zulässigen Gruppen für SSH konfiguriert sind. <Fußnote 1> AllowGroups Zulässige Gruppen
Stellen Sie sicher, dass die zulässigen Benutzer für den SSH-Zugriff konfiguriert sind. "" AllowUsers Zulässige Benutzer
Stellen Sie sicher, dass die Authentifizierungsmethode für SSH konfiguriert ist. jegliche AuthenticationMethods Authentifizierungsmethoden
Stellen Sie sicher, dass die verweigerten Gruppen für SSH konfiguriert sind. "" DenyGroups Abgelehnte Gruppen
Stellen Sie sicher, dass die verweigerten Benutzer für SSH konfiguriert sind. "" DenyUsers Benutzer verweigert
Stellen Sie sicher, dass der beim Protokollieren von Nachrichten für SSH verwendete Einrichtungscode konfiguriert ist. LOCAL0 SyslogFacility Systemprotokollierungseinrichtung
Stellen Sie sicher, dass die SSH MaxAuthTries konfiguriert sind. 6 MaxAuthTries Maximale Authentifizierungsversuche
Stellen Sie sicher, dass der SSH-HostKey konfiguriert ist. <Fußnote 2> HostKey Hostschlüssel
Stellen Sie sicher, dass die autorisierte Schlüsseldatei für SSH konfiguriert ist. <Fußnote 3> AuthorizedKeysFile Autorisierte Schlüsseldatei
Stellen Sie sicher, dass GSSApiAuthentication für SSH konfiguriert ist Falsch GSSAPIAuthentication GSSAPI-Authentifizierung
Stellen Sie sicher, dass das SSH-Warnbanner konfiguriert ist. <Fußnote 4> Banner Werbebanner
Stellen Sie sicher, dass geeignete Verschlüsselungen für SSH verwendet werden aes128-ctr,aes192-ctr,aes256-ctr Ciphers Zulässige Chiffre
Sicherstellen, dass nur genehmigte MAC-Algorithmen verwendet werden hmac-sha2-256 MACs MAC-Algorithmen
Stellen Sie sicher, dass der SSH-ClientAliveCountMax konfiguriert ist. 0 ClientAliveCountMax Anzahl der Client-Alive-Nachrichten
Stellen Sie sicher, dass der SSH-Port konfiguriert ist. 22 Port Hafen
Stellen Sie sicher, dass die SSH LoginGraceTime konfiguriert ist. 60 LoginGraceTime Anmeldefrist
Stellen Sie sicher, dass der SSH-ClientAliveInterval konfiguriert ist 3600 ClientAliveInterval Client-Alive-Intervall
Stellen Sie sicher, dass ssh PermitEmptyPasswords konfiguriert ist. Falsch PermitEmptyPasswords Berechtigung "Leeres Kennwort"

Fußnoten zur Tabelle:

  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. Hinweis: Dies wird endbenutzern angezeigt als:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    

Zusätzliche Richtlinienparameter (nicht sshd)

Diese zusätzlichen Richtlinienparameter sind während der Richtlinienzuweisung verfügbar. Diese beeinflussen das Verhalten der Azure-Richtlinienzuweisung im Gegensatz zu sshd-Einstellungen auf Computern.

Name BESCHREIBUNG Standard
Schließen Sie verbundene Arc-Server ein Durch Die Auswahl dieser Option erklären Sie sich damit einverstanden, monatlich pro angeschlossenem Arc-Computer belastet zu werden. FALSCH
Effekt Aktivieren oder Deaktivieren der Ausführung dieser Richtlinie <Hängt von der Auswahl des reinen Überwachungsverhaltens im Vergleich zum Überwachen und Konfigurieren des Verhaltens ab.>

Richtliniendefinitionen? Richtlinienzuweisungen? Gastzuweisungen? Computerkonfiguration? Wie passt das alles zusammen?

Um mit der SSH-Haltungskontrolle zu beginnen, besteht Ihre Hauptaktion darin, eine Richtlinienzuweisung zu erstellen. Ihre Richtlinienzuweisung verknüpft eine Richtliniendefinition (z. B. "Überwachung der SSH-Haltungskontrolle für Windows-Computer") mit einem Bereich (z. B. "my_factory_3_resource_group").

Während Sie das System verwenden, werden zusätzliche Ressourcentypen und Terminologie angezeigt, wie in den folgenden Artikeln zusammengefasst.

Diagramm, das zeigt, wie eine Richtlinienzuweisung Computer mit dem Computerkonfigurationsdienst über Gastzuweisungen verknüpft

BESCHREIBUNG
Richtliniendefinition Innerhalb des Richtliniendiensts beschreiben die abstrakten Daten einen Cluster verfügbarer Überwachungs- und/oder Konfigurationsverhaltensweisen. Beispiel: "Überwachen der SSH-Haltungskontrolle auf Windows-Computern".
Richtlinienzuweisung Verknüpft eine abstrakte Richtliniendefinition mit einem konkreten Bereich, z. B. einer Ressourcengruppe. Die Richtlinienzuweisung kann Parameter und andere Eigenschaften enthalten, die für diese Zuordnung spezifisch sind.
Computerkonfiguration Der Azure-Dienst und die Agentrie, die die Überwachung und Einstellungskonfiguration auf Betriebssystemebene verarbeiten.
Gastzuweisung Ressource, die als dreidirektionale Verbindung zwischen der Richtlinienzuweisung, dem Computer und dem Computerkonfigurationsdienst fungiert. Richtlinien erstellt und überwacht ressourcen für Gastzuweisungen nach Bedarf.
Weitere Informationen zur Terminologie "Gast" und "Computer" finden Sie unter "Warum sehe ich die Begriffe "Gastkonfiguration" und "Automanage" an Orten?
Maschine Ein arcfähiger Computer oder eine Azure-VM.

Informationen zur Kompatibilität (SSH-Serverimplementierungen usw.)

Die SSH-Haltungssteuerung ist für das allgemeine Allgemeine Windows Server-Szenario einer einzelnen lang ausgeführten SSH-Serverinstanz konzipiert:

  • deren Lebenszyklus vom init-System verwaltet wird, z. B. Service Control Manager
  • dessen Verhalten durch sshd_config Datei gesteuert wird, die mit dem Ssh-Verhalten von OpenSSH konsistent ist
  • deren effektive Konfiguration/Status durch sshd -T Ausgabe angezeigt wird, die mit dem Ssh-Verhalten von OpenSSH konsistent ist

Für alle unterstützten OSes (siehe unten) ist dies der Standardanwendungsfall für SSH-Server.

Grundsätzlich kann ein Computer eine beliebige Anzahl von SSH-Serverinstanzen mit unterschiedlichen Lebensdauern ausführen, basierend auf einer beliebigen Anzahl von Codebases und deren Konfiguration von einer beliebigen Anzahl von Stellen (Konfigurationsdateien, Befehlszeilenargumente, Kompilierungszeitparameter usw.). Solche Fälle liegen derzeit außerhalb des Umfangs der SSH-Haltungskontrolle. Wenn Sie an solchen Fällen für die Zukunft interessiert sind, wenden Sie sich bitte an uns , um uns zu besprechen.

Die SSH-Statussteuerung ist für die Verwendung auf Windows Server 2019-, 2022- und 2025-Computern vorgesehen, die von Azure Policy und Computerkonfiguration unterstützt werden.

Die Kompatibilität mit einem bestimmten Computer zur Laufzeit kann nicht garantiert werden, da sysadmins und Image Builder frei sind, Komponenten aus dem Betriebssystem zu entfernen, Dateisysteme schreibgeschützt usw. zu machen.

Kompatibilität mit sshd_config Include-Direktiven

SSH-Haltungskontrolle versucht, Direktiven in sshd_config aufzunehmen und zu nutzen Include , wie folgt:

  • Für Überwachungs-/Leseaktionen: Verlassen Sie sich auf sshd -T, um die Net-Konfiguration aus der Perspektive von sshd widerzuspiegeln – unter Berücksichtigung aller Includes.
  • Für Konfigurieren/Schreiben von Aktionen:
    • Verknüpfen Sie eine neue SSH-Haltungssteuerungs-spezifische Datei mit sshd_config (als Include). Platzieren Sie anschließend alle Schreibvorgänge in der verknüpften SSH-Haltungssteuerungsdatei. Dies verbessert die Systemhygiene und Rückverfolgbarkeit von Systemänderungen.

Kompatibilität mit sshd_config Übereinstimmungsdirektiven

DIE SSH-Haltungskontrolle wurde entwickelt, um das kerne sshd-Verhalten zu überwachen und zu konfigurieren. Es wird nicht versucht, mit bedingten Match Blöcken (falls vorhanden) zu interagieren, die unterschiedliche sshd-Konfigurationen auf bestimmte Populationen anwenden können.

Kompatibilität mit mehreren sshd_config Werten

Das SSH-Haltungssteuerelement unterstützt nicht die Verwendung mehrerer Werte für die Regel "Port", d. h. das Festlegen der Regel "Port" auf 22 und 33. Diese Regel sollte mit einem einzelnen Wert konfiguriert werden, um die ordnungsgemäße Funktionalität und Compliance für Überwachungs- und Konfigurationsszenarien sicherzustellen. Andere Regeln, z. B. Zulassen/Verweigern von Benutzern und Chiffre, können mehrere Werte aufweisen, solange sie in einer einzelnen Zeile hinzugefügt werden.

Beispiel:

  • Eine vorhandene sshd_config Datei enthält eine Zeile "port:22" und eine andere Zeile "port:33".
  • Die Richtlinie "SSH überwachen" wird verwendet, um einen erwarteten Portwert von 33 zu überwachen.
  • Ergebnis: Die Überwachung kann unvorhersehbar bestehen oder fehlschlagen.
  • Empfehlung: Verwenden Sie dieses Feature nicht mit Szenarien wie diesen.

Wie kann ich die Ergebnisse programmgesteuert abfragen?

Mit Azure Resource Graph (ARG)-Abfragen können Sie Zuordnungs- und Statusdaten in Ihre eigenen Workflows integrieren. In diesen Beispielen wird Search-AzGraph in PowerShell die ARG-Abfrage ausgeführt, aber PowerShell ist nicht erforderlich. Sie können ARG von vielen Einstiegspunkten wie dem Azure-Portal, der Azure CLI, REST-Aufrufen usw. verwenden.

  1. Auf der höchsten Höhe der Zusammenfassung können Sie die Anzahl der Computer pro Compliancestatus-Bucket abrufen. Beispiel:

    $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. Um einen Drilldown so auszuführen, dass der allgemeine Compliancestatus nach Computer angezeigt wird, können Sie Folgendes verwenden:

    $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. Zum Ausführen eines Drilldowns zu Einstellungsdetails können Sie Folgendes verwenden:

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

Warum sehe ich die Begriffe "Gastkonfiguration" und "Automanage" an Orten?

Der Computerkonfigurationsdienst wurde auch als Gastkonfiguration und als Automatische Computerkonfiguration bezeichnet. Sie können bei der Interaktion mit Diensten und Dokumentationen auf diese Namen stoßen. Beispiel:

  • In den Azure Resource Graph-Abfragebeispielen in diesem Artikel wird die Datentabelle aufgerufen guestconfigurationresources.
  • Im Azure-Portal wird eine nützliche Ansicht zum Beobachten von Ergebnissen als "Gastzuweisungen" bezeichnet.
  • Beim Anwenden der relevanten VM-Erweiterung zum Aktivieren der Computerkonfiguration im Azure-Portal lautet der Erweiterungstitel "Automanage Machine Configuration".

Für die Zwecke der SSH-Haltungskontrolle gibt es keinen sinnvollen Unterschied zwischen "Gast" und "Computer". Arc-fähige Computer und Azure-VMs sind berechtigt.

Was sind die Bezeichner für die integrierten Richtliniendefinitionen?

In einigen Fällen, z. B. das Erstellen von Richtlinienzuweisungen mit Azure CLI, kann es sinnvoll oder erforderlich sein, auf eine Richtliniendefinition anhand der ID anstatt des Anzeigenamens zu verweisen.

Anzeigename id
Überwachen der SSH-Statuskontrolle auf Windows-Computern /providers/Microsoft.Authorization/policyDefinitions/fe4e11ff-f561-4d4a-877c-256cc0b6470e
Konfigurieren der SSH-Statussteuerung auf Windows-Computern /providers/Microsoft.Authorization/policyDefinitions/42830b63-79aa-4ea5-85dc-6baa719d7d7c