De la sécurité entre applications

Rom1v a récemment mis le doigt sur un problème actuel de la sécurité sous GNU/Linux : Une application utilisateur peut très facilement enregistrer toutes les frappes clavier de l’utilisateur effectuées dans le serveur graphique X.

Cela prose de graves problèmes de sécurité car une application malveillante peut récupérer de nombreuses informations confidentielles dont :

  • le mot de passe root lorsque sa demande est effectuée lors d’un « su » dans un terminal graphique ou dans un popup.
  • les mots de passe demandées par toutes les applications graphiques (clé GPG, navigateur web…)
  • les données que vous souhaiteriez transmettre de manière confidentielles (n° de carte bancaire dans une page web, rédaction d’un email professionnel, etc…)

Il semblerait même possible defaire des captures d’écran (Ex: Pykeylogger).

Bref, une application ayant accès au serveur graphique peut écouter tout ce que tape l’utilisateur et ce qu’il voit sur son écran, et ce sans nécessiter de droits root.

La plupart d’entre nous sont conscients que les applications lancées par l’utilisateur ont en principe accès à toutes nos données personnelles (/home/user) et un accès réseau complet (d’où les firewalls applicatifs sous Windows pour contrôler un peu mieux cela).

Les gestionnaires de fenêtres des applications nous font croire que les applications sont isolées (plusieurs fenêtres qui ne semblent pas communiquer entre elles, gestion du focus de l’application « active », étant la seule avec laquelle on peut interagir, popup sur écran grisé lors de la demande du password root faisant penser un un mode sécurisé) alors qu’il n’en est rien.

Il semble donc que la sécurité sous linux avec le serveur graphique X suppose que l’utilisateur ne lance pas par lui-même de logiciel malveillant (spyware, malware). Dans le cas contraire, il semble aisé de devenir root et de compromettre l’installation dans les cas où l’utilisateur se sert de son interface graphique pour gérer son ordinateur (gestionnaires d’applications Synaptic et mises à jours par exemple), ce qui est le cas dans la majorité des utilisations GNU/Linux en tant que bureau personnel.

Cela suppose-t-il de n’utiliser que des applications open-sources ? Ce n’est malheureusement pas le cas général et que penser de la vague d’ « applis web » qui a accès à de plus en plus de fonctionnalités sur l’ordinateur de l’utilisateur?

Apple semble prendre le problème de la sécurité entre applications au sérieux et vient d’annoncer que les applications distribuées par le Mac App Store seront « sandboxées » ou isolées de manière assez fortes les unes des autres (accès aux fichiers, réseau ainsi qu’aux autres applications par une API contrôlée). Cela impose néanmoins de fortes contraintes d’usage

Wayland, qui semble être prédestiné à remplacer X, apporte-t-il une réponse à cette problématique ?

J'aime(1)Ferme-la !(0)

10 thoughts on “De la sécurité entre applications

  1. Paradoxe says:

    Mouai, ça fait longtemps que c'est connu. C'est dut au fait que les gestionnaires de fenêtre tournent dans l'espace utilisateur.

    Face à ce genre de prolèmes où le simple système de contrôle de droit Unixien est insuffisant, a été créé des modules de sécurité pour le kernel Linux. Comme par exemple SELinux.

    J'aime(0)Ferme-la !(0)
  2. Comment SELinux ou AppArmor peuvent empêcher une application graphique d'écouter les frappes clavier destinées à une autre application sous X?

    J'aime(0)Ferme-la !(0)
  3. Il existe une API qui fait partie de Xorg (Xace) qui permet de contrôler les droits des applications à ce niveau, ce qu'elles peuvent voir ou pas. Et effectivement, SELinux sait à priori utiliser cette API et donc empêcher l'accès aux frappes clavier ou au contenu de la fenêtre (mais il faut mettre les mains dedans, rien n'est fait par défaut même sous les distribs qui utilisent SELinux comme Fedora).

    Il y a aussi les modes trusted et untrusted de X11, utilisés entre autres par SSH (ssh -X, par défaut, lance les applis distantes en mode untrusted de façon à ce qu'il ne soit pas possible de récupérer des infos de la machine locale sur la machine distante).

    L'idéal serait effectivement de tout sandboxer par défaut à ce niveau, en n'autorisant que les applications ayant besoin de voir les autres fenêtres (utilitaires de capture d'écran) à pouvoir le faire. Et ça semble un prérequis pour du sandboxing à base de powerbox, comme sous Mac. Je me demande d'ailleurs ce qu'ils font à ce niveau ?

    J'aime(0)Ferme-la !(0)
  4. En quoi serait-ce un problème de sécurité ?
    Avec la phrase "Il semblerait même possible defaire des captures d'écran (Ex: Pykeylogger)" je ne vois pas du tout ou tu veux en venir !
    Pykeylogger est un keylogger codé en python, il sait aussi prendre des captures d'écran mais je ne vois pas en quoi c'est grave !!!
    D'autre logiciels savent aussi le faire, scrot etc... et je ne vois pas le rapport avec un problème de sécu.
    De plus si tu regardes le code utilisé pour la partie capture dans pykeylogger (qui est multi plateforme) tu vois que ça utilise gtk sous linux, et imagegrab ou l'api win32 sous Windows.
    Windows serait donc lui aussi touché par un problème de sécu entre les applis car il est possible (comme sous n'importe quel os) de coder un soft de capture d'écran et/ou un keylogger ???

    J'aime(0)Ferme-la !(0)
  5. J'ai oublié le lien vers le code sur de pykeylogger au cas ou http://pykeylogger.git.sourceforge.net/git/gitweb.cgi?p=pykeylogger/pykeylogger;a=blob_plain;f=timedscreenshot.py;hb=HEAD

    J'aime(0)Ferme-la !(0)
  6. amen says:

    Extrait de http://theinvisiblethings.blogspot.com en l'occurrence l'article http://theinvisiblethings.blogspot.com/2011/04/linux-security-circus-on-gui-isolation.html

    « So, let me stress this one more time:

    if you have two GUI applications, e.g. an OpenOffice Word Processor, and a stupid Tetris game, both of which granted access to your screen (your X server), then there is no isolation between those two apps.

    Even if they run as different user accounts!

    Even if they are somehow sandboxed by SELinux or whatever!

    None, zero, null, nil! »

    En effet ça n'est pas nouveau. Mais comme il est difficile de remettre quelque croyance que ce soit dans la communauté…

    J'aime(0)Ferme-la !(0)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>