web-dev-qa-db-fra.com

Pourquoi le système d'exploitation ne rend-il pas les frappes disponibles uniquement pour l'application actuelle?

Il semble qu'un moyen relativement évident d'empêcher le keylogging (logiciel) serait de forcer uniquement l'application actuelle (au point) à pouvoir recevoir les frappes.

Il pourrait y avoir un moyen de faire des exceptions explicites pour les applications de macro, etc. L'interrogation de la liste des exceptions rendrait la recherche d'un enregistreur de frappe triviale.

Y a-t-il une raison pour laquelle les systèmes d'exploitation n'appliquent pas cette stratégie par défaut?

59
user66309

Parce que ça n'aiderait pas.

La plupart des enregistreurs de frappe sont installés au niveau du système d'exploitation, et le système d'exploitation doit avoir accès aux frappes. La commutation de programme Alt-Tab, en utilisant Ctrl-Alt-Del pour mettre fin aux programmes défectueux et en détectant l'activité du clavier pour empêcher votre économiseur d'écran de s'activer, nécessite que le système d'exploitation affiche les frappes.

Il y a aussi le problème mineur que si vous supprimiez l'accès du système d'exploitation au clavier, chaque application devrait avoir un ensemble complet de pilotes de clavier intégrés.

82
Mark

L'interface clavier-application passe par plusieurs phases, certaines desquelles le système d'exploitation a peu de contrôle et d'autres qui fournissent des connexions explicites pour des fonctionnalités supplémentaires. La conception de base se présente comme suit: les événements matériels sont reçus par des chaînes de pilotes, qui transmettent ensuite des messages au noyau, qui les envoie ensuite à une chaîne de raccourcis clavier globale, et enfin à l'application prévue (si elle n'est annulée par aucune étape préalable de la chaîne). ).

La chaîne de pilotes permet au noyau de ne pas se soucier de "comment" les frappes sont générées, seulement qu'elles le sont. Ils peuvent provenir d'un clavier, d'un périphérique infrarouge ou de toute autre source pouvant envoyer un signal conçu pour être interprété comme un clavier. Un enregistreur de clavier matériel, par exemple, est un dongle qui a une entrée USB ou PS/2 à une extrémité, et un port USB ou PS/2 à l'autre, de sorte que le clavier passe des données à travers cet appareil et est intercepté. Le système d'exploitation ne peut littéralement pas détecter qu'une telle journalisation est en cours.

L'autre type courant de journalisation se produit dans le logiciel, ce qui peut se produire soit avant que le système d'exploitation ait la possibilité de voir les messages du clavier, soit après. Les pilotes peuvent faire à peu près tout ce qu'ils veulent, et le système d'exploitation ne peut pas détecter strictement qu'un pilote détourne des messages à des fins néfastes, car ils peuvent inspecter les messages avant le système d'exploitation. C'est la nature de la couche d'abstraction matérielle (HAL) dont les pilotes font partie. Heureusement, étant donné qu'ils sont en mémoire, un logiciel anti-malware peut détecter et désactiver un tel comportement.

Enfin, vous avez un "trou" intentionnel dans le système d'exploitation, généralement appelé "touches de raccourci globales", qui permet à toute application de demander que les messages du clavier leur soient transmis avant l'application mise au point. Cela permet non seulement à Alt-Tab de fonctionner (le gestionnaire de fenêtres intercepte ces messages pour changer d'application), mais aussi la plupart des programmes multimédias demandent aux gestionnaires de prendre en charge les touches multimédias comme la lecture, le rembobinage et l'avance rapide, et d'autres applications utilisateur pour contrôle du volume, etc. Sans toutes ces touches de raccourci globales, le système d'exploitation serait très ennuyeux à utiliser, et les applications seraient par conséquent beaucoup plus complexes. Cependant, tout comme il s'agit d'une excellente fonctionnalité, elle peut également être utilisée abusivement par un programme.

Cependant, vous devez noter que "tous" les programmes n'obtiennent pas une copie d'un message de clavier, uniquement les pilotes, les gestionnaires de raccourcis clavier globaux et l'application en bref. Le problème n'a rien à voir avec le fait que chaque programme obtient une copie d'un événement clavier, mais le fait que la couche HAL doit être en mesure de transformer les messages du matériel en messages du noyau, et des touches de raccourci globales sont nécessaires pour fournir des fonctionnalités à la utilisateur sans que chaque programme doive être construit pour fournir les mêmes fonctionnalités.

Il y a progrès pour verrouiller le processus, comme exiger des "pilotes signés", ce qui réduit la probabilité que des pilotes malveillants pénètrent dans la chaîne des pilotes, et les antivirus qui peuvent détecter les mauvais comportements des applications. Cependant, jusqu'à ce que de nombreuses vulnérabilités de sécurité soient corrigées, telles que la journalisation du clavier au niveau du matériel et l'enregistrement non sécurisé des touches de raccourci, les enregistreurs auront toujours la possibilité d'enregistrer les frappes. Même si les frappes normales semblent aller simplement du matériel à une application, il y a en fait plusieurs étapes nécessaires, et ces étapes sont nécessaires pour la compatibilité de base (pilotes) et la fonctionnalité (touches de raccourci globales).

31
phyrfox

La raison pour laquelle cela n'est pas fait par défaut est que la conception du système d'exploitation de la génération précédente ne mettait pas énormément l'accent sur le sandboxing et autres, donc pour le moment, il faudrait de grandes modifications architecturales pour que de tels changements fonctionnent. Mark les aborde dans une certaine mesure dans sa réponse, mais cela revient à dire que vous ne pouvez pas autoriser les applications à s'exécuter aveuglément avec les privilèges du système d'exploitation.

Il est cependant beaucoup plus intéressant de noter que les systèmes d'exploitation modernes comme par exemple Android de Google, iOS d'Apple et même ChromeOS de Google (de bureau) limitent tous les frappes aux seules applications actuelles.1. Maintenant, en se concentrant uniquement sur ChromeOS car c'est le seul système d'exploitation de bureau dans la liste, il est également important de noter que les raccourcis mondiaux ne créent aucun problème dans un tel cas. Une application peut "simplement" dire à l'OS qu'elle souhaite se lier à un raccourci spécifique qui peut ensuite être configuré dans l'OS par l'utilisateur. Les spécifications pertinentes peuvent être trouvées ici pour ceux d'entre vous qui sont curieux de savoir à quoi cela ressemble.

De même, en jetant un œil à Android, nous pouvons constater que les logiciels d'accessibilité qui nécessitent un accès global au clavier peuvent toujours être écrits dans de tels environnements modernes en exposant ces informations si et seulement si l'application est explicitement accordée ces autorisations dans le panneau des paramètres d'accessibilité. Cela rend la configuration de ces logiciels un peu pénible, mais cela empêche la distribution des enregistreurs de frappe.

En conclusion, la seule raison pour laquelle cela n'est pas fait est pas parce que cela n'aide pas ou est impossible, mais parce qu'en raison des priorités historiques, cela prend juste un peu plus pour y arriver. Nous y arriverons à temps et en attendant, il peut être judicieux d'utiliser un système d'exploitation verrouillé plus moderne dans des environnements sécurisés.


1 Je sais que Mac OS X a récemment étendu son effort d'applications de sandboxing. Je suppose qu'une application correctement mise en sandbox (une qui ne nécessite pas de privilèges d'administrateur) ne pourra pas non plus agir comme un enregistreur de frappe, mais j'ai passé très peu de temps à lire comment leur sandbox fonctionne vraiment. Si quelqu'un le sait, partagez-le!

24
David Mulder

Sous Windows, il existe très peu de protection entre les applications exécutées en tant que même utilisateur. Si vous essayez de supprimer SetWindowsHookEx, les auteurs de logiciels malveillants passeront à DLL et à un ensemble d'autres techniques. Vous pouvez même simplement dessiner une fenêtre transparente over l'application ciblée qui se concentrerait et recevrait les frappes, puis transmettrait ces frappes en envoyant des messages Windows. Fondamentalement, Windows n'a pas été conçu avec la possibilité d'exécutables malveillants à l'esprit.

Un système conçu pour exécuter des applications non fiables peut les séparer les uns des autres. Mais il est toujours vulnérable aux exploits (beaucoup plus rares) qui sortent du bac à sable dans le noyau.

Il existe également une autre technique qui pourrait être utilisée: l'exécution de code arbitraire dans le navigateur donne à un exploit la possibilité d'enregistrer chaque frappe de touche que le navigateur voit, même s'il ne peut pas échapper à un bac à sable.

5
pjc50

Il existe des raisons très valables pour lesquelles vous souhaitez que les frappes soient visibles pour les applications en dehors du processus de premier plan en cours d'exécution. À moins que chaque programmeur implémente couper/copier/coller par exemple, le système d'exploitation doit surveiller certaines frappes. Disons que vous avez un programme pour prendre des captures d'écran et que vous voulez qu'il soit activé par une certaine frappe, ce programme doit être capable de surveiller l'activité du clavier pour détecter quand ses frappes sont activées. Il serait plus logique de tout exécuter dans un bac à sable et si la surveillance de l'entrée était une exigence pour un programme d'arrière-plan, c'est une autorisation qui doit être autorisée, mais peu importe ce qui est fait, il y a toujours un moyen de le contourner. Si quelqu'un veut savoir ce que vous tapez, il trouvera un moyen. Tout ce que nous pouvons faire, c'est essayer de le rendre plus difficile. L'obfuscation pourrait être une méthode intéressante. Injecter beaucoup de faux messages d'entrée au système d'exploitation que le programme en cours d'exécution génère pour tromper quoi que ce soit en dehors de celui-ci?

2
David-

Plusieurs ont observé que d'autres applications légitimes peuvent avoir besoin de transformer l'entrée de clavier d'origine (qui se présente sous la forme d'un keycap X pressé/relâché) en une sorte de texte. Les gens qui ont perdu l'usage d'une main, par exemple.

Il existe également des outils de cartographie du clavier qui permettent aux utilisateurs de saisir des langues pour lesquelles le système d'exploitation ne fournit pas de carte de clavier pour cette langue (ou l'utilisateur ne souhaite pas utiliser la carte de clavier définie par le système d'exploitation - par exemple, un Dvorak- comme la mise en page pour une autre langue que l'anglais). L'une de ces applications est Keyman (keyman.com).

Et enfin, il y a des gens comme moi (ou peut-être que je suis le seul) qui ont des mappeurs de clavier qui mappent des choses comme -H vers la flèche gauche du curseur, -B vers -, etc. Donc, nous, les paresseux (ou juste moi), n'avons pas à bouger nos mains de la partie alphabétique du clavier pour nous déplacer.

2
Mike Maxwell

L'une des raisons est que pour certains logiciels, être capable de lire les frappes tout en étant actif mais non sélectionné est vital pour le fonctionnement du logiciel.

  • Par exemple, les touches Push-to-talk sur les logiciels VoIP comme Teamspeak ou Ventrilo permettent aux joueurs de discuter au moment où ils veulent discuter afin que vous n'ayez pas de torrent de bruit.
  • Les personnes qui font des enregistrements d'écran pour gagner leur vie (comme les Youtubers/Streamers, les tutoriels informatiques et les réviseurs de logiciels) s'appuient sur des raccourcis de logiciels tels que Fraps, OBS, Xsplit, ... pour s'assurer que leurs enregistrements fonctionnent correctement.
  • Les développeurs de logiciels bénéficient souvent de pouvoir concentrer leur projet tout en parcourant leur code sur leur autre moniteur avec les touches de fonction.
  • Personnellement, j'aime que je puisse concentrer mon World of Warcraft pendant que j'utilise ma molette pour faire défiler Chrome et que je n'ai pas besoin de basculer entre les deux programmes en permanence.
1
Nzall

Il existe en fait certains systèmes d'exploitation qui le permettent, à savoir Mac OS X. Les pressions de touches qui ne sont pas des combinaisons de touches système "réservées" ou des touches "modificatrices" (alt, ctrl, shift, etc.) ne sont envoyées qu'à l'application actuellement active. .

Bien sûr, cela rendrait très ennuyeux certaines applications conçues pour l'accessibilité et les programmes utilisant la VoIP qui ont besoin de touches Push-to-talk. Pour cette raison, il y a une partie des Préférences Système où vous pouvez activer cette fonctionnalité pour des applications spécifiques.

En ce qui concerne Windows, j'imagine que ce n'est pas fait car la méthode actuelle de gestion des touches est assez complexe et est conçue pour fonctionner avec tous les pilotes et programmes actuels.

1
JamEngulfer

Le système X Window le fait déjà dans une certaine mesure. Il permet aux programmes de saisir la souris et le clavier et rien d'autre ne peut intercepter les entrées. Pas même le gestionnaire de fenêtres. C'est plutôt ennuyeux pour les jeux en plein écran car il n'y a aucun moyen de s'éloigner du jeu. Essayez d'ouvrir xterm et maintenez la touche ctrl enfoncée et faites un clic droit (je pense) et sélectionnez saisir le clavier. Maintenant, ce que vous tapez dans xterm ne peut pas être vu par un autre client se connectant au serveur X. Edit: on dirait que X a toujours une fonction XQueryKeymap qui peut contourner cela et être utilisée par un enregistreur de frappe.

Modifier: Windows implémente une telle fonctionnalité en la faisant en sorte que presser ctrl + alt + del fera toujours apparaître un écran de gestion de compte Windows valide, tant que le changement rapide d'utilisateur est désactivé. Les faux écrans de saisie de mot de passe ne sont donc pas possibles.

0
Alex Cannon

Donnons un exemple pratique.

Certaines personnes handicapées trouvent difficile de taper et sont très lentes à taper. Ils utilisent souvent un logiciel " prédiction de mots " qui affiche une liste des mots correspondant à ce qu'ils ont tapé jusqu'à présent, permettant à un mot de la liste d'être sélectionné avec une seule touche.

Les aveugles utilisent un logiciel qui lit le texte affiché à l'écran (lecteurs d'écran). Ce logiciel peut également prononcer chaque lettre lorsqu'elle est enfoncée sur le clavier. Le logiciel dispose de quelques touches de raccourci qui lisent la ligne actuelle, etc.

Au Royaume-Uni, il existe un logiciel qui vous permet de taper une adresse dans une lettre en tapant le code postal, puis en appuyant sur un raccourci clavier pour obtenir le code postal étendu dans presque l'adresse complète. Ce logiciel est souvent utilisé avec une base de données client, etc. qui ne prend pas en charge la saisie d'adresse "rapide".

Les testeurs souhaitent pouvoir enregistrer toutes les frappes et mouvements de souris qu'ils effectuent pendant le test du logiciel, afin qu'ils puissent ensuite les lire pour répéter le test.

Dans tous les cas ci-dessus, le logiciel DÉPEND de pouvoir voir quelles touches sont envoyées à d'autres programmes.


Les smartphones et les tablettes limitent la façon dont les applications peuvent interagir les unes avec les autres, dans la mesure où la plupart des gens se tournent toujours vers un "PC" ou un Mac lorsqu'ils souhaitent effectuer un travail nécessitant l'utilisation de plusieurs applications.

La sécurité et la liberté d'être productif ne vont pas toujours de pair; il y a un compromis à faire. L'iPhone se trouve à une extrémité du spectre et Windows/Max à l'autre extrémité.

0
Ian Ringrose