je ne comprend pas comment il est possible de devenir root en partant d'un compte utilisateur sans privilèges
C'est bien le problème, ce genre d'action n'est pas censé être possible. Pour que cela le devienne, il faut qu'il y ait une faille à la base A L'INTERIEUR du système. Soit c'est volontaire (backdoor), soit c'est dù à un bug ou une erreur de conception.
La difficulté réside dans le fait que même si tu vérifies et relis ton programme de bout en bout, en contrôlant tous les points que tu estimes sensibles, il n'y a rien qui te dit dès le départ que telle ou telle fonction ne va pas devenir dangereuse, une fois combinée à l'environnement dans lequel elle va s'exécuter. Un exemple (passé à l'époque sur rootshell):
Un logiciel de backup sur bande stockait ses messages dans un log, et offrait à l'utilisateur les possibilités de:
- Choisir le nom et l'emplacement de son log (généralement utile).
- Insérer manuellement une ligne dans le log avec une commande (utile aussi).
Parallèlement,
- le logiciel était SETUIDé pour toujours s'exécuter en tant que root, car il faisait des accès bas-niveau sur certains périphériques, et pour ce faire, avait besoin des privilèges du super-user.
A priori, rien d'inquiétant puisque seul le programme s'exécute en root, en aucun cas l'utilisateur qui a lancé le programme n'acquiert ces privilèges. Après tout, la commande passwd est elle aussi SETUIDée ...
Sauf que: L'utilisateur pernicieux va choisir un nom de log du style « /etc/passwd », et va y ajouter une entrée ressemblant à « toto::0:0:toto:/home:/bin/bash ». Comme le programme est root, il aura le droit de le faire. L'utilisateur n'aura ensuite qu'a se loguer normalement sous l'identité toto, sans mot de passe, pour avoir l'UID 0 et donc être root.
Et voila comment un pirate de base sans aucune connaissance en programmation peut prendre le contrôle d'une machine en 30 secondes si le logiciel en question est y installé.
Pourquoi alors, sur une machine perso à la maison, dire que se connecter toujours (voire uniquement) en root est dangereux ?
Ce qui est dangereux, c'est d'ETREroot, pas de le devenir. Se loguer en root, cela revient à dire au pirate: « Pourquoi tu te fais suer ? C'est ouvert ! ».
Imagine simplement que je t'envoie par mail un script shell qui ne contienne que la ligne « rm -rf / » et que, bêtement, tu cliques dessus. Si tu utilises un compte de test, au pire seul ce compte est effacé, au mieux il ne se passera rien du tout car tu n'auras pas d'accès en écriture à la racine. Si tu fais la même chose sous root, en 3 minutes, tout ton disque dur est vierge.
[^] # Re: Du nouveau sur les serveurs Debian compromises
Posté par Obsidian . En réponse à la dépêche Du nouveau sur les serveurs Debian compromis. Évalué à 10.
C'est bien le problème, ce genre d'action n'est pas censé être possible. Pour que cela le devienne, il faut qu'il y ait une faille à la base A L'INTERIEUR du système. Soit c'est volontaire (backdoor), soit c'est dù à un bug ou une erreur de conception.
La difficulté réside dans le fait que même si tu vérifies et relis ton programme de bout en bout, en contrôlant tous les points que tu estimes sensibles, il n'y a rien qui te dit dès le départ que telle ou telle fonction ne va pas devenir dangereuse, une fois combinée à l'environnement dans lequel elle va s'exécuter. Un exemple (passé à l'époque sur rootshell):
Un logiciel de backup sur bande stockait ses messages dans un log, et offrait à l'utilisateur les possibilités de:
- Choisir le nom et l'emplacement de son log (généralement utile).
- Insérer manuellement une ligne dans le log avec une commande (utile aussi).
Parallèlement,
- le logiciel était SETUIDé pour toujours s'exécuter en tant que root, car il faisait des accès bas-niveau sur certains périphériques, et pour ce faire, avait besoin des privilèges du super-user.
A priori, rien d'inquiétant puisque seul le programme s'exécute en root, en aucun cas l'utilisateur qui a lancé le programme n'acquiert ces privilèges. Après tout, la commande passwd est elle aussi SETUIDée ...
Sauf que: L'utilisateur pernicieux va choisir un nom de log du style « /etc/passwd », et va y ajouter une entrée ressemblant à « toto::0:0:toto:/home:/bin/bash ». Comme le programme est root, il aura le droit de le faire. L'utilisateur n'aura ensuite qu'a se loguer normalement sous l'identité toto, sans mot de passe, pour avoir l'UID 0 et donc être root.
Et voila comment un pirate de base sans aucune connaissance en programmation peut prendre le contrôle d'une machine en 30 secondes si le logiciel en question est y installé.
Pourquoi alors, sur une machine perso à la maison, dire que se connecter toujours (voire uniquement) en root est dangereux ?
Ce qui est dangereux, c'est d'ETRE root, pas de le devenir. Se loguer en root, cela revient à dire au pirate: « Pourquoi tu te fais suer ? C'est ouvert ! ».
Imagine simplement que je t'envoie par mail un script shell qui ne contienne que la ligne « rm -rf / » et que, bêtement, tu cliques dessus. Si tu utilises un compte de test, au pire seul ce compte est effacé, au mieux il ne se passera rien du tout car tu n'auras pas d'accès en écriture à la racine. Si tu fais la même chose sous root, en 3 minutes, tout ton disque dur est vierge.