Ось як розгадати свою таємницю. Мета полягає в тому, щоб навчити користувачів "ловити рибу", використовуючи стандартні утиліти 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
В моєму середовищі єдиною програмою, яка містить цей попереджувальний рядок у своїй бінарній формі, є 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 у будь-який конкретний час?
Як визначити, який процес зосереджений у будь-який конкретний час? Ось питання на askubuntu, що відповідає на це:
дізнайтеся додаток під мишкою
Підсумок відповіді полягає у запуску такого сценарію, як наступний, у терміналі під час навігації мишею:
#!/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
які потенційно можуть читати вашу клавіатуру. Для кожного з цих ПІДС (давайте позначимо кожного з них $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, всі процеси прозорі для вас, щоб досліджувати та перевіряти. Зловмисне програмне забезпечення було б дуже важко по-справжньому сховатися від вас або не дати вам легко знайти його, використовуючи вищезазначені методи, знищити його процеси та видалити всі його файли.