Hoʻohui mau a me ka hoʻolaha mau (CI/CD) pipelinehe kuleana koʻikoʻi ko lākou i ka hoʻomaʻamaʻa ʻana i ka hoʻomohala polokalamu maʻalahi. Akā naʻe, e like me kēia mau mea pipelineKe lilo nei i mea koʻikoʻi nui, ʻoi aku ka nui o ke koʻikoʻi e pale aku iā lākou mai nā nāwaliwali. Ke kālele nei kēia noiʻi hohonu i ka hoʻoponopono ʻana i kahi pilikia koʻikoʻi i ʻike ʻia ma ka OWASP Top-10 CI/CD Nā Pōʻino Palekana: Ua ʻawahia Pipeline Hoʻokō ʻana (PPE).
He aha ka mea i hoʻomake ʻia Pipeline Hoʻokō (PPE)
Wahi a OWASP Top-10 CI/CD Nā Pōʻino Palekana, "Poisoned Pipeline hooko (PPE) pili ka pilikia i ka hiki o ka mea hoʻouka me ke komo ʻana i nā ʻōnaehana kaohi kumu - a me ke komo ʻole i ke kaiapuni kūkulu - e hoʻoponopono i ke kaʻina hana kūkulu ma o ka hoʻokomo ʻana i nā code/kauoha ʻino i loko o ke kūkulu ʻana pipeline hoʻonohonoho, ʻano nui 'hoʻomake' i ka pipeline a me ka holo ʻana i ke code ʻino ma ke ʻano he ʻāpana o ke kaʻina hana kūkulu"
I loko o kekahi mau huaʻōlelo, ua make i ka lāʻau make Pipeline Hoʻopuka ʻia ka hoʻokō ʻana (PPE) i ka wā hiki i ka mea hoʻouka ke hoʻololi i ka pipeline kūpili.
ʻElua nā mea likeʻole:
- PPE pololei (D-PPE): Ma kahi hiʻohiʻona D-PPE, hoʻololi ka mea hoʻouka i ka faila hoʻonohonoho CI i loko o kahi waihona i loaʻa iā lākou ke komo, ma ke kaomi pololei ʻana i ka hoʻololi i kahi lālā mamao i pale ʻole ʻia ma ka repo, a i ʻole ma ka waiho ʻana i kahi PR me ka hoʻololi mai kahi lālā a i ʻole kahi ʻō. Mai ka wā o ka CI pipeline Ua wehewehe ʻia ka hoʻokō ʻana e nā kauoha i loko o ka faila hoʻonohonoho CI i hoʻololi ʻia, holo hope nā kauoha ʻino a ka mea hoʻouka i loko o ka node kūkulu ke kūkulu ʻia pipeline hoʻomaka ʻia.
- PPE ʻaʻole pololei (ʻO I-PPE): I kekahi mau hihia, ʻaʻole i loaʻa ka hiki ke loaʻa iā D-PPE i kahi ʻenemi me ke komo ʻana i kahi SCM waihona (e laʻa inā ʻo ka pipeline ua hoʻonohonoho ʻia e huki i ka faila hoʻonohonoho CI mai kahi lālā ʻokoʻa a pale ʻia ma ka waihona like). Ma ia ʻano kūlana, ma kahi o ka hoʻomake ʻana i ka pipeline ʻo ia iho, hoʻokomo kahi mea hoʻouka i ke code ʻino i loko o nā faila i kuhikuhi ʻia e ka pipeline (no ka laʻana: nā palapala i kuhikuhi ʻia mai loko mai o ka pipeline faila hoʻonohonoho)
Ma na hihia elua, E hoʻokō ʻo GitHub i ka mea i hoʻololi ʻia pipeline me ka ʻole o ka pono no ka loiloi mua a i ʻole ka ʻae ʻia.
Ka ʻike mua ʻana i ka PPE
Pehea lā e hiki ai iā kākou ke ʻike i kēia ʻano o ka nāwaliwali?
E nānā kākou i kēia laʻana pipeline :
A me ka ʻike o kahi script shell dummy (runtests.sh):
ka pipeline he mea maʻalahi loa ia: ʻo kāna pahuhopu ka hāʻawi ʻana i ka mea loiloi me kekahi mau ʻōlelo aʻoaʻo mua no ka Pull Request Kaʻina hana ʻae (PR):
- E hoʻāla ʻia ia ma noi_pull (ʻo ia hoʻi i kēlā me kēia manawa e hana ʻia ai kahi PR)
- E nānā ana i ke code PR (ʻo ia hoʻi ke code i hāʻawi ʻia)
- E hana ia i ke kūkulu ʻana
- E holo ia i nā hoʻokolohua ma ke code i hāʻawi ʻia (e laʻa me ka hoʻokō ʻana i kahi script shell)
ʻAʻole e holomua nā ʻanuʻu #3 (hana i ke kūkulu ʻana) a me #4 (holo hoʻāʻo) inā ʻaʻole hōʻuluʻulu ke code a i ʻole ʻaʻole ia e hala i nā hoʻāʻo. No laila, hana kēia mau ʻanuʻu ma ke ʻano he mea pono, akā ʻaʻole lawa, e ʻae i ka PR. Inā holomua, e hoʻomau ka luna hoʻomalu repo e nānā i ke code i hāʻawi ʻia a, ma muli o kēlā, e ʻae/hōʻole/manaʻo ʻo ia i ka PR.
Mea Nānā Xygeni
ʻO Xygeni hāʻawi i kahi CLI (ka "Mea Nānā Xygeni") hiki ke hoʻokomo ʻia i loko o kahi pipeline a holo paha ma kahi laina kauoha. E hana ka Xygeni Scanner i ka pipelines e nānā i nā nāwaliwali a, inā hāʻawi ʻia kahi GitHub PAT, e hoʻopili ia i GitHub e ʻike i nā nāwaliwali ma ka pae org/repo.
Papahana Xygeni
Ke hoʻokō mākou iā Xygeni Scanner ma kēia repo, ʻike ia i kahi hoʻonohonoho pono o nā waiwai (ka Papahana Xygeni). E hoʻopiha ʻia ka Papa Inoa me nā ʻano like ʻole he nui CI/CD waiwai, e like me:
- ka SCM System kahi e mālama ʻia ai ka waihona
- ka SCM plugins hoʻokomo ʻia/hoʻohana ʻia
- ka Waihona Kōmike ia iho
- ka SCM o ka hui kahi e pili ana ka repo
- ka CI/CD Pipelinenā hana a me nā hana
- ka CI/CD System holo ana i ka pipelines
- IaC Resources i wehewehe ʻia i loko o ka repo
- Waʻa waho Nā Kūlana
- a pela aku ..
I kā mākou laʻana, hiki iā mākou ke kānana i ka Inventory e kekahi ʻano waiwai kikoʻī (SCM- a me nā waiwai e pili ana iā CICD), no laila hiki iā mākou ke ʻike i kēlā:
- SCM ʻO ka ʻōnaehana ʻo GitHub Cloud
- Mālama ʻia ʻo Repo ma GitHub Cloud a no kahi hui GitHub kikoʻī
- ʻElua pipelinehoʻohana ʻia e GitHub (CI/CD ʻōnaehana)
- kela pipeline aia kekahi ʻanuʻu kikoʻī
Ma ke koho ʻana i nā mea i luna pipeline hiki iā mākou ke ʻike i kekahi mau nāwaliwali:
- At pipeline pae, he palupalu ia i nā mea ʻelua Direct a PPE ʻaʻole pololei.
Hiki iā mākou ke ʻike i nā kikoʻī o kēlā poʻe i make i ka lāʻau make Pipeline Nā nāwaliwali o ka hoʻokō ʻana
Ua ʻike ʻo Xygeni he nāwaliwali i ka D-PPE no ka mea, ua hoʻāla ʻia ma kahi Pull Request hanana a ʻaʻohe mana palekana hou aʻe, no laila hiki i kekahi mea hoʻohana repo ke hoʻololi i ka pipeline a e hoʻokō ʻia kēlā mau hoʻololi me ka ʻole o ka loiloi a ʻāpono ʻole ʻia.
Ma ke ʻano like, ʻike pū ʻo Xygeni he nāwaliwali i ka I-PPE ma muli o ke kāhea ʻana i ka script shell mai ka pipeline: hiki i kekahi mea hoʻohana repo ke hoʻololi i ka script shell a e hoʻokō ʻia kēlā mau hoʻololi me ka ʻole o ka loiloi a ʻae ʻia paha.
Makemake ʻoe e ʻike hou aku?
Ke hoʻohana nei i ka PPE
No ka hoʻohana ʻana i ka PPE e noʻonoʻo kākou i kahi hiʻohiʻona kahi i loaʻa ai ʻelua ʻano o nā mea hoʻohana repo:
- An mea hoʻohana kūloko (kahi mea hoʻomohala kūloko e hana ana ma kēlā repo), me nā ʻae kākau ma ka repo
- An mea hoʻohana waho (kahi mea hoʻomohala outsourced e hana ana ma kēlā repo akā me nā ʻae heluhelu ma ka repo), ʻo ia hoʻi ʻaʻole ʻae ʻia e lālā i ka repo a koi ʻia e hana ma kahi ʻō.
E noʻonoʻo kākou he mau mea hoʻouka ʻino lāua ʻelua (a i ʻole i hoʻohālike ʻia e kahi mea hana ʻino). Aia i loko o ka repo kekahi mea huna a makemake nā mea ʻelua e ʻaihue i ka mea huna repo a hoʻouna iā ia i kahi kikowaena i kāohi ʻia e ka hacker. No ka hana ʻana, e hoʻohana lākou i ka Poisoned Pipeline Nā nāwaliwali o ka hoʻokō ʻana o ka pipeline.
Ma nā hihia ʻelua (mea hoʻohana waho a me loko), wehe lākou i kahi Pull Request me nā hoʻololi like:
- ka pipeline a ua hoʻololi ʻia ka script shell i heluhelu i ka mea huna mai ke kaiapuni a me e hoʻouna iā ia i kahi kikowaena i kāohi ʻia e ka hacker
Penei paha nā hoʻololi ʻana:
E hana nā mea hoʻohana ʻelua i kahi Pull Request me nā hoʻololiMa ka hoʻokumu ʻia ʻana o ka PR, E hoʻokō ʻo GitHub i nā hoʻololi ʻelua (me ka ʻole o ka loiloi mua a i ʻole ka ʻāpono ʻia), e hopena ana i kēia mau mea:
ʻO ia nō no nā mea hoʻohana kākau a heluhelu, ma nā hihia ʻelua ua hoʻokō ʻia ʻo D-PPE a me I-PPE, me ka ʻokoʻa o kēlā ʻaʻole hiki i ka mea hoʻohana heluhelu ke komo i nā mea huna. (!!!!)
ʻO ke kumu kēia, no ka mea, i ke ʻano o kahi PR e hele mai ana mai kahi ʻōpuʻu, ʻaʻole ʻae ʻo GitHub i ke komo ʻana i nā mea huna repo. ʻOiai ʻaʻole hiki i ka mea hoʻohana heluhelu ke heluhelu i nā mea huna, hiki nō iā ia ke holo i kekahi polokalamu ʻē aʻe. ʻO kahi laʻana hoʻouka maʻamau ka hana ʻana i nā PR e hoʻoiho i kahi mea miner crypto, no laila e hoʻokō ka mea holo GitHub i ka mea miner crypto i ka wā e hoʻokō ai i kahi mea i hoʻomake ʻia pipeline.
ʻAʻole kēia he wahi palekana, ʻoiaʻiʻo!! He aha ka mea e hana ai ka luna hoʻomalu repo e pale aku ai?
Ma hope o kekahi mau hana ma Google, ua hoʻoholo ka luna hoʻomalu o ka repo e hoʻololi i ka pipeline e hoʻāla ʻia ma kahi pahuhopu_noi_pull hanana. No ke aha? No ka mea pipelineʻAʻole ʻae ʻia ka hoʻokō ʻana i ka hoʻāla ʻana o s ma ka pull_request_target pipeline ka hoʻololi 'ana, ʻoiai kekahi hoʻololi a ka mea hoʻohana i ka "kumu mua" pipeline e hoʻopaʻi ʻia.
Ma muli o kā mākou laʻana, e like nō ka hoʻouka kaua me ma mua. He aha ka mea e hana ʻia ma hope o kēia pipeline hoʻololi?
E like me ia i manaʻoʻia, ʻAʻole i hoʻokō ʻia ʻo D-PPE akā, no ka mea, aia nō ʻo I-PPE ma laila, hiki i ka mea hoʻohana heluhelu ke komo i ka mea huna repo!!!
He aha ke kumu i loaʻa ai i ka mea hoʻohana heluhelu ke komo i nā mea huna? ʻOiai ʻo ka pipeline ʻaʻole hiki ke hoʻololi ʻia, hiki nō ke hoʻololi i ka script shell. Eia kekahi pipeline ke hoʻāla ʻia ma ka pull_request_target, e hoʻokō ʻia ia ma ke ʻano privileged so ʻo ia nō hoʻi ka palapala shell, e hopena ana i ka loaʻa ʻana o ke komo ʻana o ka script shell i nā mea huna repo!!
Nā Papa Hana Hoʻola
Hāʻawi ʻo GitHub i kekahi mau hana e pale aku ai i nā PR ʻino.
Nā lula palekana lālā
Me GitHub hiki iā ʻoe ke wehewehe i nā Lālā Hoʻomalu Lālā ma luna o nā lālā i koho ʻia.
No kāu mau lālā i pale ʻia, hiki iā ʻoe ke kuhikuhi i kahi kulekele e pono ai a pull request ma mua o ka hui ʻana (a me nā kūlana hou aʻe e like me ka helu o nā ʻāpono i koi ʻia, nā loiloi mai nā mea nona ke code, a pēlā aku.)
ʻElua mau kūlana e pono ai ka noʻonoʻo kūikawā:
- "ʻAe i nā mea hana i kuhikuhi ʻia e kāpae i ka mea i koi ʻia pull requests".
- "Mai ʻae i ka pale ʻana i nā hoʻonohonoho i luna"
ʻOiai ʻo ka hapa nui o nā kūlana e hoʻohui i ka paʻakikī i ke kulekele, hoʻomaha kēia mau mea i ke kulekele a hiki ke komo i kahi puka hāmama i nā hana ʻino, no ka laʻana, i ka hihia e ʻaihue ʻia ai nā hōʻoia e nā mea hana "kuleana".
E kaupalena i nā ʻae GITHUB_TOKEN (kuleana liʻiliʻi loa)
E kaupalena i nā ʻae hōʻailona GitHub i nā mea e pono ai; ma kēia ala, ʻoiai inā kūleʻa ka poʻe hoʻouka i ka hoʻopilikia ʻana i kāu pipeline, ʻaʻole lākou e hiki ke hana nui.
E pale i ka hoʻopili ʻana o ke kaula ma o ka hoʻohana ʻana pipeline nā loli env
I kēlā me kēia manawa āu e hoʻohana ai i kekahi mau loli hoʻokomo i loko o kāu pipeline, e hoʻomaopopo he pono e noʻonoʻo ʻia lākou ma ka paʻamau he ʻikepili "hilinaʻi ʻole ʻia" (ua kāohi ʻia kā lākou ʻike e ka mea hoʻohana hope). E nānā Nā Hana a me nā Kaʻina Hana i Hilinaʻi ʻole ʻia e Palekana a E aʻo i nā hana Github.
Pono ʻoe e hoʻohana mau i nā loli kaiapuni e hoʻokomo i nā loli hoʻokomo i loko o nā script ma kahi o ka hoʻohana ʻana i ka interpolation string.
Nā holo ʻana o ka hana a me nā koi ʻae ʻia
no ka mea, aupuni repos, ʻae ʻo GitHub e kuhikuhi pehea e hana ai me nā PR "waho".
Nā hoʻonohonoho hoʻonohonoho GitHub (“Org >> Settings >> Actions >> General”) e wehewehe pehea e hoʻokele ai i nā PR waho:
Ma ka paʻamau, e koi ana ʻo GitHub i ka ʻae PR no nā mea kōkua manawa mua, e hoʻolilo ana i nā hoʻouka kaua noi ʻino i mea paʻakikī. Eia nō naʻe, hiki i ka mea hoʻouka ke loaʻa ka hilinaʻi o nā mea mālama papahana no ka laʻana ma ka hāʻawi ʻana i kekahi mau mea hala ʻole pull request ma mua o ka hoʻouka kaua maoli.
I kēia manaʻo, ka ʻO ke koho 3 (Pono ka ʻae ʻia no nā mea hana pū ma waho) e hoʻohui i kahi pae kiʻekiʻe o ka mana.
no ka mea, uku nā repos, hāʻawi pū ʻo GitHub i ka mana kōkua ma ka pae Organization- a me Repo.
"E holo i nā kahe hana mai Pull Requests"(ʻaʻole i nānā ʻia ma ka paʻamau) e ʻae i nā mea hoʻohana e holo i nā kahe hana mai nā PR fork (me ka hoʻohana ʻana i kahi GITHUB_TOKEN me nā ʻae heluhelu wale nō a me ke komo ʻole i nā mea huna). Ma ke koho ʻana i kēia koho me ka mea hope loa ("Pono ka ʻae ʻia no nā kahe hana PR fork"), hiki iā ʻoe ke hoʻokō i kahi kulekele like me nā repos pilikino (e like me ka mea i hōʻike ʻia ma luna).
E like me kā mākou i ʻike ai ma ka hoʻohana ʻana o ka PPE mai kahi mea hoʻohana heluhelu, e ʻae ana i ka holo ʻana o nā kahe hana mai ka fork pull requests ʻaʻole palekana!!
Nā koho i koe ("E hoʻouna i nā hōʻailona kākau i nā kahe hana mai ka fork pull requests"A me"E hoʻouna i nā mea huna a me nā loli i nā kahe hana mai no pull requests") e hoʻemi i ka pae palekana i hoʻopili ʻia i nā PR fork.
Hiki iā ʻoe ke wehewehe i kēia kulekele fork ma ka Pae Hui a i ʻole ma ka pae Repo. Inā ua hoʻopau ʻia ke kulekele ma ka pae org, ʻaʻole hiki ke hoʻā ʻia ma ka pae repo. Akā, inā ua hoʻā ʻia ke kulekele ma ka pae org, hiki ke hoʻopau ʻia ma ka pae repo.
ʻO Recap
Ke lana nei ko mākou manaʻo ua ʻike ʻoe i nā hopena o ka loaʻa ʻana o kekahi pipeline nāwaliwali i ka lāʻau make Pipeline Hoʻokō. He mea maʻalahi loa ia commit he mea palupalu pipeline, a he mea paʻakikī ke kākau i kahi palekana.
No laila, he mea waiwai nui ka hoʻohana ʻana i ka Xygeni Scanner e makaʻala i ia mau nāwaliwali.
ʻAʻole hiki iā ʻoe ke hoʻoponopono i kahi vuln ke ʻole ʻoe e ʻike i kona ola ʻana !!
Akā… Aia nō kahi nīnau e kali ana… Pehea e pale aku ai i ka I-PPE?
ʻO kēia ke kumuhana o kā mākou pou aʻe 🙂 … ʻAi ʻia me ka lāʻau ʻino ʻole Pipeline Hoʻokō (I-PPE) !!




