Ist es möglich, die Hosts in der Datei known_hosts herauszufinden?

115

Ich würde gerne sehen, welche Hosts sich in meiner Datei known_hosts befinden, aber sie scheint nicht von Menschen lesbar zu sein. Kann man es lesen?

Insbesondere gibt es einen Host, zu dem ich über mehrere Namen eine Verbindung herstellen kann, und ich möchte herausfinden, welchen Fingerabdruck ich von meiner bekannten Host-Datei erwarte.

Update: Ich verwende OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25. März 2009

Eine Zeile aus meiner known_hosts-Datei sieht ungefähr so ​​aus:

|1|guO7PbLLb5FWIpxNZHF03ESTTKg=|r002DA8L2JUYRVykUh7jcVUHeYE= ssh-rsa AAAAB3NzaC1yc2EAAFADAQABAAABAQDWp73ulfigmbbzif051okmDMh5yZt/DlZnsx3DEOYHu3Nu/+THJnUAfkfEc1XkOFiFgbUyK/08Ty0K6ExUaffb1ERfXXyyp63rpCTHOPonSrnK7adl7YoPDd4BcIUZd1Dk7HtuShMmuk4l83X623cr9exbfm+DRaeyFNMFSEkMzztBYIkhpA2DWlDkd90OfVAvyoOrJPxztmIZR82qu/5t2z58sJ6Jm2xdp2ckySgXulq6S4k+hnnGuz2p1klviYCWGJMZfyAB+V+MTjGGD/cj0SkL5v/sa/Fie1zcv1SLs466x3H0kMllz6gAk0/FMi7eULspwnIp65g45qUAL3Oj
Colin Newell
quelle
Wenn es nicht gehasht ist, können Sie verwenden: unix.stackexchange.com/questions/236192/…
Benjamin Goodacre

Antworten:

135

Sie haben in Ihrer Datei den Wert HashKnownHosts" yes" festgelegt ssh_config, sodass die Hostnamen nicht im Klartext verfügbar sind.

Wenn Sie den gesuchten Hostnamen im Voraus kennen, können Sie ihn folgendermaßen suchen:

    ssh-keygen -H -F hostname

Hier ist der relevante Abschnitt aus der ssh-keygen(1)Manpage:

 -F hostname
         Search for the specified hostname in a known_hosts file, listing
         any occurrences found.  This option is useful to find hashed host
         names or addresses and may also be used in conjunction with the
         -H option to print found keys in a hashed format.
pdo
quelle
3
Bedeutet der Hash bekannter Hosts im Wesentlichen, dass dies nicht möglich ist? dh ich muss den Namen des Hosts kennen, um seine Informationen zu sehen?
Colin Newell
7
@ColinNewell Richtig, Sie müssen die Hostnamen kennen. Dies ist eine Sicherheitsmaßnahme, um einen Angreifer davon abzuhalten, Hostnamen / IP-Adressen anderer von Ihnen genutzter Boxen zu erbeuten, wenn Ihr Computer kompromittiert ist.
PDO
1
Haben Sie keine Angst, wenn überhaupt keine Ausgabe erfolgt, versuchen Sie stattdessen nicht den vollständig qualifizierten Hostnamen, sondern den Hostnamen.
Mathe
6
Nicht sshd_config, sondern ssh_config.
Fish Monitor
9
@pdo - Ihr Befehl funktioniert nicht immer. Wenn der Host nicht über SSH verfügt 22, unterscheidet sich das Format in known_hosts. Dann müssen Sie den folgenden Befehl verwenden: ssh-keygen -H -F [host.example.com]:2222
Martin Vegter
17

Für zukünftige Sucher enthält dieser Artikel (Haftungsausschluss: Ich bin nicht verbunden) ein relativ einfaches Perl-Skript, mit dem IP-Adressen und Hostnamen brute-force gehasht werden können known_hosts.

http://blog.rootshell.be/2010/11/03/bruteforcing-ssh-known_hosts-files/

Es ermöglicht das Starten von einer bestimmten IP-Adresse. Es könnte auch leicht geändert werden, um ein Wörterbuch zu verwenden.

Im Juni 2014 fügte das John the Ripper-Projekt die Unterstützung für Knacken bekannter_Hosts hinzu , wodurch mehrere CPU-Kerne, GPUs, Wörterbuchverwaltungen usw. genutzt werden können.

Sie können dieses nmap-Snippet auch verwenden, um ein Wörterbuch aller RFC1918-IP-Adressen zu generieren, die als Wörterbuch verwendet werden sollen:

nmap -sL -Pn -n 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 |\
    grep '^Nmap scan report for' | cut -d\  -f5 >ips.list
Royce Williams
quelle
1
Es gibt auch eine Python-Implementierung mit ähnlichen Funktionen: blog.tremily.us/posts/known_hosts
Lars Nordin
Lars Nordin, danke für den Tipp. Ich habe Remilys Informationen an das John the Ripper-Team übermittelt und sie haben dies in Bleeding-Jumbo unterstützt: openwall.com/lists/john-users/2014/07/02/2
Royce Williams
1
Und so geht's mit hashcat: up1ink.tumblr.com/post/132370869368/…
Royce Williams
4

Hilft das ssh-keygen -l -f ~/.ssh/known_hosts? (Unter Verwendung erhalten -vSie auch nette kleine Schatzkarten, z

+--[ RSA 2048]----+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+
sr_
quelle
2
Nicht im engsten Sinne nein, es ist alles noch base64. Die Erklärung von pdo, dass es gehasht wurde, deutet darauf hin, dass es eine Einbahnstraße ist. Ich glaube, ich stecke fest, wenn ich den Hostnamen nicht kenne.
Colin Newell
Das hat mir geholfen. Was ich speziell wollte, war eine Kombination. Um den zuvor verifizierten ssh-Fingerabdruck zu finden, können Sie ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
Folgendes
ssh-keygen -l -F <hostname>Äh , ist noch einfacher
Isaac
2

Am Anfang jeder Zeile "known_hosts" (vor der Zeichenfolge "ssh-dss" oder "ssh-rsa") befindet sich die Hostzeichenfolge / ip:

hostgn6 ssh-dss AAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExIThOj3Yexynu+wSRGjMm4GfF+og2kAljZyUjhBFeM+WYbJzcDSDB [...] ==
yumyumn6.dik6.dir2g.some.net ssh-dss AAAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExITh [...] ==
Ouki
quelle
2
... und macht damit awk '{print $1}' known_hostsden Trick. Beachten Sie, dass Server, die nicht standardmäßige Ports überwachen, beispielsweise [some-server]:5555in known_hosts.
Sr_
3
Leider nicht bei mir. Meins sieht eher aus wie Base64-codierte Daten. Die Daten sind in meiner Datei auch durch Pipe getrennt.
Colin Newell
Welche ssh-Software verwenden Sie damals (wir gingen davon aus, dass Sie die fast standardmäßige openssh-Software verwenden)?
Ouki
Ich habe meiner Frage weitere Details hinzugefügt.
Colin Newell
7
Wie von @pdo angegeben, ist Ihr sshd als "HashKnownHosts" auf "on" gesetzt, was zwar etwas anal erscheint, aber sicherheitsrelevant ist. Und natürlich gibt es keine Möglichkeit, die Hashes einfach umzukehren und die Hostnamen von Ihren "known_hosts" abzurufen.
Ouki
2

Verwenden Sie die -lOption zum ssh-keygenAuflisten von Fingerabdrücken und die -FOption zum Suchen nach einem Hostnamen in Ihrer known_hostsDatei.

$ ssh-keygen -l -F sdf.org
# Host sdf.org found: line 835 type RSA
2048 6e:cd:53:4f:75:a1:e8:5b:63:74:32:4f:0c:85:05:17 |1|9J47PEllvWk/HJ6LPz5pOB2/7rc=|ld0BtQh5V3NdhBHBwR/ZqSv8bqY= (RSA)

Sie können ssh-keyscanden Fingerabdruck in Ihrem known_hostsmit dem vom Server vergleichen.

$ ssh-keyscan sdf.org | awk '{print $3}' | base64 -d | openssl md5 -c
# sdf.org SSH-2.0-OpenSSH_7.1
# sdf.org SSH-2.0-OpenSSH_7.1
no hostkey alg
(stdin)= 6e:cd:53:4f:75:a1:e8:5b:63:74:32:4f:0c:85:05:17
xn.
quelle