Basic Github Information

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Muundo Msingi

Muundo msingi wa mazingira ya github ya kampuni kubwa ni kuwa na kampuni ambayo inamiliki biashara ambayo inamiliki shirika kadhaa na kila moja inaweza kuwa na repositori kadhaa na timu kadhaa. Kampuni ndogo inaweza kuwa na shirika moja tu na hakuna biashara.

Kutoka mtazamo wa mtumiaji, mtumiaji anaweza kuwa mwanachama wa biashara na mashirika tofauti. Ndani yao, mtumiaji anaweza kuwa na majukumu tofauti ya biashara, shirika na repositori.

Zaidi ya hayo, mtumiaji anaweza kuwa sehemu ya timu tofauti na majukumu tofauti ya biashara, shirika au repositori.

Na mwishowe repositori zinaweza kuwa na mifumo maalum ya ulinzi.

Mamlaka

Majukumu ya Biashara

  • Mmiliki wa Biashara: Watu wenye jukumu hili wanaweza kusimamia wasimamizi, kusimamia mashirika ndani ya biashara, kusimamia mipangilio ya biashara, kutekeleza sera kote mashirika. Hata hivyo, hawawezi kufikia mipangilio au maudhui ya shirika isipokuwa wamewekwa kama mmiliki wa shirika au kupewa ufikiaji wa moja kwa moja kwenye repositori inayomilikiwa na shirika

  • Wanachama wa Biashara: Wanachama wa mashirika yanayomilikiwa na biashara yako pia ni wanachama wa moja kwa moja wa biashara.

Majukumu ya Shirika

Katika shirika, watumiaji wanaweza kuwa na majukumu tofauti:

  • Wamiliki wa Shirika: Wamiliki wa shirika wana ufikiaji kamili wa utawala wa shirika lako. Jukumu hili linapaswa kuwa mdogo, lakini si chini ya watu wawili, katika shirika lako.

  • Wanachama wa Shirika: Jukumu la msingi, sio la utawala kwa watu katika shirika ni mwanachama wa shirika. Kwa chaguo-msingi, wanachama wa shirika wanayo idadi ya ruhusa.

  • Meneja wa Bili: Meneja wa bili ni watumiaji ambao wanaweza kusimamia mipangilio ya bili kwa shirika lako, kama vile habari za malipo.

  • Meneja wa Usalama: Ni jukumu ambalo wamiliki wa shirika wanaweza kumpa kwa timu yoyote katika shirika. Inapotumiwa, inawapa kila mwanachama wa timu ruhusa za kusimamia tahadhari za usalama na mipangilio kote kwenye shirika lako, pamoja na ruhusa za kusoma kwa repositori zote katika shirika.

  • Ikiwa shirika lako lina timu ya usalama, unaweza kutumia jukumu la meneja wa usalama kuwapa wanachama wa timu ufikiaji mdogo wanahitaji kwa shirika.

  • Meneja wa Programu ya Github: Ili kuruhusu watumiaji wengine kusimamia Programu za GitHub zinazomilikiwa na shirika, mmiliki anaweza kuwapa ruhusa za Meneja wa Programu ya GitHub.

  • Washirika wa Nje: Mshirika wa nje ni mtu ambaye ana ufikiaji wa moja au zaidi ya repositori za shirika lakini sio mwanachama rasmi wa shirika.

Unaweza kulinganisha ruhusa za majukumu haya katika jedwali hili: https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles

Ruhusa za Wanachama

Katika https://github.com/organizations/<org_name>/settings/member_privileges unaweza kuona ruhusa ambazo watumiaji watakuwa nazo kwa kuwa sehemu ya shirika.

Mipangilio iliyowekwa hapa itaonyesha ruhusa zifuatazo za wanachama wa shirika:

  • Kuwa msimamizi, mwandishi, msomaji au bila ruhusa kwenye repositori zote za shirika.

  • Ikiwa wanachama wanaweza kuunda repositori za kibinafsi, za ndani au za umma.

  • Ikiwa kuforka kwa repositori kunawezekana

  • Ikiwa ni rahisi kuwaalika washirika wa nje

  • Ikiwa tovuti za umma au za kibinafsi zinaweza kuchapishwa

  • Ruhusa ambazo wasimamizi wanazo kwenye repositori

  • Ikiwa wanachama wanaweza kuunda timu mpya

Majukumu ya Repositori

Kwa chaguo-msingi majukumu ya repositori ni:

  • Soma: Inapendekezwa kwa wachangiaji wasio wa namna ya kificho ambao wanataka kuona au kujadili mradi wako

  • Tathmini: Inapendekezwa kwa wachangiaji ambao wanahitaji kusimamia masuala na maombi ya kuchangia bila ufikiaji wa kuandika

  • Andika: Inapendekezwa kwa wachangiaji wanaosukuma kwa bidii kwenye mradi wako

  • Tunza: Inapendekezwa kwa wakurugenzi wa mradi ambao wanahitaji kusimamia repositori bila ufikiaji wa hatua zenye siri au zenye kuharibu

  • Msimamizi: Inapendekezwa kwa watu wanaohitaji ufikiaji kamili kwenye mradi, ikiwa ni pamoja na hatua zenye siri na zenye kuharibu kama kusimamia usalama au kufuta repositori

Unaweza kulinganisha ruhusa za kila jukumu katika jedwali hili https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role

Unaweza pia kuunda majukumu yako mwenyewe katika https://github.com/organizations/<org_name>/settings/roles

Timu

Unaweza kuorodhesha timu zilizoundwa katika shirika katika https://github.com/orgs/<org_name>/teams. Tafadhali kumbuka kuwa ili kuona timu ambazo ni watoto wa timu nyingine unahitaji kufikia kila timu mama.

Watumiaji

Watumiaji wa shirika wanaweza kuorodheshwa katika https://github.com/orgs/<org_name>/people.

Katika habari ya kila mtumiaji unaweza kuona timu ambazo mtumiaji ni mwanachama, na repositori ambazo mtumiaji ana ufikiaji.

Uthibitishaji wa Github

Github inatoa njia tofauti za kuthibitisha akaunti yako na kufanya vitendo kwa niaba yako.

Upatikanaji wa Wavuti

Kwa kuingia github.com unaweza kuingia kwa kutumia jina lako la mtumiaji na nywila (na 2FA inawezekana).

Vidokezo vya SSH

Unaweza kusanidi akaunti yako na funguo moja au kadhaa za umma kuruhusu funguo ya kibinafsi inayohusiana kufanya vitendo kwa niaba yako. https://github.com/settings/keys

Vidokezo vya GPG

Hauwezi kujifanya kuwa mtumiaji na funguo hizi lakini ikiwa hutumii inaweza kuwa inawezekana kwamba unagundulika kwa kutuma commits bila saini. Jifunze zaidi kuhusu hali ya tahadhari hapa.

Vidokezo vya Ufikiaji Binafsi

Unaweza kuzalisha kitufe cha ufikiaji binafsi ili kumpa programu ufikiaji wa akaunti yako. Wakati wa kuunda kitufe cha ufikiaji binafsi mtumiaji anahitaji kutaja ruhusa kitufe kitakuwa nacho. https://github.com/settings/tokens

Maombi ya Oauth

Maombi ya Oauth yanaweza kukuhitaji ruhusa ya kupata sehemu ya habari yako ya github au kujifanya wewe kufanya baadhi ya vitendo. Mfano wa kawaida wa hii ni kitufe cha kuingia kwa kutumia github unaweza kukipata kwenye baadhi ya majukwaa.

Baadhi ya mapendekezo ya usalama:

  • OAuth App daima inapaswa kutenda kama mtumiaji aliyethibitishwa wa GitHub kote GitHub (kwa mfano, wakati wa kutoa taarifa kwa mtumiaji) na na ufikivu tu kwa scopes zilizotajwa.

  • OAuth App inaweza kutumika kama mtoa huduma wa kitambulisho kwa kuwezesha "Kuingia kwa kutumia GitHub" kwa mtumiaji aliyethibitishwa.

  • Usi jenge OAuth App ikiwa unataka programu yako itende kwenye repo pekee. Kwa scope ya repo, Maombi ya OAuth yanaweza kutenda kwenye _zote_** za repositorie za mtumiaji aliye thibitishwa**.

  • Usi jenge OAuth App itende kama programu kwa timu au kampuni yako. Maombi ya OAuth yanathibitisha kama mtumiaji mmoja, hivyo ikiwa mtu mmoja anaunda OAuth App kwa kampuni kutumia, na kisha anaondoka kampuni, hakuna mtu mwingine atakuwa na ufikivu wake.

  • Zaidi katika hapa.

Maombi ya Github

Maombi ya Github yanaweza kuomba ruhusa ya kupata habari yako ya github au kujifanya wewe kufanya vitendo maalum juu ya rasilimali maalum. Katika Maombi ya Github unahitaji kutaja repositori ambazo programu itakuwa na ufikivu.

Baadhi ya mapendekezo ya usalama:

  • GitHub App inapaswa kuchukua hatua bila kuhusisha mtumiaji (isipokuwa programu inatumia tokeni ya mtumiaji-kwa-server). Ili kudumisha usalama wa tokeni za mtumiaji-kwa-server, unaweza kutumia tokeni za ufikivu ambazo zitakwisha baada ya masaa 8, na tokeni ya kuboresha ambayo inaweza kubadilishwa na tokeni mpya ya ufikivu. Kwa maelezo zaidi, angalia "Kuboresha tokeni za ufikivu wa mtumiaji-kwa-server."

  • Hakikisha GitHub App inaunganisha na repositori maalum.

  • GitHub App inapaswa kuunganishwa kwenye akaunti ya kibinafsi au shirika.

  • Usitarajie GitHub App ijue na ifanye kila kitu ambacho mtumiaji anaweza kufanya.

  • Usitumie GitHub App ikiwa unahitaji tu huduma ya "Kuingia kwa kutumia GitHub". Lakini GitHub App inaweza kutumia mtiririko wa utambulisho wa mtumiaji kuwaingiza watumiaji na kufanya mambo mengine.

  • Usijenge GitHub App ikiwa pekee unataka kutenda kama mtumiaji wa GitHub na kufanya kila kitu ambacho mtumiaji huyo anaweza kufanya.

  • Ikiwa unatumia programu yako na Vitendo vya GitHub na unataka kuhariri faili za mchakato, lazima uthibitishe kwa niaba ya mtumiaji kwa kutumia tokeni ya OAuth ambayo inajumuisha scope ya workflow. Mtumiaji lazima awe na ruhusa ya msimamizi au kuandika kwenye repositori inayohifadhi faili ya mchakato. Kwa maelezo zaidi, angalia "Kuelewa scopes kwa maombi ya OAuth."

  • Zaidi katika hapa.

Vitendo vya Github

Hii si njia ya kuthibitisha kwenye github, lakini Vitendo vya Github vilivyo na nia mbaya vinaweza kupata ufikivu usioruhusiwa kwenye github na kulingana na ruhusa zilizotolewa kwa Vitendo hivyo, mashambulizi mbalimbali yanaweza kufanywa. Tazama hapo chini kwa maelezo zaidi.

Vitendo vya Git

Vitendo vya Git huruhusu kiotomatiki utekelezaji wa namna ya kificho wakati tukio linatokea. Kawaida kificho kinachotekelezwa kina husiana kwa njia fulani na kificho cha repositori (labda kujenga chombo cha docker au kuhakiki kuwa PR haina siri).

Usanidi

Katika https://github.com/organizations/<org_name>/settings/actions niwezekanavyo kuangalia usanidi wa vitendo vya github kwa shirika.

Inawezekana kupiga marufuku matumizi ya vitendo vya github kabisa, kuruhusu vitendo vyote vya github, au kuruhusu vitendo fulani tu.

Pia niwezekanavyo kusanidi nani anahitaji idhini ya kuendesha Vitendo vya Github na ruhusa za GITHUB_TOKEN ya Vitendo vya Github wakati inatekelezwa.

Siri za Git

Vitendo vya Github kawaida vinahitaji aina fulani ya siri kuingiliana na github au programu za mtu wa tatu. Ili kuepuka kuziweka wazi kwenye repo, github inaruhusu kuziweka kama Siri.

Siri hizi zinaweza kusanidiwa kwa repo au kwa shirika zima. Kisha, ili Vitendo viweze kupata siri, unahitaji kuitangaza kama:

steps:
- name: Hello world action
with: # Set the secret as an input
super_secret: ${{ secrets.SuperSecret }}
env: # Or as an environment variable
super_secret: ${{ secrets.SuperSecret }}

Mfano wa kutumia Bash

steps:
- shell: bash
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$SUPER_SECRET"

Siri inaweza kupatikana tu kutoka kwa Vitendo vya Github vilivyo nayo yametangazwa.

Mararekodi mara zilipowekwa kwenye repo au watumiaji wa github wa shirika hawataweza kuzipata tena, wataweza kuzibadilisha tu.

Kwa hivyo, njia pekee ya kuiba siri za github ni kuweza kupata mashine inayotekeleza Hatua ya Github (katika hali hiyo utaweza kupata siri zilizotangazwa kwa Hatua).

Mazingira ya Git

Github inaruhusu kuunda mazingira ambapo unaweza kuhifadhi siri. Kisha, unaweza kumpa hatua ya github upatikanaji wa siri ndani ya mazingira kwa kitu kama:

jobs:
deployment:
runs-on: ubuntu-latest
environment: env_name

Unaweza configure mazingira ili yafikiwe na matawi yote (chaguo-msingi), matawi yaliyolindwa tu au kutaja ni matawi gani yanaweza kufikia. Pia inaweza kuweka idadi ya mapitio yanayohitajika kabla ya kutekeleza kitendo kutumia mazingira au kungoja muda fulani kabla ya kuruhusu mchakato wa kupeleka uendelee.

Git Action Runner

Hatua ya Github inaweza kutekelezwa ndani ya mazingira ya github au inaweza kutekelezwa kwenye miundombinu ya mtu wa tatu iliyowekwa na mtumiaji.

Mashirika kadhaa itaruhusu kukimbia Hatua za Github kwenye miundombinu ya mtu wa tatu kwani inatumika kuwa nafuu.

Unaweza kuorodhesha wakimbiaji wanaojitunza wenyewe wa shirika katika https://github.com/organizations/<org_name>/settings/actions/runners

Njia ya kupata ni Hatua za Github zinazotekelezwa kwenye miundombinu isiyo ya github ni kutafuta runs-on: self-hosted katika yaml ya usanidi wa Hatua ya Github.

Haiwezekani kukimbia Hatua ya Github ya shirika ndani ya sanduku lililotunzwa na mtu mwingine kwa sababu kitufe kimoja cha kipekee huzalishwa kwa Runner wakati wa kuiweka ili kujua wakimbiaji wanakaa wapi.

Ikiwa Wakimbiaji wa Github wa kujitunza wenyewe wameboreshwa kwenye mashine ndani ya AWS au GCP kwa mfano, Hatua inaweza kupata ufikio wa mwisho wa metadata na kuiba kitufe cha akaunti ya huduma ambayo mashine inaendeshwa nayo.

Uvamizi wa Hatua ya Git

Ikiwa hatua zote (au hatua yenye nia mbaya) zinaruhusiwa, mtumiaji anaweza kutumia hatua ya Github ambayo ni yenye nia mbaya na ita vamia kontena ambapo inatekelezwa.

Uvamizi wa Hatua ya Github unaweza kutumiwa vibaya na mkaidi kufanya yafuatayo:

  • Kuiba siri zote ambazo Hatua ina ufikio

  • Kusonga kwa upande ikiwa Hatua inatekelezwa ndani ya miundombinu ya mtu wa tatu ambapo kitufe cha SA kinachotumiwa kuendesha mashine kinaweza kupatikana (labda kupitia huduma ya metadata)

  • Kutumia kitufe kinachotumiwa na mfumo wa kazi kuiba msimbo wa repo ambapo Hatua inatekelezwa au hata kuubadilisha.

Kinga ya Matawi

Kinga za matawi zimeundwa ili kutotoa udhibiti kamili wa hifadhi kwa watumiaji. Lengo ni kuweka njia kadhaa za ulinzi kabla ya kuweza kuandika msimbo ndani ya tawi fulani.

Kinga za matawi ya hifadhi zinaweza kupatikana katika https://github.com/<orgname>/<reponame>/settings/branches

Haiwezekani kuweka kinga ya tawi kwa kiwango cha shirika. Kwa hivyo zote lazima zitangazwe kwenye kila repo.

Kinga tofauti zinaweza kutumika kwa tawi (kama kwa mkuu):

  • Unaweza kuhitaji PR kabla ya kufunga (kwa hivyo huwezi moja kwa moja kufunga msimbo juu ya tawi). Ikiwa hii imechaguliwa, kinga zingine zinaweza kuwekwa:

  • Hitaji idhini fulani. Ni kawaida sana kuhitaji watu 1 au 2 zaidi kuidhinisha PR yako ili mtumiaji mmoja asiweze kufunga msimbo moja kwa moja.

  • Futa idhini wakati maandiko mapya yanapopakiwa. Ikiwa la, mtumiaji anaweza kuidhinisha msimbo halali kisha mtumiaji anaweza kuongeza msimbo wa nia mbaya na kufunga.

  • Hitaji mapitio kutoka kwa Wamiliki wa Msimbo. Angalau mmiliki 1 wa msimbo wa repo anahitaji kuidhinisha PR (kwa hivyo watumiaji "wasiotarajiwa" hawawezi kuidhinisha).

  • Zuia nani anaweza kufuta mapitio ya ombi la kufunga. Unaweza kufafanua watu au timu zinazoruhusiwa kufuta mapitio ya ombi la kufunga.

  • Ruhusu waigizaji waliotajwa kukiuka mahitaji ya ombi la kufunga. Watumiaji hawa wataweza kukiuka vizuizi vilivyopita.

  • Hitaji ukaguzi wa hali kufaulu kabla ya kufunga. Baadhi ya ukaguzi unahitaji kufaulu kabla ya kuweza kufunga kisasa (kama hatua ya github ikikagua ikiwa kuna siri wazi).

  • Hitaji ufumbuzi wa mazungumzo kabla ya kufunga. Maoni yote kwenye msimbo yanahitaji kutatuliwa kabla ya PR kufungwa.

  • Hitaji maandishi yaliyosainiwa. Maandishi lazima yasainiwe.

  • Hitaji historia lineari. Zuia maingiliano ya kufunga kutumwa kwa matawi yanayolingana.

  • Jumuisha wasimamizi. Ikiwa hii haijatanguliwa, wasimamizi wanaweza kukiuka vizuizi.

  • Zuia nani anaweza kutuma kwa matawi yanayolingana. Zuia nani anaweza kutuma ombi la kufunga.

Kama unavyoona, hata kama umefanikiwa kupata baadhi ya vibali vya mtumiaji, hifadhi inaweza kulindwa ikikuzuia kufunga msimbo kwa mkuu kwa mfano kuvamia mfumo wa CI/CD.

Marejeo

Jifunze kuhusu uvamizi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated