Перейти до вмісту

Зменшила експозицію пісочниці systemd на кожному юніті, який встановлює сама платформа, — служба сигналу живучості з 9,6 UNSAFE до 1,5, звернений до інтернету git‑форж із 8,3 EXPOSED до 1,5 — і додала перевірку парсером під час зведення, знайшовши директиву з помилкою, яку мовчки ігнорували у трьох шаблонах юнітів.

кожен юніт у пісочниці — і друкарська помилка, яку ігнорували

Ситуація. Тринадцять файлів модулів встановлювалися цим репозиторієм і виконувалися на робочому хості з тими правами, які наглядач дає усталено, а це майже всі. Оцінка захищеності поставила службі перемикача мертвої руки 9,6 і назвала її небезпечною; git‑форджа, обернена до інтернету, дістала 8,3 і була визнана відкритою. Обидва числа були точними, і жодне нічого не спонукало, бо оцінка без прив’язаного порога — це число, яке люди привчаються пропускати.

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

Дія. Обмеження прав потрапили до кожного шаблону модуля — стеля привілеїв, закріплена на власній стелі модуля, фільтр системних викликів, обмежені родини адрес і пам’ять, що є записуваною або виконуваною, але ніколи водночас. Виміряні результати: перемикач мертвої руки пішов з 9,6 на 1,5, форджа з 8,3 на 1,5, а обидва модулі резервного копіювання з 9,6 на 2,3 і 2,5. Їх написання виявило дещо краще за оцінки. Одну директиву було написано з помилкою у трьох шаблонах модулів відтоді, як ті ролі існували, — правдоподібне на вигляд ім’я, якого не існує, на що наглядач відповідає записом у журнал про те, що не розпізнає ключ, і все одно запускає модуль. Пошук директиви доводить, що її було записано; лише парсер доводить, що вона набула чинності. Тож роль верифікації тепер проганяє кожен модуль через власний перевіряч наглядача під час зведення й включається кожною роллю, що встановлює модуль. Те, чого це досі не бачить, викладено прямо в тих самих документах: кожна директива, здатна зламати ці модулі, ламає їх під час виконання, а не під час розбору, і оцінка не може сказати, чи доходить скрипт досі до свого останнього рядка.

Результат. Кожен модуль працює з тими правами, які йому потрібні, і без тих, які не потрібні, числа виміряно, а не заявлено, і клас дефектів, у якому одруківка стає мовчки відсутнім засобом контролю, тепер валить прогін. Межі вимірювання записано поруч із ним, і саме ця частина стримує наступного читача від надмірної довіри до зеленої смуги.

Одна частина довшого переліку — і він увесь на цьому сайті.

Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.

Переглянути весь перелік