Випустили дослідники з команди Google Project Zero нещодавно через допис у блозі новий метод використання вразливостей (CVE-2020-29661) у реалізації обробника ioctl TIOCSPGRP Підсистема ядра Linux tty, а також детальні механізми захисту, які можуть заблокувати ці вразливості.
У пості згадується, що проблема викликана помилкою в налаштуваннях блокування, що призвело до стану гонки в коді /tty/tty_jobctrl.c, який використовувався для створення умов для доступу до пам'яті після запуску (використання-після-вільне), використовуваного простором користувача за допомогою маніпуляції з ioct- за допомогою виклику TIOCSPGRP.
Крім опублікованої інформації, також була виконана демонстрація функціонального експлойту для підвищення привілеїв в Debian 10 з ядром 4.19.0-13-amd64 і що також не виключає, що це може вплинути на різні дистрибутиви, серед яких, звісно, є ті, що базуються на Debian і походять від нього.
Багато з окремих методів експлуатації та варіантів пом’якшення, які я тут описую, не є новими. Однак я думаю, що варто написати їх разом, щоб показати, як різні пом’якшення взаємодіють із досить звичайним експлойтом, який не підтримується.
Фрагменти коду в цій публікації в блозі, які мають відношення до експлойту, взяті з попередньої версії 4.19.160, оскільки на ній базується цільове ядро Debian; деякі інші фрагменти коду з основної лінії Linux.
Водночас у опублікованій статті, акцент робиться не стільки на техніці створення функціонального експлойту, скільки на тому, які інструменти існують в ядрі щоб захистити себе проти таких уразливостей.
Висновок невтішний, оскільки зазначається, що такі методи, як сегментація пам’яті в купі та контроль доступу до пам’яті після її звільнення, на практиці не застосовуються, оскільки вони призводять до погіршення продуктивності та захисту на основі CFI (Control Flow Integrity), який блокує експлойти в пізніх стадії нападу, потребує вдосконалення.
Особливим типом термінальних пристроїв є псевдотермінали, які використовуються, наприклад, коли ви відкриваєте термінальну програму в графічному середовищі або підключаєтеся до віддаленої машини через SSH. У той час як інші термінальні пристрої підключені до якогось апаратного забезпечення, обидва кінці псевдотерміналу контролюються простором користувача, а псевдотермінали можуть вільно створюватися простором користувача (без привілеїв).
Щоразу, коли відкривається / dev / ptmx (скорочено від «псевдотермінал мультиплексор»), отриманий дескриптор файлу представляє сторону пристрою (його в документації та джерелах ядра згадується як «головний псевдотермінал») пристрою. new pseudo -термінал.
Відповідний термінальний пристрій (до якого зазвичай підключається оболонка) автоматично створюється ядром у / dev / pts / .
Розглядаючи те, що може змінити в довгостроковій перспективі, акцент робиться на використанні вдосконалених статичних аналізаторів або використання безпечних для пам’яті мов, таких як діалекти Rust і C з розширеними анотаціями (наприклад, перевірений C), для створення шашок статусу, блокування, об'єкти та покажчики. У методах захисту також згадується включення режиму panic_on_oops, що робить структури ядра доступними лише для читання та обмежує доступ до системних викликів за допомогою таких механізмів, як seccomp.
Помилка, що спричиняє проблему це було виправлено в ядрі Linux 3 грудня минулого року. Проблема проявляється в ядрах до версії 5.9.13, але більшість дистрибутивів усунули проблему в оновленнях пакетів ядра, які були запропоновані минулого року.
Також згадується подібна вразливість (CVE-2020-29660), яка була одночасно виявлена під час реалізації виклику TIOCGSID ioctl, але також була вилучена скрізь.
В кінці кінців Якщо вам цікаво дізнатись більше про це, Ви можете перевірити деталі У наступному посиланні.