Potoki CI/CD są potężnym narzędziem umożliwiającym szybsze i częstsze tworzenie oprogramowania — od projektu po wdrożenie. Jednak gdy po raz pierwszy pojawiły się na scenie technologicznej, często brakowało w nich jednego ogniwa: bezpieczeństwa.
To problem, zwłaszcza w kontekście takich statystyk jak ta: około jedna na pięć organizacji zgłosiła incydent bezpieczeństwa w swoim potoku CI/CD w poprzednim roku, zgodnie z niedawnym badaniem przeprowadzonym przez Techstrong Research.
Ponieważ potoki CI/CD stają się coraz powszechniejsze, zmieniają również krajobraz zagrożeń dla zespołów programistycznych. Jak Open Worldwide Application Security Project (OWASP) zauważa: „Ze względu na swoje znaczenie i popularność potoki CI/CD są również atrakcyjnym celem dla złośliwych hakerów, a ich bezpieczeństwa nie można ignorować”.
W tym artykule przyjrzymy się konkretnym zagrożeniom, a także skutecznym zasadom i praktykom służącym ograniczaniu tych zagrożeń oraz zapewnianiu bezpieczeństwa potoków CI/CD.
Czym jest potok CI/CD?
Najpierw upewnijmy się, że mówimy o tym samym: czym jest CI/CD? CI/CD, skrót od ciągłej integracji i ciągłego dostarczania, odnosi się do zestawu procesów i narzędzi, których współczesne zespoły programistyczne używają do projektowania, tworzenia i ostatecznie wdrażania oprogramowania — przy czym automatyzacja jest jednym z kluczowych czynników umożliwiających szybsze i częstsze dostarczanie oraz aktualizowanie kodu.
W naszym poprzednim artykule, „Przegląd potoku CI/CD: dlaczego warto go znać”, zdefiniowaliśmy go następująco: „Potok CI/CD to przejrzysty, zautomatyzowany i niezawodny proces tworzenia oraz dostarczania oprogramowania”.
Celem zwykle nie jest tylko szybsze i częstsze dostarczanie oprogramowania — chodzi również o poprawę jakości, niezawodności oraz — zakładając, że nadajesz temu odpowiedni priorytet — bezpieczeństwa.
Typowe zagrożenia bezpieczeństwa CI/CD: 5 obszarów wymagających uwagi
Źródła wielu zagrożeń bezpieczeństwa CI/CD powinny być przynajmniej częściowo znajome profesjonalistom z branży technologicznej. Takie kwestie jak kontrola dostępu i nadawanie zbyt szerokich uprawnień, niewystarczające monitorowanie i rejestrowanie zdarzeń, a także niezarządzane zależności i łańcuchy dostaw oprogramowania przyczyniają się do zwiększenia ryzyka, jeśli nie są odpowiednio zarządzane.
OWASP opublikował listę 10 najważniejszych zagrożeń bezpieczeństwa CI/CD, którą warto sprawdzić jako punkt odniesienia. Jest ona rozwinięciem popularnej listy organizacji OWASP Top 10 obejmującej zagrożenia bezpieczeństwa aplikacji internetowych, stanowiącej powszechnie akceptowany w branży punkt odniesienia dla bezpieczeństwa aplikacji internetowych.
Zagrożenia związane z potokami CI/CD mogą być zarówno wprowadzane, jak i potęgowane przez automatyzację. Wiele zagrożeń jest w potokach CI/CD wprowadzanych automatycznie lub automatycznie wdrażanych na produkcji. Co dość ironiczne, automatyzowanie bezpieczeństwa tych potoków za pomocą narzędzi Infrastruktura jako kod (IaC) lub innych mechanizmów automatyzacji może również wprowadzać nowe zagrożenia albo je potęgować, jeśli nie zachowuje się odpowiedniej ostrożności — zauważa Derek Ashmore, główny konsultant ds. transformacji aplikacji w firmie Asperitas.
Według Ashmore’a podczas zabezpieczania potoków CI/CD należy wziąć pod uwagę pięć kluczowych obszarów ryzyka:
- Kontrola dostępu: „Kontrola dostępu jest często nadmiernie rozbudowana dla wygody i nie jest zgodna z zasadami najmniejszych uprawnień oraz podwójnej kontroli” — mówi Ashmore. Ogólnie rzecz biorąc, należy kierować się tutaj zasadą najmniejszych uprawnień — nie należy przyznawać osobom ani maszynom dostępu do danych lub systemów, których faktycznie nie potrzebują do wykonywania swoich obowiązków.
- Niezweryfikowane zależności: Dzisiejsze oprogramowanie, a w rezultacie także potoki CI/CD, często opiera się na bibliotekach innych firm i innych zewnętrznych zależnościach, a te komponenty czasami zawierają luki w zabezpieczeniach. „Zawsze upewnij się, że zewnętrzne zależności zostały zweryfikowane i mają możliwy do skontrolowania łańcuch nadzoru” — mówi Ashmore.
- Audytowanie i rejestrowanie: Upewnij się, że wdrożono kompleksowe mechanizmy audytowania i rejestrowania. Brak widoczności i możliwości przeprowadzania audytów może prowadzić do zwiększenia narażenia na zagrożenia bezpieczeństwa, o których w przeciwnym razie nie będziesz wiedzieć.
- Eskalacja uprawnień: Automatyzacja — tego rodzaju, która jest nieodłącznym elementem CI/CD i bezpieczeństwa CI/CD — może czasami być tworzona w odizolowanych zespołach, co prowadzi do niezamierzonych luk umożliwiających podniesienie uprawnień przez uruchomienie niezamierzonej sekwencji automatyzacji. „Aby ograniczyć to ryzyko, należy zapewnić wdrożenie zasady najmniejszych uprawnień oraz przypadków testowych dla strumieni prac związanych z automatyzacją, a także poszczególnych zadań lub potoków” — mówi Ashmore.
- Niewystarczające testowanie automatyczne: Testowanie automatyczne ma kluczowe znaczenie nie tylko dla zapewnienia wysokiego poziomu bezpieczeństwa potoku CI/CD — na przykład w przypadku automatycznych skanów podatności obrazów kontenerów — lecz także dla ogólnej kondycji potoku. „Wady potoku mogą powodować niepożądane luki w zabezpieczeniach i negatywnie wpływać na zespoły programistyczne aplikacji, uniemożliwiając im wykonywanie przydzielonych zadań” — mówi Ashmore.
10 Najlepsze narzędzia CI/CD!
15 najlepszych praktyk zapewniających większe bezpieczeństwo CI/CD
Gdy już dobrze rozumiesz zagrożenia, czas przejść do rozwiązań. Dobra wiadomość jest taka, że jest ich wiele — częściowo dlatego, że cała branża zdała sobie sprawę ze znaczenia traktowania bezpieczeństwa jako integralnego elementu CI/CD.
Ashmore z firmy Asperitas przedstawił nam 15 powszechnie akceptowanych najlepszych praktyk i taktyk wzmacniania bezpieczeństwa potoków CI/CD. Bez zbędnych wstępów:
- Używaj bezpiecznych systemów kontroli wersji: Jedną z głównych zalet systemów kontroli wersji, takich jak Git, jest rejestrowanie historii zmian, która może być potrzebna do zbadania naruszeń bezpieczeństwa lub innych problemów. „Najlepiej byłoby, gdyby nic nie było zmieniane ręcznie” — mówi Ashmore. Więcej opcji znajdziesz na naszej obszernej liście narzędzi do kontroli kodu źródłowego: „20 najlepszych narzędzi do kontroli wersji — przegląd”
- Wymuszaj zasadę najmniejszych uprawnień: Upewnij się, że role i uprawnienia przyznawane zarówno użytkownikom, jak i elementom takim jak zasoby infrastruktury są minimalne i zgodne z zasadą najmniejszych uprawnień. Jeśli nie jest to potrzebne, nie przyznawaj dostępu.
- Korzystaj z zarządzania sekretami: „Unikaj zakodowywania na stałe sekretów — haseł, tokenów i kluczy API — w szablonach IaC” — mówi Ashmore. Zamiast tego korzystaj z narzędzi do zarządzania sekretami, takich jak HashiCorp Vault, AWS Secrets Manager lub Azure Key Vault. Więcej opcji znajdziesz w naszym szczegółowym przewodniku po narzędziach do zarządzania sekretami: „Cyfrowi strażnicy: 24 najlepsze narzędzia do zarządzania sekretami”
- Regularnie przeprowadzaj automatyczne skanowanie bezpieczeństwa: Korzystaj z narzędzi, które automatycznie wyszukują luki w zabezpieczeniach, i rób to na możliwie najwcześniejszych etapach potoku CI/CD.
- Przestrzegaj zasady niezmienności: Ograniczenie ręcznych zmian, szczególnie w środowiskach infrastruktury, to dobra strategia minimalizowania ryzyka. „Infrastruktura powinna być niezmienna; po jej utworzeniu nie należy modyfikować jej ręcznie” — mówi Ashmore. „Zamiast tego zmiany należy wprowadzać poprzez aktualizację kodu IaC i ponowne wdrożenie. Usunięcie możliwości dokonywania ręcznych zmian to najbezpieczniejsza droga.”
- Korzystaj z kontroli dostępu opartej na rolach (RBAC): „Kontroluj dostęp do narzędzi IaC i środowisk za pomocą RBAC” — mówi Ashmore. „Tylko autoryzowani użytkownicy powinni mieć możliwość wdrażania infrastruktury lub jej modyfikowania”. Kubernetes jest kolejnym ważnym przykładem, szczególnie dlatego, że stanowi kluczową część wielu potoków CI/CD. Nie polegaj wyłącznie na konfiguracjach dostępnych od razu po instalacji.
- Stosuj idempotencję: Teraz przechodzimy do bardziej zaawansowanych zagadnień: idempotencja to koncepcja umożliwiająca wielokrotne wykonywanie określonych operacji — lub kodu w przypadku inżynierii oprogramowania — bez zmiany rezultatu. „Projektuj IaC [i potoki CI/CD] w sposób idempotentny, co oznacza, że wielokrotne uruchomienie kodu nie powinno zmieniać stanu infrastruktury, chyba że jest to wyraźnie wymagane” — mówi Ashmore.
- Stosuj parametryzację: Ashmore zaleca używanie zmiennych i parametryzacji w szablonach IaC, aby uniknąć zakodowywania na stałe wartości zależnych od środowiska, takich jak regiony, rozmiary instancji i adresy IP.
- Wdrażaj monitorowanie i rejestrowanie zdarzeń: Są one potrzebne do wykrywania nieautoryzowanych lub nietypowych działań oraz do ustalania przyczyn źródłowych w przypadku wystąpienia incydentów. „Pomóc mogą usługi takie jak AWS CloudTrail lub Azure Monitor” — mówi Ashmore. Oto dwa dodatkowe materiały: „25 najlepszych programów do monitorowania dzienników” oraz „Przewodnik po 26 najlepszych narzędziach do monitorowania infrastruktury”
- Korzystaj z narzędzi do testowania infrastruktury: „Przed wdrożeniem uwzględnij narzędzia do testowania infrastruktury, takie jak Test Kitchen, Terratest lub InSpec, aby zweryfikować poprawność IaC” — mówi Ashmore.
- Wdrażaj wykrywanie rozbieżności infrastruktury: Ashmore zaleca korzystanie z narzędzi wykrywających rozbieżności infrastruktury — czyli zmiany zachodzące poza potokiem CI/CD — oraz przywracających nieautoryzowane zmiany po ich wykryciu.
- Przestrzegaj standardów zgodności i bezpieczeństwa: Upewnij się, że potok CI/CD spełnia branżowe standardy bezpieczeństwa i wymagania określone w ramach zgodności, takie jak benchmarki CIS, NIST lub RODO. Kolejnym przykładem jest wspomniana wcześniej lista OWASP Top 10.
- Twórz wielokrotnego użytku i modułowy kod IaC: „Podziel kod IaC na wielokrotnego użytku i modułowe komponenty, takie jak moduły Terraform lub stosy AWS CloudFormation” — mówi Ashmore.
- Dokumentuj swój potok: Ashmore zaleca tworzenie i aktualizowanie dokładnej dokumentacji zasad IaC, szablonów i procedur bezpieczeństwa, a także innych komponentów potoku CI/CD.
- Regularnie aktualizuj narzędzia: „Dbaj o aktualność narzędzi IaC (takich jak Terraform, Ansible i CloudFormation) oraz wszelkich powiązanych zależności, aktualizując je do najnowszych wersji” — mówi Ashmore. Ta sama rada dotyczy w dużej mierze innych narzędzi i zależności w potoku: nieaktualne wersje częściej zawierają znane (a potencjalnie także nieznane) zagrożenia.
Dołącz, aby uzyskać więcej informacji o CI/CD
Potoki CI/CD stały się podstawą nowoczesnego tworzenia oprogramowania. Oznacza to, że bezpieczeństwo CI/CD jest równie ważne. Zanim przejdziesz dalej, zapisz się do naszego newslettera, aby otrzymywać najnowsze informacje od czołowych ekspertów z branży oprogramowania.


