Вот как решить вашу тайну. Цель состоит в том, чтобы научить пользователей «ловить рыбу» с помощью стандартных утилит Ubuntu, чтобы углубиться в детали любого процесса в их системе.
Шаг № 1 (в основном для любопытства): определите, какая программа выдаёт вам эту ошибку:
# -- You may need to search under more dirs, YMMV
# List files (incl. binaries) which contain the warning string
$ sudo grep -ral 'malicious client may be eavesdropping' /usr /bin /lib
/usr/lib/openssh/gnome-ssh-askpass
В моем env единственная программа, которая содержит эту строку предупреждения в своем двоичном файле gnome-ssh-askpass
. Я мог бы найти, есть ли ошибка в этой конкретной программе, и даже загрузить ее исходный код apt-get source ssh-askpass-gnome
(обратите внимание, что имя пакета отличается от имени программы) для дальнейшей проверки.
Тем не менее, я подозреваю, что основная причина не является проблемой в gnome-ssh-askpass
. Поскольку gnome-ssh-askpass
он запрашивает вашу фразу-пароль, ее разработчики просто предпочли ошибиться, когда не смогли схватить клавиатуру, принять наихудший сценарий и сделать сообщение сверхпараноидальным. Но обратите внимание, что ввод вашей парольной фразы или пароля в какое-то случайное диалоговое окно веб-сайта случайно не является хорошей идеей, поэтому в этом смысле gnome-ssh-askpass
разработчики сделали правильный вызов.
В последнее время все больше и больше веб-сайтов начали практиковать показ всплывающих окон, исчезать все остальное за пределами всплывающего диалога и агрессивно захватывать фокус. Это может быть основной причиной gnome-ssh-askpass
нехватки клавиатуры. Если ваш браузер открыт на таком сайте, закрытие браузера или переход от агрессивного веб-сайта могут помочь. Если это причина, вас может заинтересовать настройка рабочего стола, не позволяющая отдельным процессам захватить весь (полный рабочий стол) фокус. Например, в KDE этот параметр можно найти в разделе ( Настройки системы -> Режим окна -> Фокус -> Защита от кражи фокуса ). Если вы чувствуете себя действительно параноиком, я бы рекомендовал установить его на High
или Extreme
. Конечно, это также может помешатьgnome-ssh-askpass
сам от захвата клавиатуры, или, точнее, от захвата X
фокуса.
Шаг № 2: Определите подозрительные процессы:
Зная, что в Unix устройства выглядят как файлы uder /dev
, следующий вопрос заключается в том, какое устройство представляет собой «клавиатуру» в иерархии файловой системы. Для этого мы можем использовать lsof
утилиту (список открытых файлов).
# look for processes holding devices open, filter out some common ones:
$ sudo lsof | grep /dev | grep -vE '/(null|urandom|zero)'
Обратите внимание, что большинство процессов, удерживающих устройства открытыми в типичной среде рабочего стола, удерживают /dev/pts/<N>
( псевдотермические ) открытыми. Это «устройства», представляющие интерес.
Немного предыстории того, что здесь происходит:
В типичном графическом рабочем столе Linux процессы не общаются с клавиатурой напрямую. Вместо этого X
программа (Xorg) контролирует все события клавиатуры через устройство /dev/input/event<N>
. X
использует обработчик событий (evdev), который, помимо прочего, обрабатывает события клавиатуры. Вы также можете убедиться в этом, посмотрев X
журнал: /var/log/Xorg.0.log
где keyboard
упоминается.
События клавиатуры передаются из X
обработчика событий в процесс, который имеет фокус указателя мыши в любое время через стандартный ввод процесса, который открыт /dev/pts/<N>
. Строго говоря, процесс на самом деле не «захватывает клавиатуру», клавиатура удерживается X
, процесс имеет (или захватывает) только «фокус» или внимание, X
поэтому он X
может перенаправлять события клавиатуры на него через открытый дескриптор файла stdin на /dev/pts/<N>
,
Шаг № 3: какой процесс фокусируется на Xorg в любое конкретное время?
Как определить, какой процесс находится в центре внимания в конкретный момент времени? Вот вопрос аскубунту, отвечающий на это:
найти приложение под мышкой
Суть ответа заключается в запуске сценария, подобного следующему, в терминале при навигации по мыши:
#!/bin/bash
# Print the process tree of the window currently in focus.
# prereqs:
# sudo apt-get install xdotool psmisc
while true; do
pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")
sleep 2
done
Шаг № 4: углубиться в процесс деятельности
Как только вы определили подозрительный процесс, последний шаг - исследовать этот отдельный процесс. Для этого вы можете обратиться к /proc
файловой системе Linux ( man 5 proc
).
Почти все, что вы можете знать о процессе, доступно в разделе /proc
. Фактически, такие программы, как lsof
(список открытых файлов), отладчики, которые проверяют состояние процесса, и утилиты для вывода списка процессов, такие как ps
или top
, все полагаются на то, /proc
что заполняется ядром, для данных.
Используя его, proc
вы можете найти, где исполняемая программа процесса находится на диске (например, любая программа вне стандартных системных каталогов, особенно если она пытается скрыться под именем «не обращайте внимания на меня» , может быть подозрительно) и с помощью с помощью отладчика или трассировщика системных вызовов вы можете проверить, что именно они делают на уровне системных вызовов (даже если у вас нет их исходного кода).
Шаги № 2 и № 3 должны дать вам все идентификаторы процессов, PID
которые потенциально могут считывать вашу клавиатуру. Для каждого из этих PIDS (давайте обозначим каждый как $pid
) вы можете:
Сопоставьте $ pid с его полной командной строкой:
cat /proc/$pid/cmdline
Сопоставьте $ pid с исполняемым файлом на диске:
ls -l /proc/$pid/exe
Отобразите $ pid в его текущий рабочий каталог:
ls -l /proc/$pid/cwd
Сопоставить $ pid с исходной средой
cat /proc/$pid/environ | tr '\000' '\012'
Отслеживание активности системного вызова $ pid (и его дочерних процессов) в режиме реального времени:
strace -f -p $pid
(Есть еще: см. man 5 proc
)
Если вы видите незнакомый процесс, который реагирует на каждое нажатие клавиши, сохраняя его в файл (через write
) или отправляя его по сети через sendto
, возможно, вы обнаружили перехватчик клавиатуры.
Вы также можете проверить, какие процессы открывают (tcp + udp) конечные точки сети:
# See 'man netstat' for details on all options used below
$ sudo netstat -tunapee
Нижняя линия:
Наиболее вероятной причиной ошибки является не вредоносное ПО, а несколько процессов, пытающихся получить управление с клавиатуры одновременно. Один из двух gnome-ssh-askpass
(тот, который печатает ошибку). Другой может быть открытым браузером на сайте с агрессивным диалоговым окном получения фокуса.
Даже при малой вероятности того, что у вас действительно установлено какое-либо вредоносное ПО, хорошие новости заключаются в том, что, поскольку вы работаете в Linux, все процессы прозрачны для вас, чтобы вы могли их исследовать и проверять. Вредоносному ПО будет очень трудно действительно скрыться от вас или помешать вам легко найти его с помощью описанных выше методов, убить его процессы и удалить все его файлы.