Китайський технологічний гігант Huawei запропонував новий режим “SandBox Mode” для ядра Linux, щоб підвищити безпеку пам’яті. Кінцева мета режиму SandBox полягає у виконанні власного коду ядра в середовищі, яке дозволяє доступ до пам’яті лише за заздалегідь визначеними адресами. Таким чином, вразливості не можуть бути використані або не матимуть впливу на решту ядра. Ця серія патчів додає до ядра API та архітектурно-незалежну інфраструктуру режиму SandBox. Вона запускає цільову функцію на vmalloc() копії всіх вхідних і вихідних даних. Це лише запобігає деяким доступам за межі дозволеного завдяки захисним сторінкам. API режиму SandBox дозволяє запускати кожен компонент в ізольованому середовищі виконання.
Зокрема, області пам’яті, що використовуються як вхідні та/або вихідні дані, ізольовані від решти ядра та оточені захисними сторінками. Без аркових хуків ця загальна база забезпечує слабку ізоляцію. На архітектурах, які реалізують необхідні аркові хуки, режим SandBox використовує апаратні засоби підкачки та рівні привілеїв процесора, щоб забезпечити використання лише цих попередньо визначених областей пам’яті. Завдяки підтримці арки, SBM також може відновлюватися після порушень захисту. Це означає, що SBM примусово завершує роботу пісочниці та повертає код помилки (наприклад, -EFAULT) тому, хто її викликав, щоб продовжити виконання. Така реалізація забезпечує надійну ізоляцію.
Електронні листи Linux показують, що Петро Тесарик з Huawei Cloud випустив серію патчів з “запитом на коментарі” про новий режим пісочниці. Петро описав режим пісочниці наступним чином:
Кінцевою метою режиму пісочниці є виконання власного коду ядра в середовищі, яке дозволяє доступ до пам’яті лише за заздалегідь визначеними адресами, тому потенційні вразливості не можуть бути використані або не мають впливу на решту ядра.
Ця серія патчів додає до ядра API у режимі пісочниці та архітектурно-незалежну інфраструктуру. Вона запускає цільову функцію на копії vmalloc() усіх вхідних і вихідних даних. Це дозволяє запобігти деяким випадкам несанкціонованого доступу через захищену сторінку.
Пропозиція щодо режиму пісочниці
Петро Тесарик з Huawei розіслав серію патчів “запит на коментарі” щодо нового режиму пісочниці. Документ про режим пісочниці містить додаткові описи, наведені нижче:
Основною метою режиму пісочниці (SBM) є зменшення впливу потенційних помилок безпеки пам’яті у коді ядра шляхом розбиття ядра на частини. API SBM дозволяє запускати кожен компонент в ізольованому середовищі виконання. Зокрема, області пам’яті, що використовуються як входи та/або виходи, ізольовані від решти ядра та оточені захисними сторінками.
На архітектурі, яка реалізує необхідні хуки арки, режим пісочниці використовує апаратні засоби підкачки та рівні привілеїв процесора для примусового використання лише цих попередньо визначених областей пам’яті. Завдяки підтримці Arch, SBM також може відновлюватися після порушень захисту. Це означає, що SBM примусово завершує роботу пісочниці і повертає код помилки (наприклад, “-EFAULT”) користувачеві, щоб виконання могло продовжитися. Така реалізація забезпечує *сильну ізоляцію*.
Пропозиція GMEM
У вівторок інженер Huawei Вейсі Чжу оголосив про початок роботи над GMEM, сподіваючись уникнути дублювання коду. Пропозиція GMEM досить добре підсумовує поточну проблему/виклик. Орієнтований на пропускну здатність прискорювач не буде терпіти виконання важких завдань доступу до пам’яті з хостовим MMU/IOMMU через віддалений доступ. Тому пристрої все одно матимуть власний MMU і обиратимуть простіший формат таблиці сторінок для зниження накладних витрат на трансляцію адрес, що вимагає зовнішніх підсистем MM.
У запропонованому коді GMEM підсистема управління пам’яттю Linux (MM) розширена, щоб ділитися своїм машинно-незалежним кодом, забезпечуючи при цьому лише високу продуктивність. Своєю чергою, GMEM повинен дозволити більше повторного використання драйверами без винайдення колеса. GMEM було протестовано з драйвером нейронного процесора Huawei. Перехід на GMEM дозволив лише драйверу Huawei NPU скоротити 26 тис. рядків коду. Існують й інші переваги, викладені в пропозиції GMEM. Пропозицію GMEM можна знайти в повному обсязі на dri-devel, поки вона чекає на розгляд та відгуки від інших драйверів пристроїв Linux.
Висновок
На завершення, запропонований Huawei SandBox Mode для ядра Linux спрямований на підвищення безпеки пам’яті шляхом виконання власного коду ядра в середовищі, яке дозволяє доступ до пам’яті лише за заздалегідь визначеними адресами. API SandBox Mode дозволяє запускати кожен компонент в ізольованому середовищі виконання. На архітектурах, які реалізують необхідні аркові хуки, SandBox Mode використовує апаратні засоби підкачки. Він також використовує рівні привілеїв процесора, щоб забезпечити використання лише цих попередньо визначених областей пам’яті. Завдяки підтримці арки, SBM також може відновлюватися після порушень захисту. Це означає, що SBM примусово завершує роботу пісочниці. Після цього він повертає код помилки (наприклад, -EFAULT) користувачеві, щоб продовжити виконання. Така реалізація забезпечує надійну ізоляцію.