Basic Jenkins Information
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Najčešći način prijavljivanja u Jenkins je putem korisničkog imena ili lozinke.
Ako se autorizovani kolačić ukrade, može se koristiti za pristup sesiji korisnika. Kolačić se obično naziva JSESSIONID.*
. (Korisnik može prekinuti sve svoje sesije, ali prvo mora da sazna da je kolačić ukraden).
Jenkins se može konfigurisati pomoću pluginova da bude dostupan putem treće strane SSO.
Korisnici mogu generisati tokene kako bi omogućili pristup aplikacijama da ih imituju putem CLI ili REST API.
Ova komponenta pruža ugrađeni SSH server za Jenkins. To je alternativno sučelje za Jenkins CLI, a komande se mogu pozivati na ovaj način koristeći bilo koji SSH klijent. (Iz dokumentacije)
U /configureSecurity
moguće je konfigurisati metodu autorizacije Jenkinsa. Postoji nekoliko opcija:
Svako može raditi bilo šta: Čak i anonimni pristup može administrirati server.
Legacy mode: Isto kao Jenkins <1.164. Ako imate "admin" ulogu, dobićete potpunu kontrolu nad sistemom, a inače (uključujući anonimne korisnike) imaćete pristup za čitanje.
Prijavljeni korisnici mogu raditi bilo šta: U ovom režimu, svaki prijavljeni korisnik dobija potpunu kontrolu nad Jenkinsom. Jedini korisnik koji neće imati potpunu kontrolu je anonimni korisnik, koji dobija samo pristup za čitanje.
Matrix-based security: Možete konfigurisati ko može raditi šta u tabeli. Svaki kolona predstavlja dozvolu. Svaki red predstavlja korisnika ili grupu/ulogu. Ovo uključuje posebnog korisnika 'anonimni', koji predstavlja neautentifikovane korisnike, kao i 'autentifikovani', koji predstavlja sve autentifikovane korisnike.
Strategija autorizacije zasnovana na projektima: Ovaj režim je proširenje na "Matrix-based security" koje omogućava dodatnu ACL matricu da bude definisana za svaki projekat posebno.
Strategija zasnovana na rolama: Omogućava definisanje autorizacija koristeći strategiju zasnovanu na rolama. Upravljajte rolama u /role-strategy
.
U /configureSecurity
moguće je konfigurisati sigurnosno područje. Po defaultu, Jenkins uključuje podršku za nekoliko različitih sigurnosnih područja:
Delegirati servlet kontejneru: Za delegiranje autentifikacije servlet kontejneru koji pokreće Jenkins kontroler, kao što je Jetty.
Jenkinsova vlastita baza korisnika: Koristite Jenkinsovu ugrađenu bazu podataka korisnika za autentifikaciju umesto delegiranja na eksterni sistem. Ovo je omogućeno po defaultu.
LDAP: Delegirati svu autentifikaciju na konfigurisan LDAP server, uključujući i korisnike i grupe.
Unix baza korisnika/grupa: Delegira autentifikaciju na osnovnu Unix OS nivo bazu korisnika na Jenkins kontroleru. Ovaj režim će takođe omogućiti ponovnu upotrebu Unix grupa za autorizaciju.
Pluginovi mogu pružiti dodatna sigurnosna područja koja mogu biti korisna za uključivanje Jenkinsa u postojeće identitetske sisteme, kao što su:
Definicije iz dokumentacije:
Čvorovi su mašine na kojima se izvršavaju agenti za izgradnju. Jenkins prati svaki priključeni čvor za slobodan prostor na disku, slobodan temp prostor, slobodan swap, vreme/sinkronizaciju sata i vreme odgovora. Čvor se uzima offline ako bilo koja od ovih vrednosti pređe konfigurisan prag.
Agenti upravljaju izvršenjem zadataka u ime Jenkins kontrolera koristeći izvršioce. Agent može koristiti bilo koji operativni sistem koji podržava Javu. Alati potrebni za izgradnje i testove su instalirani na čvoru na kojem agent radi; mogu se instalirati direktno ili u kontejneru (Docker ili Kubernetes). Svaki agent je zapravo proces sa svojim PID-om na host mašini.
Izvršilac je slot za izvršenje zadataka; zapravo, to je nit u agentu. Broj izvršilaca na čvoru definiše broj paralelnih zadataka koji se mogu izvršiti na tom čvoru u jednom trenutku. Drugim rečima, ovo određuje broj paralelnih Pipeline stages
koji mogu izvršiti na tom čvoru u jednom trenutku.
Definicija iz dokumentacije: Jenkins koristi AES za enkripciju i zaštitu tajni, akreditiva i njihovih odgovarajućih ključeva za enkripciju. Ovi ključevi za enkripciju se čuvaju u $JENKINS_HOME/secrets/
zajedno sa glavnim ključem koji se koristi za zaštitu navedenih ključeva. Ovaj direktorijum treba konfigurisati tako da samo operativni sistem korisnik pod kojim se Jenkins kontroler pokreće ima pristup za čitanje i pisanje u ovaj direktorijum (tj. chmod
vrednost 0700
ili korišćenje odgovarajućih atributa datoteka). Glavni ključ (ponekad nazvan "ključ za enkripciju" u kriptožargonu) je pohranjen _nekriptovano_ na datotečnom sistemu Jenkins kontrolera u $JENKINS_HOME/secrets/master.key
što ne štiti od napadača sa direktnim pristupom toj datoteci. Većina korisnika i programera će koristiti ove ključeve za enkripciju indirektno putem Secret API za enkripciju generičkih tajnih podataka ili putem API za akreditive. Za kriptozainteresovane, Jenkins koristi AES u režimu blokovne enkripcije (CBC) sa PKCS#5 punjenjem i nasumičnim IV-ima za enkripciju instanci CryptoConfidentialKey koje se čuvaju u $JENKINS_HOME/secrets/
sa imenom datoteke koje odgovara njihovom CryptoConfidentialKey
id. Uobičajeni id-ovi ključeva uključuju:
hudson.util.Secret
: korišćen za generičke tajne;
com.cloudbees.plugins.credentials.SecretBytes.KEY
: korišćen za neke tipove akreditiva;
jenkins.model.Jenkins.crumbSalt
: korišćen od strane CSRF zaštitnog mehanizma; i
Akreditivi mogu biti ograničeni na globalne provajdere (/credentials/
) kojima može pristupiti bilo koji konfigurisan projekat, ili mogu biti ograničeni na specifične projekte (/job/<project-name>/configure
) i stoga dostupni samo iz specifičnog projekta.
Prema dokumentaciji: Akreditivi koji su u opsegu su dostupni za pipeline bez ograničenja. Da bi se sprečilo slučajno izlaganje u logu izgradnje, akreditivi su maskirani iz redovnog izlaza, tako da poziv env
(Linux) ili set
(Windows), ili programi koji štampaju svoje okruženje ili parametre ne bi otkrili njih u logu izgradnje korisnicima koji inače ne bi imali pristup akreditivima.
Zato napadač treba, na primer, da ih base64 kodira da bi ih eksfiltrirao.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)