Bezpečnost CI/CD
Checklist zabezpečení CI/CD pipeline
CI/CD pipeline uchovává přihlašovací údaje, spouští kód z internetu a vytváří to, co si instalují vaši zákazníci. Tím se sama stává cílem útoku. Pomocí tohoto checklistu zkontrolujte pipeline v GitHub Actions, od souboru workflow až po artefakt, který dodává.
Aktualizováno
Workflow
- Připínejte akce třetích stran na plné SHA commitu. GitHub to označuje za „v současnosti jediný způsob, jak používat akci jako neměnné vydání“. Tag lze změnit tak, aby ukazoval na jiný kód. V březnu 2025 CISA oznámila, že všechny verze tj-actions/changed-files byly tři dny kompromitované.
- Dejte
GITHUB_TOKENco nejmenší oprávnění. Jako výchozí jen čtení obsahu a další oprávnění udělujte po jednotlivých jobech. - V
pull_request_targetnikdy nestahujte (checkout) nedůvěryhodný kód. Tato workflow běží s tajnými údaji a zvýšenými oprávněními. - Nepouštějte nedůvěryhodný vstup do skriptů. Názvy, jména větví a další hodnoty, které ovládají uživatelé, předávejte přes proměnnou prostředí, místo abyste je rozbalovali přímo do příkazu shellu.
- Kontrolujte změny souborů workflow. Pro
.github/workflowsvyžadujte review od vlastníka kódu (code owner).
Tajné údaje
- Upřednostňujte krátkodobé přihlašovací údaje. Používejte OpenID Connect, aby joby dostávaly od vašeho cloudového poskytovatele krátkodobé tokeny s omezeným rozsahem místo dlouhodobých klíčů uložených jako tajné údaje.
- Omezte tajné údaje na prostředí. Produkční přihlašovací údaje umístěte do prostředí s povinnými schvalovateli.
- Po incidentu je rotujte. CISA po kompromitaci tj-actions doporučila považovat vystavené tajné údaje za kompromitované a okamžitě je rotovat.
Runnery
- Používejte efemérní runnery. Nový stroj pro každý job nezanechá nic pro ten další.
- Nepoužívejte vlastní (self-hosted) runnery ve veřejných repozitářích. GitHub uvádí, že by se tam neměly používat téměř nikdy, protože proti repozitáři může otevřít pull request kdokoli.
- Izolujte joby. Jeden job by neměl mít možnost číst pracovní prostor nebo přihlašovací údaje jiného jobu.
Síť
- Kontrolujte odchozí provoz. Povolte zdroje balíčků a služby, které job potřebuje, a zbytek blokujte, aby kompromitovaná závislost nemohla odeslat tajné údaje ven. Jak egress policy zastaví únik dat
- Zaznamenávejte spojení. Uchovávejte záznam o tom, k čemu se každý job připojil, abyste to mohli později prošetřit.
Závislosti
- Commitujte lockfily. Buildy by měly pokaždé vyřešit stejné verze.
- Kontrolujte nové závislosti. Ověřte, co pull request přidává, ještě než se sloučí.
- Podmiňte buildy nálezy. Zablokujte build, když stáhne balíček se známou kritickou zranitelností, ještě než se artefakt dodá.
Důkazy z buildu
- Zaznamenejte SBOM toho, co build stáhl. Dodatečný sken souborů popisuje, co bylo deklarováno, ne co build použil.
- Podepisujte původ (provenance). Propojte každý artefakt s buildem, který ho vytvořil, abyste později mohli ověřit, že to, co běží, je to, co bylo sestaveno.
- Monitorujte, co bylo dodáno. Při zveřejnění nových zranitelností vydané buildy znovu zkontrolujte.
Které nástroje pokrývají které body
Skenery pokrývají body o závislostech, nástroje pro zabezpečení pipeline pokrývají body o workflow a agenti na runneru nebo zabezpečený runner pokrývají body o síti a důkazech. CRACI je runner: vynucuje egress policy, která při selhání vše zablokuje (fail-closed), zaznamenává SBOM toho, co každý job stáhl, umožňuje kontrolním branám politik (policy gates) zablokovat build na základě nálezů a přes své API vrací SBOM, síťové záznamy a původ. Neskenuje kód ani workflow. Které nástroje pokrývají co, najdete v článku Srovnání nástrojů pro bezpečnost CI/CD.
Bezpečnost CI/CD pipeline: časté dotazy
Co je bezpečnost CI/CD pipeline?
Je to ochrana systémů, které sestavují a dodávají váš software: definic workflow, tajných údajů, které používají, runnerů, které je spouštějí, závislostí, které stahují, a artefaktů, které vytvářejí. Kompromitovaná pipeline může pod vaším jménem dodat škodlivý kód, aniž by se dotkla vašeho zdrojového kódu.
Proč připínat GitHub Actions na SHA commitu?
Tagy lze změnit tak, aby ukazovaly na jiný kód. GitHub uvádí, že připnutí akce na plné SHA commitu je v současnosti jediný způsob, jak používat akci jako neměnné vydání. V březnu 2025 CISA oznámila, že všechny verze tj-actions/changed-files byly tři dny kompromitované.
Jaká oprávnění by měl mít GITHUB_TOKEN?
Minimální, jaká každý job potřebuje. Jako výchozí nastavte pro obsah repozitáře jen čtení a další oprávnění udělujte po jednotlivých jobech, jen tam, kde je job potřebuje.
Potřebuji v CI kontrolu odchozího provozu?
Pokud vaše joby pracují s tajnými údaji a spouštějí kód třetích stran, ano. Většina jobů potřebuje přístup jen ke známé sadě registrů balíčků a služeb. Politika odchozího provozu (egress policy) blokuje vše ostatní, takže kompromitovaná závislost nemůže odeslat tajné údaje na server útočníka.
Zkontrolujte body o síti a důkazech na jednom jobu
Spusťte jeden workflow na CRACI a podívejte se na jeho egress policy, navázaná spojení a SBOM toho, co stáhl.
Rezervujte si demo