Вразливі базові образи
Ваші залежності перевіряються. Операційна система нижче не робить.
Що таке Вразливі базові образи?
Залежності програми переглядаються після кожної зміни. Рівень операційної системи під ними часто цього не робить. Плаваючий тег, як-от node:18, означає, що шар під вашим кодом змінюється щоразу, коли реєстр подає щось нове, і з часом виявляються недоліки, тому чисте зображення під час доставки зараз може бути критичним. Ви відскануєте застарілий образ служби, знайдете CVE-2023-4863 у libwebp і перетворите його на віддалене виконання коду. Потім ви прикріпите базу до точного дайджесту, перебудуєте та повторно відскануєте. Закріплення має ціну: воно потребує навмисної перебудови каденції.
Що ви дізнаєтесь у Вразливі базові образи
- Визнайте, що плаваючий базовий тег дозволяє змінювати рівень операційної системи під вашим кодом, не вирішуючи, що це потрібно
- Проскануйте розгорнутий образ на відомі вразливості та перетворіть CVE-2023-4863 у libwebp на робоче віддалене виконання коду
- Поясніть, чому недолік рівня ОС не з’являється у файлі залежностей і виправляється зміною базового образу, а не помилкою пакета
- Прикріпіть базове зображення до точного дайджесту, щоб кожна збірка отримувала однакові байти, а базова зміна стала комітом, який можна переглядати
- Перебудуйте та повторіть сканування, щоб довести, що шпилька спрацювала, і сплануйте каденцію навмисного відновлення, якої вимагає закріплене базове зображення
Вразливі базові образи — Кроки навчання
-
Образ планувальника в реєстрі
Bob має доступ на читання до контейнерного реєстру Bremhollow через витік robot-токена. Він дивиться не на код — а на те, наскільки свіжі образи, адже сервіс, який давно не перезбирали, — це сервіс, чий базовий образ тихо застарів. Планувальник обробляє завантажені зображення, тому те, на чому він побудований, дуже його цікавить. Відкрийте його сторінку та подивіться, що каже реєстр.
-
Образ, що перестав оновлюватися
Реєстру не потрібно помилятися, щоб допомогти Bob. Один рядок повідомляє йому, що розгорнутий образ старий і побудований на «плаваючій» базі.
-
Просканувати базу в пошуках шляху проникнення
Bob підтягує образ і запускає над ним сканер вразливостей — той самий інструмент, яким скористався б захисник. Його не цікавить код застосунку. Йому потрібна відома, опублікована вразливість у пакетах операційної системи, які притягнув базовий образ, адже до таких зазвичай є робочі експлойти.
-
Перетворити CVE на шелл
Знахідка сканера не є експлойтом, доки хтось її не запустить. Для CVE-2023-4863 існує публічний proof-of-concept: спеціально сформований WebP-файл, що переповнює libwebp у момент декодування. Планувальник декодує кожне завантажене зображення, тому Bob монтує PoC-файл у одноразовий запуск вразливого образу й декодує його — доводячи, що знахідка є робочим шляхом віддаленого виконання коду, ще до того, як торкнутися продакшну.
-
Де живе вразливість
Один момент на механізм, перш ніж почнеться реагування.
-
Сканер позначає весь флот
Bremhollow додала сканування образів у свій пайплайн, і перше повне сканування того, що вже працює в продакшн, повернуло дещо, що не може чекати.
-
Переконайтеся самі
Перш ніж щось змінювати, Alice запускає те саме сканування на розгорнутому образі. Вона хоче побачити знахідку, зрозуміти, де вона перебуває, і яка насправді ця база.
-
Відкриття Dockerfile
Базовий образ обирається одним рядком у Dockerfile. Усе, що знайшов сканер, приїхало саме на цьому рядку.
-
Знайти «плаваючу» базу
Тут немає жодної одруківки чи хиби формату. Проблема — в одному рядку, який каже менше, ніж мав би.
-
Закріпити базу за digest
Тег — це мітка, яку хтось може перемістити; digest — це відбиток вмісту образу, і він ніколи не може вказувати на щось інше. Alice закріплює базу на точному, актуальному, «худому» node:18 за його digest, тож відтепер кожна збірка підтягує ті самі перевірені байти, а переміщення цього закріплення стає свідомою, підконтрольною зміною.
Охоплення стандартів безпеки
CWE
- CWE-1104 Use of Unmaintained Third Party Components
- CWE-1395 Dependency on Vulnerable Third-Party Component
MITRE ATT&CK
- T1190 Exploit Public-Facing Application
CIS Controls
- CIS 7 Continuous Vulnerability Management
- CIS 2 Inventory and Control of Software Assets
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- ID.RA Risk Assessment
- ID.AM Asset Management