Paramètre pour protéger gnome-terminal de l'enregistrement des clés

15

Il semble qu'il soit facile d'enregistrer les frappes de tous les processus d'un même utilisateur. Un enregistreur de frappe de base est «xinput».

xinput test-xi2

La commande génère un journal de toutes les pressions sur les touches. Malheureusement, cela inclut les mots de passe dans gnome-terminal. La recherche sur Google a suggéré que la saisie du clavier peut empêcher d'autres fenêtres de capturer les touches.

Existe-t-il un moyen d'empêcher la journalisation XI2 dans gnome-terminal? Ou existe-t-il un terminal X doté de cette fonctionnalité?

yanychar
la source
Est- ce une solution?
Radu Rădeanu

Réponses:

13

Ce n'est pas possible car les frappes transmises au serveur X seront disponibles pour xinput / tout programme arbitraire. (En fait, cela fait partie de la conception). De nouveaux serveurs d'affichage comme Wayland et Mir corrigent de tels problèmes de sécurité dans X. La seule vraie solution serait d'utiliser Wayland ou Mir au lieu de X. Ce billet de blog détaille ce problème.

Ramchandra Apte
la source
Donc, l'entrée dans gksu pour le mot de passe va également à xinput?
yanychar
1
@yanychar yup, en fait, j'ai découvert cette méthode de journalisation des clés à travers ce blog: theinvisiblethings.blogspot.in/2011/04/… (même moi, j'ai été surpris la première fois que j'ai lu le blog)
Ramchandra Apte le
2
X11 a en fait un mode non fiable que vous pouvez utiliser pour empêcher les programmes d'accéder aux "mauvaises" extensions - x.org/wiki/Development/Documentation/Security
Michał Zieliński
-1

Pas vraiment. Même si vous parvenez d'une manière ou d'une autre à saisir le clavier dans X (je ne sais pas si c'est même possible, j'en doute), un utilitaire de keylogger fonctionnant en tant que root aura toujours accès au clavier.

janvier
la source
4
La commande ci-dessus saisit le clavier dans X sans privilège root. Il est donc trivial d'installer un enregistreur de frappe sur un bureau ubuntu. La question est de savoir comment éviter cela.
yanychar
-3

Comme d'autres l'ont dit ici, il n'est pas possible de protéger uniquement un programme comme gnome-terminal ou un autre terminal contre la journalisation des clés, uniquement si vous limitez les utilisateurs standard à exécuter un enregistreur de frappe ou si vous arrêtez / suspendez tout processus d'enregistreur de frappe.

Ensuite, je vais vous montrer comment vous pouvez faire cela en cas de xinputcommande, mais les mêmes méthodes peuvent être utilisées pour tout autre enregistreur de frappe. Si un enregistreur de frappe utilise une xinputcommande, il n'est pas nécessaire de lui appliquer la méthode tant que vous l'appliquez xinput.

1. Restreindre les utilisateurs standard à utiliser la xinputcommande

Vous pouvez restreindre les utilisateurs standard à utiliser la xinputcommande à l'aide de la commande suivante:

sudo chmod go-x /usr/bin/xinput

2. Limitez les utilisateurs standard à utiliser la xinputcommande avec test-xi2argument

Vous pouvez restreindre les utilisateurs standard à utiliser la xinputcommande avec test-xi2argument en écrivant un wrapper pour cette commande. Pour ce faire, allez dans le terminal et suivez les instructions ci-dessous:

  • Obtenez les privilèges root:

    sudo -i
    
  • Déplacez le xinputfichier dans un autre répertoire qui n'est dans le CHEMIN d'aucun utilisateur (par exemple /opt):

    mv /usr/bin/xinput /new/path/to/xinput
    
  • Créez votre wrapper pour la xinputcommande dans /usr/bin:

    gedit /usr/bin/xinput
    

    Ajoutez le script suivant à l'intérieur:

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

    Enregistrez le fichier et fermez-le.

  • Rendez le nouveau wrapper exécutable:

    chmod +x /usr/bin/xinput
    

Alors que la première méthode est la sécurité, en utilisant la deuxième méthode, l'utilisateur peut toujours la contourner en appelant xinputdirectement l'original s'il connaît son nouvel emplacement.

3. Arrêter / suspendre tout xinputprocessus

Vous pouvez arrêter ou suspendre tout xinputprocessus avant d'entrer un mot de passe ou toute autre chose que vous ne souhaitez pas enregistrer. Pour ce faire, ajoutez la fonction bash suivante à la fin de votre ~/.bashrcfichier:

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
}

Maintenant, après avoir rouvert votre terminal, à tout moment, en utilisant cette fonction, vous pouvez:

  • arrêter / tuer tous les xinputprocessus:

    processof xinput stop
    
  • suspendre tous les xinputprocessus:

    processof xinput pause
    
  • reprendre tous les xinputprocessus:

    processof xinput continue
    

En fait, avec cette fonction, vous pouvez arrêter / suspendre tout processus que vous souhaitez avant de faire quelque chose (comme entrer le mot de passe):

processof [process_name] [stop|pause|continue]

Si vous ne savez pas comment détecter comment détecter un enregistreur de frappe actif sur votre système, voir:

Ces méthodes ne sont peut-être pas les meilleures solutions, mais j'espère vous donner une idée de ce que vous pouvez faire ...

Radu Rădeanu
la source
5
xinput n'est qu'un exemple d'enregistreur de frappe. La question est de protéger les entrées de tous les enregistreurs de frappe possibles.
yanychar
5
N'importe quel programme peut se connecter au serveur X via des sockets et un keylog, il n'est même pas nécessaire que le keylogger utilise un programme externe.
Ramchandra Apte
3
@ RaduRădeanu votre solution est inefficace et inutile. xinputn'est même pas SUID (-rwxr-xr-x 1 root root 48504 15 août 2012 / usr / bin / xinput)
Ramchandra Apte
1
@ RaduRădeanu Parce que vous n'avez pas besoin de xinput pour keylog. (il n'a pas besoin d'une commande externe ni le programme malveillant doit être SUID) votre solution permettra simplement de contrôler l'exécution de xinput
Ramchandra Apte
3
L'exemple le plus simple pour le prouver inefficace: copiez une version stock de (ubuntu) xinput à partir d'une clé USB, téléchargez-la depuis le Web ou envoyez-la par e-mail et exécutez-la dans votre dossier personnel. Même effet que l'utilisation de / usr / bin / xinput sans restriction.
allo