Налаштування для захисту gnome-терміналу від реєстрації ключів


15

Схоже, легко реєструвати натискання клавіш у всіх процесах одного і того ж користувача. Основним кейлоггером є "xinput".

xinput test-xi2

Команда генерує журнал усіх натискань клавіш. На жаль, сюди входять паролі в gnome-терміналі. Гуглінг припустив, що захоплення клавіатури може заважати іншим вікнам захоплювати натискання клавіш.

Чи є спосіб запобігти входу XI2 в gnome-термінал? Або є X-термінал, який має цю функцію?


Є чи це рішення?
Radu Rădeanu

Відповіді:


13

Це неможливо, оскільки будь-які натискання клавіш, передані на сервер X, будуть доступні для xinput / будь-якої довільної програми. (Насправді це частина дизайну). Нові сервери дисплеїв, такі як Wayland і Mir, виправляють такі проблеми безпеки в X. Єдиним реальним рішенням було б використовувати Wayland або Mir замість X. У цій публікації в блозі детально описується ця проблема.


Тож введення в gksu для пароля також йде на xinput?
яничар

1
@yanychar yup, насправді я дізнався про цей метод реєстрації ключів через цю публікацію в блозі: theinvisiblethings.blogspot.in/2011/04/… (навіть я здивувався, коли я прочитав повідомлення в блозі)
Ramchandra Apte,

2
X11 насправді має ненадійний режим, який можна використовувати для запобігання доступу програм до "поганих" розширень - x.org/wiki/Development/Documentation/Security
Michał Zieliński

-1

Не зовсім. Навіть якщо вам якось вдасться схопити клавіатуру в межах X (я не знаю, чи це можливо, я сумніваюся в цьому), утиліта keylogger, що працює як root, завжди матиме доступ до клавіатури.


4
Команда вгорі захоплює клавіатуру в межах X без права root. Тому тривіально встановлювати кейлоггер на робочий стіл ubuntu. Питання в тому, як цього уникнути.
яничар

-3

Як говорили інші, тут неможливо захистити лише таку програму, як gnome-термінал чи інший термінал, від реєстрації ключів, лише якщо ви обмежите стандартних користувачів виконувати будь-який реєстратор ключів або якщо ви зупиняєте / призупиняєте будь-який процес реєстрації ключів.

Далі я покажу вам, як ви можете це робити у випадку xinputкомандування, але ті ж методи можна використовувати і для будь-якого іншого реєстратора ключів. Якщо реєстратор ключів використовує xinputкоманду, застосовувати метод до нього не потрібно, доки ви його застосуєте xinput.

1. Обмежте стандартних користувачів використовувати xinputкоманду

Ви можете обмежити стандартних користувачів використовувати xinputкоманду, використовуючи таку команду:

sudo chmod go-x /usr/bin/xinput

2. Обмежте стандартних користувачів використовувати xinputкоманду з test-xi2аргументом

Ви можете обмежити звичайних користувачів використовувати xinputкоманду з test-xi2аргументом , написавши обгортку для цієї команди. Для цього зайдіть в термінал і дотримуйтесь інструкцій, наведених нижче:

  • Отримайте привілеї root:

    sudo -i
    
  • Перемістіть xinputфайл в інший каталог, який не є в PATH будь-якого користувача (наприклад /opt):

    mv /usr/bin/xinput /new/path/to/xinput
    
  • Створіть свою обгортку для xinputкоманд у /usr/bin:

    gedit /usr/bin/xinput
    

    Додайте такий сценарій всередині:

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

    Збережіть файл і закрийте його.

  • Зробіть нову обгортку виконуваною:

    chmod +x /usr/bin/xinput
    

Хоча перший метод - це безпека, використовуючи другий метод, користувач може все-таки обійти його, зателефонувавши оригіналу xinputбезпосередньо, якщо знає його нове місце.

3. Зупиніть / призупиніть будь-який xinputпроцес

Ви можете зупинити або призупинити будь-який xinputпроцес, перш ніж вводити пароль або що-небудь інше, що ви не хочете входити в систему. Для цього додайте наступну функцію bash в кінці ~/.bashrcфайлу:

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
}

Тепер, коли ви знову відкриєте свій термінал, у будь-який час, за допомогою цієї функції ви можете:

  • зупинити / вбити всі xinputпроцеси:

    processof xinput stop
    
  • призупинити всі xinputпроцеси:

    processof xinput pause
    
  • відновити всі xinputпроцеси:

    processof xinput continue
    

Насправді, за допомогою цієї функції ви можете зупинити / призупинити будь-який процес, який хочете раніше, щоб зробити щось (наприклад, введення пароля):

processof [process_name] [stop|pause|continue]

Якщо ви не знаєте, як виявити активний кейлоггер у вашій системі, див.

Ці методи, можливо, не найкращі рішення, але я сподіваюся дати вам уявлення про те, що ви можете зробити ...


5
xinput - лише приклад кейлоггера. Питання полягає у захисті введення даних від усіх можливих кейлоггерів.
янчар

5
Будь-яка програма може підключитися до сервера X через сокети та журнал ключів, навіть не потрібно, щоб реєстратор ключів використовував зовнішню програму.
Рамчандра Апте

3
@ RaduRădeanu ваше рішення неефективне і марне. xinputнавіть не SUID (-rwxr-xr-x 1 root root 48504 15 серпня 2012 / usr / bin / xinput)
Ramchandra Apte

1
@ RaduRădeanu Тому що вам не потрібен xinput для керування ключами. (йому не потрібна зовнішня команда, а також не потрібна шкідлива програма SUID), ваше рішення просто дозволить контролювати виконання xinput
Ramchandra Apte,

3
Найбільш основний приклад, щоб довести його неефективність: Скопіюйте фондову версію (ubuntu) xinput з USB-палки, скачайте її з Інтернету або надішліть електронною поштою для себе та запустіть у домашній папці. Той самий ефект, що і використання необмеженого / usr / bin / xinput.
Алло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.