Basic Jenkins Information
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
在 Jenkins 中登录的最常见方式是使用用户名或密码。
如果 授权的 Cookie 被盗,它可以用来访问用户的会话。这个 Cookie 通常被称为 JSESSIONID.*
。(用户可以终止所有会话,但他需要先发现 Cookie 被盗)。
Jenkins 可以通过插件配置为 通过第三方 SSO 访问。
用户可以生成令牌,以便通过 CLI 或 REST API 让应用程序冒充他们。
此组件为 Jenkins 提供内置的 SSH 服务器。它是 Jenkins CLI 的替代接口,可以使用任何 SSH 客户端以这种方式调用命令。(来自 docs)
在 /configureSecurity
中,可以 配置 Jenkins 的授权方法。有几种选项:
任何人都可以做任何事:甚至匿名访问也可以管理服务器。
遗留模式:与 Jenkins <1.164 相同。如果你拥有 "admin" 角色,你将获得 对系统的完全控制,否则(包括 匿名 用户)你将只有 读取 权限。
登录用户可以做任何事:在此模式下,每个 登录用户获得对 Jenkins 的完全控制。唯一没有完全控制的用户是 匿名用户,他们只有 读取权限。
基于矩阵的安全性:你可以在表中配置 谁可以做什么。每个 列 代表一个 权限。每个 行 代表一个 用户或组/角色。这包括一个特殊用户 'anonymous',代表 未认证用户,以及 'authenticated',代表 所有已认证用户。
基于项目的矩阵授权策略: 此模式是对 "基于矩阵的安全性" 的 扩展,允许为每个项目单独 定义额外的 ACL 矩阵。
基于角色的策略: 允许使用 基于角色的策略 定义授权。在 /role-strategy
中管理角色。
在 /configureSecurity
中,可以 配置安全领域。默认情况下,Jenkins 包含对几种不同安全领域的支持:
委托给 Servlet 容器:用于 委托认证给运行 Jenkins 控制器的 Servlet 容器,例如 Jetty。
Jenkins 自己的用户数据库: 使用 Jenkins 自带的用户数据存储 进行认证,而不是委托给外部系统。默认启用。
LDAP:将所有认证委托给配置的 LDAP 服务器,包括用户和组。
Unix 用户/组数据库:将认证委托给底层 Unix 操作系统级用户数据库。此模式还允许重用 Unix 组进行授权。
插件可以提供额外的安全领域,这可能对将 Jenkins 纳入现有身份系统有用,例如:
来自 docs 的定义:
节点 是 构建代理运行的机器。Jenkins 监控每个附加节点的磁盘空间、可用临时空间、可用交换空间、时钟时间/同步和响应时间。如果这些值中的任何一个超出配置的阈值,节点将被下线。
代理 管理 代表 Jenkins 控制器的 任务执行,通过 使用执行器。代理可以使用任何支持 Java 的操作系统。构建和测试所需的工具安装在代理运行的节点上;它们可以 直接安装或在容器中安装(Docker 或 Kubernetes)。每个 代理实际上是主机上的一个进程,具有自己的 PID。
执行器 是 任务执行的插槽;实际上,它是 代理中的一个线程。节点上的 执行器数量 定义了可以在该节点上同时执行的 并发任务 数量。换句话说,这决定了可以在该节点上同时执行的 并发 Pipeline stages
数量。
来自 docs 的定义:Jenkins 使用 AES 加密和保护秘密、凭证及其各自的加密密钥。这些加密密钥存储在 $JENKINS_HOME/secrets/
中,以及用于保护这些密钥的主密钥。此目录应配置为仅允许运行 Jenkins 控制器的操作系统用户具有读取和写入该目录的权限(即,chmod
值为 0700
或使用适当的文件属性)。主密钥(有时在密码学术语中称为 "密钥加密密钥")是 以未加密形式存储 在 Jenkins 控制器文件系统中的 $JENKINS_HOME/secrets/master.key
,这并不能保护直接访问该文件的攻击者。大多数用户和开发人员将通过 Secret API 间接使用这些加密密钥,以加密通用秘密数据,或通过凭证 API。对于对密码学感兴趣的人,Jenkins 在密码块链 (CBC) 模式下使用 AES,带有 PKCS#5 填充和随机 IV 来加密存储在 $JENKINS_HOME/secrets/
中的 CryptoConfidentialKey 实例,文件名对应于它们的 CryptoConfidentialKey
id。常见的密钥 id 包括:
hudson.util.Secret
:用于通用秘密;
com.cloudbees.plugins.credentials.SecretBytes.KEY
:用于某些凭证类型;
jenkins.model.Jenkins.crumbSalt
:由 CSRF 保护机制 使用;以及
凭证可以 作用于全局提供者 (/credentials/
),任何配置的项目都可以访问,或者可以作用于 特定项目 (/job/<project-name>/configure
),因此仅可从特定项目访问。
根据 文档:在作用域内的凭证可以无限制地提供给管道。为了 防止在构建日志中意外暴露,凭证在常规输出中被 屏蔽,因此 env
(Linux)或 set
(Windows)的调用,或打印其环境或参数的程序将 不会在构建日志中向本不应有权访问凭证的用户揭示它们。
这就是为什么攻击者需要,例如,将凭证进行 base64 编码以提取凭证。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)