Est-il possible de trouver les hôtes dans le fichier known_hosts?

115

Je voudrais voir quels hôtes sont dans mon fichier known_hosts mais il ne semble pas être lisible par l'homme. Est-il possible de le lire?

Plus précisément, il existe un hôte auquel je peux me connecter via plusieurs noms et je souhaite connaître le type d'empreinte que j'attends de mon fichier d'hôtes connu.

Mise à jour: j'utilise OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Mars 2009

Une ligne de mon fichier known_hosts ressemble à ceci,

|1|guO7PbLLb5FWIpxNZHF03ESTTKg=|r002DA8L2JUYRVykUh7jcVUHeYE= ssh-rsa AAAAB3NzaC1yc2EAAFADAQABAAABAQDWp73ulfigmbbzif051okmDMh5yZt/DlZnsx3DEOYHu3Nu/+THJnUAfkfEc1XkOFiFgbUyK/08Ty0K6ExUaffb1ERfXXyyp63rpCTHOPonSrnK7adl7YoPDd4BcIUZd1Dk7HtuShMmuk4l83X623cr9exbfm+DRaeyFNMFSEkMzztBYIkhpA2DWlDkd90OfVAvyoOrJPxztmIZR82qu/5t2z58sJ6Jm2xdp2ckySgXulq6S4k+hnnGuz2p1klviYCWGJMZfyAB+V+MTjGGD/cj0SkL5v/sa/Fie1zcv1SLs466x3H0kMllz6gAk0/FMi7eULspwnIp65g45qUAL3Oj
Colin Newell
la source
Si ce n'est pas haché, vous pouvez utiliser: unix.stackexchange.com/questions/236192/…
Benjamin Goodacre

Réponses:

135

Vous avez HashKnownHostsdéfini " yes" dans votre ssh_configfichier, les noms d’hôte ne sont donc pas disponibles en texte brut.

Si vous connaissez le nom d'hôte que vous recherchez à l'avance, vous pouvez le rechercher avec:

    ssh-keygen -H -F hostname

Voici la section pertinente de la ssh-keygen(1)page de manuel:

 -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
la source
3
Le hash des hôtes connus signifie-t-il que ce n'est pas possible? c'est-à-dire que j'ai besoin de connaître le nom de l'hôte pour pouvoir consulter ses informations?
Colin Newell
7
@ColinNewell C'est vrai, vous devez connaître le ou les noms d'hôte. Il s'agit d'une mesure de sécurité pour empêcher un attaquant de collecter les noms d'hôte / adresses IP d'autres boîtes de messagerie que vous fréquentez si votre ordinateur est compromis.
pdo
1
Ne soyez pas effrayé lorsqu'il n'y a pas de sortie du tout, mais essayez plutôt le nom d'hôte qualifié complet que le nom d'hôte.
maths
6
Pas sshd_config, mais ssh_config.
Fish Monitor
9
@pdo - votre commande ne fonctionne pas toujours. Si l'hôte a SSH sur un port autre que 22, le format en known_hostsest différent. Ensuite, vous devez utiliser la commande suivante: ssh-keygen -H -F [host.example.com]:2222
Martin Vegter
17

Pour les futurs chercheurs, cet article (non-disclaimer: je ne suis pas affilié) contient un script Perl relativement simple permettant de brouiller la force des adresses IP et des noms d'hôtes known_hosts.

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

Il permet de partir d'une adresse IP particulière. Il pourrait également être facilement modifié pour utiliser un dictionnaire.

En outre, en juin 2014, le projet John the Ripper a ajouté la prise en charge de la fissuration de unknown_hosts , qui peut tirer parti de plusieurs cœurs de processeur, processeurs graphiques, gestion de dictionnaire, etc.

Vous pouvez également utiliser cet extrait de code pour générer un dictionnaire de toutes les adresses IP RFC1918 à utiliser comme dictionnaire:

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
la source
1
Il existe également une implémentation en python avec des fonctionnalités similaires, disponible à l' adresse suivante
Lars Nordin
Lars Nordin, merci pour le tuyau. J'ai soumis les informations de Remily à l'équipe John the Ripper, qui a ajouté un support à ce sujet dans son livre
Royce Williams le
1
Et voici comment procéder avec hashcat: up1ink.tumblr.com/post/132370869368/…
Royce Williams
4

Est-ce que ça ssh-keygen -l -f ~/.ssh/known_hostsaide? (En utilisant -vvous obtenez aussi de jolies petites cartes au trésor, par exemple

+--[ RSA 2048]----+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+
sr_
la source
2
Pas au sens strict non, tout est toujours en base64. L'explication de pdo selon laquelle il est haché suggère que c'est une solution, donc je suis bloqué à moins de connaître le nom d'hôte.
Colin Newell
Cela m'a aidé. Ce que je voulais spécifiquement était une combinaison. Pour trouver l'empreinte ssh précédemment vérifiée, vous pouvez exécuter:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw
euh, ssh-keygen -l -F <hostname>c'est encore plus simple
isaaclw
2

Il existe une chaîne / ip au début de chaque ligne "known_hosts" (avant la chaîne "ssh-dss" ou "ssh-rsa"):

hostgn6 ssh-dss AAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExIThOj3Yexynu+wSRGjMm4GfF+og2kAljZyUjhBFeM+WYbJzcDSDB [...] ==
yumyumn6.dik6.dir2g.some.net ssh-dss AAAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExITh [...] ==
Ouki
la source
2
... et fait donc awk '{print $1}' known_hostsle tour. Sachez que les serveurs qui écoutent sur des ports non standard se retrouvent sous, par exemple, [some-server]:5555dans known_hosts.
Sr.
3
Malheureusement pas chez moi. Le mien ressemble plus à des données encodées en base64. Les données sont également délimitées par un tuyau dans mon fichier.
Colin Newell
Quel logiciel ssh utilisez-vous alors (nous supposions que vous utilisiez le logiciel openssh presque standard)?
Ouki
J'ai ajouté plus de détails à ma question.
Colin Newell
7
Comme indiqué par @pdo, votre sshd en tant que "HashKnownHosts" est activé, ce qui peut sembler un peu anal, mais la sécurité le préoccupe. Et bien sûr, il n’ya aucun moyen de simplement inverser les hachages et d’obtenir les noms d’hôtes de vos "hôtes connus".
Ouki
2

Utilisez l' -loption pour ssh-keygenrépertorier les empreintes digitales et l' -Foption pour rechercher un nom d'hôte dans votre known_hostsfichier.

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

Vous pouvez utiliser ssh-keyscanpour comparer l’empreinte de votre known_hostsserveur à celle du serveur.

$ 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.
la source