Kees Cook представи нови кръпки за подобряване на сигурността на стека на ядрото на Linux

Linux

Кийс Кук, бивш главен системен администратор в kernel.org и лидер на екипа за сигурност на Ubuntu, който сега работи в Google за защита на Android и ChromeOS, пусна набор от кръпки, които рандомизират компенсирането на стека на ядрото при работа със системни обаждания. Пачовете подобряват сигурността на ядрото чрез промяна на местоположението на стека, lили това прави атаките на стека много по-трудни и по-малко успешни

Оригиналната идея за пластира принадлежи на проекта 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 ()).

Възможни са бъдещи подобрения за различни източници на ентропия, но извън обхвата на този пластир. Също така, за да се добави повече непредсказуемост, в края на системните повиквания се избират нови отмествания (времето, което трябва да бъде по-лесно да се измери от потребителското пространство, отколкото в момента на въвеждане на системното повикване) и те се съхраняват в една променлива на CPU, така че животът на стойността да не остава изрично обвързан с една задача.

Няма видими промени за това на 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.