Skip to content

本文为 SPIRE 官方文档 plugin_agent_workloadattestor_windows 的中文译本,以英文原文为准。 🔗 穿越源码分析:Agent 详解 · WorkloadAttestor

Agent 插件:WorkloadAttestor "windows"

windows 插件为调用 agent 的工作负载(workload)生成基于 Windows 的选择器(selector)。它通过打开与工作负载进程关联的访问令牌(access token)来实现;随后查询系统,从该访问令牌中检索用户和组的账户信息。

配置项说明默认值
discover_workload_path若为 true,插件将发现工作负载路径,并据此提供额外的选择器false
workload_size_limit计算某些选择器(如 sha256)时,工作负载二进制文件大小的上限。若为零,则不施加限制;若为负数,则永不计算哈希。0
disable_group_name_selectors若为 true,则跳过将组 SID 解析为人类可读的名称,从而避免可能开销较大的账户名解析(例如向域控制器 Domain Controller 查询)。无论如何都会收集组 SID 选择器(group_sid);仅 group_name 选择器受影响。false

工作负载选择器

选择器取值
windows:user_sid标识运行工作负载的用户的安全标识符(security identifier, SID)(如 windows:user_sid:S-1-5-21-759542327-988462579-1707944338-1003)
windows:user_name运行工作负载的用户的用户名(如 windows:user_name:computer-or-domain\myuser)
windows:group_sid:se_group_enabled:true标识与工作负载进程访问令牌关联的某个已启用(enabled)组的安全标识符(SID)(如 windows:group_sid:se_group_enabled:true:S-1-5-21-759542327-988462579-1707944338-1004)
windows:group_sid:se_group_enabled:false标识与工作负载进程访问令牌关联的某个未启用组的安全标识符(SID)(如 windows:group_sid:se_group_enabled:false:S-1-5-32-544)
windows:group_name:se_group_enabled:true与工作负载进程访问令牌关联的某个已启用组的组名(如 windows:group_name:se_group_enabled:true:computer-or-domain\mygroup)
windows:group_name:se_group_enabled:false与工作负载进程访问令牌关联的某个未启用组的组名(如 windows:group_name:se_group_enabled:false:computer-or-domain\mygroup)

启用工作负载路径后可用的选择器(当配置 discover_workload_path = true 时可用):

选择器取值
windows:path工作负载二进制文件的路径(如 windows:path:C:\Program Files\nginx\nginx.exe)
windows:sha256工作负载二进制文件的 SHA256 摘要(如 windows:sha256:3a6eb0790f39ac87c94f3856b2dd2c5d110e6811602261a9a923d3bb23adc8b7)

安全考量:

恶意工作负载可能诱使 SPIRE agent 为体积很大的工作负载二进制文件计算 sha256,从而消耗大量资源,造成拒绝服务(denial-of-service)。相应的防御措施有:

  • 通过将 workload_size_limit 设为负值,完全禁用该计算
  • 使用 workload_size_limit 对插件愿意计算哈希的二进制文件大小施加上限。不过,攻击者仍可通过启动大量低于该上限的进程发起同类攻击。Workload API 目前尚不支持限流(rate limiting),但一旦支持,即可将限流与非负的 workload_size_limit 结合使用来缓解此类攻击。

备注

  • 工作负载认证器使用 OpenProcessToken 打开调用方进程的访问令牌。当工作负载以比 SPIRE agent 更高特权的账户运行时,这要求 agent 进程拥有 SE_DEBUG_NAME 特权。SPIRE agent 会在启动时尝试启用该特权,若无法启用则记录一条警告。如需认证特权更高的工作负载,请确保运行 SPIRE agent 的账户已被授予该特权。

  • 令牌中的已启用组,是指具有 SE_GROUP_ENABLED 属性的组。

  • 用户和组的账户名采用 down-level logon name 格式 表示。

  • 启用 disable_group_name_selectors 会导致现有使用 group_name 选择器的工作负载注册条目不再匹配。运维者应在启用此标志前审计这些条目,并将其切换为 group_sid 选择器。

配置

本插件不需要任何配置设置。可按如下方式将其加入 agent 配置文件:

hcl
    WorkloadAttestor "windows" {
    }

平台支持

本插件仅在 Windows 上受支持。