Blog 24/7

bezpieczeństwo infrastruktury jako kodu (IaC)

TAB. 1Hasłoobie formy
Po angielskuinfrastructure as code (IaC) security
Którą formą pisaćobie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski.
Inne formybezpieczeństwo IaC · Infrastructure as Code security · skanowanie IaC
KategoriaChmura, kontenery i łańcuch dostaw

Bezpieczeństwo infrastruktury jako kodu (infrastructure as code security, IaC security) to dbanie o to, by pliki opisujące serwery i usługi chmurowe, pisane w narzędziach takich jak Terraform, Ansible czy CloudFormation, nie tworzyły luk: otwartych portów, publicznych bucketów, zbyt szerokich uprawnień albo haseł wpisanych w kod. Microsoft opisuje podejście, w którym definicje infrastruktury są jedynym źródłem prawdy, a walidacja, skanowanie bezpieczeństwa i kontrola zgodności są zautomatyzowane w całym cyklu wdrożenia [1]. Szablony skanuje się pod kątem błędów, zanim trafią na produkcję.

Jak działa

Infrastruktura jako kod zamienia ręczne klikanie w konsoli na pliki w repozytorium. Każda zmiana przechodzi przez przegląd, testy i automatyczne wdrożenie. Ta sama cecha działa w obie strony: poprawny szablon powiela dobrą konfigurację, a błędny powiela lukę na wszystkie środowiska naraz.

Microsoft opisuje przepływ, w którym pull request uruchamia zautomatyzowane testy w GitHub Actions, a akcja zabezpieczeń skanuje definicje infrastruktury pod kątem błędów konfiguracji jeszcze przed wdrożeniem [1]. Porównuje to do statycznego testowania bezpieczeństwa aplikacji (SAST), tyle że stosowanego do kodu infrastruktury [1]. Schemat poniżej pokazuje miejsca kontroli.

Narzędzia IaC dzielą się z grubsza na dwie grupy. Pierwsze, jak Terraform czy CloudFormation, opisują docelowy stan zasobów: sieci, maszyn, baz i uprawnień. Drugie, jak Ansible, konfigurują system wewnątrz już istniejącej maszyny: pakiety, usługi, pliki konfiguracyjne. Obie grupy wymagają tych samych zabezpieczeń, bo w obu przypadkach plik tekstowy decyduje o tym, co będzie otwarte na świat. OWASP zaleca dodatkowo oznaczanie zasobów chmurowych tagami, żeby nie powstawały zasoby-widma, o których nikt nie pamięta [2], oraz śledzenie wszystkich zmian IaC w systemie kontroli wersji [2].

RYS. 1Kontrole w cyklu życia szablonu IaC

Typowe błędy

Skanery IaC szukają powtarzalnych wzorców. Najczęstsze klasy problemów zebrano w tabeli.

Błąd w szablonieSkutek po wdrożeniuKontrola
reguła zapory otwarta na cały internetusługa dostępna dla każdegoskan statyczny [2]
bucket lub baza z dostępem publicznymbłędna konfiguracja chmuryskan statyczny [1]
hasło lub klucz wpisany w plikzaszyte w kodzie hasło [4]wykrywanie sekretów [2]
sekret w pliku stanuhasło jawnym tekstem na dysku [3]zdalny, szyfrowany stan [3]
rola wdrożeniowa z pełnymi uprawnieniamiprzejęcie potoku daje całe kontominimum uprawnień [2]

MITRE opisuje słabość CWE-798 jako produkt zawierający zaszyte poświadczenia, takie jak hasło lub klucz kryptograficzny [4]. W IaC pojawia się ona, gdy hasło do bazy trafia wprost do szablonu i do historii repozytorium.

Osobnym problemem jest plik stanu. Dokumentacja Terraform stwierdza, że lokalnie narzędzie przechowuje stan w pliku jawnym, zawierającym wartości sekretów zdefiniowanych w konfiguracji, i zaleca traktować ten plik jako wrażliwy oraz trzymać go poza repozytorium [3].

W WordPressie

Infrastruktura jako kod pojawia się w WordPressie, gdy stronę uruchamia się w kontenerach, na własnych instancjach w chmurze albo z playbooków Ansible. Najczęściej chodzi o dane dostępowe do bazy oraz o klucze bezpieczeństwa i sole.

Oficjalny obraz Docker WordPress pozwala dopisać przyrostek _FILE do zmiennych środowiskowych, tak by skrypt startowy wczytał wartość z pliku w kontenerze, na przykład z sekretu Docker w katalogu /run/secrets [5]. Zmienne kluczy i soli, takie jak WORDPRESS_AUTH_KEY, domyślnie przyjmują unikalne losowe wartości, ale tylko wtedy, gdy podano inną konfigurację przez zmienne [5]. Przykład obronny, bez hasła w pliku:

services:
  wordpress:
    image: wordpress
    environment:
      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password

Warto też pilnować, by szablon nie kopiował na serwer plików, które nie powinny tam być: zrzutów bazy, plików .env czy katalogu .git. To typowe publicznie dostępne pliki wrażliwe. Konfigurację samego WordPressa opisuje utwardzanie pliku wp-config.php.

Zagrożenia i skutki

  • Powielenie luki. Jeden błędny moduł trafia do wielu środowisk, łącznie ze środowiskiem testowym (staging), które bywa gorzej chronione.
  • Wyciek sekretów. Hasło w repozytorium zostaje w historii, nawet po usunięciu z bieżącej wersji; kończy się to często wyciekiem danych.
  • Przejęcie przez potok. Tożsamość, która wdraża infrastrukturę, ma zwykle szerokie uprawnienia; zob. atak na potok CI/CD (CI/CD pipeline compromise).
  • Dryf konfiguracji. Microsoft zwraca uwagę, że dryf bywa trudny do usunięcia, gdy infrastruktura już działa, zwłaszcza na produkcji [1].

Dobre praktyki

OWASP zaleca kontrole na etapie tworzenia, wdrożenia i działania [2]:

Microsoft dodaje wdrażanie przez OpenID Connect bez przechowywania poświadczeń oraz uprzywilejowany dostęp just-in-time (just-in-time access) do wyjątkowych zmian ręcznych, które następnie uzgadnia się z definicją w repozytorium [1]. Terraform oferuje wartości efemeryczne, dostępne w czasie operacji, ale pomijane w plikach stanu i planu [3]:

variable "db_password" {
  type      = string
  sensitive = true
  ephemeral = true
}

Na etapie działania OWASP proponuje infrastrukturę niezmienną: zamiast modyfikować istniejące zasoby, tworzy się nowe z poprawionego szablonu, co ogranicza dryf [2]. Zaleca też włączenie logów bezpieczeństwa i audytu oraz stałe monitorowanie [2].

Skan przed wdrożeniem nie zastępuje kontroli po wdrożeniu. Działające konta chmurowe ocenia CSPM, a zdarzenia z infrastruktury warto kierować do systemu SIEM (Security Information and Event Management) [1].

TAB. 2

Przypisy

5
  1. [1] DevSecOps dla infrastruktury jako kodu (IaC) · Microsoft Learn
  2. [2] Infrastructure as Code Security Cheat Sheet · OWASP
  3. [3] Manage sensitive data in your configuration · HashiCorp
  4. [4] CWE-798: Use of Hard-coded Credentials · MITRE
  5. [5] wordpress — Docker Official Image documentation · Docker (docker-library)
TAB. 3

Hasła w tym artykule

15
TAB. 4

Linkują tutaj

2

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com