Le danger des r-commandes
Date : 27 Juillet 2005
Ce mois-ci, le CERT-IST a décidé de faire un rappel sur les dangers que peut amener en terme de sécurité l’utilisation des r-commandes (rcp, rsh, rlogin) sur les systèmes Unix.
Les r-commandes, qui sont rsh, rlogin et rcp, permettent de lancer des commandes à distance sur des systèmes Unix. Ce sont les seules à utiliser les mécanismes d'équivalance ".rhosts" et "/etc/equiv" qui permettent d'autoriser l'accès sans authentification depuis un système distant.
Les r-commandes sont fortement déconseillées du fait de l'existence des mécanismes ".rhosts" et "/etc/equiv". En particulier, il est difficile d'empêcher un utilisateur légitime du système de créer un fichier ".rhosts". On peut par contre facilement détecter cet événement si on lance régulièrement une recherche de ces fichiers.
Les dangers principaux sont :
- un utilisateur regarde le contenu des ".rhosts" existants => cela lui donne le nom des machines lui permettant de "rentrer" sur la machine locale (sur un compte ayant plus de pouvoirs que le sien).
- un utilisateur crée un ".rhosts". Cela altére la sécurité de la machine.
- s'il y a des partages NFS, la compromission peut être étendue sur tout le réseau
Même si les précautions élémentaires sont prises (suppression des fichiers hosts.equiv et .rhosts) les r-commandes restent toujours dangereuses et doivent être évitées.
Si seul "rlogin" est utilisé, il faut mieux supprimer ce service et utiliser "telnet" à la place (le service rendu équivalent). Par contre, "rcp" et "rsh" n'ont pas d'équivalent sur un système standard ("ssh" peut être une alternative, mais implique du fait du chiffrement et met en jeu d'autres contraintes), et ne fonctionnent que si des fichiers ".rhosts" ou "/etc/equiv" existent. Si on est obligé d'utiliser "rsh" et "rcp" (applicatifs existants par exemple) Il faut être très prudent :
- permission maximum des fichiers ".rhosts" et "/etc/equiv" = rw-------
- pas de permission "w" pour le groupe ou others sur les répertoires de connexion
- surveillance réguliere (au moins une fois par jour) :
- recherche de tous les fichiers ".rhosts"
- contrôle du contenu des ".rhosts" et de "/etc/equiv"
Cela peut être fait facilement par un script shell (comparaison avec un "résultat" de référence) et/ou éventuellement par Tripwire.
Remarque : "rexec" n'est pas considéré comme une r-commande car elle n'utilise pas le mécanisme des fichiers ".rhosts" et "/etc/equiv". Elle permet de lancer une exécution distante au moyen d'un programme C (client) faisant appel à l'appel système "rexec()" ou, sur certains systèmes, à partie de la ligne de commande. "rexec" ne semble être utilisé par aucun applicatif d'un OS standard. Il se peut que des développement spécifiques (code d'applicatif "maison") utilisent ce mécanisme. Il est en général déconseillé car :
- personne ne l'utilise
- il se peut donc que des bugs existent dans les OS qui autorisent l'exécution sur un compte pour lequel la connexion serait normalement interdite (e.g. compte expiré, compte verrouillé, etc.).
- il n'y a également aucune journalisation des tentatives de connexion faites par cette voie (c'est un moyen discret de faire du brute-force sur les comptes).