Перейти до вмісту

безпека хмари

3 дописи із тегом «безпека хмари»

AWS IAM: практики проти ескалації привілеїв

Безпека AWS IAM: політика з wildcard, що ескалує через передачу ролі, поряд зі звуженою політикою та межею дозволів, яка це зупиняє

Обліковий запис build-агента повинен вміти завантажувати артефакти й читати власну конфігурацію. Більше нічого. На папері це короткий список, який легко перевірити.

На практиці політика, прикріплена до нього, часто виглядає як "Action": "*", "Resource": "*", тому що wildcard був “достатньо близьким” до того, що потрібно пайплайну, і ніхто не повернувся, щоб звузити його. Цей обліковий запис тепер є адміністратором під нудною назвою, і той, хто його видав, може про це навіть не знати.

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

Помилки конфігурації AWS, які варто виправити першими

Помилки конфігурації AWS: анонімний запит переліковує публічний бакет сховища поряд із фіксом block-public-access на рівні акаунта, який його відхиляє

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

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

У цьому бакеті нічого не було зламано в класичному сенсі. Дозвіл, який AWS вимикає за замовчуванням, хтось колись увімкнув з якоїсь причини, що мала сенс на той момент, і він так і лишився увімкненим, бо неправильна настройка нічим не відрізняється від правильної, доки хтось не поставить їй правильне питання.

Безпека контейнерів: практики для образів і runtime

Практики безпеки контейнерів: шар образу, що зберігає дійсні облікові дані, поряд із багатоетапною збіркою, яка ніколи не записує їх на диск

Збірка передає токен розгортання в крок RUN, використовує його й видаляє файл наступним рядком. Dockerfile виглядає акуратно. Образ публікується в публічний реєстр.

Шари образу доступні лише для додавання, тож видалення нічого не прибрало. Воно поклало новий шар поверх того, який досі тримає токен, і docker history зчитує його однією командою.

Ця відстань між тим, що Dockerfile нібито робить, і тим, що образ насправді містить, і є полем роботи з безпеки контейнерів. У runtime є дзеркальна версія тієї самої проблеми, де прапорець, доданий, щоб контейнер запрацював у стейджингу, тихо віддає йому хост.