Как работает towelroot (futex exploit)

В ядре Linux есть проблема с безопасностью, которая затрагивает большинство устройств Android и в основном позволяет любому пользователю стать root.

Поскольку я являюсь пользователем Linux в течение некоторого времени, мне очень любопытно, как работает этот эксплойт, особенно, как я могу проверить, не уязвимо ли мое ядро ​​на моем компьютере (на заказ) или на любом из моих серверов?, Есть ли какой-либо исходный код (желательно документально) или детали эксплойта, чтобы я мог видеть, как он работает? Я мог найти только общую информацию или двоичные файлы с закрытыми исходными кодами, которые используют ошибку, и дают вам root, если они выполняются любым пользователем, но никакой исходной информации или деталей о том, какая часть ядра имеет недостаток, и как это вообще возможно сделать.

До сих пор я нашел эту интересную статью http://tinyhack.com/2014/07/07/exploiting-the-futex-bug-and-uncovering-towelroot/, которая объясняет, что она использует стек взлома, вызвав некоторые syscalls, чтобы получить что-то в стеке futex_queue. Хотя я понимаю, как это работает, я не знаю, как изменение чего-либо в этом стеке может фактически повысить привилегии текущего процесса. Интересно то, что этот парень сказал, что с ядром 3.13 что-то изменилось, и теперь для его использования нужна другая техника. Означает ли это, что это было , даже не фиксированное и все еще используемое в последнем ядре, которое можно загрузить с kernel.org?

Ответ 1

Как сказал SilverlightFox, часть безопасности stackexchange (http://security.stackexchange.com/), вероятно, была бы лучше для этого, но здесь ничего не происходит.

Из-за этого звука этот хак, по-видимому, является способом поднять терминал/ядро ​​любого пользователя за определенное количество времени, что, к сожалению, плохое. Мое представление о том, как эта проблема будет работать, - это программа, которая перегружает futex_queue, вызывая эти syscalls, а затем временно предоставляет пользователю доступ суперпользователя.

Я посмотрел на ссылку, которую вы предоставили, и обнаружил, что для этого требуется удаленный вход из SSH или аналогичных процедур. В скриншоте консоли он использует строку gcc -o xpl xpl.c -lpthread, которая показывает, что этот эксплоит выполняется в C. И цитата непосредственно из статьи:

Это на самом деле ошибка: есть случай, когда официант все еще связаны в списке официантов, и функция возвращается. Обратите внимание, что стек ядра полностью отделен от стека пользователей. Ты не можешь влияют на стек ядра, просто вызывая собственную функцию в пользовательском пространстве. Вы можете управлять значением стека ядра, выполняя syscall.

На изображении http://www.clevcode.org/cve-2014-3153-exploit/ он показывает результат эксплойта towelroot, проверяя пределы адреса и попадая в для создания оболочки суперпользователя. Кроме того, в статье tinyhack она дает простое восстановление этой базы эксплойтов, поэтому я рекомендую взглянуть на нее и работать с ней.

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

Ура!