Configuración para proteger gnome-terminal del registro de claves

15

Parece que es fácil registrar pulsaciones de teclas de todos los procesos del mismo usuario. Un keylogger básico es 'xinput'.

xinput test-xi2

El comando genera un registro de todas las pulsaciones de teclas. Desafortunadamente, esto incluye contraseñas en gnome-terminal. Google sugirió que agarrar el teclado puede evitar que otras ventanas capturen las teclas presionadas.

¿Hay alguna manera de evitar el registro XI2 en gnome-terminal? ¿O hay un terminal X que tiene esta característica?

yanychar
fuente
¿Es esta una solución?
Radu Rădeanu

Respuestas:

13

No es posible ya que cualquier pulsación de tecla que se pase al servidor X estará disponible para xinput / cualquier programa arbitrario. (De hecho, es parte del diseño). Los nuevos servidores de visualización como Wayland y Mir están solucionando tales problemas de seguridad en X. La única solución real sería usar Wayland o Mir en lugar de X. Esta publicación de blog detalla este problema.

Ramchandra Apte
fuente
Entonces, ¿la entrada a gksu para contraseña también va a xinput?
yanychar
1
@yanychar, sí, en realidad descubrí este método de registro de claves a través de esta publicación de blog: theinvisiblethings.blogspot.in/2011/04/… (incluso me sorprendió la primera vez que leí la publicación de blog)
Ramchandra Apte
2
X11 en realidad tiene un modo no confiable que puede usar para evitar que los programas accedan a extensiones "malas" - x.org/wiki/Development/Documentation/Security
Michał Zieliński
-1

Realmente no. Incluso si de alguna manera logras agarrar el teclado dentro de X (no sé si esto es posible, lo dudo), una utilidad keylogger que se ejecuta como root siempre tendrá acceso al teclado.

enero
fuente
44
El comando anterior toma el teclado dentro de X sin privilegios de root. Por lo tanto, es trivial instalar un keylogger en un escritorio ubuntu. La pregunta es cómo evitar esto.
yanychar
-3

Como otros dijeron aquí, no es posible proteger solo un programa como gnome-terminal u otro terminal del registro de claves, solo si restringe a los usuarios estándar para ejecutar cualquier registrador de claves o si detiene / pausa cualquier proceso del registrador de claves.

A continuación, le mostraré cómo puede hacer esto en caso de xinputcomando, pero se pueden usar los mismos métodos para cualquier otro registrador de teclas. Si un registrador de teclas usa el xinputcomando, no es necesario aplicar el método sobre él siempre y cuando lo aplique xinput.

1. Restrinja a los usuarios estándar para usar el xinputcomando

Puede restringir a los usuarios estándar para que usen el xinputcomando con el siguiente comando:

sudo chmod go-x /usr/bin/xinput

2. Restrinja a los usuarios estándar para que usen el xinputcomando con test-xi2argumento

Puede restringir el uso de usuarios estándarxinput comandos con test-xi2argumentos escribiendo un contenedor para este comando. Para hacer esto, vaya a la terminal y siga las instrucciones a continuación:

  • Obtenga privilegios de root:

    sudo -i
    
  • Mueva el xinputarchivo en otro directorio que no esté en la RUTA de ningún usuario (por ejemplo/opt ):

    mv /usr/bin/xinput /new/path/to/xinput
    
  • Crea tu envoltura para xinput comando en /usr/bin:

    gedit /usr/bin/xinput
    

    Agregue el siguiente script dentro:

    #!/bin/bash
    if [ "$@" != "${@/test-xi2/}" -a "$(whoami)" != "root" ]; then
        echo "`basename $0` $@: Permission denied"
    else
        /new/path/to/xinput $@
    fi
    

    Guarde el archivo y ciérrelo.

  • Haga que el nuevo contenedor sea ejecutable:

    chmod +x /usr/bin/xinput
    

Si bien el primer método es la seguridad, con el segundo método, el usuario aún puede eludirlo llamando al original xinput directamente si conoce su nueva ubicación.

3. Detener / pausar cualquier xinput proceso

Puede detener o pausar cualquier xinputproceso antes de ingresar una contraseña o cualquier otra cosa que no desee que se registre. Para hacer esto, agregue la siguiente función bash al final de su ~/.bashrcarchivo:

processof () {
    xinput_pids=" $(pidof $1) "
    if [ "$xinput_pids" = "  " ]; then
        echo "Nothing to stop/pause/continue. $1: no such process!"
        return
    fi
    for pid in $xinput_pids; do
        case $2 in
        "stop") 
            kill $pid
            echo "$1: stopped"
            ;;
        "pause")
            kill -stop $pid
            echo "$1: paused"   
            ;;
        "continue")
            kill -cont $pid
            echo "$1: continue"
            ;;
        *)
            echo "$1 is runnig"
            ;;
        esac
    done
}

Ahora, después de volver a abrir su terminal, en cualquier momento que desee, con esta función puede:

  • detener / matar todos los xinputprocesos:

    processof xinput stop
    
  • pausa todos los xinputprocesos:

    processof xinput pause
    
  • reanudar todos los xinputprocesos:

    processof xinput continue
    

De hecho, con esta función puede detener / pausar cualquier proceso que desee antes de hacer algo (como ingresar la contraseña):

processof [process_name] [stop|pause|continue]

Si no sabe cómo detectar cómo detectar un keylogger activo en su sistema, consulte:

Quizás estos métodos no sean las mejores soluciones, pero espero darle una idea de lo que puede hacer ...

Radu Rădeanu
fuente
55
xinput es solo un ejemplo de un keylogger. La pregunta es sobre cómo proteger la entrada de cada posible keylogger.
yanychar
55
Cualquier programa puede conectarse al servidor X a través de sockets y keylog, ni siquiera se requiere que el key logger use un programa externo.
Ramchandra Apte
3
@ RaduRădeanu su solución es ineficaz e inútil. xinputni siquiera es SUID (-rwxr-xr-x 1 root root 48504 15 de agosto de 2012 / usr / bin / xinput)
Ramchandra Apte
1
@ RaduRădeanu Porque no necesita xinput para keylog. (no necesita un comando externo ni el programa malicioso necesita ser SUID) su solución simplemente le permitirá a uno controlar la ejecución de xinput
Ramchandra Apte
3
El ejemplo más básico para demostrar que no es efectivo: copie una versión estándar de (ubuntu) xinput de un dispositivo USB, descárguelo de la web o envíelo por correo electrónico y ejecútelo en su carpeta de inicio. El mismo efecto que usar el / usr / bin / xinput sin restricciones.
allo