Les r-commands décident de la confiance à partir de l'IP source du client (résolue contre .rhosts/hosts.equiv), donc un attaquant qui fait en sorte que ses paquets semblent provenir d'un hôte de confiance satisfait la vérification sans posséder cet hôte. La complication est que rsh/rlogin sont TCP et interactifs, donc l'attaquant a normalement besoin des réponses du serveur. Deux voies résolvent cela : une position on-path (voir les réponses directement), ou le spoofing aveugle, prédire les numéros de séquence initiaux TCP du serveur pour achever le handshake et injecter la commande sans voir les réponses, l'attaque classique que la confiance basée sur l'adresse invite.
# on-path: spoof the trusted source and relay/observe responses, then:
rsh -l root <target> 'echo "+ +" >> /root/.rhosts' # as the trusted host, open a backdoor
# blind spoofing (historic): predict the target's TCP ISN to forge a full connection
# from the trusted host's address and inject a command (e.g. writing .rhosts),
# converting a one-shot spoof into durable passwordless access
Notes d'exploitation#
- L'objectif n'est généralement pas une session en direct (difficile en aveugle) mais l'injection d'une seule commande qui établit une confiance durable, classiquement
echo "+ +" >> ~/.rhostspour l'utilisateur cible, après quoi l'attaquant se connecte normalement. - Le spoofing on-path est simple là où vous pouvez voir le trafic de l'hôte de confiance ; le spoofing aveugle dépend de numéros de séquence TCP prévisibles, que les piles modernes randomisent, donc il est surtout viable contre les vieux systèmes (exactement là où vivent les r-commands).
- C'est l'attaque que la confiance basée sur l'adresse rend fondamentalement possible ; elle ne nécessite aucun identifiant ni accès en écriture, seulement la capacité de forger une source de confiance et de faire exécuter une commande.
- Combinez avec la connaissance des hôtes de confiance (depuis un hosts.equiv ou
.rhostslisible) pour choisir une adresse de confiance usurpable.