¿Por qué los sistemas operativos no hacen que las pulsaciones de teclado estén disponibles solo para la aplicación actual?

59

Parece que una forma relativamente obvia de evitar el registro de teclas (software) sería forzar solo a la aplicación actual (enfocada) para que pueda recibir pulsaciones de teclas.

Podría haber una manera de hacer excepciones explícitas para las aplicaciones de macros, etc. Consultar la lista de excepciones haría que encontrar un keylogger sea trivial.

¿Hay alguna razón por la que los sistemas operativos no apliquen esta política de forma predeterminada?

    
pregunta user66309 11.10.2015 - 21:15
fuente

10 respuestas

83

Porque no ayudaría.

La mayoría de los keyloggers están instalados a nivel del sistema operativo, y el sistema operativo necesita tener acceso a las pulsaciones de teclas. El cambio del programa Alt-Tab, usando Ctrl-Alt-Del para terminar los programas que funcionan mal, y detectar la actividad del teclado para evitar que su protector de pantalla se active, todos requieren que el sistema operativo vea las teclas.

También está la pequeña cuestión de que si eliminaste el acceso del sistema operativo al teclado, cada aplicación debería tener un conjunto completo de controladores de teclado integrados.

    
respondido por el Mark 11.10.2015 - 21:22
fuente
31

La interfaz del teclado a la aplicación atraviesa varias fases, algunas de las cuales el sistema operativo tiene poco control, y otras proporcionan conexiones explícitas para una funcionalidad adicional. El diseño básico es el siguiente: los eventos de hardware son recibidos por las cadenas de controladores, que luego pasan los mensajes al kernel, que luego los envían a una cadena global de teclas de acceso rápido, y finalmente a la aplicación deseada (si no se cancela con ningún paso previo de la cadena). ).

La cadena de controladores permite que el kernel no se preocupe por "cómo" se generan las pulsaciones de teclado, solo lo que son. Pueden ser desde un teclado, desde un dispositivo IR o cualquier otra fuente que pueda enviar una señal diseñada para ser interpretada como un teclado. Un registrador de teclado de hardware, por ejemplo, es un dongle que tiene una entrada USB o PS / 2 en un extremo, y un puerto USB o PS / 2 en el otro, de modo que el teclado pasa los datos a través de este dispositivo y se intercepta. El sistema operativo, literalmente, no puede detectar que tal registro está en marcha.

El otro tipo de registro común ocurre en el software, que puede ocurrir antes de que el sistema operativo tenga la oportunidad de ver los mensajes del teclado o después. Los conductores pueden hacer casi lo que quieran, y el sistema operativo no puede detectar estrictamente que un controlador está desviando mensajes para propósitos infames, porque pueden inspeccionar los mensajes antes de que lo haga el sistema operativo. Esta es la naturaleza de la capa de abstracción de hardware (HAL) de la que forman parte los controladores. Afortunadamente, ya que están en la memoria, el software antimalware puede detectar y deshabilitar dicho comportamiento.

Finalmente, tiene un "agujero" intencional en el sistema operativo, generalmente denominado "teclas de acceso rápido globales", que permite que cualquier aplicación solicite que se les pasen los mensajes del teclado antes de la aplicación enfocada. Esto permite que no solo funcione Alt-Tab (el administrador de ventanas intercepta estos mensajes para cambiar de aplicación), sino que también la mayoría de los programas de medios solicitan a los manejadores que admitan claves multimedia como reproducir, rebobinar y avanzar rápidamente, y otras aplicaciones de tierra de usuario para control de volumen, etc. Sin todas estas teclas rápidas globales, el sistema operativo sería muy molesto de usar, y las aplicaciones serían mucho más complejas como resultado. Sin embargo, al igual que esta es una gran característica, también puede ser abusada por un programa.

Sin embargo, debe tener en cuenta que no todos los programas obtienen una copia del mensaje del teclado, solo los controladores, los manejadores de teclas de acceso rápido globales y la aplicación enfocada. El problema no tiene nada que ver con el hecho de que cada programa obtiene una copia de un evento de teclado, sino el hecho de que la HAL debe poder transformar los mensajes de hardware a los mensajes del kernel, y las teclas de acceso rápido globales son necesarias para proporcionar características a la usuario sin necesidad de crear cada programa para proporcionar las mismas características.

Sin embargo, ha habido avances para bloquear el proceso, como el requerimiento de "controladores firmados", lo que reduce la probabilidad de que conductores maliciosos ingresen a la cadena de controladores y los antivirus que pueden detectar errores. Comportamiento por apps. Sin embargo, hasta que se solucionen muchas de las vulnerabilidades de seguridad, como el registro de teclado a nivel de hardware y el registro inseguro de teclas de acceso rápido a nivel global, los registradores aún tendrán la oportunidad de registrar las pulsaciones de teclas. A pesar de que las pulsaciones normales parecen ir simplemente del hardware a una aplicación, en realidad hay varios pasos intermedios necesarios, y estos pasos son necesarios para la compatibilidad básica (controladores) y la funcionalidad (teclas de acceso rápido globales).

    
respondido por el phyrfox 11.10.2015 - 23:56
fuente
24

La razón por la que esto no se hace de manera predeterminada es porque el diseño del sistema operativo de la generación anterior no tenía un gran enfoque en el uso de espacios aislados, por lo que en este momento se requerirían grandes cambios arquitectónicos para que dichos cambios funcionen. Mark los toca en cierta medida en su respuesta, pero se reduce a que no se puede permitir que las aplicaciones se ejecuten a ciegas con privilegios de sistema operativo.

Sin embargo, es mucho más interesante observar que los sistemas operativos modernos como, por ejemplo, Android de Google, iOS de Apple e incluso ChromeOS (de escritorio) de Google, limitan las pulsaciones de teclas solo a las aplicaciones actuales 1 . Ahora, centrándose solo en ChromeOS, ya que es el único sistema operativo de escritorio en la lista, también es importante tener en cuenta que los accesos directos globales no crean problemas en ese caso. Una aplicación puede "simplemente" decirle al sistema operativo que desea enlazar a un acceso directo específico que el usuario puede configurar en el sistema operativo. La especificación relevante se puede encontrar aquí para aquellos que tengan curiosidad por cómo se ve esto.

De manera similar, al analizar Android, podemos encontrar que el software de accesibilidad que requiere acceso global por teclado aún puede escribirse en entornos tan modernos al exponer dicha información si y solo si la aplicación es explícitamente concedido tales permisos en el panel de configuración de accesibilidad. Esto hace que configurar dicho software sea un poco molesto, pero evita que se distribuyan los keyloggers.

En conclusión, la única razón por la que no se hace es no porque no ayuda o es imposible, pero debido a las prioridades históricas solo está demorando un poco más en llegar. Llegaremos a tiempo y, mientras tanto, puede tener sentido utilizar un sistema operativo más moderno y cerrado en entornos seguros.

1 Sé que Mac OS X ha estado expandiendo recientemente su esfuerzo en el uso de las aplicaciones de sandbox. Supongo que una aplicación de espacio aislado (que no requiere privilegios de administrador) tampoco será capaz de actuar como registrador de teclas, sin embargo, he dedicado muy poco tiempo a leer cómo funciona realmente su espacio aislado. Si alguien sabe a ciencia cierta, ¡comparte!

    
respondido por el David Mulder 11.10.2015 - 23:09
fuente
5

En Windows, hay muy poca protección entre las aplicaciones que se ejecutan como el mismo usuario. Si intentas quitar SetWindowsHookEx , los creadores de malware cambiarán a la inyección de DLL y un conjunto completo de otras técnicas. Incluso podría simplemente dibujar una ventana transparente sobre la aplicación específica que tendría enfoque y recibir pulsaciones de teclas, y luego pasar esas pulsaciones de teclado enviando mensajes de Windows. Fundamentalmente, Windows no fue diseñado teniendo en cuenta la posibilidad de ejecutables maliciosos.

Un sistema diseñado para ejecutar aplicaciones no confiables puede aislarlas entre sí. Pero aún es vulnerable a explotaciones (mucho más raras) que salen de la caja de arena al núcleo.

También hay otra técnica que se podría usar: la ejecución de código arbitrario en el navegador le da a un explotador la capacidad de registrar cada pulsación de tecla que el navegador ve, incluso si no puede escapar de una caja de arena.

    
respondido por el pjc50 12.10.2015 - 17:13
fuente
2

Hay razones muy válidas por las que desea que las pulsaciones de teclas sean visibles para las aplicaciones fuera del proceso en primer plano que se ejecuta actualmente. A menos que todos los programadores implementen cortar / copiar / pegar, por ejemplo, el sistema operativo debe supervisar ciertas pulsaciones de teclas. Digamos que tienes un programa para tomar capturas de pantalla y quieres que se active con una cierta pulsación de tecla, ese programa debe poder monitorear la actividad del teclado para detectar cuándo se activan sus pulsaciones. Tendría más sentido ejecutar todo en una caja de arena y si la entrada de monitoreo fuera un requisito para un programa en segundo plano, es un permiso que debe permitirse, pero no importa lo que se haga, siempre hay una forma de evitarlo. Si alguien quiere saber en qué estás escribiendo, encontrarán la manera de hacerlo. Todo lo que podemos hacer es tratar de hacerlo más difícil. La ofuscación podría ser un método interesante. ¿Inyectar una gran cantidad de mensajes de entrada falsos al sistema operativo que genera el programa en ejecución para engañar algo fuera de él?

    
respondido por el David- 12.10.2015 - 22:29
fuente
2

Varios han observado que otras aplicaciones legítimas pueden necesitar transformar la entrada original del teclado (que se presenta en forma de una tecla que se presionó / soltó X) en algún tipo de texto. Personas que han perdido el uso de una mano, por ejemplo.

También hay herramientas de asignación de teclado que permiten a las personas escribir idiomas para los que el sistema operativo no proporciona un mapa de teclado para ese idioma (o el usuario no quiere usar el mapa de teclado definido por el sistema operativo, por ejemplo, un diseño similar a Dvorak para algún idioma que no sea el inglés). Una de estas aplicaciones es Keyman (keyman.com).

Y finalmente, hay personas como yo (o tal vez yo soy la única) que tienen asignadores de teclado que asignan cosas como -H a la flecha del cursor izquierdo, -B a -, y así sucesivamente. Así que las personas perezosas (o solo yo) no tenemos que mover nuestras manos desde la parte alfabética del teclado para moverse.

    
respondido por el Mike Maxwell 12.10.2015 - 23:33
fuente
1

De hecho, hay algunos sistemas operativos que lo permiten, a saber, Mac OS X. Las pulsaciones de teclas que no son combinaciones de teclas del sistema 'reservadas' o teclas 'modificadoras' (alt, ctrl, shift, etc.) solo se envían a la aplicación actualmente en foco.

Por supuesto, eso lo haría muy molesto para algunas aplicaciones diseñadas para accesibilidad y programas que usan VoIP que necesitan teclas de pulsar para hablar. Debido a esto, hay una parte de las Preferencias del sistema donde puede habilitar esta funcionalidad para aplicaciones específicas.

En cuanto a Windows, me imagino que no se hace porque el método actual de manejo de pulsaciones de teclas es bastante complejo y está diseñado para funcionar con todos los controladores y programas actuales.

    
respondido por el JamEngulfer 13.10.2015 - 16:29
fuente
1

Una de las razones es que para algunos programas, el hecho de poder leer las pulsaciones de tecla mientras está activo pero no está seleccionado actualmente es vital para el funcionamiento del software.

  • Por ejemplo, las teclas push-to-talk en el software VoIP como Teamspeak o Ventrilo permite a los jugadores chatear en el momento en que quieren chatear para que usted No tengo un torrente de ruido.
  • personas que hacen grabaciones de pantalla para una vida (como Youtubers / Streamers, tutorialists de computadoras y revisores de software) confían en accesos directos de software como Fraps, OBS, Xsplit, ... para garantizar que sus grabaciones funcionen correctamente.
  • software Los desarrolladores a menudo se benefician de poder enfocar su proyecto mientras Pasando a través de su código en su otro monitor con la función llaves.
  • Personalmente, me gusta poder tener mi World of Warcraft enfocado mientras uso mi rueda para desplazarme en Chrome y no necesito cambiar entre los dos programas constantemente.
respondido por el Nzall 15.10.2015 - 00:41
fuente
0

Vamos a dar un ejemplo práctico.

Algunas personas discapacitadas encuentran difícil escribir y son muy lentas para escribir. A menudo utilizan el software “ word prediction ” que muestra una lista de las palabras que coinciden con lo que tienen escrito hasta el momento, permitiendo que una palabra de la lista sea seleccionada con una sola pulsación de tecla.

Las personas ciegas usan software que lee el texto que se muestra en la pantalla (lectores de pantalla). Este software también puede decir cada letra al presionarla en el teclado. El software tiene algunas teclas de acceso rápido que leen la línea actual, etc.

En el Reino Unido, hay un software que le permite escribir una dirección en una letra escribiendo el código postal, luego presionando una tecla de acceso rápido para expandir el código postal en casi la dirección completa. Este software a menudo se usa con la base de datos de clientes, etc. que no admiten la entrada de direcciones "rápida".

Los evaluadores desean poder grabar todas las pulsaciones de teclas y movimientos del mouse que realizan al probar el software, para que luego puedan reproducirlos y repetir la prueba.

En todos los casos anteriores, el software DEPENDE de poder ver qué pulsaciones de tecla se están enviando a otros programas.

Los teléfonos inteligentes y las tabletas limitan la forma en que las aplicaciones pueden interactuar entre sí, en la medida en que la mayoría de las personas aún recurren a una "PC" o Mac cuando desean realizar un trabajo que necesita el uso de más de una aplicación.

La seguridad y la libertad de ser productivos no siempre van juntas; hay una compensación que hacer. El iPhone se encuentra en un extremo del espectro y Windows / Max en el otro extremo.

    
respondido por el Ian Ringrose 12.10.2015 - 21:36
fuente
0

El sistema X Window ya lo hace en cierta medida. Permite que los programas tomen el mouse y el teclado y nada más puede interceptar las entradas. Ni siquiera el gestor de ventanas. Es bastante molesto para los juegos de pantalla completa, ya que no hay manera de cambiar el juego. Intente abrir xterm y mantener presionada la tecla ctrl y hacer clic con el botón derecho (creo) y seleccionar agarrar el teclado. Ahora, lo que escribes en xterm no puede ser visto por ningún otro cliente que se conecte al servidor X. Edición: parece que X todavía tiene una función XQueryKeymap que puede omitir esto y ser utilizada por un keylogger.

Editar: Windows implementa una característica de este tipo al hacer que el hecho de presionar ctrl + alt + del siempre muestre una pantalla de administración de cuenta válida de Windows, siempre que el cambio rápido de usuario esté desactivado. Por lo tanto, las pantallas de entrada de contraseña falsas no son posibles.

    
respondido por el Alex Cannon 14.02.2018 - 01:08
fuente

Lea otras preguntas en las etiquetas