Секрети в шарах образів

Секрети в шарах образів

Видалення секрету в наступній команді RUN не прибирає його.

Що таке Секрети в шарах образів?

Шари образу доступні лише для дозапису. Облікові дані, передані в одну команду RUN, назавжди записуються в її шар, а пізніша RUN, що видаляє файл, лише додає зверху ще один шар. Файлу вже немає, а секрет лишається в історії збірки. Ви завантажите публічний образ, прочитаєте нескорочену команду збірки й скористаєтеся токеном для публікації. Порядок усунення має значення: спершу відкличте токен, випустіть заміну з обмеженою областю дії й лише потім замініть аргумент збірки на монтування секрету BuildKit, щоб у шар, який постачається разом з образом, нічого не записувалося.

Що ви дізнаєтесь у Секрети в шарах образів

Секрети в шарах образів — Кроки навчання

  1. Оцініть ціль

    Сьогодні Боб націлився на компанію Cindralt, що працює з платежами: її сервіс оформлення платежів постачається як контейнерний образ. Починає він із того, що доступне кожному, — з власного реєстру контейнерів компанії. Опублікований образ — зручна мішень. Це той самий артефакт, що працює в продакшні, а завантажити (pull) його нічого не коштує.

  2. Образ може завантажити будь-хто

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

  3. Завантажте образ

    Боб завантажує тег, який реєстр позначає як latest. На його комп'ютері опиняється байт у байт те, що Cindralt запускає в продакшні, разом з усіма шарами, які збірка створила по дорозі.

  4. Прочитайте історію збірки

    У кожному образі збережено команди, якими його зібрали. Бобу не потрібно ні запускати контейнер, ні щось розпаковувати: історія шарів — це метадані, і вони надходять разом із завантаженням. На перший погляд збірка виглядає акуратною: після встановлення залежностей є навіть рядок прибирання.

  5. Попросіть повну команду

    Типову таблицю зроблено так, щоб вона вміщалася в термінал, а не щоб казати правду. Боб просить показати самі команди збірки, повністю, без обрізання. Команда встановлення записала облікові дані в конфігураційний файл, і вони досі лежать у шарі, який ця команда створила.

  6. Чому видалення не допомогло

  7. Перевірте, до чого дає доступ токен

    Облікові дані варті рівно стільки, до чого вони можуть дістатися. Боб запитує в індексу пакетів компанії Cindralt, кому належить цей токен і що йому дозволено. Відповідь ще гірша: йдеться не про один сервіс. Токен дає право публікувати в кожен пакет, на який спираються збірки компанії Cindralt, а строк його дії ніколи не спливає.

  8. Чого вартий цей токен

    Бобу більше не потрібно торкатися серверів Cindralt. Маючи право публікації в кожен пакет, на який спираються збірки компанії, наступну версію будь-якої внутрішньої бібліотеки може випустити він, і її завантажить кожна збірка, яка запуститься після цього.

  9. Індекс пакетів сигналізує про токен

    Індекс пакетів компанії Cindralt записує в журнал кожен автентифікований виклик. Уночі він зафіксував використання токена ci-publisher з адреси, яка не належить нікому з компанії.

  10. Підтвердьте це на образі

    Аліса сама перевіряє це твердження на опублікованому артефакті, маючи рівно те, що мав би будь-хто ззовні: публічний тег і звичайний клієнт 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