Was ist der Sinn von sshd "UseDNS" -Option?

79

Ich weiß, was es tut, aber ich weiß nicht warum . Welche Angriffe werden verhindert?

Ist es für alle Arten von Authentifizierungsmethoden relevant? (hostbasiert, Passwort, Publickey, keyboard-interaktiv ...)

user368507
quelle
2
Ich habe CoreOS auch hier hinzugefügt: github.com/coreos/bugs/issues/92

Antworten:

66

Die UseDNSOption ist meistens unbrauchbar. Wenn die Clientcomputer im Internet verfügbar sind, besteht eine hohe Wahrscheinlichkeit, dass sie über kein Reverse-DNS verfügen, dass sich das Reverse-DNS nicht vorwärts auflöst oder dass das DNS keine anderen Informationen als "Dazu gehört" bereitstellt ISP “, die Ihnen die IP-Adresse bereits mitteilt.

In typischen Konfigurationen wird DNS nur für die Protokollierung verwendet. Es kann zur Authentifizierung verwendet werden, jedoch nur, wenn IgnoreRhosts noin angegeben sshd_config. Dies ist für die Kompatibilität mit alten Installationen , die rsh verwendet, wo man sagen kann „der Benutzer namens bobauf der Maschine genannt darkstarmelden Sie sich an als aliceohne Anmeldeinformationen zeigen“ (durch das Schreiben darkstar bobin ~alice/.rhosts). Dies ist nur dann sicher, wenn Sie allen Computern vertrauen, die möglicherweise eine Verbindung zum SSH-Server herstellen. Mit anderen Worten, dies ist sehr, sehr selten auf sichere Weise verwendbar.

Da die DNS-Suche nur unter besonderen Umständen nützliche Informationen enthält, sollte sie deaktiviert werden. Soweit ich das beurteilen kann, ist der einzige Grund, warum es standardmäßig aktiviert ist, dass es technisch sicherer ist (wenn Sie sich Gedanken über die Authentifizierung und nicht über die Verfügbarkeit machen), obwohl dies nur für eine winzige Anzahl von Umständen gilt.

Ein weiteres Argument zum Deaktivieren dieser Funktion ist, dass jede überflüssige Funktion ein unnötiges Sicherheitsrisiko darstellt .

Gilles
quelle
UseDNS ist also nur für die hostbasierte Authentifizierung relevant? Wenn ich keine hostbasierte Authentifizierung verwende und es mir egal ist, ob Hostname oder IP in Protokollen angezeigt werden, macht UseDNS keinen Unterschied?
user368507
5
@ user368507 Ja, das war's. UseDNSNicht einmal nützlich, wenn Sie eine schlüsselbasierte Hostauthentifizierung verwenden, sondern nur, wenn Sie eine hostnamenbasierte Hostauthentifizierung (dh eine extrem schwache Authentifizierung) verwenden.
Gilles
3
@ Gilles ist natürlich sehr nützlich und kritisch , wenn Sie eine schlüsselbasierte und hostnamenbasierte Authentifizierung verwenden UseDNS. Sie authentifizieren einen Benutzer anhand des Schlüssels und den Server anhand des Hostnamens, der einer MAC-Adresse zugewiesen ist.
Kara Deniz
38

Ich habe einen Fehlerbericht (alt, aber immer noch aktuell) in Ubuntu darüber hinzugefügt.

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/424371

Ich schlug vor, die Standardeinstellung auf Nein zu ändern und neuere Dokumentation hinzuzufügen:

# UseDNS - Determines whether IP Address to Hostname lookup and comparison is performed
# Default value is No which avoids login delays when the remote client's DNS cannot be resolved
# Value of No implies that the usage of "from=" in authorized_keys will not support DNS host names but only IP addresses.
# Value of Yes supports host names in "from=" for authorized_keys. Additionally if the remote client's IP address does not match the resolved DNS host name (or could not be reverse lookup resolved) then a warning is logged.
Rodney
quelle
2
Up up upvote ... das ist nützlicher, weil es eine Information enthält, nach der ich gesucht habe.
0xC0000022L
1
Wenn UseDNS nein ist, können Hostnamen nicht in pam_access-Regeln abgeglichen werden, und stattdessen müssen IPs verwendet werden.
ColinM
1
Ich habe diese Antwort vor ein paar Jahren hochgestuft, aber erst heute habe ich festgestellt, dass die Standardeinstellung in OpenSSH 6.8p1, Ubuntu 15.10 und höher, in "UseDNS no" geändert wurde .
Anthony Geoghegan
RedHat (in RHEL7) hat kürzlich auch den Standardwert auf Nein geändert, wodurch hostnamenbasierte Zugriffskontrollen aufgehoben werden (die als meist beratende Kontrollen in einem Intranet nützlich sind, offensichtlich nicht als einziger Zugriffskontrollmechanismus).
Dannysauer
8

Aus der Manpage von sshd_config(5):

 UseDNS  Specifies whether sshd(8) should look up the remote host name and
         check that the resolved host name for the remote IP address maps
         back to the very same IP address.  The default is “yes”.

Wenn Sie dies aktivieren, wird beim Zugriff von einem Ort ohne ordnungsgemäße DNS (vorwärts und rückwärts) eine Warnung in den Protokollen generiert.

Dies verhindert also keinen Angriff, außer dass eine qualifizierte Remoteadresse des Clients erforderlich ist, um keine Warnung zu protokollieren. Eine solche Warnung kann Ihnen beim Auffinden des Angreifers nur dann helfen, wenn dieser PTR-Datensatz einen Sinn ergibt.

bearbeiten: aktualisiert nach Kommentar von Andrey Voitenkov .

gertvdijk
quelle
Es ist also ein Filter, wer eine Verbindung herstellen darf, je nachdem, was sich auf dem DNS-Server befindet.
user368507
2
Warum sollte es den Zugang unmöglich machen? sshd generiert nur eine Warnung, wenn DNS A / PTR-Einträge nicht übereinstimmen. Die Anmeldesequenz ist bei der Behebung von Problemen langsam.
Andrey Voitenkov
Dies verhindert den Zugriff, wenn der autorisierte Schlüssel kompromittiert wurde, solange der Angreifer die Werte im from=Feld vor dem fraglichen autorisierten Schlüssel (falls verwendet) nicht fälschen kann .
Alecz
7

Es wird benötigt, wenn Sie die FROM-Option in einer authorized_keys-Datei verwenden und nach Namen und nicht nur nach IPs filtern möchten.

Mit der FROM-Option in einer Zeile einer authorized_keys-Datei können Sie Hosts einschränken, die einen bestimmten Schlüssel verwenden können.
Dies erhöht die Fähigkeit, mehrere Server zu verwalten, die Zugriff aufeinander haben, ohne dass Klone eines Computers die Identität seines Ursprungs annehmen (normalerweise unbeabsichtigt) (übrig gebliebene Crontabs, menschliches Versagen).

Didi Kohen
quelle
3

Ich möchte hinzufügen, dass ich mich unter CentOS 7 (7.1.1503) und daher unter Red Hat Enterprise Linux 7 nicht mit der Standardeinstellung yesfür anmelden konnteUseDNS . Nachdem noich das Kommentarzeichen entfernt und es auf gesetzt habe , konnte ich mich anmelden. Daher scheint es, dass man tatsächlich den Dienst verweigern kann, wenn DNS nicht richtig funktioniert! In CentOS 6 scheint es die Standardeinstellung zu sein nound daher kann ich sshohne funktionierendes DNS rein!

Ich möchte hinzufügen, dass ich mit LXC-Containern experimentiert habe und nicht mit physischen Maschinen, falls das einen Unterschied macht!

AnthonyK
quelle