Настройка для защиты gnome-терминала от регистрации ключей

15

Похоже, легко регистрировать нажатия клавиш всех процессов одного и того же пользователя. Основной кейлоггер - «xinput».

xinput test-xi2

Команда генерирует журнал всех нажатий клавиш. К сожалению, сюда входят пароли в gnome-терминале. Google предположил, что захват клавиатуры может помешать другим окнам захватывать нажатия клавиш.

Есть ли способ предотвратить вход XI2 в gnome-терминал? Или есть X-терминал, который имеет эту функцию?

yanychar
источник
Является ли это решение?
Раду Рэдяну

Ответы:

13

Это невозможно, поскольку любые нажатия клавиш, передаваемые на X-сервер, будут доступны для xinput / любой произвольной программы. (На самом деле это часть дизайна). Новые серверы отображения, такие как Wayland и Mir, исправляют такие проблемы безопасности в X. Единственным реальным решением было бы использование Wayland или Mir вместо X. Этот пост подробно описывает эту проблему.

Рамчандра Апте
источник
Таким образом, ввод в gksu для пароля также идет в xinput?
yanychar
1
@yanychar Да, на самом деле я узнал об этом методе регистрации ключей через этот пост в блоге: theinvisiblethings.blogspot.in/2011/04/… (даже я был удивлен, когда впервые прочитал пост в блоге)
Ramchandra Apte
2
X11 фактически имеет ненадежный режим, который вы можете использовать для предотвращения доступа программ к «плохим» расширениям - x.org/wiki/Development/Documentation/Security
Michał Zieliński
-1

На самом деле, нет. Даже если вам как-то удастся захватить клавиатуру в X (я не знаю, возможно ли это вообще, я сомневаюсь в этом), утилита кейлоггера, работающая от имени пользователя root, всегда будет иметь доступ к клавиатуре.

январь
источник
4
Команда выше захватывает клавиатуру в X без привилегий root. Так что установить кейлоггер на рабочий стол Ubuntu тривиально. Вопрос в том, как этого избежать.
yanychar
-3

Как здесь говорили другие, невозможно защитить только программу наподобие gnome-Terminal или другого терминала от регистрации ключей, только если вы ограничиваете обычных пользователей в выполнении любого средства регистрации ключей или если вы останавливаете / приостанавливаете какой-либо процесс регистрации ключей.

Далее я покажу вам, как вы можете сделать это в случае 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 - это всего лишь пример кейлоггера. Речь идет о защите ввода от всех возможных кейлоггер.
yanychar
5
Любая программа может подключиться к X-серверу через сокеты и журнал ключей, даже не требуется, чтобы регистратор ключей использовал внешнюю программу.
Рамчандра Апте
3
@ RaduRădeanu ваше решение неэффективно и бесполезно. xinputдаже не SUID (-rwxr-xr-x 1 корневой корень 48504 15 августа 2012 г. / usr / bin / xinput)
Рамчандра Апте
1
@ RaduRădeanu Потому что вам не нужен xinput для регистрации ключей. (ему не нужна внешняя команда и вредоносная программа не должна быть SUID), ваше решение просто позволит контролировать выполнение xinput
Ramchandra Apte
3
Самый простой пример, доказывающий его неэффективность: скопируйте стандартную версию (ubuntu) xinput с USB-накопителя, загрузите его из Интернета или отправьте по электронной почте себе и запустите в своей домашней папке. Тот же эффект, что и при использовании неограниченного / usr / bin / xinput.
Алло