Basic Jenkins Information
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Die mees algemene manier om in te log in Jenkins is met 'n gebruikersnaam of 'n wagwoord.
As 'n geautoriseerde koekie gesteel word, kan dit gebruik word om toegang te verkry tot die gebruiker se sessie. Die koekie word gewoonlik JSESSIONID.*
genoem. (‘n Gebruiker kan al sy sessies beëindig, maar hy moet eers uitvind dat 'n koekie gesteel is).
Jenkins kan gekonfigureer word met behulp van plugins om toeganklik te wees via derdeparty SSO.
Gebruikers kan tokens genereer om toegang te gee aan toepassings om hulle via CLI of REST API na te boots.
Hierdie komponent bied 'n ingeboude SSH-bediener vir Jenkins. Dit is 'n alternatiewe koppelvlak vir die Jenkins CLI, en opdragte kan op hierdie manier aangeroep word met enige SSH-kliënt. (Van die dokumentasie)
In /configureSecurity
is dit moontlik om die magtigingsmetode van Jenkins te konfigureer. Daar is verskeie opsies:
Enigeen kan enigiets doen: Selfs anonieme toegang kan die bediener administreer.
Erfmodus: Dieselfde as Jenkins <1.164. As jy die "admin" rol het, sal jy volledige beheer oor die stelsel ontvang, en andersins (insluitend anonieme gebruikers) sal jy lees toegang hê.
Aangemelde gebruikers kan enigiets doen: In hierdie modus, elke aangemelde gebruiker kry volledige beheer van Jenkins. Die enigste gebruiker wat nie volledige beheer sal hê nie, is die anonieme gebruiker, wat net lees toegang kry.
Matrix-gebaseerde sekuriteit: Jy kan wie kan wat doen in 'n tabel konfigureer. Elke kolom verteenwoordig 'n toestemming. Elke ry verteenwoordig 'n gebruiker of 'n groep/rol. Dit sluit 'n spesiale gebruiker 'anoniem' in, wat onaangemelde gebruikers verteenwoordig, sowel as 'geauthentiseerde', wat alle geauthentiseerde gebruikers verteenwoordig.
Projek-gebaseerde Matrix Magtiging Strategie: Hierdie modus is 'n uitbreiding van "Matrix-gebaseerde sekuriteit" wat toelaat dat addisionele ACL-matrix vir elke projek apart gedefinieer word.
Rol-gebaseerde Strategie: Maak dit moontlik om magtigings te definieer met 'n rol-gebaseerde strategie. Bestuur die rolle in /role-strategy
.
In /configureSecurity
is dit moontlik om die sekuriteit ryk te konfigureer. Standaard sluit Jenkins ondersteuning in vir 'n paar verskillende Sekuriteit Ryke:
Delegeer aan servlet houer: Vir delegasie van autentisering aan 'n servlet houer wat die Jenkins kontroleerder uitvoer, soos Jetty.
Jenkins se eie gebruikersdatabasis: Gebruik Jenkins se eie ingeboude gebruikersdatastoor vir autentisering in plaas van om aan 'n eksterne stelsel te delegeer. Dit is standaard geaktiveer.
LDAP: Delegeer alle autentisering aan 'n geconfigureerde LDAP-bediener, insluitend beide gebruikers en groepe.
Unix gebruiker/groep databasis: Delegeer die autentisering aan die onderliggende Unix OS-vlak gebruiker databasis op die Jenkins kontroleerder. Hierdie modus sal ook die hergebruik van Unix groepe vir magtiging toelaat.
Plugins kan addisionele sekuriteit ryke bied wat nuttig kan wees om Jenkins in bestaande identiteitsisteme in te sluit, soos:
Definisies van die dokumentasie:
Nodes is die masjiene waarop bou agents werk. Jenkins monitor elke aangehegte node vir skyfspasie, vrye tydelike ruimte, vrye swap, klok tyd/sink en reaksietyd. 'n Node word vanlyn geneem as enige van hierdie waardes buite die geconfigureerde drempel gaan.
Agents bestuur die taakuitvoering namens die Jenkins kontroleerder deur executors te gebruik. 'n Agent kan enige bedryfstelsel gebruik wat Java ondersteun. Gereedskap wat benodig word vir bou en toetse word op die node geïnstalleer waar die agent loop; hulle kan direk of in 'n houer (Docker of Kubernetes) geïnstalleer word. Elke agent is effektief 'n proses met sy eie PID op die gasheer masjien.
'n executor is 'n gleuf vir die uitvoering van take; effektief, dit is 'n draad in die agent. Die aantal executors op 'n node definieer die aantal gelyktydige take wat op daardie node op 'n slag uitgevoer kan word. Met ander woorde, dit bepaal die aantal gelyktydige Pyplyn stages
wat op daardie node op 'n slag kan uitvoer.
Definisie van die dokumentasie: Jenkins gebruik AES om geheime, kredensiale, en hul onderskeie enkripsiesleutels te enkripteer en te beskerm. Hierdie enkripsiesleutels word in $JENKINS_HOME/secrets/
gestoor saam met die meester sleutel wat gebruik word om genoemde sleutels te beskerm. Hierdie gids moet geconfigureer word sodat slegs die bedryfstelsel gebruiker wat die Jenkins kontroleerder uitvoer, lees- en skrywe toegang tot hierdie gids het (d.w.s. 'n chmod
waarde van 0700
of deur toepaslike lêer eienskappe te gebruik). Die meester sleutel (soms verwys as 'n "sleutel enkripsie sleutel" in cryptojargon) is gestoor _ongeënkripteer_ op die Jenkins kontroleerder lêerstelsel in $JENKINS_HOME/secrets/master.key
wat nie teen aanvallers met direkte toegang tot daardie lêer beskerm nie. Meeste gebruikers en ontwikkelaars sal hierdie enkripsiesleutels indirek gebruik via óf die Secret API vir die enkripsie van generiese geheime data of deur die kredensiale API. Vir die cryptocurious, Jenkins gebruik AES in cipher block chaining (CBC) modus met PKCS#5 padding en random IVs om instansies van CryptoConfidentialKey te enkripteer wat in $JENKINS_HOME/secrets/
gestoor word met 'n lêernaam wat ooreenstem met hul CryptoConfidentialKey
id. Algemene sleutel id's sluit in:
hudson.util.Secret
: gebruik vir generiese geheime;
com.cloudbees.plugins.credentials.SecretBytes.KEY
: gebruik vir sommige kredensiale tipes;
jenkins.model.Jenkins.crumbSalt
: gebruik deur die CSRF beskermingsmeganisme; en
Kredensiale kan geskik word vir globale verskaffers (/credentials/
) wat deur enige geconfigureerde projek toegang verkry kan word, of kan geskik word vir spesifieke projekte (/job/<project-name>/configure
) en dus slegs vanaf die spesifieke projek toeganklik wees.
Volgens die dokumentasie: Kredensiale wat in die omvang is, word sonder beperking aan die pyplyn beskikbaar gestel. Om per ongeluk blootstelling in die bou log te voorkom, word kredensiale gemasker van gewone uitvoer, sodat 'n aanroep van env
(Linux) of set
(Windows), of programme wat hul omgewing of parameters druk, nie aan hulle in die bou log sal blootstel aan gebruikers wat andersins nie toegang tot die kredensiale sou hê nie.
Dit is waarom 'n aanvaller, om die kredensiale te exfiltreer, byvoorbeeld, hulle moet base64.
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)