Кіз Кук представив нові виправлення для поліпшення захисту стека ядра Linux

Linux

Кіс Кук, колишній головний адміністратор сайту kernel.org і керівник команди безпеки Ubuntu, яка зараз працює в Google для захисту Android та ChromeOS, випустив набір виправлень, які рандомізують зміщення стека ядра при обробці системних дзвінків. Патчі покращують безпеку ядра, змінюючи розташування стека, лабо це робить атаки стека набагато складнішими та менш успішними

Оригінальна ідея виправлення належить проекту PaX RANDKSTACK. У 2019 році Олена Решетова, інженер Intel, спробувала створити реалізацію цієї ідеї, придатну для включення в основний склад ядра Linux.

Згодом ініціативу взяв Кіс Кук який представив відповідну реалізацію для основної версії ядра і виправлення якої заплановано для версії 5.13 Linux.

Режим буде вимкнено за замовчуванням, і для його ввімкнення пропонується параметр командного рядка ядра "Randomize_kstack_offset = увімкнути / вимкнути»І налаштування CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, Крім того, накладні витрати на включення режиму оцінюються приблизно в 1% втрати продуктивності.

Суть запропонованого захисту полягає у виборі випадкового зміщення стека для кожного системного виклику, що ускладнює визначення розташування стека в пам'яті, навіть якщо отримана інформація про адресу, оскільки базова адреса стека зміниться під час наступного дзвінка.

На відміну від реалізації PaX РЕКЛАМА, у заплатках, запропонованих для включення в ядро, рандомізація не проводиться на початковому етапі, але після встановлення структури pt_regs, що унеможливлює використання методів ptrace для визначення випадкового зсуву під час тривалого системного дзвінка.

Оскільки захист стека ядра Linux постійно вдосконалювався (відображення стеку на основі vmap зі сторінками захисту, видалення thread_info, STACKLEAK), зловмисникам довелося знаходити нові способи роботи своїх експлойтів.

Вони мають і продовжують покладатися на детермінованість стека ядра у ситуаціях, коли VMAP_STACK і THREAD_INFO_IN_TASK_STRUCT вони не були актуальними. Наприклад, наступні недавні атаки перешкоджали б, якби зміщення стека не було детермінованим між системними викликами

Призначення функції randomize_kstack_offset - додати випадкове зміщення після натискання pt_regs на стек і до того, як решта стеку потоків буде використана під час обробки системних викликів, і змінюйте його кожного разу, коли процес видає системний виклик. Наразі джерело випадковості визначається архітектурою (але x86 використовує малий байт rdtsc ()).

Подальші вдосконалення можливі для різних джерел ентропії, але поза рамками цього патча. Крім того, щоб додати більше непередбачуваності, нові зміщення вибираються в кінці системних викликів (час яких має бути менш простим для вимірювання з простору користувача, ніж під час введення системного виклику) і зберігаються в одній змінній на кожен процесор, так що час життя значення не залишається явно прив'язаним до одного завдання.

На x86 для цього немає видимих ​​змін, оскільки заставка стека вже безумовно вимкнена для блоку компіляції, але зміна потрібна в arm64. На жаль, немає жодного атрибута, який можна було б використати для вимкнення заставки стека для певних функцій. Порівняння з функцією PaX RANDKSTACK: Функція RANDKSTACK рандомізує розташування початку стека (cpu_current_top_of_stack), тобто включає розташування структури pt_regs на стеку.

Спочатку, цей патч дотримувався того самого підходу, але під час останніх обговорень було визначено, що вони не мають великої цінності, оскільки функція ptrace доступна зловмиснику, ви можете використовувати PTRACE_PEEKUSR для читання / запису різних зсувів у структуру pt_regs, спостерігати за поведінкою кешу доступу до pt_regs і з'ясувати випадкове зміщення стека.

Нарешті згадується, що початкова реалізація підтримує процесори ARM64 та x86 / x86_64.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.