Freigeben über


Was ist SSH-Haltungssteuerung?

Mit der SSH-Haltungskontrolle können Sie den SICHERHEITSstatus von SSH-Servern auf unterstützten Linux-Distros wie Ubuntu, Red Hat, Azure Linux und mehr überwachen und konfigurieren. Die SSH-Haltungskontrolle lässt sich nahtlos in Azure Governance-Dienste (Richtlinie, Computerkonfiguration) integrieren, damit Sie:

  • Sicherstellen der Compliance- mit sshd-Standards in Ihrer Branche oder Organisation
  • Reduzieren der Angriffsfläche der sshd-basierten Remoteverwaltung
  • Sicherstellen einer konsistenten ssh--Einrichtung 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 um bei Bedarf Maßnahmen zu ergreifen) 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, die an die Azure-Sicherheitsbasislinie für Linux ausgerichtet sind.

Dokumentation für erste Schritte

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

Beim Zuweisen einer SSH-Haltungssteuerungsrichtlinie können Sie Nur-Überwachungs- (auch als "Überwachung") bezeichnet, oder verhalten (auch als "Konfigurieren") konfiguriert werden.

Richtliniendefinition Azure-Richtlinieneffekt Hinweise zu den Erwartungen
Nur-Überwachung-Verhalten **Audit** SSH Posture Control on Linux machines auditIfNotExists Die Richtlinie enthält restriktivere Einstellungen im Vergleich zu vielen beliebten Systemimages. Beispiel: Denial of root ssh access. Erwarten Sie daher, dass nicht konformen Status gemeldet werden.
Verhalten überwachen und konfigurieren **Configure** SSH Posture Control on Linux machines deployIfNotExists Wie oben beschrieben können Sie davon ausgehen, dass nicht konformen Status anfänglich gemeldet werden. Anschließend werden die Computer so konfiguriert, dass sie mit der Richtlinie übereinstimmen, was zu einem späteren Konformen Status 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 aus allowUsers,denyGroups,permitRootLoginusw.) lassen die benötigten Anmeldungen nicht zu.
  • Die port, die Sie für sshd konfigurieren, wird durch andere Steuerelemente in Ihrer Umgebung blockiert (SELinux-Richtlinien, Hostfirewallregeln, Netzwerkfirewallregeln usw.)
    • Beachten Sie, dass viele Red Hat-Familien-Distros standardmäßig SELinux-Richtlinien haben, die die Verwendung von ssh-Ports außer 22 blockieren.
    • Um zu vermeiden, dass Unternehmensteamgrenzen übersprungen werden, konfigurierte SSH-Haltungssteuerung nur sshd. Es wird derzeit nicht versucht, SELinux-Richtlinien, Firewallregeln usw. auf dem Computer zu ändern, um den konfigurierten sshd-Port zu berücksichtigen. 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 Regeln wird als Regelbezeichnet.

Jede Regel hat einen Standardkonfigurationswert, der an die Azure-Sicherheitsbasislinie für Linux ausgerichtet ist.

Die meisten Regeln können benutzerdefinierte Werte erhalten, über richtlinienzuweisungs-Parameter zum Überwachen oder Konfigurieren und Überwachen. 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. Beispielsweise verwendet allowGroups eine durch Leerzeichen getrennte Liste von Gruppennamenmustern. Referenz finden Sie auf der sshd_config-Man-Seite. Der sshd_config-Verweis ist auch nützlich, um andere sshd-Verhaltensweisen zu verstehen, z. B. wie zulassen, und verweigern, Listen sich überschneiden.

Anmerkung

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

Regelname Standardwert Parametername Anzeigename des Parameters
Sicherstellen, dass Berechtigungen für /etc/ssh/sshd_config konfiguriert sind 600 <Fußnote 1> Zugriffsberechtigungen für sshd_config
Sicherstellen, dass IgnoreRhosts festgelegt ist ja ignoreHosts Rhosts und Shosts ignorieren
Sicherstellen, dass LogLevel festgelegt ist INFO logLevel Ausführlichkeitsebene des Protokolls
Stellen Sie sicher, dass MaxAuthTries festgelegt ist. 6 maxAuthTries Maximale Anzahl von Authentifizierungsversuchen
Stellen Sie sicher, dass zulässige Benutzer für den SSH-Zugriff konfiguriert sind. @ <Fußnote 5> allowUsers Zugelassene Benutzer für SSH
Sicherstellen, dass verweigerte Benutzer für den SSH-Zugriff konfiguriert sind wurzel denyUsers Abgelehnte Benutzer für SSH
Sicherstellen, dass zulässige Gruppen für den SSH-Zugriff konfiguriert sind * allowGroups Zulässige Gruppen für SSH
Sicherstellen, dass verweigerte Gruppen für den SSH-Zugriff konfiguriert sind wurzel denyGroups Abgelehnte Gruppen für SSH
Sicherstellen, dass hostbasedAuthentication festgelegt ist Nein hostBasedAuthentication Hostbasierte Authentifizierung
Stellen Sie sicher, dass PermitRootLogin festgelegt ist. Nein permitRootLogin Gibt an, ob sich stamm mit ssh anmelden kann
Stellen Sie sicher, dass PermitEmptyPasswords festgelegt ist Nein permitEmptyPasswords Gibt an, ob der Server die Anmeldung bei Konten mit leeren Kennwortzeichenfolgen zulässt.
Sicherstellen, dass ClientAliveCountMax festgelegt ist 0 clientAliveCountMax Die Anzahl der Client-Alive-Nachrichten, die ohne ssh-Empfang von Nachrichten vom Client gesendet werden können
Sicherstellen, dass ClientAliveInterval festgelegt ist 3600 clientAliveInterval Timeoutintervall in Sekunden, nachdem keine Daten vom Client empfangen wurden, sendet sshd eine Nachricht, um eine Antwort anzufordern.
Sicherstellen, dass MACs konfiguriert sind <Fußnote 2> <Fußnote 3> Die Liste der verfügbaren Nachrichtenauthentifizierungscodealgorithmen (MAC)
Sicherstellen, dass ein Banner konfiguriert ist <Fußnote 4> banner Der Inhalt der Bannerdatei, die an den Remotebenutzer gesendet wird, bevor die Authentifizierung zulässig ist
Sicherstellen, dass PermitUserEnvironment festgelegt ist Nein permitUserEnvironment Gibt an, ob ~/.ssh/environment und umgebung= Optionen in ~/.ssh/authorized_keys von sshd verarbeitet werden
Stellen Sie sicher, dass Verschlüsselungen konfiguriert sind aes128-ctr,aes192-ctr,aes256-ctr ciphers Die Liste der zulässigen Chiffre
Stellen Sie sicher, dass der SSH-Port konfiguriert ist. 22 port Der SSH-Port
Stellen Sie sicher, dass das Best Practice-Protokoll verwendet wird. 2 <kein Parameter> <kein Parameter>

Tabellennoten:

  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. Hinweis: Dies wird endbenutzern angezeigt als:
    #######################################################################
    
    Authorized access only!
    
    If you are not authorized to access or use this system, disconnect now!
    
    #######################################################################
    
  5. In allowUsers stellt der Standardwert "@" alle Konten auf dem Computer dar.

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 Vorgabe
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 Auswahl des reinen Überwachungsverhaltens im Vergleich zum Überwachen und Konfigurieren des Verhaltens>

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

Um mit der SSH-Haltungskontrolle zu beginnen, besteht Ihre Hauptaktion darin, eine Richtlinienzuweisungzu erstellen. Ihre Richtlinienzuweisung verknüpft eine Richtliniendefinition (z. B. "Überwachung der SSH-Haltungskontrolle für Linux-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

Beschreibung
Richtliniendefinition Innerhalb des Richtliniendiensts beschreiben die abstrakten Daten einen Cluster verfügbarer Überwachungs- und/oder Konfigurationsverhaltensweisen. Beispiel: "Überwachen der SSH-Haltungskontrolle auf Linux-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?
Computer Ein arcfähiger Computer oder eine Azure-VM.

Informationen zur Kompatibilität (Einführungen, SSH-Serverimplementierungen usw.)

DIE SSH-Haltungskontrolle ist für das allgemeine Linux-Szenario eines einzelnen long-running SSH-Serverinstanz konzipiert:

  • deren Lebenszyklus vom Init-System-Sush als systemd verwaltet wird
  • dessen Verhalten von sshd_config Datei-, konsistent mit dem Verhalten von OpenSSH sshd
  • deren effektive Konfiguration/Status durch sshd -T Ausgabe angezeigt wird, die mit dem Ssh-Verhalten von OpenSSH konsistent ist

Für alle unterstützten Distros (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, kontaktieren Sie uns bitte zu besprechen.

Die SSH-Haltungssteuerung ist für die Verwendung in diesen Linux-Distributionen vorgesehen, die von der Azure-Richtlinie und -Computerkonfiguration unterstützt werden– mit Ausnahme derjenigen, die zum Zeitpunkt der Entwicklung erweitert wurden. Insbesondere gelten die folgenden Bereiche ab 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

Soweit möglich, wird die SSH-Haltungskontrolle mit spezifischen weitverwendeten Systemkompositionen der obigen Distros getestet. Beispiel: Bildkompositionen des Betriebssystems, die von Distro-Betreuern im Azure-Katalog veröffentlicht wurden. Die Kompatibilität mit einem bestimmten Computer zur Laufzeit kann nicht garantiert werden, da sysadmins und Image Builders frei sind, Komponenten aus dem Betriebssystem zu entfernen, Dateisysteme schreibgeschützt zu machen, Agentaktionen mit SELinux zu blockieren usw.

Kompatibilität mit sshd_config Include-Direktiven

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

  • 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:
    • Wenn die sshd-Implementierung auf dem Computer Includes unterstützt, 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.
    • Wenn die sshd-Implementierung auf dem Computer keine Include-Direktiven unterstützt, schreiben Sie alle Konfigurationsänderungen direkt in sshd_config.

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.

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 verwendet, um die ARG-Abfrage auszuführen, 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. Zum Beispiel:

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

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

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

Der Computerkonfigurationsdienst wurde auch als Gastkonfiguration und als Automanage Machine Configurationbezeichnet. Sie können bei der Interaktion mit Diensten und Dokumentationen auf diese Namen stoßen. Zum Beispiel:

  • In den Azure Resource Graph-Abfragebeispielen in diesem Artikel wird die Datentabelle guestconfigurationresourcesgenannt.
  • 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.

displayName id
Überwachen der SSH-Haltungskontrolle auf Linux-Computern /providers/Microsoft.Authorization/policyDefinitions/a8f3e6a6-dcd2-434c-b0f7-6f309ce913b4
Konfigurieren der SSH-Haltungskontrolle auf Linux-Computern /providers/Microsoft.Authorization/policyDefinitions/e22a2f03-0534-4d10-8ea0-aa25a6113233