本文为 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 配置文件:
WorkloadAttestor "windows" {
}平台支持
本插件仅在 Windows 上受支持。