Basic Jenkins Information
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Jenkins'e giriş yapmanın en yaygın yolu bir kullanıcı adı veya şifre ile giriş yapmaktır.
Eğer bir yetkili çerez çalınırsa, bu çerez kullanıcının oturumuna erişmek için kullanılabilir. Çerez genellikle JSESSIONID.*
olarak adlandırılır. (Bir kullanıcı tüm oturumlarını sonlandırabilir, ancak önce bir çerezin çalındığını öğrenmesi gerekir).
Jenkins, üçüncü taraf SSO aracılığıyla erişilebilir olacak şekilde eklentiler kullanılarak yapılandırılabilir.
Kullanıcılar, uygulamalara kendilerini taklit etmeleri için erişim vermek amacıyla tokenlar oluşturabilir.
Bu bileşen, Jenkins için yerleşik bir SSH sunucusu sağlar. Bu, Jenkins CLI için alternatif bir arayüzdür ve komutlar bu şekilde herhangi bir SSH istemcisi kullanılarak çağrılabilir. (Kaynak: docs)
/configureSecurity
içinde, Jenkins'in yetkilendirme yöntemini yapılandırmak mümkündür. Birkaç seçenek vardır:
Herkes her şeyi yapabilir: Anonim erişim bile sunucuyu yönetebilir.
Eski mod: Jenkins <1.164 ile aynı. Eğer "admin" rolüne sahipseniz, sisteme tam kontrol verilecektir, aksi takdirde (anonim kullanıcılar dahil) okuma erişiminiz olacaktır.
Giriş yapmış kullanıcılar her şeyi yapabilir: Bu modda, her giriş yapmış kullanıcı Jenkins'in tam kontrolüne sahiptir. Tam kontrolü olmayan tek kullanıcı anonim kullanıcıdır, yalnızca okuma erişimi alır.
Matris tabanlı güvenlik: Kimlerin ne yapabileceğini bir tabloda yapılandırabilirsiniz. Her sütun bir izin temsil eder. Her satır bir kullanıcı veya grup/rolü temsil eder. Bu, kimlik doğrulanmamış kullanıcıları temsil eden özel bir kullanıcı 'anonim' ve tüm kimlik doğrulanmış kullanıcıları temsil eden 'kimlik doğrulanmış' içerir.
Proje tabanlı Matris Yetkilendirme Stratejisi: Bu mod, her proje için ayrı ayrı ek ACL matrisinin tanımlanmasına olanak tanıyan "Matris tabanlı güvenlik" için bir uzantıdır.
Rol Tabanlı Strateji: Rol tabanlı bir strateji kullanarak yetkilendirmeleri tanımlamayı sağlar. Rolleri /role-strategy
içinde yönetin.
/configureSecurity
içinde, güvenlik alanını yapılandırmak mümkündür. Varsayılan olarak Jenkins, birkaç farklı Güvenlik Alanı desteği içerir:
Servlet konteynerine devret: Jenkins denetleyicisini çalıştıran bir servlet konteynerine kimlik doğrulama devretmek için, örneğin Jetty.
Jenkins’in kendi kullanıcı veritabanı: Dış bir sisteme devretmek yerine kimlik doğrulama için Jenkins’in kendi yerleşik kullanıcı veri deposunu kullanın. Bu varsayılan olarak etkindir.
LDAP: Kullanıcılar ve gruplar dahil olmak üzere tüm kimlik doğrulamayı yapılandırılmış bir LDAP sunucusuna devredin.
Unix kullanıcı/grup veritabanı: Kimlik doğrulamayı Jenkins denetleyicisindeki temel Unix OS düzeyindeki kullanıcı veritabanına devreder. Bu mod, yetkilendirme için Unix gruplarının yeniden kullanılmasına da olanak tanır.
Eklentiler, Jenkins'i mevcut kimlik sistemlerine entegre etmek için yararlı olabilecek ek güvenlik alanları sağlayabilir, örneğin:
docs tanımları:
Düğümler, derleme ajanlarının çalıştığı makinelerdir. Jenkins, her bağlı düğümü disk alanı, boş geçici alan, boş takas, saat zamanı/senkronizasyon ve yanıt süresi için izler. Bu değerlerden herhangi biri yapılandırılmış eşik değerinin dışına çıkarsa, bir düğüm çevrimdışı alınır.
Ajanlar, görev yürütmesini Jenkins denetleyicisi adına yürütücüler kullanarak yönetir. Bir ajan, Java'yı destekleyen herhangi bir işletim sistemini kullanabilir. Derlemeler ve testler için gereken araçlar, ajanın çalıştığı düğümde kurulu olmalıdır; bunlar doğrudan veya bir konteynerde (Docker veya Kubernetes) kurulabilir. Her ajan, ana makinede kendi PID'sine sahip bir süreçtir.
Bir yürütücü, görevlerin yürütülmesi için bir yerdir; etkili bir şekilde, bu ajan içindeki bir ipliktir. Bir düğümdeki yürütücü sayısı, o düğümde aynı anda yürütülebilecek eşzamanlı görevlerin sayısını tanımlar. Diğer bir deyişle, bu, o düğümde aynı anda yürütülebilecek eşzamanlı Pipeline aşamalarının
sayısını belirler.
docs tanımına göre: Jenkins, gizli bilgileri, kimlik bilgilerini ve bunların ilgili şifreleme anahtarlarını korumak için AES kullanır. Bu şifreleme anahtarları, $JENKINS_HOME/secrets/
içinde, bu anahtarları korumak için kullanılan anahtar ile birlikte saklanır. Bu dizin, yalnızca Jenkins denetleyicisinin çalıştığı işletim sistemi kullanıcısının bu dizine okuma ve yazma erişimine sahip olacak şekilde yapılandırılmalıdır (yani, chmod
değeri 0700
veya uygun dosya nitelikleri kullanılarak). Anahtar (bazen kripto jargonunda "anahtar şifreleme anahtarı" olarak adlandırılır) şifrelenmemiş olarak Jenkins denetleyici dosya sisteminde $JENKINS_HOME/secrets/master.key
içinde saklanır ve bu, o dosyaya doğrudan erişimi olan saldırganlara karşı koruma sağlamaz. Çoğu kullanıcı ve geliştirici, bu şifreleme anahtarlarını ya Secret API'si aracılığıyla genel gizli verileri şifrelemek için ya da kimlik bilgileri API'si aracılığıyla dolaylı olarak kullanacaktır. Kripto meraklıları için, Jenkins, AES'i blok şifreleme zincirleme (CBC) modunda PKCS#5 dolgu ve rastgele IV'ler ile kullanarak $JENKINS_HOME/secrets/
içinde CryptoConfidentialKey
örneklerini şifreler; bu örnekler, CryptoConfidentialKey
kimliğine karşılık gelen bir dosya adı ile saklanır. Yaygın anahtar kimlikleri şunları içerir:
hudson.util.Secret
: genel gizli bilgiler için kullanılır;
com.cloudbees.plugins.credentials.SecretBytes.KEY
: bazı kimlik bilgisi türleri için kullanılır;
jenkins.model.Jenkins.crumbSalt
: CSRF koruma mekanizması tarafından kullanılır; ve
Kimlik bilgileri, herhangi bir yapılandırılmış proje tarafından erişilebilen küresel sağlayıcılara (/credentials/
) veya yalnızca belirli projelerden erişilebilen belirli projelere (/job/<project-name>/configure
) kapsamlandırılabilir.
belgelere göre: Kapsamda olan kimlik bilgileri, sınırlama olmaksızın pipeline'a sunulur. Derleme günlüğünde kazara ifşayı önlemek için, kimlik bilgileri normal çıktılardan maskelemektedir, bu nedenle env
(Linux) veya set
(Windows) çağrısı veya ortamlarını veya parametrelerini yazdıran programlar, kimlik bilgilerine erişimi olmayan kullanıcılara derleme günlüğünde ifşa edilmez.
Bu nedenle, kimlik bilgilerini dışarıya çıkarmak için bir saldırganın, örneğin, bunları base64 ile kodlaması gerekir.
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)