Вбризгувањето на променливи на околината во процесот на градење е standard практика во модерното CI/CD pipelineс. Тимовите инјектираат променливи на околината во процесот на градење за да пренесат тајни, токени и конфигурација на времето на извршување во градбите без хардкодирање на вредности. На површината, ова изгледа како едноставен и безбеден образец.
Сепак, во пракса, тоа често станува еден од најпотценетите ризици во синџирот на снабдување со софтвер.
Бидејќи откако тимовите ќе инјектираат променливи на околината во процесот на градење, тие вредности престануваат да бидат изолирани. Тие стануваат достапни за сè што работи во него. pipeline. Создавањето скрипти, алатките за CLI, дејствата од трети страни, па дури и зависностите можат да ги прочитаат.
Тука работите почнуваат да се распаѓаат.
Во ова упатство, ќе разгледаме како тимовите инјектираат променливи на околината во процесот на градење во реални услови. pipelines, каде всушност се случуваат протекувања и како да се обезбеди процесот на градење без да се забави развојот.
Што значи да се инјектираат променливи на околината во процесот на градење
Во суштина, инјектирањето на променливи на околината значи пренесување вредности во pipeline за време на извршување, така што задачите можат да пристапат до нив за време на извршувањето.
Овие вредности обично вклучуваат API клучеви, акредитиви за базата на податоци, токени или конфигурација специфична за околината. Наместо да се складираат директно во код, CI/CD Системот ги вчитува динамички кога ќе започне градењето.
Ова решава вистински проблем. Го одржува кодот чист, избегнува дуплирање и овозможува истото pipeline да се извршува низ средини за поставување, тестирање и производство.
Сепак, овој модел се потпира на претпоставка која повеќе не важи: дека градежната средина е контролирана и предвидлива.
модерни pipelines не се ниту едното ниту другото. Тие вклучуваат повеќе чекори, надворешни интеграции и зависности што динамички го извршуваат кодот. Како резултат на тоа, откако ќе се инјектира променлива, таа повеќе не е само конфигурација. Таа станува дел од контекстот на извршување.
Каде протекуваат променливите на околината во процесот на градење
Повеќето протекувања на информации не се случуваат затоа што некој експлицитно открива тајна. Тие се случуваат затоа што pipelineсе однесуваат на начини што програмерите не ги предвидуваат целосно.
На пример, развивачот може да овозможи детално евидентирање за да дебагира неуспешна градба. CLI алатката може да печати променливи на околината како дел од својот излез. Зависноста може тивко да пристапува до променливите на процесот како дел од нејзиното извршување.
Ниту една од овие дејства не изгледа сомнителна сама по себе. Сепак, заедно тие создаваат повеќе патеки за протекување.
Тајните можат да завршат во:
- градење логови што се складираат и индексираат
- излез за дебагирање споделен меѓу тимовите
- CI дејства од трети страни кои извршуваат надворешен код
- зависности што се извршуваат за време на инсталацијата или извршувањето
- привремени артефакти генерирани за време на изградбата
Откако некоја тајна ќе се појави во логовите, таа ретко останува содржана. Логовите се копираат, складираат и чуваат низ повеќе системи. Во тој момент, изложеноста се протега далеку над оригиналот. pipeline.
Затоа протекувањата од променливи на околината често се откриваат доцна, и откако штетата веќе е направена.
Зошто тимовите инјектираат променливи на околината во процесот на градење
И покрај овие ризици, тимовите во голема мера се потпираат на инјектирање на променливи на околината. И со добра причина.
Овозможува pipelines да остане флексибилен. Еден работен тек може да се прилагоди на различни средини, да се автентицира во однос на повеќе услуги и динамички да го менува однесувањето без да го модифицира кодот.
Во брзо движечките DevOps средини, оваа флексибилност е од суштинско значење. Сепак, флексибилноста секогаш доаѓа со компромиси. Колку е подинамичен pipeline Колку станува, толку е потешко да се контролира што се случува во него. Секој дополнителен чекор, интеграција или зависност го зголемува бројот на места каде што може да се пристапи до чувствителни податоци.
Како резултат на тоа, инјектирањето на променливи на околината се префрла од детаљ за конфигурација во безбедносен проблем.
Чести ризици кога инјектирате променливи на околината во процесот на градење
Ризиците не се теоретски. Тие се појавуваат во реалноста. pipelineе секој ден.
Тајни што протекуваат во логовите
Дневниците се еден од најчести извори на изложеностОзнаките за дебагирање, алатките за CLI и трагите на стекот честопати откриваат чувствителни вредности без програмерите да ги забележат.
Откако ќе бидат изложени, тие вредности брзо се шират низ системите.
Премногу дозволив пристап
Многу pipelineги изложуваат сите варијабли на сите работни места. Ова создава непотребен ризик.
Ако еден чекор стане компромитиран, тој може да пристапи до акредитиви што всушност не му се потребни.
Зависност и злоупотреба на дејствување
модерни pipelineсе потпираат во голема мера на алатки и интеграции од трети страни. Овие компоненти работат во истата околина како и вашите тајни.
Ако еден од нив се однесува злонамерно, може тивко да пристапи до инјектираните променливи.
Според OWASP, нападите во синџирот на снабдување често ги експлоатираат доверливите компоненти во процесот на градење. Променливите на околината честопати стануваат најлесната цел.
Резервни тајни во кодот
Кога градбите не успеваат поради недостаток на променливи, тимовите понекогаш додаваат резервни вредности за да ги задржат pipelineтрчање.
Со текот на времето, овие вредности добиваат commitраспоредени или распоредени, создавајќи долгорочна изложеност.
Најдобри практики за безбедно инјектирање на променливи на околината во процесот на градење
| категорија | Најдобра практика | Зошто е важно |
|---|---|---|
| Складирање на тајни | Користете трезор или менаџер за тајни на CI | Спречува изложеност во кодот |
| Контрола на пристап | Ограничете го пристапот по работно место | Ја намалува површината на нападот |
| Влези | Вредности чувствителни на маска | Спречува протекување |
| Опсег и животен век | Користете краткотрајни акредитиви | Го ограничува радиусот на експлозијата |
| Валидација | Неуспешно градење ако недостасуваат променливи | Избегнува небезбедни резервни опции |
Зошто многумина CI/CD Безбедносни алатки Miss Env Var протекување
Повеќето безбедносни алатки се фокусираат на скенирање код или зависности откако ќе заврши градењето.
Сепак, протекувањето на променливите на околината се случува за време на извршувањето.
A pipeline може правилно да инјектира тајни, а сепак да ги разоткрие преку логови или однесување при извршување. Додека скенерот го детектира проблемот, тајната можеби веќе е компромитирана.
Ова создава јаз помеѓу откривањето и превенцијата.
На тимовите им се потребни контроли кои дејствуваат додека pipeline работи, не откако ќе заврши.
Како препорачуваме инјектирање на променлива околина за обезбедување
Во пракса, ефикасната заштита се сведува на неколку конзистентни принципи.
Чувајте тајни надвор од pipeline. Инјектирајте ги само за време на извршување. Ограничете го пристапот на минималниот потребен опсег. Користете краткотрајни акредитиви секогаш кога е можно.
Во исто време, следете како pipelines пристап чувствителни вредности. Неочекуваните шеми на пристап често укажуваат на ризик пред истекувањето да стане видливо.
Овој пристап ја поместува безбедноста од реактивно откривање во проактивна контрола.
Како Xygeni помага во заштитата CI/CD Тајна инјекција
Наместо да се потпира само на скенирање по градењето, Xygeni анализира како pipelineкористат променливи на околината додека се извршуваат. Ова вклучува како тајните се движат низ задачите, како чекорите на градење пристапуваат до нив и како зависностите комуницираат со околината за извршување.
На пример, Xygeni може да открие кога pipeline ги изложува променливите премногу широко, кога чекорот ризикува печатење на чувствителни вредности во логовите или кога зависноста се обидува неочекувано да пристапи до акредитивите.
Во исто време, guardrails спроведува политика директно во pipelineТимовите можат да блокираат небезбедни градби, да го ограничат тајниот пристап до одредени задачи и да спречат ризични конфигурации пред да стигнат до производство.
Бидејќи ова се случува во рамките на CI/CD работниот тек, програмерите не треба да го менуваат начинот на кој работат. Безбедноста станува дел од pipeline, а не посебен чекор.
Како резултат на тоа, тимовите добиваат увид во тоа како се користат тајните, контролираат како се откриваат и го намалуваат ризикот од протекување без да ја забават испораката.
Последни мисли
Сепак, тоа исто така воведува слој на ризик кој честопати останува незабележан.
Предизвикот не е дали да се користат променливи на околината, туку како да се контролира нивната изложеност за време на извршувањето.
Во модерните DevOps средини, спречувањето на протекување за време на процесот на градење е многу поважно од нивното откривање подоцна.




