Osnovne informacije o Jenkinsu
Reading time: 7 minutes
tip
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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pristup
Korisničko ime + Lozinka
Najčešći način prijavljivanja u Jenkins je putem korisničkog imena ili lozinke.
Kolačić
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).
SSO/Pluginovi
Jenkins se može konfigurisati pomoću pluginova da bude dostupan putem treće strane SSO.
Tokeni
Korisnici mogu generisati tokene kako bi omogućili pristup aplikacijama da ih imituju putem CLI ili REST API.
SSH Ključevi
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)
Autorizacija
U /configureSecurity
moguće je konfigurisati metodu autorizacije Jenkins-a. Postoji nekoliko opcija:
- Svako može raditi šta hoće: Č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 šta hoće: U ovom režimu, svaki prijavljeni korisnik dobija potpunu kontrolu nad Jenkins-om. 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 stubac predstavlja dozvolu. Svaki red predstavlja korisnika ili grupu/ulogu. Ovo uključuje posebnog korisnika 'anonimno', koji predstavlja neautentifikovane korisnike, kao i 'autentifikovane', koji predstavljaju 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
.
Sigurnosno carstvo
U /configureSecurity
moguće je konfigurisati sigurnosno carstvo. Po defaultu, Jenkins uključuje podršku za nekoliko različitih sigurnosnih carstava:
- 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 carstva koja mogu biti korisna za uključivanje Jenkinsa u postojeće identitetske sisteme, kao što su:
Jenkins Čvorovi, Agenti i Izvršioci
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 konfigurisani 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 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.
Jenkins Tajne
Enkripcija Tajni i Akreditiva
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 korisnik operativnog sistema pod kojim Jenkins kontroler radi 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-ja 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 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
: koristi se od strane CSRF zaštitnog mehanizma; i
Pristup Akreditivima
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 od 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.
Reference
- https://www.jenkins.io/doc/book/security/managing-security/
- https://www.jenkins.io/doc/book/managing/nodes/
- https://www.jenkins.io/doc/developer/security/secrets/
- https://www.jenkins.io/blog/2019/02/21/credentials-masking/
- https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery
- https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials
- https://www.jenkins.io/doc/book/managing/nodes/
tip
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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.