Vous êtes sur le site public du Cert-IST
Faiblesse dans l'implémentation OpenSSH

Date :22 Juin 2005

Publication: Article

Des problèmes de sécurité ont été mis en avant dans l'implémentation OpenSSH (version 3.6.1 et antérieures) du protocole SSH (Secure Shell : protocole offrant des connexions sécurisées).

Il s'agit de problèmes liés aux vérifications faites par rapport au serveur de noms DNS (absence de double vérification DNS par exemple). Il ne s'agit pas vraiment de problèmes nouveaux, dans la mesure où ces problèmes touchent potentiellement toutes les applications qui font un contrôle de sécurité par rapport au DNS. Comme ce problème est générique, il nous est apparu intéressant le détailler (sur le cas de OpenSSH) dans un article bulletin.

Contexte technique :

En complément des méthodes de connexion par mot de passe ou par clé publique, OpenSSH fournit un mécanisme de contrôle permettant de restreindre l'initialisation des connexions SSH en fonction :

  1. des adresses réseau (IP)
  2. ou noms de machine des utilisateurs.

Par défaut, l'initialisation de la connexion SSH est autorisée pour tout le monde (aucun de ces deux contrôles n'est actif).

Cette restriction peut s'effectuer à deux niveaux :

  • au niveau de l'utilisateur dans le fichier "$HOME/.ssh/authorized_keys" à travers la directive "From=<adresses IP ou noms de machine>" (ex : from="*.cert-ist.com" …)
  • au niveau du fichier de configuration globale d'OpenSSH "sshd_config" à travers la directive "AllowUsers <utilisateurs@adresses IP ou noms de machine>" (ex : AllowUsers *@192.168.0.*). Cette directive permet de lister les utilisateurs et adresses IP autorisés à ouvrir une session SSH. L'utilisation des caractères jokers (? et *) est permise.

Les problèmes de sécurité identifiés :

  1. Lorsqu'un nom de machine est donné dans ces filtres, une résolution de noms (DNS) est effectuée sur l'adresse IP du client (i.e. la machine qui a initié la connexion), afin de retrouver le nom de machine de ce client et de le comparer à celui présent dans le filtre.

Dès lors, si une personne malveillante est capable de contrôler la résolution des noms (échanges DNS), elle peut contourner ce mécanisme de contrôle en fournissant l'adresse IP de sa machine associée au nom autorisé par les filtres.

  1. Un autre cas intéressant se présente lorsque le filtre contient des adresses IP. La résolution est toujours effectuée, mais la personne malveillante, ayant le contrôle des échanges DNS, peut répondre avec un enregistrement DNS contenant une adresse IP usurpée (plutôt qu'un nom de machine) et compatible avec les filtres d'OpenSSH. Le contrôle est alors effectué par rapport à l'adresse IP fournie.

En résumé, cette vulnérabilité permet à une personne malveillante possédant un mot de passe ou une clé publique valide de se connecter sur le système à travers OpenSSH en contournant les mécanismes de contrôle d'adresses/noms. Il est à noter que cette vulnérabilité ne permet en aucun cas de prendre le contrôle de la machine, mais seulement de contourner un mécanisme de contrôle.

Nota :

  • Les versions commerciales de SSH distribuées par "F-Secure" ne semblent pas impactées.
  • Les versions commerciales de SSH distribuées par "SSH Communications Security" ne sont plus vulnérables à partir de la version 3.0 (il faut néanmoins utiliser une syntaxe particulière lors de la description des filtres).

Solution :

Le moyen de se protéger contre ce type d'attaque est :

  • de positionner la directive "VerifyReverseMapping" à "yes" (directive qui remplace la directive "ReverseMappingCheck" – cette dernière peut être néanmoins utilisée) dans le fichier de configuration d'OpenSSH ("sshd_config"). Cette configuration permet de faire un double contrôle sur le nom/adresse IP de la machine qui tente d'établir une connexion SSH.

Nota :

    • Dans la configuration par défaut d'OpenSSH, cette directive est désactivée.
    • Dans la prochaine version d'OpenSSH, cette solution sera intégrée "en dur" dans les configurations par défaut. 

  • de filtrer sur les équipements réseau les connexions vers le port 22 des machines supportant OpenSSH.

  • d'utiliser des outils de contrôle de connexion tels que "TCP Wrapper".

 Pour plus d'information :