Незахищеність мережі контейнера

Незахищеність мережі контейнера

A container port mapping puts a database straight on the internet, with no firewall rule appearing to change. Connect to it directly, then bind the mapping to localhost and segment the services onto a user-defined network.

Що таке Незахищеність мережі контейнера?

Публікація порту контейнера за замовчуванням прив'язує його до кожного інтерфейсу, тому мапінг, призначений для локальної розробки, може виставити базу даних у відкритий інтернет так, що жодне правило брандмауера навіть не зміниться. У стандартній мережі bridge кожен контейнер також може звертатися до будь-якого іншого. Ця вправа охоплює базу даних, відкриту через мапінг порту: спостерігайте, як зловмисник підключається напряму, без участі застосунку, а потім виправте це, прив'язавши порт до localhost і розмістивши сервіси в мережі, визначеній користувачем.

Що ви дізнаєтесь у Незахищеність мережі контейнера

Незахищеність мережі контейнера — Кроки навчання

  1. База даних у відкритому інтернеті

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

  2. Напряму, без застосунку

    Немає сторінки входу, немає API, немає обмеження частоти запитів. Опублікований порт бази даних говорить необробленим протоколом Postgres з будь-ким, хто може до нього дістатися. Bob спрямовує клієнт бази даних прямо на нього й автентифікується обліковими даними, які вже мав.

  3. Прочитати таблицю мешканців

    Обліковий запис має доступ лише для читання, і це все, що потрібно Bob. Він робить запит до таблиці, яка містить орендарів платформи та їхні дані, прямо з продакшену.

  4. Що змінилося

    Bob мав саме ці облікові дані місяцями і жодного разу ними не скористався.

  5. Моніторинг позначає трафік

    Halvexis використовує хмарний моніторинг на своїх продакшн-хостах. Він не знає, для чого призначена база даних; він повідомляє про те, що побачив.

  6. Знайти відкритий порт

    Якщо групи безпеки не змінювалися, відкритість було створено на самому хості — тим, як контейнер опублікував свій порт. Alice переглядає список контейнера бази даних і читає єдину колонку, яка показує, до яких інтерфейсів прив'язаний порт.

  7. Де публікується порт

    Мапінг порту походить із файлу Compose, який визначає стек. Alice відкриває його, щоб побачити рядок, який опублікував 5432.

  8. Рядок, який це зробив

    Один мапінг, написаний так, як його пише розробник на своєму ноутбуці, і виставив базу даних в інтернет, коли цей стек потрапив у продакшн.

  9. Прив'язати до localhost

    API звертається до бази даних через мережу Compose за назвою сервісу, а не через опублікований порт хоста. Тому мапінг хоста взагалі не має бути публічним. Alice прив'язує його до loopback-інтерфейсу, щоб доступ до нього мав лише сам хост і контейнери в його мережі.

  10. Переглянути виправлену прив'язку

    Зміна — це один префікс інтерфейсу, але це і є все виправлення. Alice переглядає прив'язаний мапінг перед повторним розгортанням, щоб точно побачити, що тепер доступно і звідки.