Basic Github Information
Osnovna struktura
Osnovna struktura Github okruženja velike kompanije je da poseduje preduzeće koje poseduje nekoliko organizacija, a svaka od njih može sadržati nekoliko repozitorijuma i nekoliko timova. Manje kompanije mogu samo posedovati jednu organizaciju i nemaju preduzeća.
Sa korisničke tačke gledišta, korisnik može biti član različitih preduzeća i organizacija. U okviru njih, korisnik može imati različite uloge preduzeća, organizacije i repozitorijuma.
Osim toga, korisnik može biti deo različitih timova sa različitim ulogama preduzeća, organizacije ili repozitorijuma.
I na kraju, repozitorijumi mogu imati posebne mehanizme zaštite.
Privilegije
Uloge preduzeća
Vlasnik preduzeća: Osobe sa ovom ulogom mogu upravljati administratorima, upravljati organizacijama unutar preduzeća, upravljati podešavanjima preduzeća, primenjivati politiku preko organizacija. Međutim, oni ne mogu pristupiti podešavanjima ili sadržaju organizacije osim ako im se ne dodeli uloga vlasnika organizacije ili im se ne dodeli direktan pristup repozitorijumu koji je u vlasništvu organizacije.
Članovi preduzeća: Članovi organizacija koje je vaše preduzeće vlasnik su automatski članovi preduzeća.
Uloge organizacija
U organizaciji korisnici mogu imati različite uloge:
Vlasnici organizacije: Vlasnici organizacije imaju potpuni administrativni pristup vašoj organizaciji. Ova uloga treba da bude ograničena, ali ne manje od dve osobe, u vašoj organizaciji.
Članovi organizacije: Podrazumevana, neadministrativna uloga za osobe u organizaciji je uloga člana organizacije. Podrazumevano, članovi organizacije imaju određene dozvole.
Menadžeri naplate: Menadžeri naplate su korisnici koji mogu upravljati podešavanjima naplate za vašu organizaciju, kao što su informacije o plaćanju.
Menadžeri bezbednosti: To je uloga koju vlasnici organizacije mogu dodeliti bilo kom timu u organizaciji. Kada se primeni, daje svakom članu tima dozvole za upravljanje bezbednosnim upozorenjima i podešavanjima u okviru vaše organizacije, kao i dozvole za čitanje svih repozitorijuma u organizaciji.
Ako vaša organizacija ima tim za bezbednost, možete koristiti ulogu menadžera bezbednosti da članovima tima pružite najmanji pristup koji im je potreban za organizaciju.
Menadžeri Github aplikacija: Da biste omogućili dodatnim korisnicima da upravljaju GitHub aplikacijama koje su u vlasništvu organizacije, vlasnik može dodeliti dozvole menadžera GitHub aplikacija.
Saradnici izvan organizacije: Saradnik izvan organizacije je osoba koja ima pristup jednom ili više repozitorijuma organizacije, ali nije eksplicitno član organizacije.
Možete uporediti dozvole ovih uloga u ovoj tabeli: https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles
Privilegije članova
Na https://github.com/organizations/<org_name>/settings/member_privileges možete videti dozvole koje će korisnici imati samo zato što su deo organizacije.
Podešavanja ovde konfigurisana će pokazati sledeće dozvole članova organizacije:
Biti administrator, pisac, čitalac ili nemati dozvolu za sve repozitorijume organizacije.
Ako članovi mogu kreirati privatne, interne ili javne repozitorijume.
Ako je moguće kloniranje repozitorijuma
Ako je moguće pozivati saradnike izvan organizacije
Ako je moguće objavljivati javne ili privatne sajtove
Dozvole koje administratori imaju nad repozitorijumima
Ako članovi mogu kreirati nove timove
Uloge repozitorijuma
Podrazumevane uloge repozitorijuma su:
Čitanje: Preporučuje se za saradnike koji nisu programeri a žele da pregledaju ili diskutuju o vašem projektu
Triage: Preporučuje se za saradnike koji trebaju proaktivno upravljati problemima i zahtevima za povlačenje bez pristupa za pisanje
Pisanje: Preporučuje se za saradnike koji aktivno doprinose vašem projektu
Održavanje: Preporučuje se za menadžere projekta koji trebaju upravljati repozitorijumom bez pristupa osetljivim ili destruktivnim radnjama
Administracija: Preporučuje se za osobe koje trebaju puni pristup projektu, uključujući osetljive i destruktivne radnje poput upravljanja bezbednošću ili brisanja repozitorijuma
Možete uporediti dozvole svake uloge u ovoj tabeli https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role
Takođe možete kreirati sopstvene uloge na https://github.com/organizations/<org_name>/settings/roles
Timovi
Možete prikazati listu timova koji su kreirani u organizaciji na https://github.com/orgs/<org_name>/teams. Imajte na umu da da biste videli timove koji su podređeni drugim timovima, morate pristupiti svakom nadređenom timu.
Korisnici
Korisnici organizacije mogu biti prikazani na https://github.com/orgs/<org_name>/people.
U informacijama o svakom korisniku možete videti timove kojima korisnik pripada i repozitorijume kojima korisnik ima pristup.
Github autentifikacija
Github nudi različite načine autentifikacije na vašem nalogu i
Oauth Aplikacije
Oauth aplikacije mogu zatražiti dozvole za pristup delu vaših github informacija ili za impersonaciju vas kako bi izvršile određene radnje. Uobičajeni primer ove funkcionalnosti je dugme za prijavu putem githuba koje možete pronaći na nekim platformama.
Možete kreirati svoje Oauth aplikacije na https://github.com/settings/developers
Možete videti sve Oauth aplikacije koje imaju pristup vašem nalogu na https://github.com/settings/applications
Možete videti opsege koje Oauth aplikacije mogu tražiti na https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps
Možete videti pristup trećih strana aplikacija u organizaciji na https://github.com/organizations/<org_name>/settings/oauth_application_policy
Neki preporučeni bezbednosni saveti:
Oauth aplikacija uvek treba da deluje kao autentifikovani GitHub korisnik na celom GitHub-u (na primer, pružajući obaveštenja korisniku) i sa pristupom samo određenim opsezima.
Oauth aplikacija može se koristiti kao pružalac identiteta omogućavanjem "Prijave putem GitHub-a" za autentifikovanog korisnika.
Ne pravite Oauth aplikaciju ako želite da vaša aplikacija deluje samo na jednom repozitorijumu. Sa
repo
Oauth opsegom, Oauth aplikacije mogu delovati na svim repozitorijumima autentifikovanog korisnika.Ne pravite Oauth aplikaciju da deluje kao aplikacija za vaš tim ili kompaniju. Oauth aplikacije se autentifikuju kao jedan korisnik, pa ako jedna osoba kreira Oauth aplikaciju za kompaniju i napusti je, niko drugi neće imati pristup njoj.
Više informacija možete pronaći ovde.
Github Aplikacije
Github aplikacije mogu zatražiti dozvole za pristup vašim github informacijama ili impersonaciju vas kako bi izvršile određene radnje nad određenim resursima. U Github aplikacijama morate navesti repozitorijume kojima će aplikacija imati pristup.
Da biste instalirali GitHub aplikaciju, morate biti vlasnik organizacije ili imati administratorske dozvole na repozitorijumu.
GitHub aplikacija treba da se poveže sa ličnim nalogom ili organizacijom.
Možete kreirati svoju Github aplikaciju na https://github.com/settings/apps
Možete videti sve Github aplikacije koje imaju pristup vašem nalogu na https://github.com/settings/apps/authorizations
Ovo su API Endpointi za Github aplikacije https://docs.github.com/en/rest/overview/endpoints-available-for-github-app. Zavisno od dozvola aplikacije, ona će moći da pristupi nekima od njih.
Možete videti instalirane aplikacije u organizaciji na https://github.com/organizations/<org_name>/settings/installations
Neki bezbednosni saveti:
Github aplikacija treba da preduzima radnje nezavisno od korisnika (osim ako aplikacija koristi token za zahteve od korisnika ka serveru). Da biste obezbedili sigurnost tokena za zahteve od korisnika ka serveru, možete koristiti pristupne tokene koji ističu nakon 8 sati, i osvežavajući token koji se može zameniti za novi pristupni token. Za više informacija, pogledajte "Osvežavanje tokena za zahteve od korisnika ka serveru."
Proverite da li Github aplikacija integriše sa određenim repozitorijumima.
Github aplikacija treba da se poveže sa ličnim nalogom ili organizacijom.
Nemojte očekivati da Github aplikacija zna i radi sve što korisnik može.
Ne koristite Github aplikaciju ako vam je potrebna samo usluga "Prijave putem GitHub-a". Ali Github aplikacija može koristiti tok identifikacije korisnika za prijavu korisnika i obavljanje drugih radnji.
Ne pravite Github aplikaciju ako želite samo da delujete kao GitHub korisnik i radite sve što taj korisnik može.
Ako koristite svoju aplikaciju sa Github Akcijama i želite da menjate fajlove radnog toka, morate se autentifikovati u ime korisnika sa OAuth tokenom koji uključuje opseg
workflow
. Korisnik mora imati administratorske ili dozvole za pisanje na repozitorijumu koji sadrži fajl radnog toka. Za više informacija, pogledajte "Razumevanje opsega za OAuth aplikacije."Više informacija možete pronaći ovde.
Github Akcije
Ovo nije način autentifikacije u github-u, već zlonamerna Github Akcija može dobiti neovlašćen pristup github-u i zavisno od privilegija dodeljenih Akciji, mogu se izvršiti različiti napadi. Pogledajte ispod za više informacija.
Git Akcije
Git akcije omogućavaju automatizaciju izvršavanja koda kada se dogodi određeni događaj. Obično se izvršeni kod nekom vrstom odnosi na kod repozitorijuma (na primer, izgradnja Docker kontejnera ili provera da li PR sadrži tajne informacije).
Konfiguracija
Na https://github.com/organizations/<org_name>/settings/actions moguće je proveriti konfiguraciju Github Akcija za organizaciju.
Moguće je zabraniti upotrebu Github Akcija u potpunosti, dozvoliti sve Github Akcije, ili dozvoliti samo određene akcije.
Takođe je moguće konfigurisati ko mora dati odobrenje za pokretanje Github Akcije i dozvole GITHUB_TOKEN-a Github Akcije prilikom pokretanja.
Git Tajne
Github Akcije obično zahtevaju neku vrstu tajnih informacija kako bi komunicirale sa github-om ili aplikacijama trećih strana. Da biste izbegli njihovo izlaganje u vidljivom tekstu u repozitorijumu, github omogućava da ih postavite kao Tajne.
Ove tajne mogu se konfigurisati za repozitorijum ili za celu organizaciju. Zatim, kako bi Akcija mogla pristupiti tajnoj informaciji, morate je deklarisati kao:
Primer korišćenja Bash-a
Tajne mogu biti pristupljene samo iz Github akcija koje ih imaju deklarisane.
Jednom konfigurisane u repozitorijumu ili organizaciji, korisnici Githuba više neće moći da im pristupe, samo će moći da ih promene.
Stoga, jedini način da ukradete Github tajne je da imate pristup mašini koja izvršava Github akciju (u tom scenariju možete pristupiti samo tajnama deklarisanim za akciju).
Git okruženja
Github omogućava kreiranje okruženja u kojima možete sačuvati tajne. Zatim, možete omogućiti pristup Github akciji tajnama unutar okruženja koristeći nešto poput:
Možete konfigurisati okruženje da bude dostupno svim granama (podrazumevano), samo zaštićenim granama ili odrediti koje grane mogu pristupiti tome. Takođe možete postaviti broj potrebnih pregleda pre izvršavanja akcije koristeći okruženje ili sačekati neko vreme pre nego što dozvolite izvršavanje implementacija.
Git Action Runner
Github akcija može se izvršiti unutar github okruženja ili se može izvršiti u infrastrukturi treće strane koju korisnik konfiguriše.
Nekim organizacijama će biti dozvoljeno da pokreću Github akcije u infrastrukturi treće strane jer je to obično jeftinije.
Možete prikazati listu samostalnih runnera organizacije na adresi https://github.com/organizations/<org_name>/settings/actions/runners
Način da saznate koje se Github akcije izvršavaju u infrastrukturi koja nije Github je da pretražite runs-on: self-hosted
u konfiguraciji yaml fajla Github akcije.
Nije moguće pokrenuti Github akciju organizacije unutar samostalne mašine druge organizacije jer se jedinstveni token generiše za Runnera prilikom konfigurisanja kako bi se znalo kojoj organizaciji Runner pripada.
Ako je prilagođeni Github Runner konfigurisan na mašini unutar AWS ili GCP na primer, akcija može imati pristup metapodacima i ukrasti token servisnog naloga sa kojim mašina radi.
Kompromitacija Git Action
Ako su sve akcije (ili zlonamerna akcija) dozvoljene, korisnik može koristiti Github akciju koja je zlonamerna i kompromituje kontejner u kojem se izvršava.
Zlonamerna Github akcija može biti zloupotrebljena od strane napadača da:
Ukrade sve tajne do kojih akcija ima pristup
Proširi se lateralno ako se akcija izvršava u infrastrukturi treće strane gde se može pristupiti SA tokenu koji se koristi za pokretanje mašine (verovatno putem metapodatkovne usluge)
Zloupotrebi token koji koristi tok rada da ukrade kod repozitorijuma gde se akcija izvršava ili ga čak izmeni.
Zaštita grana
Zaštita grana je dizajnirana da ne daje potpunu kontrolu nad repozitorijumom korisnicima. Cilj je da se postave razne metode zaštite pre nego što se može pisati kod u nekoj grani.
Zaštite grana repozitorijuma mogu se pronaći na adresi https://github.com/<orgname>/<reponame>/settings/branches
Nije moguće postaviti zaštitu grane na nivou organizacije. Stoga se sve mora navesti za svaki repozitorijum.
Razne zaštite mogu se primeniti na granu (kao na primer na master):
Možete zahtevati PR pre spajanja (tako da ne možete direktno spojiti kod preko grane). Ako je ovo izabrano, mogu biti primenjene i druge zaštite:
Zahtevaj odobrenje određenog broja osoba. Vrlo je uobičajeno zahtevati od 1 ili 2 osobe da odobre vaš PR kako pojedini korisnik ne bi mogao direktno spojiti kod.
Odbaci odobrenja kada se pošalju nove izmene. Ako to nije slučaj, korisnik može odobriti legitimni kod, a zatim dodati zlonamerni kod i spojiti ga.
Zahtevaj pregled od vlasnika koda. Najmanje 1 vlasnik koda repozitorijuma mora odobriti PR (tako da "slučajni" korisnici ne mogu to odobriti)
Ograniči ko može odbaciti pregled zahteva za povlačenje. Možete navesti osobe ili timove koji su ovlašćeni da odbace pregled zahteva za povlačenje.
Dozvoli određenim akterima da zaobiđu zahteve za povlačenje. Ovi korisnici će moći da zaobiđu prethodne restrikcije.
Zahtevaj da prođu provere statusa pre spajanja. Neke provere moraju proći pre nego što se može spojiti izmena (kao što je Github akcija koja proverava da nema otvorenih tajnih podataka).
Zahtevaj rešavanje razgovora pre spajanja. Svi komentari na kodu moraju biti rešeni pre nego što se PR može spojiti.
Zahtevaj potpisane izmene. Izmene moraju biti potpisane.
Zahtevaj linearnu istoriju. Onemogućava slanje spojenih izmena na odgovarajuće grane.
Uključi administratore. Ako ovo nije postavljeno, administratori mogu zaobići restrikcije.
Ograniči ko može slati izmene na odgovarajuće grane. Ograniči ko može poslati zahtev za povlačenje.
Kao što možete videti, čak i ako uspete da dobijete neke akreditive korisnika, repozitorijumi mogu biti zaštićeni i sprečiti vas da šaljete kod na master na primer, kako biste kompromitovali CI/CD tok.
Reference
Last updated