Основи безпеки конвеєрів CI/CD, які треба знати всім (Частина 1)
![](https://itedu.center/ua/blog/wp-content/uploads/2023/01/захищаємо-конвеєри-CI-CD-блог.png)
Конвеєр CI/CD — це певні кроки, які дають вам швидше випускати нові версії програмного забезпечення за допомогою автоматизації. Якби ваш продукт був пляшкою Coca Cola, то це виглядало б приблизно так: пляшка, у яку автоматично наливається певна кількість напою, потім закручується, наліплюється етикетка і так далі.
Те саме відбувається і з вашою програмою: автоматизація бере на себе однотипні дії, робить це якісно та швидко. Проте конвеєри CI/CD мають складну структуру, через що часто стають мішенню зловмисників.
Безпечний конвеєр зменшує ризики успішних кібератак чи витоку даних, що своєю чергою означало б для компанії великі фінансові збитки та втрату довіри клієнтів.
Ми вже розповідали, як впровадити конвеєри CI/CD на основі Kubernetes. Тепер розглянемо, як їх захистити.
Структура захисту конвеєрів CI/CD
Специфіка захисту конвеєра неперервної інтеграції та доставлення на кожному проєкті різна. Це залежить від особливостей CI/CD операцій в команді. Проте є загальний алгоритм, який допоможе убезпечити конвеєр. Ключові аспекти зобразили на малюнку. Далі окремо розглянемо кожний з них.
Тестування
Якщо ви постійно тестуєте свій застосунок, то не лише покращуєте його якість, а і безпеку. Різноманітні тести виявляють проблеми у захисті, а також перевіряють сторонні бібліотеки, які ви використовуєте, знаходять конфлікти на рівні ресурсів та неправильні конфігурації.
Щоб грамотно тестувати продукт, маєте використовувати різні підходи на різних етапах конвеєра CI/CD:
- Статичні тести. Їх ви можете використовувати ще до того, як розгорнете проєкт. Вони швидкі та їх легко автоматизувати, але вони глибоко не копають — лише по поверхні. Тож повну картинку ви не побачите та не дізнаєтесь, як програма насправді поводитиметься у виробничому середовищі.
- Динамічні тести. Такі тести перевіряють код під час виконання програми. Вони, навпаки, дивляться в корінь та виявляють недоліки, які статичні тести пропустили б. Але це робить їх повільнішими та складнішими для автоматизації. Вони поділяються на:
- Тестування навантаження, щоб перевірити чи справляється система із великим потоком трафіку,
- Стрес-тестування, щоб виявити слабкі місця у продуктивності,
- Тестування безпеки, щоб перевірити на вразливості.
- Тести на проникнення. Тестування, що імітує справжні атаки. Це той випадок, коли ти можеш стати маминим хакером, але твоя діяльність надає корисну інформацію про стан безпеки компанії. Так ще перевіряють надійність фаєрволів, антивірусів та інших засобів контролю безпеки.
Автоматизація
У повторюваних задачах легко заплутатися та помилитися, особливо, якщо не виспався, потім тобі хтось з самого ранку нахамив, а дедлайни згоріли дотла ще вчора.
Автоматизуйте збирання, тестування та розгортання, щоб уникнути людського фактора. Так ви зможете пересвідчитися, що в прод розгортається лише схвалений код. А в разі чого зможете легко прослідкувати зміни та відкотитися, якщо потрібно.
Щоб системи працювали з найбезпечнішими версіями ПЗ, ви також можете автоматизувати розгортання оновлень безпеки та виправлень. Це пришвидшить процес. Автоматизація — це також про автоматичний запис вразливостей системи та сповіщення, щойно виникнуть загрози безпеці.
Контроль похідного коду
Ви також могли чути «контроль версій». Системи контролю похідного коду — надійний спосіб, щоб забезпечити його цілісність. Вони допомагають керувати змінами в ньому, співпрацювати з іншими командами та вирішувати конфлікти у коді до того, як його закомітити.
Це убезпечує продукт від випадкових чи шкідливих змін, що могли б створити вам проблеми у майбутньому.
Контроль коду також слідкує за правами доступу до кодової бази, що гарантує, що змінювати його можуть лише визначені користувачі. При цьому всі зміни відстежуються та перевіряються. Так, якби ви поклали програму, то про це всі б дізналися. Але важливіший той факт, що пошук проблеми та її виправлення займе набагато менше часу.
Ну і ще один аргумент — централізований репозиторій керування кодом дозволяє легше автоматизувати перевірку коду та відкочувати зміни в разі чого.
Менеджмент інцидентів
Інциденти — це незаплановані події, що порушують роботу та цілісність системи. Вони можуть бути різними: від збоїв під час збирання програми до складних порушень безпеки. Тому обов’язково має бути процес управління інцидентами, який включає різні інструменти для керування та реагування на ті чи інші ситуації.
Основна мета системи управління інцидентами — зменшення їхнього впливу. Але це також допомагає запобігти виникненню схожих інцидентів в майбутньому. Вона розпізнає знайомий шаблон та оповістить про це.
Менеджмент секретів
До керування секретами належать практики та процедури для безпечного менеджменту, зберігання та передачі конфіденційних даних. Сюди входять ключі шифрування та API, паролі, рядки підключення до баз даних та сертифікати.
Ефективний менеджмент секретів дозволяє легко їх вводити, при цьому обмежуючи доступ до цих даних. Так чутлива інформація залишається закритою, але сервіси можуть використовувати секрети, щоб з’єднатися з іншими сервісами чи інструментами.
Це дуже зручно, проте ви маєте дещо пам’ятати, щоб убезпечити секрети конвеєра CI/CD:
- Використовуйте надійне шифрування для зберігання та передачі секретів. Навіть якщо зловмисники отримають до них доступ, вони не зможуть їх прочитати чи використати. Уявіть їх розчарування.
- Регулярно змінюйте секрети. Так вони не зможуть використати старі, якщо їх дізнаються. Змусьте їх попітніти.
- Переконайтеся, що доступ до цих даних є лише в авторизованих користувачів. Це можна зробити за допомогою рольового контролю доступу (RBAC) чи інших механізмів авторизації. Знайте ворога в обличчя.
- Використовуйте змінні середовища, щоб зберігати секрети як частину коду програми. Так ви зможете запобігти глибшій компрометації системи. Водіть їх за ніс.
Сканування вразливостей
Автоматизоване сканування вразливостей допомагає застосувати підхід shift left. Це дасть виявляти та усувати вразливості на ранніх стадіях циклу розробки.
Зазвичай процес виглядає так: знаходять дефект, оцінюють його вплив та серйозність, виправляють та ще раз сканують, щоб переконатися, що його більше немає.
Конвеєри неперервної інтеграції та доставлення складаються з різних компонентів та залежностей, тож цей процес ділять на сканування:
- вихідного коду,
- залежностей сторонніх розробників,
- зображення контейнера,
- компонентів інфраструктури.
Ви також можете використовувати бази даних із відомими слабкими місцями. Так ви переконаєтесь, що правильно оцінили вплив проблем. Можете дослідити базу перерахування поширених недоліків чи 10 найпопулярніших вразливостей CI/CD від OWASP.
Контроль доступу
Всі попередні кроки не матимуть належного ефекту, якщо не подбати про доступи. Ви маєте захистити всі кінцеві точки кластера.
Механізми контролю допоможуть знизити ризик витоку інформації. Вони визначають привілеї доступу до певних даних та ресурсів конвеєра.
Щоб отримати доступ до конфіденційної інформації, користувачі спершу мають авторизуватись. А дозволи визначають конкретні дії, які ці користувачі можуть виконувати.
Поширені загрози безпеці конвеєра
Практики та інструменти захисту конвеєра постійно покращують, проте й зловмисники не сидять без діла. Вони адаптовують свої методи та знаходять нові способи скористатися розподіленою складністю структури CI/CD.
Ось деякі поширені загрози:
- DDoS — розподілені атаки типу «відмова в обслуговуванні». Такі атаки компрометують сервер, мережу чи сервіс, перевантажуючи їх великою кількістю запитів або трафіку.
- Атаки на ланцюг постачання — радимо звернути увагу на слабкі місця сторонніх провайдерів інструментів та послуг для конвеєра, з якими працюєте.
- Атаки, що сплутують залежності — заміна правильних пакунків у пакетних менеджерах на шкідливі версії.
- Ін’єкційні атаки — використовують помилки перевірки введення, щоб додати в програму неавторизований код. Програма сприймає його як частину команди або запиту.
- Атаки, що спричиняють виконання віддаленого коду — виконують шкідливий код на віддаленій машині за допомогою підключення до них через незахищені загальнодоступні та приватні мережі.
Висновок
Що ж, тепер ви прокачалися у питаннях безпеки. Впевнені, що якби ви заховали філософський камінь, до нього б точно ніхто не дістався 😉
Ви знаєте, як захистити конвеєр CI/CD та можливі загрози на різних етапах. Це допоможе бути вам на крок попереду та продумати усі сценарії перебігу подій.
В наступному матеріалі розповімо про адміністрування безпеки конвеєрів. А поки можемо запропонувати ще більше прокачатися у питаннях DevOps — обирайте будь-який курс цього рівня та встигніть придбати його за вигіднішою ціною.
Було цікаво? Ось продовження: Основи безпеки конвеєрів CI/CD, які треба знати всім (Частина 2).