Мінімальні образи контейнерів

Мінімальні образи контейнерів

A production image ships a compiler, a package manager, and a shell, turning a small application flaw into a working toolkit. Perform the pivot, then cut the runtime down to a minimal stage with none of it.

Що таке Мінімальні образи контейнерів?

Кожен інструмент, який ви постачаєте в продакшн-образі, — це інструмент, який успадковує зловмисник. Runtime-образ, що містить пакетний менеджер, компілятор, оболонку та мережеві утиліти, перетворює обмежену ваду застосунку на робочий набір інструментів, бо зловмиснику більше не потрібно нічого приносити із собою. Ця вправа охоплює саме таку ескалацію: спостерігайте, як зловмисник здійснює піворот, використовуючи вміст самого образу, а потім скоротіть runtime до мінімального етапу без оболонки й без інструментів збірки.

Що ви дізнаєтесь у Мінімальні образи контейнерів

Мінімальні образи контейнерів — Кроки навчання

  1. Точка опори в checkout

    Bob не починає з оболонки. Сервіс checkout формує PDF-етикетки доставки й для цього викликає зовнішню оболонку, а одне поле в цьому запиті не санітизоване. Він впроваджує зонд, щоб підтвердити, що може виконати команду, і дізнатися, хто він і де перебуває.

  2. Усе, що постачає образ

    У Bob є виконання по одній команді за раз від імені застосунку, але оболонки поки що немає. Зазвичай саме тут зловмисник застрягає, якщо тільки контейнер не дає йому набір інструментів. Перш ніж робити щось помітне, він перевіряє, що вже встановлено.

  3. Отримати хмарні облікові дані через curl

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

  4. Як одна команда стала витоком даних

    Доступ Bob до застосунку був жорстко обмежений.

  5. Оболонка в runtime-контейнері

    Skelwyn використовує виявлення на кінцевих точках на своїх хостах контейнерів. Воно не знає, для чого призначений кожен контейнер; воно повідомляє про поведінку, яка не відповідає runtime.

  6. Підтвердити, що постачалося

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

  7. Runtime на 412 МБ

    Набір інструментів не безкоштовний. Це вага, і це поверхня атаки. Alice перевіряє розмір образу, який фактично виконує сервіс.

  8. Звідки береться набір інструментів

    Образ побудовано з одного Dockerfile. Alice відкриває його, щоб побачити, чому runtime-контейнер зрештою містить компілятор.

  9. Один етап, постачається все

    Образ будується й запускається в одному етапі, тож усе, що потрібно для збірки, несе із собою й runtime.

  10. Розділити збірку та runtime

    Виправлення — це багатоетапна збірка: зберегти повний образ та його ланцюг інструментів як етап збірки, що компілює застосунок, а потім скопіювати лише готовий застосунок і його залежності в distroless runtime-образ, у якого немає ні оболонки, ні пакетного менеджера, ні компілятора.