Секрети в шарах образів
Видалення секрету в наступній команді RUN не прибирає його.
Що таке Секрети в шарах образів?
Шари образу доступні лише для дозапису. Облікові дані, передані в одну команду RUN, назавжди записуються в її шар, а пізніша RUN, що видаляє файл, лише додає зверху ще один шар. Файлу вже немає, а секрет лишається в історії збірки. Ви завантажите публічний образ, прочитаєте нескорочену команду збірки й скористаєтеся токеном для публікації. Порядок усунення має значення: спершу відкличте токен, випустіть заміну з обмеженою областю дії й лише потім замініть аргумент збірки на монтування секрету BuildKit, щоб у шар, який постачається разом з образом, нічого не записувалося.
Що ви дізнаєтесь у Секрети в шарах образів
- Пояснюйте, чому наступна команда RUN, що видаляє файл з обліковими даними, лишає секрет в історії збірки: шари образу доступні лише для дозапису
- Відновлюйте вшитий токен, виводячи нескорочені команди шарів, бо в перегляді історії стовпець CREATED BY обрізано
- Спершу відкликайте витеклі облікові дані й випускайте заміну з обмеженою областю дії та строком дії, а вже потім змінюйте будь-що в образі
- Застосовуйте монтування секрету BuildKit, щоб токен був доступний під час збірки, але ніколи не записувався в шар, що постачається разом з образом
- Перевіряйте перезібраний образ: читайте його повну історію шарів і переконуйтеся, що облікових даних ніде немає
Секрети в шарах образів — Кроки навчання
-
Оцініть ціль
Сьогодні Боб націлився на компанію Cindralt, що працює з платежами: її сервіс оформлення платежів постачається як контейнерний образ. Починає він із того, що доступне кожному, — з власного реєстру контейнерів компанії. Опублікований образ — зручна мішень. Це той самий артефакт, що працює в продакшні, а завантажити (pull) його нічого не коштує.
-
Образ може завантажити будь-хто
Репозиторій опубліковано з анонімним завантаженням. Для багатьох компаній це свідомий вибір, і сам по собі він не є вразливістю, але означає, що артефакт доступний Бобу на тих самих умовах, що й серверам збірки самої компанії Cindralt.
-
Завантажте образ
Боб завантажує тег, який реєстр позначає як latest. На його комп'ютері опиняється байт у байт те, що Cindralt запускає в продакшні, разом з усіма шарами, які збірка створила по дорозі.
-
Прочитайте історію збірки
У кожному образі збережено команди, якими його зібрали. Бобу не потрібно ні запускати контейнер, ні щось розпаковувати: історія шарів — це метадані, і вони надходять разом із завантаженням. На перший погляд збірка виглядає акуратною: після встановлення залежностей є навіть рядок прибирання.
-
Попросіть повну команду
Типову таблицю зроблено так, щоб вона вміщалася в термінал, а не щоб казати правду. Боб просить показати самі команди збірки, повністю, без обрізання. Команда встановлення записала облікові дані в конфігураційний файл, і вони досі лежать у шарі, який ця команда створила.
-
Чому видалення не допомогло
-
Перевірте, до чого дає доступ токен
Облікові дані варті рівно стільки, до чого вони можуть дістатися. Боб запитує в індексу пакетів компанії Cindralt, кому належить цей токен і що йому дозволено. Відповідь ще гірша: йдеться не про один сервіс. Токен дає право публікувати в кожен пакет, на який спираються збірки компанії Cindralt, а строк його дії ніколи не спливає.
-
Чого вартий цей токен
Бобу більше не потрібно торкатися серверів Cindralt. Маючи право публікації в кожен пакет, на який спираються збірки компанії, наступну версію будь-якої внутрішньої бібліотеки може випустити він, і її завантажить кожна збірка, яка запуститься після цього.
-
Індекс пакетів сигналізує про токен
Індекс пакетів компанії Cindralt записує в журнал кожен автентифікований виклик. Уночі він зафіксував використання токена ci-publisher з адреси, яка не належить нікому з компанії.
-
Підтвердьте це на образі
Аліса сама перевіряє це твердження на опублікованому артефакті, маючи рівно те, що мав би будь-хто ззовні: публічний тег і звичайний клієнт Docker.
Охоплення стандартів безпеки
CWE
- CWE-540 Inclusion of Sensitive Information in Source Code
- CWE-522 Insufficiently Protected Credentials
MITRE ATT&CK
- T1552.001 Unsecured Credentials: Credentials In Files
CIS Controls
- CIS 3 Data Protection
- CIS 16 Application Software Security
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
- PR.DS Data Security
- PR.PS Platform Security