Seit OpenSSH 4.0 können die Hostnamen in der known_hosts Datei statt als Klartext auch gehasht abgelegt werden. Diese Funktion ist bei den meisten Linux Distributionen standardmäßig eingeschaltet.
Konnte vor OpenSSH 4.0 die ~/.ssh/known_hosts Datei noch mit einem Texteditor geöffnet und ein bestimmter Eintrag mit Hostname/IP-Adresse geändert oder gelöscht werden, dann ist dies jetzt nur noch sehr schlecht möglich. Die Hostnamen werden jetzt mit einer bestimmten Hashfunktion in einen Hash umgewandelt und abgespeichert. Das besondere bei dieser Methode ist, dass sie nur in eine Richtung funktioniert. Die Hostnamen können also nur "verschlüsselt" werden.
Durch die gehashten Hostnamen ist es für einen Menschen fast nicht mehr möglich den passenden Eintrag zu einem Hostname zu finden. Im Gegensatz dazu findet das ssh Programm den passenden Eintrag zu einem Hostnamen sehr leicht wieder. Sucht es zum Beispiel nach dem passenden Eintrag dann wird der zu suchende Hostname gehasht und es wird geschaut, ob dieser in der Liste vorhanden ist.
Soll ein Hostname aus der known_hosts Datei gelöscht werden kann folgender Befehl verwendet werden.
$ ssh-keygen -R <hostname>
Wozu soll das ganze gut sein? Ein Nutzen scheint ja auf den ersten Blick nicht vorhanden zu sein.
Ganz einfach. Man stelle sich folgende Situation vor.
Eine Person meldet sich regelmäßig bei einem zentralen Rechner an und verbindet sich von da aus per ssh weiter auf andere Rechner. Bekommt jetzt ein Angreifer den Benutzernamen und das Passwort dieser Person heraus. So kann er sich auch an diesem zentralen Rechner anmelden. Dazu kommt, dass sich der Angreifer lediglich die known_hosts Datei anschauen braucht und gleich sieht, zu welchen Rechner der Nutzer sich weiter verbindet. Hätte der Angreifer jetzt Glück, dann verwendet der Nutzer bei den meisten Rechnern gleiche Zugangsdaten, wodurch dem Angreifer auch die nächsten Rechner zugänglich sind.
Und genau so ein Szenario wird durch, dass hashen der Hostnamen weitestgehend verhindert.
Links:
- OpenSSH.com (englisch)