Так мы ничего подозрительного не делаем, совершенно стандартный паттерн — выделить кусок разделяемой памяти под растровую картинку и отдать его X-серверу.
Вот я тоже не понял.
Если X'ы «завернуть» AppArmor'ом или SELinux'ом, то злоумышленник сможет только уронить X'ы или не только?
Писать им почти никуда не надо, запускать особо тоже ничего не надо, можно ограничить по полной программе.
Т.е. после получения контроля над процессом X-сервера не будет возможности что-то сломать кроме самих X'ов, т.е. просто грохнуть сессию пользователя.
Ну, если теоретизировать, то можно посылать всякие мерзкие комбинации кнопок в окна и сниффить ввод (правда, отсылать не особо получится, но по характеру взлома — вполне можно через userspace). В принципе, для десктопа этого достаточно, чтобы сказать «ой, плохо-плохо».
Ну AppArmor/SELinux, я так понимаю, поднимает свои X'ы, которые общаются с системными. Если получить контроль над завернутыми X'ами, то можно атаковать реальные.
>>Если X'ы «завернуть» AppArmor'ом или SELinux'ом, то злоумышленник сможет только уронить X'ы или не только?
Ну что собственно «заворачивается»? X-сервер. Нет?
Этому «завернутому» X-серверу все запрещено.
Но «на экран» он выводит через «системный» X-сервер.
И может его атаковать. Нет?
Видимо я зря употребил слово «заворачивается», хотя и поставил в кавычках.
Имел в виду что к X-серверу применяется профиль AppArmor («заворачивается» — «ограничивается»).
Т.е. есть один X сервер, который ограничен в своих действиях.
Мне кажется они ошибаются, говоря что она не спасает. От эксплойта самого по себе — наверняка нет, но последствий просто никаких не будет. По крайней мере я не вижу как в рамках этого эксплойта можно было бы обойти защиту.
Один способ:
Слушать пароли самое легкое в данной ситуации. Далее черная магия: найти окно браузера и послать туда ссылку с вашим паролем, может даже незаметно.
Ладно, лажу сказал. Правда возможно такими образом при удаленной атаке на браузер можно убежать из песочницы браузера и получить возможности обычного шела — найти открытый терминал и слать туда команды получая их от процесса браузера.
В 64 битах надо немного извратиться, чтобы забить все адресное пространство. В статье предлагают насоздавать на сервере пиксмапов максимального размера 32K*32K, а поскольку реально в x86-64 используется только 49 адресных бит, таких пиксмапов надо совсем немного — всего несколько десятков тысяч.
Да, круто. С другой стороны везде есть дыры. Не зря же иксы перетаскивают под пользователя, а все уважающие себя серверы работают через chroot окружение от рута)))
хабр такой хабр. в статье об эскалации прав юзера до рута из иксов, человек важно замечает, что не зря иксы перетаскивают под пользователя. и главное скобочек побольше ставьте, здесь это любят.
C помощью данного эксплоита юзер выполняет свой код в контексте процесса иксов. Если иксы работают от рута — будет рут. Поэтому таки да,
не зря иксы перетаскивают под пользователя.
похоже на то. более того, я так понимаю, выполнение процедуры «нагромоздить обычными средствами X-протокола пирамиду из виджетов, а потом отправить команду, которая вызовет рекурсивный обход» в любом случае приведёт к падению иксов, дело лишь в глубине рекурсии
Х-сервер в юзерспейсе вроде как и не работал. Были какие-то патчи, но они толком неюзабельны были. Выносить гуй в юзерспейс, имхо, довольно накладно — там же огромное количество переключений контекста будет. Так что преимуществом довольно сложно это назвать, да.
Исходя из того что перед рекурсивным обходом надо исчерпать память Xserver'a, то атаку достаточно легко заметить по общему торможению системы вызванным массовой отправкой процессов в своп.
Вообще-то исчерпывается не физическая память и своп, а адресное пространство. Но, конечно, подозреваю, что во время атаки Xserver вполне может немного сойти с ума от невозможности выделения памяти, и мы увидим какие-нибудь артефакты.
Адресное пространство должно быть к чему-то физическому привязано. Когда процесс пытается получить какой-то объем виртуальной памяти это приводит к явным операциям со страницами физической памяти. Иначе говоря у ядра требуют память и ее выдают за счет отправки в своп страниц других процессов. Рафаль упоминает 800 метров разделяемой памяти для х86_64, в этом случае дисковая активность будет уже заметной, хотя всегда возможны варианты.
Почему же? Нам же нужно просто резирвировать адресное пространтво, необязательно туда что-то писать. А насколько я знаю, чтобы пометить, что страница зарезервирована, нужно не очень много памяти (сколько-то там байт в одной из Page Directories).
пока это возможно только с драйверами, поддерживающими kernel modesetting. но все равно есть некоторые шероховатости. каноникал что-то делает в этом направлении в новой убунте.
Вот именно поэтому я предпочитаю использовать на серверах варианты установки без GUI… Кроме лишней нагрузки дает и такие возможности… К сожалению, мою точку зрения воспринимают не все :(
Эскалация привилегий в десктопном линуксе: Получение рутового доступа из GUI-приложений