Saviez-vous que n’importe quelle application graphique lancée sur votre bureau peut écouter toutes les frappes au clavier alors même qu’elle n’a pas le focus ? C’est un travers du design du serveur X qui est la brique de base pour afficher un bureau depuis 20 ans sous Linux.
J’ai fait un petit keylogger en C++ pour tester à partir de vieux exemples de code trouvés sur le net. Avec quelques ko, vous pouvez écouter quelqu’un taper son mot de passe root quelque soit l’application graphique (popup de Gnome qui assombrit l’écran, Gnome terminal, etc…) et quelque soit l’utilisateur qui ait lancé l’application (sandbox fails).
Mieux, le design du serveur X permet à une application d’envoyer des frappes clavier dans une autre ainsi que de prendre des captures d’écran du bureau entier.
La seule solution à ce problème est d’utiliser Wayland en remplacement de X. Avec Wayland les applications sont cloisonnées et n’ont plus accès directement à tout le bureau ni au clavier. Vous pouvez facilement comparer la différence en utilisant mon programme puisque toutes les distributions modernes fournissent Wayland et X (même Debian 8). Il suffit de choisir l’option sur l’écran de connexion de votre utilisateur dans GDM.
Malheureusement, sous Debian 8, je rencontre encore quelques bugs avec Wayland (reprise d’écran de veille cahotique, le drag & drop entre applications ne fonctionne pas)
Dans l’attente, je vous conseille de lancer vos programmes non-sûr (steam, skype, etc…) dans un autre serveur X (ouvrer une session graphique sous un autre utilisateur). Cela permettra également d’isoler l’accès à vos données personnelles du même coup.
Cool!
Je ne connais pas l’API, mais:
https://framagit.org/tuxicoman/keylogger/blob/bdc9344315d2dd31730a7621547085b914c82136/keylogger.cpp#L237
Tu ne peux pas recevoir les keyevents en tant qu’events, plutôt que de faire du polling?
Je n’ai pas trouvé comment.
Pour info, bien que Wayland cloisonne les applications, le système d’exploitation ne permet pas le même niveau d’isolation. Il suffit donc d’abuser certaines fonctionnalités de l’OS pour passer outre les restrictions du protocole de Wayland.
Ici on peut trouver un proof of concept de keylogger pour Wayland:
https://github.com/MaartenBaert/wayland-keylogger
Accessoirement, pour les applications en lesquelles vous avez une confiance moyenne, vous pouvez aussi utiliser Firejail qui propose différentes isolation (disque, réseau…) et – il me semble – désormais aussi une isolation X.
https://firejail.wordpress.com/
C’est assez léger et ça tourne en espace utilisateur.
Je ne connaissais pas, merci @sebsauvage ! :)
@Pierre: LD_PRELOAD, c’est très puissant :p
C’est pour cela que le modèle de sécurité basé sur l’utilisateur se tient. Si c’est l’utilisateur qui le lance, il doit avoir confiance dans le logiciel. Wayland va un peu plus loin que X mais ne change pas le paradigme pour autant (les données utilisateurs sont toujours accessibles au logiciel « fouineur », il peut lancer LD_PRELOAD, etc…)
Si maintenant, on veut un modèle de sandbox pour chaque application, alors on rentre dans un autre paradigme où tu crains à chaque fois que tu donnes l’accès à ton carnet de contact à une application…